CE PLUS - Nota 002462

Módulo: CÂMBIO EXPORTAÇÃO

Funcionalidade: Pagamento de Juros

Data/Hora da Publicação: 17/11/2006 00:00:00

Data/Hora Última Alteração: 18/02/2011 17:10:49

Descrição da Nota: PAGAMENTO DE JUROS - MATCHCODE

Sintoma

Não esta sendo possivel fazer a seleção dos dados dos juros a pagar via matchcode na transação

/PWS/ZYCB012_C - Criar  pagamento de Juros. A visualização destes dados só é possivel se a seleção

for feita pelo icone de atalho.

 

 

Solução

Alterar a forma de verificação dos registros da ajuda de pesquisa, utilizando uma tabela interna

carregada com os dados e separada por campos, substituindo a string, assim independe de ter ou não

mandante no início do registro.

 

Versões Tratadas

6.0


Pré-Requisitos

Produto:

Nota

Descrição

PAGAMENTO DE JUROS - MATCHCODE - EXIBIÇÃO JUROS A SEREM PAGOS

AJUDA DE PESQUISA DO PAGAMENTO DE JUROS COM CAMPOS DESALINHADOS

O PROGRAMA DE CONTAINER NÃO BUSCA OS ITENS CORRETAMENTE DO EMBARQUE

Informações Complementares

----------------------------------------------------------------------------------------------------

Nota Número 02462 Data: 17/11/2006 Hora: 08:45:25

----------------------------------------------------------------------------------------------------

 

----------------------------------------------------------------------------------------------------

Nota Número              : 02462

Categoria                : Erro de Programa

Prioridade               : Média

Versão PW.CE             : 6.0

Pacote                   : 00025

Agrupamento              : 00140

----------------------------------------------------------------------------------------------------

Referência às notas relacionadas:

Número - Ordem - Versão - Pacote - Descrição Breve

 

00476  - 00001 - 6.0    - 00021  - O PROGRAMA DE CONTAINER NÃO BUSCA OS ITENS CORRETAMENTE DO EMBARQ

00479  - 00002 - 6.0    - 00022  - AJUDA DE PESQUISA DO PAGAMENTO DE JUROS COM CAMPOS DESALINHADOS

02068  - 00003 - 6.0    - 00025  - PAGAMENTO DE JUROS - MATCHCODE - EXIBIÇÃO JUROS A SEREM PAGOS

----------------------------------------------------------------------------------------------------

PAGAMENTO DE JUROS - MATCHCODE

----------------------------------------------------------------------------------------------------

Palavras Chave:

PAGAMENTO DE JUROS MATCHCODE EXIT VALORES COM MANDANTE

VALORES SEM MANDANTE RECORD_TAB

----------------------------------------------------------------------------------------------------

Objetos da nota:

REPS /PWS/ZZYCBGF3U02

 

----------------------------------------------------------------------------------------------------

Modificações efetuadas em REPS /PWS/ZZYCBGF3U02

 

TABLES: /pws/zycbt064, /pws/zycbt004, /pws/zycbt006, /pws/zycbt044.

 

* >> Início da inclusão:

DATA: BEGIN OF itab_valores OCCURS 0,

        nrseqc   TYPE /pws/zycbt004-nrseqc,

        tpdesp   TYPE /pws/zycbt004-tpdesp,

        nrparc   TYPE /pws/zycbt004-nrparc,

        tpjuros  TYPE /pws/zycbt004-tpjuros,

        bukrs    TYPE /pws/zycbt004-bukrs,

        dtvencto TYPE /pws/zycbt004-dtvencto,

        waers    TYPE /pws/zycbt004-waers,

        vlme     TYPE /pws/zycbt004-vlme,

        nrcontr  TYPE /pws/zycbt004-nrcontr,

        nrinvoic TYPE /pws/zycbt005-nrinvoic,

        nrparcf  TYPE /pws/zycbt005-nrparcf,

        bconegoc TYPE /pws/zycbt005-bconegoc,

        dtincl   TYPE /pws/zycbt004-dtincl,

        dtliquid TYPE /pws/zycbt004-dtliquid,

        gsberf   TYPE /pws/zycbt004-gsberf,

        vlir     TYPE /pws/zycbt004-vlir,

      END OF itab_valores.

 

DATA: v_fieldname TYPE dfies-lfieldname,

      v_tabix     TYPE sy-tabix.

FIELD-SYMBOLS: <fs_shlp>       LIKE LINE OF shlp_tab,

               <fs_fielddescr> LIKE LINE OF shlp_tab-fielddescr.

* << Fim da inclusão

 

* >> Início da exclusão:

DATA: BEGIN OF itab_despesas OCCURS 0.

        INCLUDE STRUCTURE record_tab.

DATA: END OF itab_despesas.

* << Fim da exclusão

 

DATA: wa_zycbt005 LIKE /pws/zycbt005.

 

DATA: v_string  LIKE record_tab-string,

      v_subrc   TYPE c.

 

CHECK callcontrol-step = 'DISP'.

 

CALL CUSTOMER-FUNCTION '001'

   IMPORTING

   v_subrc = v_subrc.

 

CLEAR callcontrol-maxrecords.

 

* >> Início da inclusão:

READ TABLE shlp_tab INDEX 1 ASSIGNING <fs_shlp>.

CHECK <fs_shlp> IS ASSIGNED.

LOOP AT <fs_shlp>-fielddescr ASSIGNING <fs_fielddescr>.

  CHECK: <fs_fielddescr>-fieldname = 'NRSEQC'   OR

         <fs_fielddescr>-fieldname = 'TPDESP'   OR

         <fs_fielddescr>-fieldname = 'NRPARC'   OR

         <fs_fielddescr>-fieldname = 'TPJUROS'  OR

         <fs_fielddescr>-fieldname = 'BUKRS'    OR

         <fs_fielddescr>-fieldname = 'DTVENCTO' OR

         <fs_fielddescr>-fieldname = 'WAERS'    OR

         <fs_fielddescr>-fieldname = 'VLME'     OR

         <fs_fielddescr>-fieldname = 'NRCONTR'  OR

         <fs_fielddescr>-fieldname = 'NRINVOIC' OR

         <fs_fielddescr>-fieldname = 'NRPARCF'  OR

         <fs_fielddescr>-fieldname = 'BCONEGOC' OR

         <fs_fielddescr>-fieldname = 'DTINCL'   OR

         <fs_fielddescr>-fieldname = 'DTLIQUID' OR

         <fs_fielddescr>-fieldname = 'GSBERF'   OR

         <fs_fielddescr>-fieldname = 'VLIR'.

 

  v_fieldname = <fs_fielddescr>-fieldname.

 

  CALL FUNCTION 'F4UT_PARAMETER_VALUE_GET'

       EXPORTING

            parameter         = <fs_fielddescr>-fieldname

            fieldname         = v_fieldname

       TABLES

            shlp_tab          = shlp_tab

            record_tab        = record_tab

            results_tab       = itab_valores

       CHANGING

            shlp              = shlp

            callcontrol       = callcontrol

       EXCEPTIONS

            parameter_unknown = 1

            OTHERS            = 2.

  IF sy-subrc <> 0.

  ENDIF.

ENDLOOP.

* << Fim da inclusão

 

READ TABLE record_tab INDEX 1.

 

* >> Início da exclusão:

SELECT SINGLE nrseqc FROM /pws/zycbt001

  INTO v_nrseqc

  WHERE nrseqc = record_tab+3(08).

IF sy-subrc NE 0.

  IF NOT v_subrc IS INITIAL.  "Ativa

    DELETE record_tab WHERE string+11(1) NE 'J' AND

                            string+11(1) NE 'D'.

  ENDIF.

 

  LOOP AT record_tab.

 

    v_string  = record_tab-string.

 

    SELECT SINGLE * FROM /pws/zycbt044

      WHERE  nrseqc   EQ v_string+3(08)  AND

             tpdesp   EQ v_string+11(1)  AND

             nrparc   EQ v_string+14(3)  AND

             dtincl   EQ v_string+21(8)  AND

             (

             dtliquid EQ v_string+92(8) OR

             dtliquid EQ v_string+71(8)

             )                           AND

             (

             tpjuros  EQ v_string+122(1) OR

             tpjuros  EQ v_string+100(1)

             ).

    IF sy-subrc EQ 0.

      DELETE record_tab INDEX sy-tabix.

      CONTINUE.

    ENDIF.

 

    SELECT SINGLE tpcontr vlir FROM /pws/zycbt004

       INTO (/pws/zycbt004-tpcontr, /pws/zycbt004-vlir)

       WHERE nrseqc   EQ v_string+3(08) AND

             tpdesp   EQ v_string+11(1) AND

             nrparc   EQ v_string+14(3) AND

             dtincl   EQ v_string+21(8) AND

             (

             dtliquid EQ v_string+92(8) OR

             dtliquid EQ v_string+71(8)

             ).

    IF sy-subrc EQ 0.

      IF NOT /pws/zycbt004-vlir IS INITIAL AND

         /pws/zycbt004-tpcontr(1) EQ 'D'.

        CONTINUE.

      ENDIF.

    ENDIF.

 

    SELECT SINGLE * FROM /pws/zycbt064

        WHERE nrchave  EQ record_tab+3(8)

          AND nrparc   EQ record_tab+14(3)

          AND

            (

             dtliquid EQ v_string+92(8) OR

             dtliquid EQ v_string+71(8)

             ).

    IF sy-subrc NE 0.

      IF v_subrc IS INITIAL.     "INATIVA

        SELECT SINGLE * FROM /pws/zycbt006

          INTO /pws/zycbt006

          WHERE nrseqc   = record_tab+3(8)   AND

                nrparc   = record_tab+14(3)  AND

                dtvincul = record_tab+21(8)  AND

                (

                nrinvoic = record_tab+52(10) OR

                nrinvoic = record_tab+49(10) OR

                nrinvoic = record_tab+46(10)

                )                            AND

                (

                gsberf   = record_tab+100(4)  OR

                gsberf   = record_tab+97(4)  OR

                gsberf   = record_tab+76(4)

                )                            AND

                (

                dtpagto  = record_tab+92(8)  OR

                dtpagto  = record_tab+60(8)

                ).

 

        IF sy-subrc EQ 0 OR

           v_string+11(1) EQ 'D' OR

           v_string+11(2) EQ 'JC'.

          CLEAR itab_despesas.

          MOVE v_string TO itab_despesas.

          APPEND itab_despesas.

        ELSEIF sy-subrc NE 0.

          SELECT SINGLE * FROM /pws/zycbt005

            INTO wa_zycbt005

            WHERE nrseqc   = record_tab+3(8)   AND

                  nrparc   = record_tab+14(3)  AND

                  dtvincul = record_tab+21(8)  AND

                (

                nrinvoic = record_tab+52(10) OR

                nrinvoic = record_tab+49(10) OR

                nrinvoic = record_tab+46(10)

                )                            AND

                (

                gsberf   = record_tab+100(4)  OR

                gsberf   = record_tab+97(4)  OR

                gsberf   = record_tab+76(4)

                ).

 

          IF sy-subrc EQ 0 AND NOT

             wa_zycbt005-dtcredext IS INITIAL.

            CLEAR itab_despesas.

            MOVE v_string TO itab_despesas.

            APPEND itab_despesas.

          ENDIF.

        ENDIF.

      ELSE.

        CLEAR itab_despesas.

        IF v_string+95(8) = '00000000'.

          v_string+95(8) = '        '.

        ENDIF.

        MOVE v_string TO itab_despesas.

        APPEND itab_despesas.

      ENDIF.

    ENDIF.

 

  ENDLOOP.

 

ELSE.

 

  IF NOT v_subrc IS INITIAL.  "Ativa

    DELETE record_tab WHERE string+11(1) NE 'J' AND

                            string+11(1) NE 'D'.

  ENDIF.

 

  LOOP AT record_tab.

 

    v_string  = record_tab-string.

 

    SELECT SINGLE * FROM /pws/zycbt044

      WHERE  nrseqc   EQ v_string+3(8)  AND

             tpdesp   EQ v_string+11(1)  AND

             nrparc   EQ v_string+14(3)  AND

             dtincl   EQ v_string+21(8)  AND

             (

             dtliquid EQ v_string+92(8) OR

             dtliquid EQ v_string+71(8)

             )                           AND

             (

             tpjuros  EQ v_string+122(1) OR

             tpjuros  EQ v_string+100(1)

             ).

 

    IF sy-subrc EQ 0.

      DELETE record_tab INDEX sy-tabix.

      CONTINUE.

    ENDIF.

 

    SELECT SINGLE tpcontr vlir FROM /pws/zycbt004

       INTO (/pws/zycbt004-tpcontr, /pws/zycbt004-vlir)

      WHERE  nrseqc   EQ v_string+3(8)  AND

             tpdesp   EQ v_string+11(1) AND

             nrparc   EQ v_string+14(3) AND

             dtincl   EQ v_string+21(8) AND

             (

             dtliquid EQ v_string+92(8) OR

             dtliquid EQ v_string+71(8)

             ).

 

    IF sy-subrc EQ 0.

      IF NOT /pws/zycbt004-vlir IS INITIAL AND

         /pws/zycbt004-tpcontr(1) EQ 'D'.

        CONTINUE.

      ENDIF.

    ENDIF.

 

    SELECT SINGLE * FROM /pws/zycbt064

        WHERE nrchave  EQ record_tab+3(8)

          AND nrparc   EQ record_tab+14(3)

          AND

          (

          dtliquid EQ record_tab+92(8) OR

          dtliquid EQ record_tab+71(8)

          ).

    IF sy-subrc NE 0.

      IF v_subrc IS INITIAL.     "INATIVA

        SELECT SINGLE * FROM /pws/zycbt006

          INTO /pws/zycbt006

          WHERE nrseqc   = record_tab+3(8)   AND

                nrparc   = record_tab+14(3)  AND

                dtvincul = record_tab+21(8)  AND

                (

                nrinvoic = record_tab+52(10) OR

                nrinvoic = record_tab+49(10)

                )                            AND

                (

                gsberf   = record_tab+100(4)  OR

                gsberf   = record_tab+97(4)

                )                            AND

                (

                dtpagto  = record_tab+92(8)  OR

                dtpagto  = record_tab+81(8)

                ).

        IF sy-subrc EQ 0 OR

           v_string+11(1) EQ 'D' OR

           v_string+11(2) EQ 'JC'.

          CLEAR itab_despesas.

          MOVE v_string TO itab_despesas.

          APPEND itab_despesas.

        ELSEIF sy-subrc NE 0.

          SELECT SINGLE * FROM /pws/zycbt005

            INTO wa_zycbt005

            WHERE nrseqc   = record_tab+3(8)   AND

                  nrparc   = record_tab+14(3)  AND

                  dtvincul = record_tab+21(8)  AND

                  nrinvoic = record_tab+52(10) AND

                  gsberf   = record_tab+100(4).

          IF sy-subrc EQ 0 AND NOT

             wa_zycbt005-dtcredext IS INITIAL.

            CLEAR itab_despesas.

            MOVE v_string TO itab_despesas.

            APPEND itab_despesas.

          ENDIF.

        ENDIF.

      ELSE.

        CLEAR itab_despesas.

        IF v_string+92(8) = '00000000'.

          v_string+92(8) = '        '.

        ENDIF.

        MOVE v_string TO itab_despesas.

        APPEND itab_despesas.

      ENDIF.

    ENDIF.

 

  ENDLOOP.

ENDIF.

* << Fim da exclusão

 

* >> Início da inclusão:

*Código alterado tratando com tab. interna, sem posicionamento de campo

READ TABLE itab_valores INDEX 1.

SELECT SINGLE nrseqc FROM /pws/zycbt001 INTO v_nrseqc

       WHERE nrseqc = itab_valores-nrseqc.

IF sy-subrc NE 0.

  IF NOT v_subrc IS INITIAL.  "Ativa

    LOOP AT itab_valores WHERE tpdesp NE 'J'

                           AND tpdesp NE 'D'.

      DELETE itab_valores INDEX sy-tabix.

      DELETE record_tab   INDEX sy-tabix.

    ENDLOOP.

  ENDIF.

* A tabela itab_valores contém todos os dados da tabela /PWS/ZYCBT004

  LOOP AT itab_valores.

    v_tabix = sy-tabix.

    SELECT SINGLE * FROM /pws/zycbt044

           WHERE nrseqc   EQ itab_valores-nrseqc

             AND tpdesp   EQ itab_valores-tpdesp

             AND nrparc   EQ itab_valores-nrparc

             AND dtincl   EQ itab_valores-dtincl

             AND dtliquid EQ itab_valores-dtliquid

             AND tpjuros  EQ itab_valores-tpjuros.

    IF sy-subrc EQ 0.

      DELETE itab_valores INDEX v_tabix.

      DELETE record_tab   INDEX v_tabix.

      CONTINUE.

    ENDIF.

*   Não permite pagamento de Juros p/ contratos com IR

    SELECT SINGLE tpcontr vlir FROM /pws/zycbt004

           INTO (/pws/zycbt004-tpcontr, /pws/zycbt004-vlir)

           WHERE nrseqc   EQ itab_valores-nrseqc

             AND tpdesp   EQ itab_valores-tpdesp

             AND nrparc   EQ itab_valores-nrparc

             AND dtincl   EQ itab_valores-dtincl

             AND dtliquid EQ itab_valores-dtliquid.

    IF sy-subrc                     EQ 0       AND

       NOT /pws/zycbt004-vlir       IS INITIAL AND

           /pws/zycbt004-tpcontr(1) EQ 'D'.

      DELETE itab_valores INDEX v_tabix.

      DELETE record_tab   INDEX v_tabix.

      CONTINUE.

    ENDIF.

 

*   Verifica se já existe boleto na tabela /pws/zycbt064

    SELECT SINGLE * FROM /pws/zycbt064

           WHERE nrchave   EQ itab_valores-nrseqc

             AND nrparc    EQ itab_valores-nrparc

             AND dtliquid  EQ itab_valores-dtliquid

             AND mdcorresp EQ 'ED'.

    IF sy-subrc NE 0.

*     Verifica se será exibido todos os registros de despesa

*     ou apenas as despesas de juros com registros de liquidação

      IF v_subrc IS INITIAL.     "INATIVA

        SELECT SINGLE * FROM /pws/zycbt006 INTO /pws/zycbt006

               WHERE nrseqc   = itab_valores-nrseqc

                 AND nrparc   = itab_valores-nrparc

                 AND dtvincul = itab_valores-dtincl

                 AND nrinvoic = itab_valores-nrinvoic

                 AND gsberf   = itab_valores-gsberf

                 AND dtpagto  = itab_valores-dtliquid.

        IF sy-subrc            EQ  0  OR

           itab_valores-tpdesp EQ 'D' OR

           itab_valores-tpdesp EQ 'JC'.

          CONTINUE.

        ELSEIF sy-subrc NE 0.

          SELECT SINGLE * FROM /pws/zycbt005 INTO wa_zycbt005

                 WHERE nrseqc   = itab_valores-nrseqc

                   AND nrparc   = itab_valores-nrparc

                   AND dtvincul = itab_valores-dtincl

                   AND nrinvoic = itab_valores-nrinvoic

                   AND gsberf   = itab_valores-gsberf.

          IF sy-subrc EQ 0 AND NOT wa_zycbt005-dtcredext IS INITIAL.

            CONTINUE.

          ELSE.

            DELETE itab_valores INDEX v_tabix.

            DELETE record_tab   INDEX v_tabix.

          ENDIF.

        ENDIF.

      ENDIF.

    ELSE.

      DELETE itab_valores INDEX v_tabix.

      DELETE record_tab   INDEX v_tabix.

    ENDIF.

  ENDLOOP.

ELSE.

  IF NOT v_subrc IS INITIAL.  "Ativa

    LOOP AT itab_valores WHERE tpdesp NE 'J'

                           AND tpdesp NE 'D'.

      DELETE itab_valores INDEX sy-tabix.

      DELETE record_tab   INDEX sy-tabix.

    ENDLOOP.

  ENDIF.

 

* A tabela record_tab contém todos os dados da tabela ZYCBT004.

  LOOP AT itab_valores.

    v_tabix = sy-tabix.

    SELECT SINGLE * FROM /pws/zycbt044

           WHERE nrseqc   EQ itab_valores-nrseqc

             AND tpdesp   EQ itab_valores-tpdesp

             AND nrparc   EQ itab_valores-nrparc

             AND dtincl   EQ itab_valores-dtincl

             AND dtliquid EQ itab_valores-dtliquid

             AND tpjuros  EQ itab_valores-tpjuros.

    IF sy-subrc EQ 0.

      DELETE itab_valores INDEX v_tabix.

      DELETE record_tab   INDEX v_tabix.

      CONTINUE.

    ENDIF.

*   Não permite pagamento de Juros p/ contratos com IR

    SELECT SINGLE tpcontr vlir FROM /pws/zycbt004

           INTO (/pws/zycbt004-tpcontr, /pws/zycbt004-vlir)

           WHERE nrseqc   EQ itab_valores-nrseqc

             AND tpdesp   EQ itab_valores-tpdesp

             AND nrparc   EQ itab_valores-nrparc

             AND dtincl   EQ itab_valores-dtincl

             AND dtliquid EQ itab_valores-dtliquid.

    IF sy-subrc EQ 0 AND NOT /pws/zycbt004-vlir IS INITIAL AND

       /pws/zycbt004-tpcontr(1) EQ 'D'.

      DELETE itab_valores INDEX v_tabix.

      DELETE record_tab   INDEX v_tabix.

      CONTINUE.

    ENDIF.

 

*   Verifica se já existe boleto na tabela zycbt064

    SELECT SINGLE * FROM /pws/zycbt064

           WHERE nrchave   EQ itab_valores-nrseqc

             AND nrparc    EQ itab_valores-nrparc

             AND dtliquid  EQ itab_valores-dtliquid

             AND mdcorresp EQ 'ED'.

    IF sy-subrc NE 0.

*     Verifica se será exibido todos os registros de despesa

*     ou apenas as despesas de juros com registros de liquidação

      IF v_subrc IS INITIAL.     "INATIVA

        SELECT SINGLE * FROM /pws/zycbt006 INTO /pws/zycbt006

          WHERE nrseqc   = itab_valores-nrseqc

            AND nrparc   = itab_valores-nrparc

            AND dtvincul = itab_valores-dtincl

            AND nrinvoic = itab_valores-nrinvoic

            AND gsberf   = itab_valores-gsberf

            AND dtpagto  = itab_valores-dtliquid.

        IF sy-subrc            EQ  0  OR

           itab_valores-tpdesp EQ 'D' OR

           itab_valores-tpdesp EQ 'JC'.

          CONTINUE.

        ELSEIF sy-subrc NE 0.

          SELECT SINGLE * FROM /pws/zycbt005 INTO wa_zycbt005

            WHERE nrseqc   = itab_valores-nrseqc

              AND nrparc   = itab_valores-nrparc

              AND dtvincul = itab_valores-dtincl

              AND nrinvoic = itab_valores-nrinvoic

              AND gsberf   = itab_valores-gsberf.

          IF sy-subrc EQ 0 AND NOT wa_zycbt005-dtcredext IS INITIAL.

            CONTINUE.

          ELSE.

            DELETE itab_valores INDEX v_tabix.

            DELETE record_tab   INDEX v_tabix.

            CONTINUE.

          ENDIF.

        ENDIF.

      ENDIF.

    ELSE.

      DELETE itab_valores INDEX v_tabix.

      DELETE record_tab   INDEX v_tabix.

    ENDIF.

 

  ENDLOOP.

ENDIF.

* << Fim da inclusão

 

* >> Início da exclusão:

MOVE itab_despesas[] TO record_tab[].

 

CLEAR itab_despesas.

REFRESH itab_despesas.

* << Fim da exclusão