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.
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