Módulo: CÂMBIO EXPORTAÇÃO
Funcionalidade: Relatórios
Data/Hora da Publicação: 15/12/2010 00:00:00
Data/Hora Última Alteração: 18/02/2011 16:01:42
Descrição da Nota: RELATÓRIO DE CONTRATOS - ERRO SALDO A PAGAR
Sintoma
Ao executar o relatório de contratos, o mesmo não esta considerando uma liquidação no Saldo a Pagar.
A mesma é menor que a Data Posição em, do critério de seleção, portanto deveria considerar.
Solução
Incluir o campo DTPAGEXT na tabela interna de liquidações, para que considere todas e imprima o
saldo a pagar corretamente.
Reestruturar o perform processa_dados retirando duplicidade de execução.
8.0
Produto:
Nota
Descrição
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 10833 Data: 15/12/2010 Hora: 10:21:29
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 10833
Categoria : Erro de Programa
Prioridade : Média
Versão PW.CE : 8.0
Pacote : 00006
Agrupamento : 00052
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
02366 - 00001 - 6.0 - 00025 - RELATÓRIO DE CONTRATOS - NÃO ESTÁ SENDO RESPEITADO O CAMPO POSIÇÃ
03116 - 00002 - 6.0 - 00026 - RELATÓRIO DE CONTRATOS - ATUALIZAÇÃO DE CAMPO SALDO Á PAGAR
04385 - 00003 - 7.0 - 00002 - PERFORMANCE NO RELATÓRIO DE CONTRATOS
04495 - 00004 - 7.0 - 00002 - RELATÓRIO DE CONTRATOS - AJUSTES PERFORMANCE
04558 - 00005 - 7.0 - 00002 - EXPORTAÇÃO RELATÓRIO DE CONTRATOS
04818 - 00006 - 7.0 - 00003 - RELATÓRIO DE CONTRATOS - VALOR A VINCULAR
04857 - 00007 - 7.0 - 00003 - RELATÓRIO DE CONTRATOS
05626 - 00008 - 7.0 - 00004 - VERIFICAÇÃO AMPLIADA, CODE INSPECTOR - CB
05877 - 00009 - 7.0 - 00004 - RELATÓRIO DE CONTRATOS - NOVAS COLUNAS VALOR/PERCENTUAL COMISSÃO
06498 - 00010 - 7.0 - 00005 - REL. CONTRATOS - CONTRATOS ENCERRADOS
06858 - 00011 - 7.0 - 00006 - INCLUSÃO DE AUTHORITY CHECK EM PROGRAMAS E RELATÓRIOS.
07934 - 00012 - 7.0 - 00008 - RELATÓRIO DE CONTRATOS - SALDO A VINCULAR PREENCHIDO PARA DP POR
09191 - 00013 - 8.0 - 00001 - RELATÓRIO - CONTRATOS - VALORES A VINCULAR E PAGAR INCORRETOS
10237 - 00014 - 8.0 - 00003 - RELATATÓRIO CONTRATO EXPORT.SALDO A VINCULAR,SALDO A PAGAR,DATA P
10475 - 00015 - 8.0 - 00004 - RELATÓRIO DE CONTRATOS SALDO A PAGAR E SALDO A VINCULAR
----------------------------------------------------------------------------------------------------
RELATÓRIO DE CONTRATOS - ERRO SALDO A PAGAR
----------------------------------------------------------------------------------------------------
Palavras Chave:
RELATÓRIO DE CONTRATOS - ERRO SALDO A PAGAR
----------------------------------------------------------------------------------------------------
Objetos da nota:
REPS /PWS/ZYCBR010
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYCBR010
...
waers LIKE /pws/zycbt005-waers,
parid LIKE /pws/zycbt005-parid,
nrparc LIKE /pws/zycbt005-nrparc,
dtincl LIKE /pws/zycbt005-dtincl,
dtvencto LIKE /pws/zycbt005-dtvencto,
vlme_p LIKE /pws/zycbt005-vlme_p,
END OF itab_zycbt005,
BEGIN OF itab_zycbt006 OCCURS 100,
nrseqc LIKE /pws/zycbt006-nrseqc,
dtpagto LIKE /pws/zycbt006-dtpagto,
* >> Início da inclusão:
dtpagext TYPE /pws/zycbt006-dtpagext,
* << Fim da inclusão
nrcontr LIKE /pws/zycbt006-nrcontr,
vlme LIKE /pws/zycbt006-vlme,
status LIKE /pws/zycbt006-status,
nrinvoic LIKE /pws/zycbt006-nrinvoic,
nrparcf LIKE /pws/zycbt006-nrparcf,
gsberf LIKE /pws/zycbt006-gsberf,
tpdesp LIKE /pws/zycbt006-tpdesp,
nrparc LIKE /pws/zycbt006-nrparc,
dtincl LIKE /pws/zycbt006-dtincl,
dtvincul LIKE /pws/zycbt006-dtvincul,
...
...
PERFORM cabec.
ENDIF.
END-OF-PAGE.
IF v_impr NE 'X'.
ULINE AT /sy-linsz.
ELSE.
ULINE AT /(v_tamr).
ENDIF.
START-OF-SELECTION.
PERFORM get_parametros.
* >> Início da exclusão:
PERFORM processar_dados.
* << Fim da exclusão
* >> Início da inclusão:
PERFORM processar_dados2.
* << Fim da inclusão
v_repid = sy-repid.
PERFORM e04_comment_build USING gt_list_top_of_page[].
PERFORM f_monta_final.
PERFORM f_fieldcat_fill.
IF itab_relat[] IS INITIAL.
MESSAGE i222.
ELSE.
PERFORM imprime_relatorio_alv.
ENDIF.
END-OF-SELECTION.
...
...
v_top_of_page = 'TOP_OF_PAGE'
v_variant = g_variant
v_marc = ' '
v_selinfo = 'X'
v_zebra = p_zebra
v_otimizado = p_otim
TABLES
i_fieldcat = i_fieldcat
t_data = i_final.
ENDFORM.
* >> Início da exclusão: FORM PROCESSAR_DADOS
FORM processar_dados.
DATA: BEGIN OF itab_zycbt003 OCCURS 5.
INCLUDE STRUCTURE /pws/zycbt003.
DATA: END OF itab_zycbt003.
DATA:
v_type TYPE tcurr-kurst.
DATA:
v_saldo_vincular TYPE /pws/zycbt001-slvinc,
v_saldo_pagar TYPE /pws/zycbt001-slpagar.
REFRESH: itab_zycbt001,
itab_zycbt002,
itab_relat,
itab_relat2.
PERFORM verifica_parametros.
SELECT nrseqc nrcontr bukrs tpcontr bconegoc bcofinan fdtlanc
dtcontr dtcred dtdesem dtentr dtliquid waers vlme
vlcanc slvinc slpagar
tp_pagt_antc
FROM /pws/zycbt001
INTO TABLE itab_zycbt001
WHERE nrseqc IN nrseqc
AND nrcontr IN nrcontr
AND tpcontr IN tpcontr
AND bukrs IN bukrs
AND dtcontr IN dtcontr
AND bcofinan IN bcofinan
AND bconegoc IN bconegoc
AND dtcred IN dtcred
AND dtdesem IN dtdesem
AND f_encerrado NE 'X'
AND f_encerrado NE 'E'
AND dtentr IN dtentr.
SORT itab_zycbt001 BY nrseqc.
IF NOT itab_zycbt001[] IS INITIAL.
SELECT nrseqc perc_comis perc_comis_flat fpagto_comis
FROM /pws/zycbt074
INTO TABLE itab_zycbt074
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc = itab_zycbt001-nrseqc.
SELECT *
FROM /pws/zycbt003
INTO TABLE itab_zycbt003
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc = itab_zycbt001-nrseqc AND
tppror = 'E'.
SORT itab_zycbt003 BY nrseqc tppror dtpror.
IF s_posic IS INITIAL.
s_posic = sy-datum.
ENDIF.
IF s_flag IS INITIAL.
s_flag = 'O'.
ENDIF.
CASE s_flag.
WHEN 'D'.
DELETE itab_zycbt001 WHERE dtdesem > s_posic
OR dtdesem IS initial.
WHEN 'O'.
DELETE itab_zycbt001 WHERE dtcontr > s_posic
OR dtcontr IS initial.
WHEN 'C'.
DELETE itab_zycbt001 WHERE dtcred > s_posic
OR dtcred IS initial.
ENDCASE.
READ TABLE itab_zycbt001 INDEX sy-tabix.
SELECT nrseqc dtvincul nrcontr vlvinc status
nrinvoic nrparcf gsberf
tpdesp waers_c waers parid nrparc dtincl dtvencto
vlme_p
FROM /pws/zycbt005
INTO TABLE itab_zycbt005
FOR ALL ENTRIES IN itab_zycbt001
WHERE dtvincul LE s_posic
AND nrseqc = itab_zycbt001-nrseqc
AND ( status = 'C' OR status = '1' OR status = 'I' ).
SORT itab_zycbt005 BY nrseqc tpdesp nrparc dtincl nrinvoic nrparcf
gsberf dtvincul dtvencto.
SELECT nrseqc dtpagto nrcontr vlme status
nrinvoic nrparcf gsberf
tpdesp nrparc dtincl dtvincul dtvencto
FROM /pws/zycbt006
INTO TABLE itab_zycbt006
FOR ALL ENTRIES IN itab_zycbt001
WHERE dtpagto LE s_posic
AND nrseqc = itab_zycbt001-nrseqc
AND ( status = 'C' OR status = '1' ).
SORT itab_zycbt006 BY nrseqc tpdesp nrparc dtincl nrinvoic nrparcf
gsberf dtvincul dtvencto dtpagto.
SELECT tpcontr txtdesc
FROM /pws/zycbt016
INTO TABLE itab_zycbt016
FOR ALL ENTRIES IN itab_zycbt001
WHERE tpcontr = itab_zycbt001-tpcontr.
SORT itab_zycbt016 BY tpcontr.
SELECT nrseqc nrparc tpparc
dtinicio dtfinal txjfixa
txjvar vlme slvinc
dtpror
flat dtpagto
FROM /pws/zycbt002
INTO TABLE itab_zycbt002
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc EQ itab_zycbt001-nrseqc.
SORT itab_zycbt002 BY nrseqc nrparc tpparc.
SELECT nrseqc tpdesp nrparc
dtincl waers vlme dtpagto
FROM /pws/zycbt004
INTO TABLE itab_zycbt004
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc EQ itab_zycbt001-nrseqc
AND tpdesp LIKE 'J%'.
SORT itab_zycbt004 BY nrseqc tpdesp nrparc dtincl.
SELECT nrseqc nrinvoic nrparcf gsberf vldev
FROM /pws/zycbt050
INTO TABLE itab_zycbt050
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc = itab_zycbt001-nrseqc
AND dtdevol LE s_posic.
SORT itab_zycbt050 BY nrseqc nrinvoic nrparcf gsberf.
SELECT nrseqc nrinvoic nrparcf gsberf vlme
FROM /pws/zycbt051
INTO TABLE itab_zycbt051
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc = itab_zycbt001-nrseqc
AND dtreceb LE s_posic
AND tpdev = 'RP'.
SORT itab_zycbt051 BY nrseqc nrinvoic nrparcf gsberf.
SELECT a~nrseq_c
a~vlalt
INTO TABLE itab_zycbt061
FROM /pws/zycbt061 AS a INNER JOIN /pws/zycbt060 AS b
ON a~nrseq = b~nrseq
FOR ALL ENTRIES IN itab_zycbt001
WHERE a~nrseq_c EQ itab_zycbt001-nrseqc
AND b~dtinclu LE s_posic
AND a~belnr2 IS not NULL.
SELECT lifnr name1
FROM lfa1
INTO TABLE itab_bancos
FOR ALL ENTRIES IN itab_zycbt001
WHERE lifnr = itab_zycbt001-bconegoc
OR lifnr = itab_zycbt001-bcofinan.
LOOP AT itab_zycbt001.
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
ID 'BUKRS'
FIELD itab_zycbt001-bukrs
ID 'ACTVT'
FIELD '03'.
CHECK sy-subrc EQ 0.
CLEAR: itab_relat, v_vldev, v_slpagar, v_vlvinc, v_vlreceb,
v_slvinc.
LOOP AT itab_zycbt003 WHERE nrseqc = itab_zycbt001-nrseqc.
IF itab_zycbt001-dtentr LE itab_zycbt003-dtpror.
itab_zycbt001-dtentr = itab_zycbt003-dtpror.
ENDIF.
ENDLOOP.
READ TABLE itab_zycbt016 WITH KEY tpcontr = itab_zycbt001-tpcontr.
IF sy-subrc = 0.
MOVE:
itab_zycbt016-txtdesc TO itab_relat-txtdesc.
ENDIF.
v_saldo_vincular = itab_zycbt001-vlme.
v_saldo_pagar = itab_zycbt001-vlme.
LOOP AT itab_zycbt005 WHERE nrseqc = itab_zycbt001-nrseqc.
v_saldo_vincular = v_saldo_vincular - itab_zycbt005-vlme_p.
ENDLOOP.
LOOP AT itab_zycbt006 WHERE nrseqc = itab_zycbt001-nrseqc.
v_saldo_pagar = v_saldo_pagar - itab_zycbt006-vlme.
ENDLOOP.
LOOP AT itab_zycbt061
INTO wa_zycbt061
WHERE nrseq_c = itab_zycbt001-nrseqc.
v_saldo_vincular = v_saldo_vincular - wa_zycbt061-vlalt.
v_saldo_pagar = v_saldo_pagar - wa_zycbt061-vlalt.
ENDLOOP.
MOVE:
itab_zycbt001-nrseqc TO itab_relat-nrseqc,
itab_zycbt001-nrcontr TO itab_relat-nrcontr,
itab_zycbt001-bukrs TO itab_relat-bukrs,
itab_zycbt001-tpcontr TO itab_relat-tpcontr,
itab_zycbt001-bconegoc TO itab_relat-bconegoc,
itab_zycbt001-bcofinan TO itab_relat-bcofinan,
itab_zycbt001-dtcontr TO itab_relat-dtcontr,
itab_zycbt001-dtentr TO itab_relat-dtentr,
itab_zycbt001-waers TO itab_relat-waers,
itab_zycbt001-vlme TO itab_relat-vlme,
itab_zycbt001-vlcanc TO itab_relat-vlcanc,
v_saldo_vincular TO itab_relat-slvinc,
v_saldo_pagar TO itab_relat-slpagar,
itab_zycbt001-slpagbr TO itab_relat-slpagbr.
LOOP AT itab_zycbt002
WHERE nrseqc EQ itab_zycbt001-nrseqc.
IF itab_zycbt002-tpparc = 'C'.
MOVE itab_zycbt002-vlme TO itab_relat-vl_comis.
READ TABLE itab_zycbt074 WITH KEY
nrseqc = itab_zycbt001-nrseqc.
IF sy-subrc EQ 0.
IF itab_zycbt002-flat EQ 'X'.
MOVE itab_zycbt074-perc_comis_flat
TO itab_relat-perc_comis.
ELSE.
IF itab_zycbt074-fpagto_comis EQ 'P'.
MOVE itab_zycbt074-perc_comis TO itab_relat-perc_comis.
ENDIF.
ENDIF.
ENDIF.
ELSE.
CLEAR: itab_relat-vl_comis,
itab_relat-perc_comis.
ENDIF.
CLEAR v_usd.
IF itab_zycbt001-tpcontr(1) EQ 'P' OR
itab_zycbt001-tpcontr(1) EQ 'S'.
CLEAR: itab_relat-dtpagto, itab_relat-vlpagar.
IF itab_zycbt002-tpparc = 'J'.
itab_relat-vlpagar = itab_zycbt002-vlme.
CLEAR itab_zycbt004.
LOOP AT itab_zycbt004 WHERE nrseqc = itab_zycbt002-nrseqc
AND nrparc = itab_zycbt002-nrparc
AND dtpagto NE '00000000'
AND dtpagto NE ' '
AND dtpagto NE space.
IF itab_zycbt004-dtpagto <= s_posic.
itab_relat-dtpagto = itab_zycbt004-dtpagto.
ELSE.
itab_relat-dtpagto = '00000000'.
ENDIF.
ENDLOOP.
ELSEIF itab_zycbt002-tpparc = 'C'.
IF itab_zycbt002-dtpagto <= s_posic.
MOVE itab_zycbt002-dtpagto TO itab_relat-dtpagto.
ELSE.
MOVE '00000000' TO itab_relat-dtpagto.
ENDIF.
ENDIF.
CLEAR: v_usd, v_taxacambial.
IF itab_zycbt001-waers EQ /pws/zycbt007-waersa.
v_usd = itab_relat-vlpagar.
ELSE.
PERFORM converter_moeda USING itab_relat-vlpagar
itab_zycbt001-waers
/pws/zycbt007-waersa
'M'
sy-datum
CHANGING v_usd
v_taxacambial.
ENDIF.
MOVE itab_zycbt002-slvinc TO itab_relat-slvinc_jur.
ENDIF.
IF s_pagar <> '' AND p_compra = 'X'.
v_type = 'G'.
ENDIF.
IF s_pagar <> '' AND p_venda = 'X'.
v_type = 'B'.
ENDIF.
IF s_pagar <> '' AND p_media = 'X'.
v_type = 'M'.
ENDIF.
PERFORM verifica_periodo.
MOVE:
itab_zycbt002-tpparc TO itab_relat-tpparc,
itab_zycbt002-dtinicio TO itab_relat-dtinicio.
IF itab_zycbt002-dtpror <> '00.00.0000' AND
itab_zycbt002-dtpror <> '00/00/0000' AND
itab_zycbt002-dtpror <> '00000000'.
MOVE: itab_zycbt002-dtpror TO itab_relat-dtvencto.
ELSE.
MOVE: itab_zycbt002-dtfinal TO itab_relat-dtvencto.
ENDIF.
MOVE:
itab_zycbt002-txjfixa TO itab_relat-txjfixa,
itab_zycbt002-txjvar TO itab_relat-txjvar,
v_usd TO itab_relat-vlusd,
v_prazo TO itab_relat-prazo.
APPEND itab_relat.
ENDLOOP.
IF sy-subrc NE 0.
LOOP AT itab_zycbt005 WHERE nrseqc = itab_relat-nrseqc.
v_vlvinc = v_vlvinc + itab_zycbt005-vlvinc.
ENDLOOP.
IF s_txcamb <> ''.
itab_relat-slpagbr = itab_relat-slpagar * s_txcamb.
ELSE.
PERFORM calcula_valor_nacional.
ENDIF.
APPEND itab_relat.
ELSE.
LOOP AT itab_zycbt050 WHERE nrseqc = itab_relat-nrseqc.
v_vldev = v_vldev + itab_zycbt050-vldev.
ENDLOOP.
LOOP AT itab_zycbt005 WHERE nrseqc = itab_zycbt001-nrseqc.
LOOP AT itab_zycbt006
WHERE nrseqc = itab_zycbt005-nrseqc
AND tpdesp = itab_zycbt005-tpdesp
AND nrparc = itab_zycbt005-nrparc
AND dtincl = itab_zycbt005-dtincl
AND nrinvoic = itab_zycbt005-nrinvoic
AND nrparcf = itab_zycbt005-nrparcf
AND gsberf = itab_zycbt005-gsberf
AND dtvincul = itab_zycbt005-dtvincul
AND dtvencto = itab_zycbt005-dtvencto.
IF itab_zycbt005-waers NE itab_zycbt005-waers_c.
IF itab_zycbt001-tpcontr = 'DP'.
v_slpagar = v_slpagar + itab_zycbt005-vlvinc.
ELSE.
v_slpagar = v_slpagar +
( itab_zycbt006-vlme * itab_zycbt005-parid ).
ENDIF.
ELSE.
v_slpagar = v_slpagar + itab_zycbt006-vlme.
ENDIF.
ENDLOOP.
v_vlvinc = v_vlvinc + itab_zycbt005-vlvinc.
ENDLOOP.
LOOP AT itab_zycbt051 WHERE nrseqc = itab_relat-nrseqc.
v_vlreceb = v_vlreceb + itab_zycbt051-vlme.
ENDLOOP.
IF itab_zycbt005 IS INITIAL OR
itab_zycbt006 IS INITIAL OR
itab_zycbt051 IS INITIAL.
ELSE.
itab_relat-slpagar = itab_zycbt001-vlme - v_slpagar -
v_vldev + v_vlreceb.
ENDIF.
IF itab_zycbt001-waers NE /pws/zycbt007-waersb.
PERFORM converter_moeda USING itab_relat-slpagar
itab_zycbt001-waers
/pws/zycbt007-waersb
v_type
s_posic
CHANGING itab_relat-slpagbr
v_taxacambial.
ENDIF.
IF s_txcamb <> ''.
itab_relat-slpagbr = itab_relat-slpagar * s_txcamb.
ENDIF.
MODIFY itab_relat TRANSPORTING slpagar slpagbr
WHERE nrseqc = itab_zycbt001-nrseqc.
ENDIF.
IF NOT ( itab_zycbt001-tpcontr(1) = 'D' AND
itab_zycbt001-tp_pagt_antc = 'C' ).
itab_relat-vlvinc = v_vlvinc.
IF itab_zycbt005 IS INITIAL OR
itab_zycbt006 IS INITIAL OR
itab_zycbt051 IS INITIAL.
ELSE.
v_slvinc = itab_zycbt001-vlme - v_vlvinc + v_vldev.
itab_relat-slvinc = v_slvinc - v_vldev.
ENDIF.
ENDIF.
IF NOT s_a_entr IS INITIAL.
IF itab_relat-slvinc IS INITIAL.
DELETE itab_relat WHERE nrseqc = itab_zycbt001-nrseqc.
CONTINUE.
ENDIF.
ENDIF.
READ TABLE itab_bancos WITH KEY lifnr = itab_relat-bconegoc.
IF sy-subrc = 0.
itab_relat-txtnegoc = itab_bancos-name1.
ENDIF.
READ TABLE itab_bancos WITH KEY lifnr = itab_relat-bcofinan.
IF sy-subrc = 0.
itab_relat-txtfinan = itab_bancos-name1.
ENDIF.
MODIFY itab_relat TRANSPORTING vlvinc slvinc slpagar slpagbr
txtnegoc txtfinan
WHERE nrseqc = itab_zycbt001-nrseqc.
DELETE itab_zycbt001 WHERE nrseqc = itab_zycbt001-nrseqc.
DELETE itab_zycbt002 WHERE nrseqc = itab_zycbt001-nrseqc.
DELETE itab_zycbt003 WHERE nrseqc = itab_zycbt001-nrseqc.
DELETE itab_zycbt004 WHERE nrseqc = itab_zycbt001-nrseqc.
DELETE itab_zycbt005 WHERE nrseqc = itab_zycbt001-nrseqc.
DELETE itab_zycbt006 WHERE nrseqc = itab_zycbt001-nrseqc.
DELETE itab_zycbt050 WHERE nrseqc = itab_zycbt001-nrseqc.
DELETE itab_zycbt051 WHERE nrseqc = itab_zycbt001-nrseqc.
ENDLOOP.
ENDIF.
ENDFORM.
* << Fim da exclusão
FORM converter_moeda USING p_devlme p_dewaers p_parawaers p_ctmoeda
p_dtbase CHANGING p_paravlme p_taxa. "#EC *
DATA:
v_type TYPE tcurr-kurst.
CHECK NOT p_devlme IS INITIAL.
SELECT SINGLE * FROM /pws/zycbt009
WHERE codpadr EQ p_ctmoeda.
v_type = /pws/zycbt009-kurst.
CALL FUNCTION '/PWS/ZYCB_MONTANTE_CONVERTE'
EXPORTING
...
...
IF itab_zycbt001-waers NE /pws/zycbt007-waersb.
PERFORM converter_moeda USING itab_relat-slpagar
itab_zycbt001-waers
/pws/zycbt007-waersb
v_type
s_posic
CHANGING itab_relat-slpagbr
v_taxacambial.
ENDIF.
ENDFORM.
* >> Início da inclusão:
FORM processar_dados2.
DATA: BEGIN OF itab_zycbt003 OCCURS 5.
INCLUDE STRUCTURE /pws/zycbt003.
DATA: END OF itab_zycbt003.
DATA:
v_type TYPE tcurr-kurst.
DATA:
v_saldo_vincular TYPE /pws/zycbt001-slvinc,
v_saldo_pagar TYPE /pws/zycbt001-slpagar.
REFRESH: itab_zycbt001,
itab_zycbt002,
itab_relat,
itab_relat2.
PERFORM verifica_parametros.
SELECT nrseqc nrcontr bukrs tpcontr bconegoc bcofinan fdtlanc
dtcontr dtcred dtdesem dtentr dtliquid waers vlme
vlcanc slvinc slpagar
tp_pagt_antc
FROM /pws/zycbt001
INTO TABLE itab_zycbt001
WHERE nrseqc IN nrseqc
AND nrcontr IN nrcontr
AND tpcontr IN tpcontr
AND bukrs IN bukrs
AND dtcontr IN dtcontr
AND bcofinan IN bcofinan
AND bconegoc IN bconegoc
AND dtcred IN dtcred
AND dtdesem IN dtdesem
AND f_encerrado NE 'X'
AND f_encerrado NE 'E'
AND dtentr IN dtentr.
SORT itab_zycbt001 BY nrseqc.
IF NOT itab_zycbt001[] IS INITIAL.
SELECT nrseqc perc_comis perc_comis_flat fpagto_comis
FROM /pws/zycbt074
INTO TABLE itab_zycbt074
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc = itab_zycbt001-nrseqc.
SELECT *
FROM /pws/zycbt003
INTO TABLE itab_zycbt003
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc = itab_zycbt001-nrseqc AND
tppror = 'E'.
SORT itab_zycbt003 BY nrseqc tppror dtpror.
IF s_posic IS INITIAL.
s_posic = sy-datum.
ENDIF.
IF s_flag IS INITIAL.
s_flag = 'O'.
ENDIF.
CASE s_flag.
WHEN 'D'.
DELETE itab_zycbt001 WHERE dtdesem > s_posic
OR dtdesem IS initial.
WHEN 'O'.
DELETE itab_zycbt001 WHERE dtcontr > s_posic
OR dtcontr IS initial.
WHEN 'C'.
DELETE itab_zycbt001 WHERE dtcred > s_posic
OR dtcred IS initial.
ENDCASE.
READ TABLE itab_zycbt001 INDEX sy-tabix.
SELECT nrseqc dtvincul nrcontr vlvinc status
nrinvoic nrparcf gsberf
tpdesp waers_c waers parid nrparc dtincl dtvencto
vlme_p
FROM /pws/zycbt005
INTO TABLE itab_zycbt005
FOR ALL ENTRIES IN itab_zycbt001
WHERE dtvincul LE s_posic
AND nrseqc = itab_zycbt001-nrseqc
AND ( status = 'C' OR status = '1' OR status = 'I' ).
SORT itab_zycbt005 BY nrseqc tpdesp nrparc dtincl nrinvoic nrparcf
gsberf dtvincul dtvencto.
SELECT nrseqc dtpagto
dtpagext
nrcontr vlme status
nrinvoic nrparcf gsberf
tpdesp nrparc dtincl dtvincul dtvencto
FROM /pws/zycbt006
INTO TABLE itab_zycbt006
FOR ALL ENTRIES IN itab_zycbt001
WHERE dtpagto LE s_posic
AND nrseqc = itab_zycbt001-nrseqc
AND ( status = 'C' OR status = '1' ).
SORT itab_zycbt006 BY nrseqc tpdesp nrparc dtincl nrinvoic nrparcf
gsberf dtvincul dtvencto dtpagto
dtpagext.
SELECT tpcontr txtdesc
FROM /pws/zycbt016
INTO TABLE itab_zycbt016
FOR ALL ENTRIES IN itab_zycbt001
WHERE tpcontr = itab_zycbt001-tpcontr.
SORT itab_zycbt016 BY tpcontr.
SELECT nrseqc nrparc tpparc
dtinicio dtfinal txjfixa
txjvar vlme slvinc
dtpror
flat dtpagto
FROM /pws/zycbt002
INTO TABLE itab_zycbt002
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc EQ itab_zycbt001-nrseqc.
SORT itab_zycbt002 BY nrseqc nrparc tpparc.
SELECT nrseqc tpdesp nrparc
dtincl waers vlme dtpagto
FROM /pws/zycbt004
INTO TABLE itab_zycbt004
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc EQ itab_zycbt001-nrseqc
AND tpdesp LIKE 'J%'.
SORT itab_zycbt004 BY nrseqc tpdesp nrparc dtincl.
SELECT nrseqc nrinvoic nrparcf gsberf vldev
FROM /pws/zycbt050
INTO TABLE itab_zycbt050
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc = itab_zycbt001-nrseqc
AND dtdevol LE s_posic.
SORT itab_zycbt050 BY nrseqc nrinvoic nrparcf gsberf.
SELECT nrseqc nrinvoic nrparcf gsberf vlme
FROM /pws/zycbt051
INTO TABLE itab_zycbt051
FOR ALL ENTRIES IN itab_zycbt001
WHERE nrseqc = itab_zycbt001-nrseqc
AND dtreceb LE s_posic
AND tpdev = 'RP'.
SORT itab_zycbt051 BY nrseqc nrinvoic nrparcf gsberf.
SELECT a~nrseq_c
a~vlalt
INTO TABLE itab_zycbt061
FROM /pws/zycbt061 AS a INNER JOIN /pws/zycbt060 AS b
ON a~nrseq = b~nrseq
FOR ALL ENTRIES IN itab_zycbt001
WHERE a~nrseq_c EQ itab_zycbt001-nrseqc
AND b~dtinclu LE s_posic
AND a~belnr2 IS not NULL.
SELECT lifnr name1
FROM lfa1
INTO TABLE itab_bancos
FOR ALL ENTRIES IN itab_zycbt001
WHERE lifnr = itab_zycbt001-bconegoc
OR lifnr = itab_zycbt001-bcofinan.
LOOP AT itab_zycbt001.
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
ID 'BUKRS'
FIELD itab_zycbt001-bukrs
ID 'ACTVT'
FIELD '03'.
CHECK sy-subrc EQ 0.
CLEAR: itab_relat, v_vldev, v_slpagar, v_vlvinc, v_vlreceb,
v_slvinc.
MOVE:
itab_zycbt001-nrseqc TO itab_relat-nrseqc,
itab_zycbt001-nrcontr TO itab_relat-nrcontr,
itab_zycbt001-bukrs TO itab_relat-bukrs,
itab_zycbt001-tpcontr TO itab_relat-tpcontr,
itab_zycbt001-bconegoc TO itab_relat-bconegoc,
itab_zycbt001-bcofinan TO itab_relat-bcofinan,
itab_zycbt001-dtcontr TO itab_relat-dtcontr,
itab_zycbt001-dtentr TO itab_relat-dtentr,
itab_zycbt001-waers TO itab_relat-waers,
itab_zycbt001-vlme TO itab_relat-vlme,
itab_zycbt001-vlcanc TO itab_relat-vlcanc.
LOOP AT itab_zycbt003 WHERE nrseqc = itab_zycbt001-nrseqc.
IF itab_zycbt001-dtentr LE itab_zycbt003-dtpror.
itab_zycbt001-dtentr = itab_zycbt003-dtpror.
ENDIF.
ENDLOOP.
READ TABLE itab_zycbt016 WITH KEY tpcontr = itab_zycbt001-tpcontr.
IF sy-subrc = 0.
MOVE:
itab_zycbt016-txtdesc TO itab_relat-txtdesc.
ENDIF.
LOOP AT itab_zycbt050 WHERE nrseqc = itab_relat-nrseqc.
v_vldev = v_vldev + itab_zycbt050-vldev.
ENDLOOP.
LOOP AT itab_zycbt051 WHERE nrseqc = itab_relat-nrseqc.
v_vlreceb = v_vlreceb + itab_zycbt051-vlme.
ENDLOOP.
LOOP AT itab_zycbt005 WHERE nrseqc = itab_zycbt001-nrseqc.
LOOP AT itab_zycbt006
WHERE nrseqc = itab_zycbt005-nrseqc
AND tpdesp = itab_zycbt005-tpdesp
AND nrparc = itab_zycbt005-nrparc
AND dtincl = itab_zycbt005-dtincl
AND nrinvoic = itab_zycbt005-nrinvoic
AND nrparcf = itab_zycbt005-nrparcf
AND gsberf = itab_zycbt005-gsberf
AND dtvincul = itab_zycbt005-dtvincul
AND dtvencto = itab_zycbt005-dtvencto.
IF itab_zycbt005-waers NE itab_zycbt005-waers_c.
IF itab_zycbt001-tpcontr = 'DP'.
v_slpagar = v_slpagar + itab_zycbt005-vlvinc.
ELSE.
v_slpagar = v_slpagar +
( itab_zycbt006-vlme * itab_zycbt005-parid ).
ENDIF.
ELSE.
v_slpagar = v_slpagar + itab_zycbt006-vlme.
ENDIF.
ENDLOOP.
v_vlvinc = v_vlvinc + itab_zycbt005-vlvinc.
ENDLOOP.
itab_relat-slpagar = itab_zycbt001-vlme - v_slpagar -
v_vldev + v_vlreceb.
LOOP AT itab_zycbt061
INTO wa_zycbt061
WHERE nrseq_c = itab_zycbt001-nrseqc.
itab_relat-slvinc = itab_relat-slvinc - wa_zycbt061-vlalt.
itab_relat-slpagar = itab_relat-slpagar - wa_zycbt061-vlalt.
ENDLOOP.
IF itab_zycbt001-waers NE /pws/zycbt007-waersb.
PERFORM converter_moeda USING itab_relat-slpagar
itab_zycbt001-waers
/pws/zycbt007-waersb
v_type
s_posic
CHANGING itab_relat-slpagbr
v_taxacambial.
ENDIF.
IF s_txcamb <> ''.
itab_relat-slpagbr = itab_relat-slpagar * s_txcamb.
ENDIF.
IF NOT ( itab_zycbt001-tpcontr(1) = 'D' AND
itab_zycbt001-tp_pagt_antc = 'C' ).
itab_relat-vlvinc = v_vlvinc.
v_slvinc = itab_relat-slvinc = itab_zycbt001-vlme - v_vlvinc.
ENDIF.
IF NOT s_a_entr IS INITIAL.
IF itab_relat-slvinc IS INITIAL.
DELETE itab_relat WHERE nrseqc = itab_zycbt001-nrseqc.
CONTINUE.
ENDIF.
ENDIF.
READ TABLE itab_bancos WITH KEY lifnr = itab_relat-bconegoc.
IF sy-subrc = 0.
itab_relat-txtnegoc = itab_bancos-name1.
ENDIF.
READ TABLE itab_bancos WITH KEY lifnr = itab_relat-bcofinan.
IF sy-subrc = 0.
itab_relat-txtfinan = itab_bancos-name1.
ENDIF.
LOOP AT itab_zycbt002
WHERE nrseqc EQ itab_zycbt001-nrseqc.
IF itab_zycbt002-tpparc = 'C'.
MOVE itab_zycbt002-vlme TO itab_relat-vl_comis.
READ TABLE itab_zycbt074 WITH KEY
nrseqc = itab_zycbt001-nrseqc.
IF sy-subrc EQ 0.
IF itab_zycbt002-flat EQ 'X'.
MOVE itab_zycbt074-perc_comis_flat
TO itab_relat-perc_comis.
ELSE.
IF itab_zycbt074-fpagto_comis EQ 'P'.
MOVE itab_zycbt074-perc_comis TO itab_relat-perc_comis.
ENDIF.
ENDIF.
ENDIF.
ELSE.
CLEAR: itab_relat-vl_comis,
itab_relat-perc_comis.
ENDIF.
CLEAR v_usd.
IF itab_zycbt001-tpcontr(1) EQ 'P' OR
itab_zycbt001-tpcontr(1) EQ 'S'.
CLEAR: itab_relat-dtpagto, itab_relat-vlpagar.
IF itab_zycbt002-tpparc = 'J'.
itab_relat-vlpagar = itab_zycbt002-vlme.
CLEAR itab_zycbt004.
LOOP AT itab_zycbt004 WHERE nrseqc = itab_zycbt002-nrseqc
AND nrparc = itab_zycbt002-nrparc
AND dtpagto NE '00000000'
AND dtpagto NE ' '
AND dtpagto NE space.
IF itab_zycbt004-dtpagto <= s_posic.
itab_relat-dtpagto = itab_zycbt004-dtpagto.
ELSE.
itab_relat-dtpagto = '00000000'.
ENDIF.
ENDLOOP.
ELSEIF itab_zycbt002-tpparc = 'C'.
IF itab_zycbt002-dtpagto <= s_posic.
MOVE itab_zycbt002-dtpagto TO itab_relat-dtpagto.
ELSE.
MOVE '00000000' TO itab_relat-dtpagto.
ENDIF.
ENDIF.
CLEAR: v_usd, v_taxacambial.
IF itab_zycbt001-waers EQ /pws/zycbt007-waersa.
v_usd = itab_relat-vlpagar.
ELSE.
PERFORM converter_moeda USING itab_relat-vlpagar
itab_zycbt001-waers
/pws/zycbt007-waersa
'M'
sy-datum
CHANGING v_usd
v_taxacambial.
ENDIF.
MOVE itab_zycbt002-slvinc TO itab_relat-slvinc_jur.
ENDIF.
IF s_pagar <> '' AND p_compra = 'X'.
v_type = 'G'.
ENDIF.
IF s_pagar <> '' AND p_venda = 'X'.
v_type = 'B'.
ENDIF.
IF s_pagar <> '' AND p_media = 'X'.
v_type = 'M'.
ENDIF.
PERFORM verifica_periodo.
MOVE:
itab_zycbt002-tpparc TO itab_relat-tpparc,
itab_zycbt002-dtinicio TO itab_relat-dtinicio.
IF itab_zycbt002-dtpror <> '00.00.0000' AND
itab_zycbt002-dtpror <> '00/00/0000' AND
itab_zycbt002-dtpror <> '00000000'.
MOVE: itab_zycbt002-dtpror TO itab_relat-dtvencto.
ELSE.
MOVE: itab_zycbt002-dtfinal TO itab_relat-dtvencto.
ENDIF.
MOVE:
itab_zycbt002-txjfixa TO itab_relat-txjfixa,
itab_zycbt002-txjvar TO itab_relat-txjvar,
v_usd TO itab_relat-vlusd,
v_prazo TO itab_relat-prazo.
APPEND itab_relat.
ENDLOOP.
IF sy-subrc NE 0.
IF s_txcamb <> ''.
itab_relat-slpagbr = itab_relat-slpagar * s_txcamb.
ELSE.
PERFORM calcula_valor_nacional.
ENDIF.
APPEND itab_relat.
ENDIF.
DELETE itab_zycbt001 WHERE nrseqc = itab_zycbt001-nrseqc.
DELETE itab_zycbt002 WHERE nrseqc = itab_zycbt001-nrseqc.
DELETE itab_zycbt003 WHERE nrseqc = itab_zycbt001-nrseqc.
DELETE itab_zycbt004 WHERE nrseqc = itab_zycbt001-nrseqc.
DELETE itab_zycbt005 WHERE nrseqc = itab_zycbt001-nrseqc.
DELETE itab_zycbt006 WHERE nrseqc = itab_zycbt001-nrseqc.
DELETE itab_zycbt050 WHERE nrseqc = itab_zycbt001-nrseqc.
DELETE itab_zycbt051 WHERE nrseqc = itab_zycbt001-nrseqc.
ENDLOOP.
ENDIF.
ENDFORM.
* << Fim da inclusão