Módulo: DOC. EXPORTAÇÃO
Funcionalidade: Registro de Exportação (RE)
Data/Hora da Publicação: 02/10/2007 00:00:00
Data/Hora Última Alteração: 22/02/2011 10:04:24
Descrição da Nota: AJUSTE NO CÁLCULO DOS VALORES PARA RE QUANDO RE A TERMO
Sintoma
Quando é gerada uma RE a termo, caso haja despesas, desconto ou acréscimo, os valores da pasta
"Pagamentos" são calculados incorretamente.
Solução
Aplicação do percentual (a termo) sobre as despesas, descontos e acréscimos. Incluído tratamento de
diferenças de arredondamento para RE's a termo com e sem agrupamento.
7.0
Produto:
Nota
Descrição
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 04885 Data: 02/10/2007 Hora: 19:19:59
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 04885
Categoria : Erro de Programa
Prioridade : Média
Versão PW.CE : 7.0
Pacote : 00003
Agrupamento : 00015
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
04839 - 00001 - 7.0 - 00003 - CORREÇÃO NO VALOR CALCULADO DO EMBARQUE E EM VALORES DO RE
----------------------------------------------------------------------------------------------------
AJUSTE NO CÁLCULO DOS VALORES PARA RE QUANDO RE A TERMO
----------------------------------------------------------------------------------------------------
Palavras Chave:
TERMO, RE, CÁLCULO, FOB, VALOR, PERCENTUAL, DESPESAS, ACRÉSCIMO
----------------------------------------------------------------------------------------------------
Objetos da nota:
REPS /PWS/MZYCE041F01
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCE041F01
...
fob TYPE /pws/zycet065-fob,
frete TYPE /pws/zycet065-frete,
seguro TYPE /pws/zycet065-seguro,
outras_desp TYPE /pws/zycet065-outras_desp,
desconto TYPE /pws/zycet065-desconto,
acrescimo TYPE /pws/zycet065-acrescimo,
comissao TYPE /pws/zycet065-comissao,
END OF ty_zycet065.
DATA: wa_zycet065 TYPE ty_zycet065,
v_despesas TYPE /pws/zycet002-vlme.
* >> Início da inclusão: FORM AJUSTA_PRECOS
DATA: v_vfob TYPE /pws/zycet092-vfob,
v_netpr TYPE /pws/zycet092-netpr,
v_vfob_item TYPE p DECIMALS 4,
v_netpr_item TYPE p DECIMALS 4,
v_difer TYPE /pws/zycet092-netpr,
v_index TYPE sy-tabix.
DATA: fator_acrescimo TYPE p DECIMALS 2.
* << Fim da inclusão
IF itab_zycit282[] IS INITIAL.
SELECT SINGLE inco1
fob
frete
seguro
outras_desp
desconto
acrescimo
comissao
FROM /pws/zycet065
INTO wa_zycet065
WHERE inco1 EQ itab_zycet001-inco1.
READ TABLE itab_zycet001 INDEX 1.
CHECK sy-subrc IS INITIAL.
IF itab_zycet116-agrupado EQ 'S'.
LOOP AT itab_zycet092 ASSIGNING <fs_zycet092>.
* >> Início da inclusão: FORM AJUSTA_PRECOS
CLEAR: v_vfob, v_netpr, v_index.
* << Fim da inclusão
LOOP AT itab_zycet118 ASSIGNING <fs_zycet118>
WHERE seqagrupado EQ <fs_zycet092>-codnrseq.
CLEAR v_despesas.
* >> Início da inclusão: FORM AJUSTA_PRECOS
v_index = sy-tabix.
* << Fim da inclusão
READ TABLE itab_zycet002
WITH KEY vbeln_va = <fs_zycet118>-vbeln_va
aupos = <fs_zycet118>-aupos
vbeln_vl = <fs_zycet118>-vbeln_vl
posnl = <fs_zycet118>-posnl
vbeln_vf = <fs_zycet118>-vbeln_vf
posnr = <fs_zycet118>-posnr
TRANSPORTING vlfrete_r
vlseguro_r
vlod_r
vlagente_r
vlacrescimo_r
vldesconto_r.
CHECK sy-subrc IS INITIAL.
* >> Início da exclusão: FORM AJUSTA_PRECOS
PERFORM ajustes_re_termo USING itab_zycet116-perc_re_termo
CHANGING <fs_zycet118>-fkimg
<fs_zycet118>-ntgew
<fs_zycet118>-brgew
<fs_zycet118>-netpr
<fs_zycet118>-vfob.
* << Fim da exclusão
IF NOT wa_zycet065-frete IS INITIAL AND
NOT itab_zycet002-vlfrete_r IS INITIAL.
IF /pws/zycee001-tpcalc = '0'.
ADD itab_zycet002-vlfrete_r TO v_despesas.
ELSE.
SUBTRACT itab_zycet002-vlfrete_r FROM v_despesas.
ENDIF.
ENDIF.
IF NOT wa_zycet065-seguro IS INITIAL AND
NOT itab_zycet002-vlseguro_r IS INITIAL.
...
...
ELSE.
<fs_zycet118>-vfob = <fs_zycet118>-netpr + v_despesas.
<fs_zycet118>-netpr =
<fs_zycet118>-netpr -
itab_zycet002-vldesconto_r +
itab_zycet002-vlacrescimo_r.
ENDIF.
ELSE.
<fs_zycet118>-vfob = <fs_zycet118>-netpr.
ENDIF.
* >> Início da inclusão: FORM AJUSTA_PRECOS
PERFORM ajustes_re_termo USING itab_zycet116-perc_re_termo
CHANGING <fs_zycet118>-fkimg
<fs_zycet118>-ntgew
<fs_zycet118>-brgew
<fs_zycet118>-netpr
<fs_zycet118>-vfob.
v_vfob = v_vfob + <fs_zycet118>-vfob.
v_netpr = v_netpr + <fs_zycet118>-netpr.
* << Fim da inclusão
ENDLOOP.
CHECK sy-subrc IS INITIAL.
PERFORM ajustes_re_termo USING itab_zycet116-perc_re_termo
CHANGING <fs_zycet092>-fkimg
<fs_zycet092>-ntgew
<fs_zycet092>-brgew
<fs_zycet092>-netpr
<fs_zycet092>-vfob.
* >> Início da inclusão: FORM AJUSTA_PRECOS
CLEAR v_difer.
IF v_vfob NE <fs_zycet092>-vfob.
READ TABLE itab_zycet118 INDEX v_index.
IF v_vfob GT <fs_zycet092>-vfob.
v_difer = v_vfob - <fs_zycet092>-vfob.
itab_zycet118-vfob = itab_zycet118-vfob - v_difer.
MODIFY itab_zycet118 INDEX v_index TRANSPORTING vfob.
ELSE.
v_difer = <fs_zycet092>-vfob - v_vfob.
itab_zycet118-vfob = itab_zycet118-vfob + v_difer.
MODIFY itab_zycet118 INDEX v_index TRANSPORTING vfob.
ENDIF.
ENDIF.
CLEAR v_difer.
IF v_netpr NE <fs_zycet092>-netpr.
READ TABLE itab_zycet118 INDEX v_index.
IF v_netpr GT <fs_zycet092>-netpr.
v_difer = v_netpr - <fs_zycet092>-netpr.
itab_zycet118-netpr = itab_zycet118-netpr - v_difer.
MODIFY itab_zycet118 INDEX v_index TRANSPORTING netpr.
ELSE.
v_difer = <fs_zycet092>-netpr - v_netpr.
itab_zycet118-netpr = itab_zycet118-netpr + v_difer.
MODIFY itab_zycet118 INDEX v_index TRANSPORTING netpr.
ENDIF.
ENDIF.
* << Fim da inclusão
ENDLOOP.
ELSE.
LOOP AT itab_zycet118 ASSIGNING <fs_zycet118>.
CLEAR v_despesas.
READ TABLE itab_zycet002 WITH KEY vbeln_va = <fs_zycet118>-vbeln_va
aupos = <fs_zycet118>-aupos
vbeln_vl = <fs_zycet118>-vbeln_vl
posnl = <fs_zycet118>-posnl
vbeln_vf = <fs_zycet118>-vbeln_vf
posnr = <fs_zycet118>-posnr
TRANSPORTING vlfrete_r
vlseguro_r
vlod_r
vlagente_r
vlacrescimo_r
vldesconto_r.
CHECK sy-subrc IS INITIAL.
* >> Início da exclusão: FORM AJUSTA_PRECOS
PERFORM ajustes_re_termo USING itab_zycet116-perc_re_termo
CHANGING <fs_zycet118>-fkimg
<fs_zycet118>-ntgew
<fs_zycet118>-brgew
<fs_zycet118>-netpr
<fs_zycet118>-vfob.
* << Fim da exclusão
IF NOT wa_zycet065-frete IS INITIAL AND
NOT itab_zycet002-vlfrete_r IS INITIAL.
IF /pws/zycee001-tpcalc = '0'.
ADD itab_zycet002-vlfrete_r TO v_despesas.
ELSE.
SUBTRACT itab_zycet002-vlfrete_r FROM v_despesas.
ENDIF.
ENDIF.
IF NOT wa_zycet065-seguro IS INITIAL AND
NOT itab_zycet002-vlseguro_r IS INITIAL.
...
...
ELSE.
<fs_zycet118>-vfob = <fs_zycet118>-netpr + v_despesas.
<fs_zycet118>-netpr =
<fs_zycet118>-netpr -
itab_zycet002-vldesconto_r +
itab_zycet002-vlacrescimo_r.
ENDIF.
ELSE.
<fs_zycet118>-vfob = <fs_zycet118>-netpr.
ENDIF.
* >> Início da inclusão: FORM AJUSTA_PRECOS
IF itab_zycet116-perc_re_termo > 0.
v_netpr = v_netpr + <fs_zycet118>-netpr.
v_vfob = v_vfob + <fs_zycet118>-vfob.
ENDIF.
PERFORM ajustes_re_termo USING itab_zycet116-perc_re_termo
CHANGING <fs_zycet118>-fkimg
<fs_zycet118>-ntgew
<fs_zycet118>-brgew
<fs_zycet118>-netpr
<fs_zycet118>-vfob.
ENDLOOP.
IF itab_zycet116-perc_re_termo > 0.
fator_acrescimo = 1 + ( itab_zycet116-perc_re_termo / 100 ).
LOOP AT itab_zycet118 INTO itab_zycet118.
v_index = sy-tabix.
v_netpr_item = v_netpr_item + itab_zycet118-netpr.
v_vfob_item = v_vfob_item + itab_zycet118-vfob.
* << Fim da inclusão
ENDLOOP.
* >> Início da inclusão: FORM AJUSTA_PRECOS
v_netpr = v_netpr * fator_acrescimo.
v_vfob = v_vfob * fator_acrescimo.
IF v_netpr NE v_netpr_item.
READ TABLE itab_zycet118 INDEX v_index.
IF v_netpr GT v_netpr_item.
v_difer = v_netpr - v_netpr_item.
itab_zycet118-netpr = itab_zycet118-netpr + v_difer.
MODIFY itab_zycet118 INDEX v_index TRANSPORTING netpr.
ELSE.
v_difer = v_netpr_item - v_netpr.
itab_zycet118-netpr = itab_zycet118-netpr - v_difer.
MODIFY itab_zycet118 INDEX v_index TRANSPORTING netpr.
ENDIF.
ENDIF.
IF v_vfob NE v_vfob_item.
READ TABLE itab_zycet118 INDEX v_index.
IF v_vfob GT v_vfob_item.
v_difer = v_vfob - v_vfob_item.
itab_zycet118-vfob = itab_zycet118-vfob + v_difer.
MODIFY itab_zycet118 INDEX v_index TRANSPORTING vfob.
ELSE.
v_difer = v_vfob_item - v_vfob.
itab_zycet118-vfob = itab_zycet118-vfob - v_difer.
MODIFY itab_zycet118 INDEX v_index TRANSPORTING vfob.
ENDIF.
ENDIF.
ENDIF.
* << Fim da inclusão
ENDIF.
ENDIF.
PERFORM busca_parcelas.
ENDFORM.
FORM verifica_naladi.
DATA: v_cont(3) TYPE n.
IF refresh IS INITIAL.
LOOP AT itab_zycet092.
CLEAR v_cont.
LOOP AT itab_zycet081 WHERE steuc = itab_zycet092-ncm.
...