Módulo: DOC. IMPORTAÇÃO
Funcionalidade: Custo Efetivo
Data/Hora da Publicação: 06/12/2007 00:00:00
Data/Hora Última Alteração: 22/02/2011 14:30:18
Descrição da Nota: TRATAMENTO PARA PARAMETR. DE FATOR DE MOEDA PARA TAXA CONVERSÃO NO SAP
Sintoma
Para valores com origem em fatura com moeda igual a JPY o valor calculado em BRL está incorreto no
custo e no recebimento.
Solução
Atualização do programa de custo efetivo para tratar a parametrização do fator de moeda.
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 05395 Data: 06/12/2007 Hora: 08:41:40
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 05395
Categoria : Erro de Programa
Prioridade : Alta
Versão PW.CE : 7.0
Pacote : 00003
Agrupamento : 00024
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
05006 - 00001 - 7.0 - 00003 - AJUSTE PARA MELHORIA DE PERFORMANCE DO CUSTO
05275 - 00002 - 7.0 - 00003 - PROBLEMA NO CUSTO EFETIVO COM MOEDA JPY QUANDO A FATURA ERA DO TI
----------------------------------------------------------------------------------------------------
TRATAMENTO PARA PARAMETR. DE FATOR DE MOEDA PARA TAXA CONVERSÃO NO SAP
----------------------------------------------------------------------------------------------------
Palavras Chave:
FATOR - CONVERSÃO - TAXA - MOEDA - PARAMETRO - LANÇAMENTO
/PWS/ZYCIR006 - CUSTO - EFETIVO - CONTABIL
----------------------------------------------------------------------------------------------------
Objetos da nota:
REPS /PWS/MZYCI010O01
REPS /PWS/MZYCI010O02
REPS /PWS/ZYCIR006
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI010O01
...
MODULE carrega_zycbe036a OUTPUT.
CHECK NOT itab_zycit036a-nrseq IS INITIAL.
MOVE /pws/zycit001-embarca TO itab_zycit036a-embarca.
MOVE itab_zycit036a TO /pws/zycie036a.
READ TABLE itab_zycit029 WITH KEY codigo = itab_zycit036a-codigo.
IF sy-subrc EQ 0.
/pws/zycie029-descricao = itab_zycit029-descricao.
ENDIF.
DESCRIBE TABLE itab_zycit036a LINES v_lin.
tc_desp_emb-lines = v_lin.
* >> Início da exclusão: MODULE CARREGA_ZYCBE036A
if ( /pws/zycie036a-waers = 'JPY' and
/pws/zycie036a-waers_real = 'JPY' and
/pws/zycie036a-waers_mov = 'BRL' ).
read table itab_zycit140 with key
codmod = 'D'
codigo = itab_zycit036a-codigo
custo = 'X' .
if itab_zycit140-origem eq 'FAT' .
perform trata_decimais using 'JPY'
changing itab_zycit036a-vlmov.
endif.
/pws/zycie036a-vlmov = itab_zycit036a-vlmov.
endif.
* << Fim da exclusão
ENDMODULE.
MODULE status_0200 OUTPUT.
SET PF-STATUS '0200'.
SET TITLEBAR '0200'.
ENDMODULE.
MODULE set_screen_0200 OUTPUT.
PERFORM carrega_cgc.
ENDMODULE.
MODULE set_screen_tc_0200 OUTPUT.
LOOP AT SCREEN.
...
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI010O02
...
v_tmov_conv = v_tmov_aux.
PERFORM trata_decimais USING itab_zycit036a-waers_real
CHANGING v_treal_conv.
ENDIF.
ENDIF.
ENDIF.
PERFORM trata_decimais USING /pws/zycie001-waers_mov
CHANGING v_tmov_conv.
v_tmov = v_tmov + v_tmov_conv.
ELSE.
* >> Início da exclusão: MODULE CARREGA_TOTAIS
IF ( itab_zycit036a-waers = 'JPY' and
itab_zycit036a-waers_real = 'JPY' and
itab_zycit036a-waers_mov = 'BRL' ).
read table itab_zycit140 with key
codmod = 'D'
codigo = itab_zycit036a-codigo
custo = 'X' .
if itab_zycit140-origem eq 'FAT' .
perform trata_decimais using 'JPY'
changing itab_zycit036a-vlmov.
endif.
endif.
* << Fim da exclusão
v_tmov = v_tmov + itab_zycit036a-vlmov.
ENDIF.
IF itab_zycit036a-waers_dif NE /pws/zycie001-waers_dif
AND NOT itab_zycit036a-vldif IS INITIAL.
PERFORM converter_moeda USING
itab_zycit036a-vldif
itab_zycit036a-waers_dif
/pws/zycie001-waers_dif
CHANGING v_tmov_aux.
v_tdif_conv = v_tmov_aux.
...
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYCIR006
...
DATA: END OF itab_tcurc.
DATA: itab_tcurx TYPE tcurx OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF itab_taxob08 OCCURS 0.
DATA: waerso TYPE /pws/zycit003-waers,
waersd TYPE /pws/zycit003-waers,
taxa TYPE /pws/zycit245-qtd_iten.
DATA: END OF itab_taxob08.
DATA: BEGIN OF itab_zycit443 OCCURS 0.
INCLUDE STRUCTURE /pws/zycit443.
DATA: END OF itab_zycit443.
* >> Início da inclusão:
DATA: BEGIN OF itab_tcurf OCCURS 0,
de TYPE tcurf-ffact,
para TYPE tcurf-tfact,
fcurr TYPE tcurf-fcurr,
tcurr TYPE tcurf-tcurr,
gdatu TYPE tcurf-gdatu,
kurst TYPE tcurf-kurst,
END OF itab_tcurf.
DATA: v_de TYPE tcurf-ffact,
v_para TYPE tcurf-tfact.
* << Fim da inclusão
DATA: wa_t001w LIKE t001w,
wa_bseg LIKE bseg OCCURS 0.
DATA:
v_netpr LIKE ekpo-netpr,
v_porcent LIKE konv-kbetr,
v_tpeso LIKE /pws/zycit003-ntgew,
v_dfator LIKE tcurr-ffact,
v_pfator LIKE tcurr-tfact,
v_index TYPE i,
v_rub,
...
...
PERFORM trata_decimais USING itab_zycit036-waers_real
CHANGING v_valor.
ENDIF.
IF v_itemcongela NE 'X'.
itab_zycit036-waers_mov = /pws/zycbt007-waersb.
IF NOT /pws/zycit085-ukursfob IS INITIAL.
IF itab_zycit036-origem NE 'FAT'.
itab_zycit036-vlmov = v_valor *
/pws/zycit085-ukursfob.
ELSE.
* >> Início da exclusão: FORM CALCULAR_OUTROS_CUSTOS
itab_zycit036-vlmov = v_valor * v_kursf.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULAR_OUTROS_CUSTOS
PERFORM busca_fator_moed USING itab_zycit036-waers_real
/pws/zycbt007-waersb
CHANGING v_de
v_para.
itab_zycit036-vlmov = v_valor *
( ( v_kursf * v_para ) / v_de ).
* << Fim da inclusão
ENDIF.
ELSE.
IF itab_zycit036-origem NE 'FAT'.
READ TABLE itab_zycit100
WITH KEY nrseq = itab_zycit036-nrseq
ebeln = itab_zycit036-ebeln
ebelp = itab_zycit036-ebelp.
IF NOT itab_zycit100-dttaxbem IS INITIAL.
itab_zycit036-vlmov = v_valor *
itab_zycit100-dttaxbem.
ELSE.
PERFORM converter_moeda USING v_valor
itab_zycit036-waers_real
/pws/zycbt007-waersb
CHANGING itab_zycit036-vlmov.
ENDIF.
ELSE.
* >> Início da exclusão: FORM CALCULAR_OUTROS_CUSTOS
itab_zycit036-vlmov = v_valor * v_kursf.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULAR_OUTROS_CUSTOS
PERFORM busca_fator_moed USING itab_zycit036-waers_real
/pws/zycbt007-waersb
CHANGING v_de
v_para.
itab_zycit036-vlmov = v_valor *
( ( v_kursf * v_para ) / v_de ).
* << Fim da inclusão
ENDIF.
ENDIF.
PERFORM trata_decimais USING itab_zycit036-waers_mov
CHANGING itab_zycit036-vlmov.
CLEAR: itab_zycit036-vldif, itab_zycit036-waers_dif.
ELSE.
READ TABLE itab_zycit036_plan WITH KEY
nrseq = itab_zycit036-nrseq
ebeln = itab_zycit036-ebeln
ebelp = itab_zycit036-ebelp
...
...
itab_zycit036_plan-netpr GT 0 AND NOT
itab_zycit036_plan-waers IS INITIAL
AND v_itemcongela NE 'X'.
v_valor = itab_zycit036_plan-netpr.
IF itab_zycit036-origem <> 'FAT'.
IF NOT /pws/zycit085-ukursfob IS INITIAL.
itab_zycit036-vlmov = v_valor *
/pws/zycit085-ukursfob .
itab_zycit036-waers_mov = /pws/zycbt007-waersb.
ELSE.
* >> Início da exclusão: FORM CALCULAR_OUTROS_CUSTOS
itab_zycit036-vlmov = v_valor * v_kursf.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULAR_OUTROS_CUSTOS
PERFORM busca_fator_moed USING itab_zycit036-waers_real
/pws/zycbt007-waersb
CHANGING v_de
v_para.
itab_zycit036-vlmov = v_valor *
( ( v_kursf * v_para ) / v_de ).
* << Fim da inclusão
itab_zycit036-waers_mov = /pws/zycbt007-waersb.
ENDIF.
ELSE.
READ TABLE itab_zycit100 WITH KEY
nrseq = itab_zycit036-nrseq
ebeln = itab_zycit036-ebeln
ebelp = itab_zycit036-ebelp.
IF itab_zycit036-origem <> 'FAT'.
IF NOT itab_zycit100-dttaxbem IS INITIAL.
itab_zycit036-vlmov = v_valor *
...
...
PERFORM converter_moeda USING
itab_zycit036-netpr
itab_zycit036-waers
/pws/zycbt007-waersb
CHANGING itab_zycit036-vlmov.
PERFORM trata_decimais USING itab_zycit036-waers
CHANGING itab_zycit036-vlmov.
itab_zycit036-waers_mov = /pws/zycbt007-waersb.
ENDIF.
ELSE.
* >> Início da exclusão: FORM CALCULAR_OUTROS_CUSTOS
itab_zycit036-vlmov = v_valor * v_kursf.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULAR_OUTROS_CUSTOS
PERFORM busca_fator_moed USING itab_zycit036-waers_real
/pws/zycbt007-waersb
CHANGING v_de
v_para.
itab_zycit036-vlmov = v_valor *
( ( v_kursf * v_para ) / v_de ).
* << Fim da inclusão
itab_zycit036-waers_mov = /pws/zycbt007-waersb.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
itab_zycit036-waers_mov = /pws/zycbt007-waersb.
ENDIF.
IF itab_zycit036-origem <> 'FAT'.
IF itab_zycit036-origem NE 'EST'.
IF NOT /pws/zycit085-ukursfob IS INITIAL.
...
...
/pws/zycbt007-waersb
CHANGING itab_zycit036-vldif.
itab_zycit036-vldif =
itab_zycit036-vldif - itab_zycit036-vlmov.
ENDIF.
ENDIF.
itab_zycit036-waers_dif = /pws/zycbt007-waersb.
ENDIF.
ELSE.
IF NOT v_kursf IS INITIAL.
* >> Início da exclusão: FORM CALCULAR_OUTROS_CUSTOS
v_val_real = v_valor * v_kursf.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULAR_OUTROS_CUSTOS
PERFORM busca_fator_moed USING itab_zycit036-waers_real
/pws/zycbt007-waersb
CHANGING v_de
v_para.
v_val_real = v_valor *
( ( v_kursf * v_para ) / v_de ).
* << Fim da inclusão
ELSE.
v_val_real = v_valor * /pws/zycit085-ukursfob .
ENDIF.
PERFORM trata_decimais USING itab_zycit036-waers_mov
CHANGING v_val_real.
itab_zycit036-vldif = v_val_real
- itab_zycit036-vlmov.
itab_zycit036-waers_dif = itab_zycit036-waers_mov.
ENDIF.
ELSEIF itab_zycit036-netpr GT 0 AND
...
...
PERFORM converter_moeda USING
itab_zycit036-netpr
itab_zycit036-waers
/pws/zycbt007-waersb
CHANGING itab_zycit036-vlmov.
PERFORM trata_decimais USING itab_zycit036-waers
CHANGING itab_zycit036-vlmov.
ENDIF.
ENDIF.
ELSE.
* >> Início da exclusão: FORM CALCULAR_OUTROS_CUSTOS
itab_zycit036-vlmov = v_valor * v_kursf.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULAR_OUTROS_CUSTOS
PERFORM busca_fator_moed USING itab_zycit036-waers_real
/pws/zycbt007-waersb
CHANGING v_de
v_para.
itab_zycit036-vlmov = v_valor *
( ( v_kursf * v_para ) / v_de ).
* << Fim da inclusão
ENDIF.
itab_zycit036-waers_mov = /pws/zycbt007-waersb.
ENDIF.
itab_zycit036-vldif = 0 - itab_zycit036-vlmov.
itab_zycit036-waers_dif = /pws/zycbt007-waersb.
ENDIF.
IF itab_zycit036-vlmov IS INITIAL.
CLEAR itab_zycit036-waers_mov.
ELSEIF itab_zycit036-vldif IS INITIAL.
CLEAR itab_zycit036-waers_dif.
...
...
READ TABLE itab_zycit006 WITH KEY
nrseq = itab_zycit036-nrseqori.
IF sy-subrc EQ 0 AND itab_zycit006-frpagto EQ 'P'.
itab_zycit036-vlmov = v_valor *
/pws/zycit085-ukursfre .
ELSE.
READ TABLE itab_bkpf WITH KEY
bukrs = itab_zycit006-bukrs
belnr = itab_zycit006-belnr_p
gjahr = itab_zycit006-dt_belnrp(04).
* >> Início da inclusão: FORM CALCULAR_OUTROS_CUSTOS
PERFORM busca_fator_moed USING itab_zycit036-waers_real
/pws/zycbt007-waersb
CHANGING v_de
v_para.
* << Fim da inclusão
itab_zycit036-vlmov = itab_zycit036-vlreal *
* >> Início da exclusão: FORM CALCULAR_OUTROS_CUSTOS
itab_bkpf-kursf.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULAR_OUTROS_CUSTOS
( ( itab_bkpf-kursf * v_para ) / v_de ).
* << Fim da inclusão
ENDIF.
ELSE.
itab_zycit036-vlmov = v_valor.
...
...
ELSE.
READ TABLE itab_zycit006 WITH KEY
nrseq = itab_zycit036-nrseqori.
IF sy-subrc EQ 0 AND itab_zycit006-frpagto EQ 'P'.
itab_zycit036-vlmov = v_valor .
ELSE.
READ TABLE itab_bkpf WITH KEY
bukrs = itab_zycit006-bukrs
belnr = itab_zycit006-belnr_p
gjahr = itab_zycit006-dt_belnrp(04).
* >> Início da inclusão: FORM CALCULAR_OUTROS_CUSTOS
PERFORM busca_fator_moed USING itab_zycit036-waers_real
/pws/zycbt007-waersb
CHANGING v_de
v_para.
* << Fim da inclusão
itab_zycit036-vlmov = itab_zycit036-vlreal *
* >> Início da exclusão: FORM CALCULAR_OUTROS_CUSTOS
itab_bkpf-kursf.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULAR_OUTROS_CUSTOS
( ( itab_bkpf-kursf * v_para ) / v_de ).
* << Fim da inclusão
ENDIF.
ENDIF.
itab_zycit036-waers_mov = /pws/zycbt007-waersb.
...
...
nrseq = itab_zycit036-nrseqori.
IF sy-subrc EQ 0 AND itab_zycit006-frpagto EQ 'P'.
v_valor = v_valor *
/pws/zycit085-ukursfre .
ELSE.
READ TABLE itab_bkpf WITH KEY
bukrs = itab_zycit006-bukrs
belnr = itab_zycit006-belnr_p
gjahr = itab_zycit006-dt_belnrp(04).
IF itab_bkpf-waers NE 'BRL'.
* >> Início da inclusão: FORM CALCULAR_OUTROS_CUSTOS
PERFORM busca_fator_moed USING itab_zycit036-waers_real
/pws/zycbt007-waersb
CHANGING v_de
v_para.
* << Fim da inclusão
v_valor = itab_zycit036-vlreal *
* >> Início da exclusão: FORM CALCULAR_OUTROS_CUSTOS
itab_bkpf-kursf.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULAR_OUTROS_CUSTOS
( ( itab_bkpf-kursf * v_para ) / v_de ).
* << Fim da inclusão
ELSE.
v_valor = itab_zycit036-vlreal.
ENDIF.
...
...
IF itab_zycit140-custo NE 'X'.
itab_zycit036-vlmov = v_valor .
ELSE.
READ TABLE itab_zycit006 WITH KEY
nrseq = itab_zycit036-nrseqori.
.
IF sy-subrc EQ 0.
READ TABLE itab_bkpf WITH KEY
belnr = itab_zycit006-belnr_p.
IF sy-subrc EQ 0.
* >> Início da exclusão: FORM CALCULAR_OUTROS_CUSTOS
itab_zycit036-vlmov = v_valor * itab_bkpf-kursf.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULAR_OUTROS_CUSTOS
PERFORM busca_fator_moed USING itab_zycit036-waers_real
/pws/zycbt007-waersb
CHANGING v_de
v_para.
itab_zycit036-vlmov = v_valor *
( ( itab_bkpf-kursf * v_para ) / v_de ).
* << Fim da inclusão
ENDIF.
ENDIF.
ENDIF.
ELSE.
CLEAR itab_zycit140.
READ TABLE itab_zycit140 WITH KEY
codigo = itab_zycit036-codigo
origem = itab_zycit036-origem.
IF itab_zycit140-custo NE 'X'.
itab_zycit036-vlmov = v_valor .
ELSE.
READ TABLE itab_zycit006 WITH KEY
nrfat = itab_zycit036-codigo
nrseq = itab_zycit036-nrseqori.
.
IF sy-subrc EQ 0.
READ TABLE itab_bkpf WITH KEY
belnr = itab_zycit006-belnr_p.
IF sy-subrc EQ 0.
* >> Início da exclusão: FORM CALCULAR_OUTROS_CUSTOS
itab_zycit036-vlmov = v_valor * itab_bkpf-kursf.
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULAR_OUTROS_CUSTOS
PERFORM busca_fator_moed USING itab_zycit036-waers_real
/pws/zycbt007-waersb
CHANGING v_de
v_para.
itab_zycit036-vlmov = v_valor *
( ( itab_bkpf-kursf * v_para ) / v_de ).
* << Fim da inclusão
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ELSE.
PERFORM converter_moeda USING v_valor
itab_zycit036-waers_real
/pws/zycbt007-waersb
CHANGING itab_zycit036-vlmov.
...
...
ENDIF.
ENDIF.
IF itab_zycit036-origem EQ 'FAT' AND
itab_zycit036-waers_real NE /pws/zycbt007-waersb.
READ TABLE itab_zycit006 WITH KEY
nrseq = itab_zycit036-nrseqori.
IF sy-subrc EQ 0.
READ TABLE itab_bkpf WITH KEY
belnr = itab_zycit006-belnr_p.
IF sy-subrc EQ 0.
* >> Início da exclusão: FORM CALCULAR_OUTROS_CUSTOS
v_valor = v_valor * itab_bkpf-kursf.
v_vl = v_vl * itab_bkpf-kursf .
* << Fim da exclusão
* >> Início da inclusão: FORM CALCULAR_OUTROS_CUSTOS
PERFORM busca_fator_moed USING itab_zycit036-waers_real
/pws/zycbt007-waersb
CHANGING v_de
v_para.
v_valor = v_valor *
( ( itab_bkpf-kursf * v_para ) / v_de ).
v_vl = v_vl *
( ( itab_bkpf-kursf * v_para ) / v_de ).
* << Fim da inclusão
ENDIF.
ENDIF.
ELSEIF itab_zycit036-origem EQ 'NF'.
ENDIF.
PERFORM trata_decimais USING itab_zycit036-waers_mov
CHANGING v_valor.
ENDIF.
IF NOT /pws/zycit085-ukursseg IS INITIAL AND
( itab_zycit036-origem EQ 'NF'
OR itab_zycit036-origem EQ 'FAT' ).
...
...
AND nrseqori EQ '0000000000'.
COMMIT WORK.
ENDIF.
ELSEIF /pws/zycie001-dtencer IS INITIAL.
DELETE FROM /pws/zycit036 WHERE nrseq EQ pa_nrseq
AND origem EQ 'NF'
AND nrseqori EQ '0000000000'.
COMMIT WORK.
ENDIF.
ENDFORM.
* >> Início da inclusão:
FORM busca_fator_moed USING p_waers
p_waersb
CHANGING p_de
p_para.
IF /pws/zycit000-kurst IS INITIAL.
/pws/zycit000-kurst = 'M'.
ENDIF.
LOOP AT itab_tcurf
WHERE fcurr = p_waers
AND tcurr = p_waersb
AND gdatu >= sy-datum
AND kurst = /pws/zycit000-kurst.
ENDLOOP.
IF sy-subrc NE 0.
itab_tcurf-gdatu = '99999999' - sy-datum.
SELECT SINGLE ffact tfact fcurr tcurr
gdatu kurst
FROM tcurf
INTO itab_tcurf
WHERE fcurr = p_waers AND
tcurr = p_waersb AND
gdatu >= sy-datum AND
kurst = /pws/zycit000-kurst.
IF sy-subrc EQ 0.
itab_tcurf-gdatu = '99999999' - itab_tcurf-gdatu.
APPEND itab_tcurf.
ENDIF.
ENDIF.
IF sy-subrc NE 0.
itab_tcurf-para = itab_tcurf-de = 1.
ENDIF.
p_de = itab_tcurf-de.
p_para = itab_tcurf-para.
ENDFORM.
* << Fim da inclusão