Módulo: DOC. IMPORTAÇÃO
Funcionalidade: Custo Efetivo
Data/Hora da Publicação: 27/12/2006 00:00:00
Data/Hora Última Alteração: 22/02/2011 14:23:17
Descrição da Nota: CUSTO EFETIVO COM VALOR ERRADO QUANDO VINHA DA FATURA
Sintoma
O valor contabilizado na revisão de faturas da nota fiscal não está correto. Fineza verificar para o
encerramento do mês.
Solução
atualizado o programa para sempre jogar no custo o total de cada item
6.0
Produto:
Nota
Descrição
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 02771 Data: 27/12/2006 Hora: 17:20:10
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 02771
Categoria : Erro de Programa
Prioridade : Média
Versão PW.CE : 6.0
Pacote : 00026
Agrupamento : 00146
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
01559 - 00001 - 6.0 - 00023 - NOTA FISCAL NÃO ESTÁ ATUALIZANDO VALOR DO CUSTO EFETIVO.
----------------------------------------------------------------------------------------------------
CUSTO EFETIVO COM VALOR ERRADO QUANDO VINHA DA FATURA
----------------------------------------------------------------------------------------------------
Palavras Chave:
CUSTO - FATURA - VALOR
----------------------------------------------------------------------------------------------------
Objetos da nota:
REPS /PWS/MZYCI003F01
REPS /PWS/ZYCIR988
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI003F01
...
IF sy-subrc NE 0.
CLEAR itab_zycit036.
ENDIF.
PERFORM retorna_decimais USING itab_zycit036-waers
CHANGING itab_zycit036-vlreal.
IF okcode NE 'DELE'.
IF /pws/zycie006-ratval EQ '3'.
PERFORM trata_decimais USING /pws/zycie006-waers
CHANGING itab_zycit003-total.
ENDIF.
* >> Início da exclusão: FORM CUSTEANDO_DESPESA_INCO
IF sy-tcode = '/PWS/ZYCI003_L'.
/pws/zycie036-vlreal = /pws/zycie006-vlmerc.
ELSE.
/pws/zycie036-vlreal = itab_zycit003-total +
itab_zycit036-vlreal.
ENDIF.
* << Fim da exclusão
* >> Início da inclusão: FORM CUSTEANDO_DESPESA_INCO
/pws/zycie036-vlreal = itab_zycit003-total.
* << Fim da inclusão
ELSE.
READ TABLE itab_zycit003_ini WITH KEY
ebeln = itab_zycit003-ebeln
ebelp = itab_zycit003-ebelp.
IF sy-subrc EQ 0.
/pws/zycie036-vlreal = itab_zycit003-total -
( itab_zycit003_ini-vlreal * itab_zycit003_ini-toinv ) -
itab_zycit003_ini-vlfre_fat - itab_zycit003_ini-vlseg_fat
+ itab_zycit036-vlreal.
ENDIF.
...
* Criação do Relatório para correção do custo Efetivo.
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYCIR988
*&---------------------------------------------------------------------*
*& Report /PWS/ZYCIR988
*& *
*&---------------------------------------------------------------------*
REPORT /pws/zycir988 MESSAGE-ID /pws/zycim.
TABLES : /pws/zycie001,
/pws/zycit031,
/pws/zycie006,
/pws/zycit041,
/pws/zycbt007,
tcurx,
t001.
DATA itab_zycit036 LIKE /pws/zycit036 OCCURS 0 WITH HEADER LINE.
DATA itab_zycit003 LIKE /pws/zycit003 OCCURS 0 WITH HEADER LINE.
DATA itab_zycit042 LIKE /pws/zycit042 OCCURS 0 WITH HEADER LINE.
DATA itab_zycit263 LIKE /pws/zycie263 OCCURS 0 WITH HEADER LINE.
DATA itab_zycit006 LIKE /pws/zycie006 OCCURS 0 WITH HEADER LINE.
DATA itab_zycit100 LIKE /pws/zycit100 OCCURS 0 WITH HEADER LINE.
DATA itab_zycit132 LIKE /pws/zycie132 OCCURS 0 WITH HEADER LINE.
DATA: okcode LIKE sy-ucomm.
DATA : v_kursf LIKE bkpf-kursf,
v_valor LIKE /pws/zycit036-vlreal.
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.
PARAMETER: p_nrseq TYPE /pws/zycit003-nrseq OBLIGATORY.
SELECTION-SCREEN END OF BLOCK bl1.
INITIALIZATION.
START-OF-SELECTION.
PERFORM seleciona_dados.
PERFORM ajusta_custo.
*&---------------------------------------------------------------------*
*& Form seleciona_dados
*&---------------------------------------------------------------------*
FORM seleciona_dados.
SELECT SINGLE * FROM /pws/zycit001
INTO /pws/zycie001
WHERE nrseq EQ p_nrseq.
IF sy-subrc EQ 0 .
SELECT SINGLE * FROM t001 WHERE bukrs EQ /pws/zycie001-bukrs.
SELECT SINGLE * FROM /pws/zycit031
WHERE inco1 = /pws/zycie001-inco1
AND land1 EQ t001-land1.
SELECT SINGLE *
FROM /pws/zycbt007
WHERE bukrs EQ /pws/zycie001-bukrs.
SELECT * FROM /pws/zycit003 INTO TABLE itab_zycit003
WHERE nrseq EQ /pws/zycie001-nrseq.
SELECT * FROM /pws/zycit100 INTO TABLE itab_zycit100
WHERE nrseq EQ /pws/zycie001-nrseq.
IF NOT itab_zycit003[] IS INITIAL.
SELECT * FROM /pws/zycit263
INTO TABLE itab_zycit263
FOR ALL ENTRIES IN itab_zycit003
WHERE nrseq EQ itab_zycit003-nrseq
AND ebeln EQ itab_zycit003-ebeln
AND ebelp EQ itab_zycit003-ebelp
AND eliminado NE 'X'.
IF sy-subrc EQ 0.
SELECT * FROM /pws/zycit006
INTO TABLE itab_zycit006
FOR ALL ENTRIES IN itab_zycit263
WHERE nrseq_pgfat EQ itab_zycit263-nrseq_pgfat
AND tpfatura EQ '01'
AND eliminado NE 'X' .
IF sy-subrc EQ 0.
SELECT * FROM /pws/zycit132 INTO TABLE itab_zycit132
FOR ALL ENTRIES IN itab_zycit006
WHERE nrseq = itab_zycit006-nrseq
AND nrfat = itab_zycit006-nrfat
AND eliminado NE 'X'.
ENDIF.
SELECT * FROM /pws/zycit042 INTO TABLE itab_zycit042
FOR ALL ENTRIES IN itab_zycit003
WHERE nrseq = itab_zycit003-nrseq AND
ebeln = itab_zycit003-ebeln AND
ebelp = itab_zycit003-ebelp.
ENDIF.
ENDIF.
ELSE.
MESSAGE i015 WITH text-004.
ENDIF.
ENDFORM. " seleciona_dados
*&---------------------------------------------------------------------*
*& Form ajusta_custo
*&---------------------------------------------------------------------*
FORM ajusta_custo .
DATA v_sucesso.
LOOP AT itab_zycit003.
SELECT * FROM /pws/zycit036 INTO TABLE itab_zycit036
WHERE nrseq = itab_zycit003-nrseq AND
ebeln = itab_zycit003-ebeln AND
ebelp = itab_zycit003-ebelp AND
( codigo = 'FOB' OR
codigo = 'C&F' OR
codigo = 'CIF' )
AND ( origem = 'FAT' OR
origem = 'NF' ).
IF sy-subrc = 0.
LOOP AT itab_zycit036 WHERE nrseq = itab_zycit003-nrseq
AND ebeln = itab_zycit003-ebeln
AND ebelp = itab_zycit003-ebelp .
IF itab_zycit036-origem = 'NF'.
READ TABLE itab_zycit042
WITH KEY ebeln = itab_zycit036-ebeln
ebelp = itab_zycit036-ebelp.
IF sy-subrc EQ 0.
itab_zycit036-vlreal =
( itab_zycit003-vlreal * itab_zycit003-qtd_iten ) +
itab_zycit003-vlfre_fat + itab_zycit003-vlseg_fat.
itab_zycit036-origem = 'NF'.
itab_zycit036-waers_real = itab_zycit003-waers_real.
itab_zycit036-nrseqori = itab_zycit042-docnum.
INSERT /pws/zycit036 FROM itab_zycit036.
IF sy-subrc NE 0.
MODIFY /pws/zycit036 FROM itab_zycit036.
ENDIF.
IF sy-subrc EQ 0.
v_sucesso = 'X'.
ENDIF.
ENDIF.
ELSEIF itab_zycit036-origem = 'FAT'.
READ TABLE itab_zycit263 WITH KEY
nrseq = itab_zycit003-nrseq
ebeln = itab_zycit003-ebeln
ebelp = itab_zycit003-ebelp.
IF sy-subrc EQ 0.
READ TABLE itab_zycit006 WITH KEY
nrseq_pgfat = itab_zycit263-nrseq_pgfat.
IF sy-subrc EQ 0.
itab_zycit036-vlreal =
( itab_zycit003-vlreal * itab_zycit003-qtd_iten ) +
itab_zycit003-vlfre_fat + itab_zycit003-vlseg_fat.
itab_zycit036-origem = 'FAT'.
itab_zycit036-waers_real = itab_zycit003-waers_real.
itab_zycit036-nrseqori = itab_zycit006-nrseq.
INSERT /pws/zycit036 FROM itab_zycit036.
IF sy-subrc NE 0.
MODIFY /pws/zycit036 FROM itab_zycit036.
ENDIF.
IF sy-subrc EQ 0.
v_sucesso = 'X'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ELSE.
SELECT * FROM /pws/zycit036 INTO TABLE itab_zycit036
WHERE nrseq = itab_zycit003-nrseq AND
ebeln = itab_zycit003-ebeln AND
ebelp = itab_zycit003-ebelp AND
( codigo = 'FOB' OR
codigo = 'C&F' OR
codigo = 'CIF' )
AND origem = 'PED' .
IF sy-subrc EQ 0.
READ TABLE itab_zycit263 WITH KEY
nrseq = itab_zycit003-nrseq
ebeln = itab_zycit003-ebeln
ebelp = itab_zycit003-ebelp.
IF sy-subrc EQ 0.
READ TABLE itab_zycit006 WITH KEY
nrseq_pgfat = itab_zycit263-nrseq_pgfat.
IF sy-subrc EQ 0.
READ TABLE itab_zycit132 WITH KEY
nrseq = itab_zycit006-nrseq.
ENDIF.
"Trata fatura
IF NOT itab_zycit006-belnr_p IS INITIAL OR
itab_zycit006-frpagto EQ 'A' OR
NOT itab_zycit132-belnr_p IS INITIAL.
LOOP AT itab_zycit036 WHERE
nrseq = itab_zycit003-nrseq AND
ebeln = itab_zycit003-ebeln AND
ebelp = itab_zycit003-ebelp.
IF sy-subrc EQ 0.
itab_zycit036-vlreal = ( itab_zycit003-vlreal *
itab_zycit263-qtd_iten ) +
itab_zycit003-vlfre_fat + itab_zycit003-vlseg_fat.
itab_zycit036-origem = 'FAT'.
itab_zycit036-waers_real = itab_zycit003-waers_real.
itab_zycit036-nrseqori = itab_zycit006-nrseq.
itab_zycit036-codmod = 'D'.
itab_zycit036-status = 'M'.
itab_zycit036-vlreal_emb = itab_zycit006-vltotal.
itab_zycit036-waers_emb = itab_zycit006-waers.
CLEAR : itab_zycit036-vldif.
itab_zycit036-usernamec = sy-uname.
itab_zycit036-dtuserc = sy-datum.
itab_zycit036-hruserc = sy-uzeit.
SELECT SINGLE * FROM /pws/zycit041
WHERE nrseq EQ itab_zycit042-nrseqnf
AND nfglobal EQ itab_zycit042-nfglobal
AND docnum EQ itab_zycit042-docnum .
IF sy-subrc EQ 0 AND
NOT /pws/zycit041-belnr_mr1m IS INITIAL.
itab_zycit036-congelamov = 'X' .
ENDIF.
INSERT /pws/zycit036 FROM itab_zycit036.
IF sy-subrc NE 0.
MODIFY /pws/zycit036 FROM itab_zycit036.
ENDIF.
IF sy-subrc EQ 0.
v_sucesso = 'X'.
ENDIF.
ENDIF.
"Trata NF
SELECT * FROM /pws/zycit042 INTO TABLE itab_zycit042
WHERE nrseq = itab_zycit003-nrseq AND
ebeln = itab_zycit003-ebeln AND
ebelp = itab_zycit003-ebelp.
IF sy-subrc EQ 0 .
READ TABLE itab_zycit003
WITH KEY ebeln = itab_zycit036-ebeln
ebelp = itab_zycit036-ebelp.
IF sy-subrc = 0.
READ TABLE itab_zycit042
WITH KEY ebeln = itab_zycit036-ebeln
ebelp = itab_zycit036-ebelp.
itab_zycit036-vlreal = ( itab_zycit003-vlreal *
itab_zycit003-qtd_iten ) +
itab_zycit003-vlfre_fat + itab_zycit003-vlseg_fat.
itab_zycit036-origem = 'NF'.
itab_zycit036-waers_real = itab_zycit003-waers_real.
itab_zycit036-nrseqori = itab_zycit042-docnum.
itab_zycit036-codmod = 'D'.
itab_zycit036-status = 'M'.
itab_zycit036-vlreal_emb = itab_zycit006-vltotal.
itab_zycit036-waers_emb = itab_zycit006-waers.
CLEAR : itab_zycit036-vldif.
itab_zycit036-usernamec = sy-uname.
itab_zycit036-dtuserc = sy-datum.
itab_zycit036-hruserc = sy-uzeit.
SELECT SINGLE * FROM /pws/zycit041
WHERE nrseq EQ itab_zycit042-nrseqnf
AND nfglobal EQ itab_zycit042-nfglobal
AND docnum EQ itab_zycit042-docnum .
IF sy-subrc EQ 0 AND
NOT /pws/zycit041-belnr_mr1m IS INITIAL.
itab_zycit036-congelamov = 'X' .
ENDIF.
INSERT /pws/zycit036 FROM itab_zycit036.
IF sy-subrc NE 0.
MODIFY /pws/zycit036 FROM itab_zycit036.
ENDIF.
IF sy-subrc EQ 0.
v_sucesso = 'X'.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ELSE.
MESSAGE i015 WITH text-003.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
IF v_sucesso = 'X'.
commit work.
MESSAGE i015 WITH text-002.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form retorna_decimais
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ITAB_ZYCIT036_WAERS_REAL text
* <--P_V_VALOR text
*----------------------------------------------------------------------*
FORM retorna_decimais USING p_moeda
CHANGING p_valor.
" Transforma valor da moeda de acordo com casas decimais
SELECT SINGLE * FROM tcurx WHERE currkey = p_moeda.
IF sy-subrc <> 0.
tcurx-currdec = 2.
ENDIF.
p_valor = p_valor / ( 10 ** ( tcurx-currdec - 2 ) ).
ENDFORM. " retorna_decimais
*&---------------------------------------------------------------------*
*& Form trata_decimais
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ITAB_ZYCIT036_WAERS_MOV text
* <--P_ITAB_ZYCIT036_VLMOV text
*----------------------------------------------------------------------*
FORM trata_decimais USING p_moeda
CHANGING p_valor.
" Transforma valor da moeda de acordo com casas decimais
SELECT SINGLE * FROM tcurx WHERE currkey = p_moeda.
IF sy-subrc <> 0.
tcurx-currdec = 2.
ENDIF.
p_valor = p_valor * ( 10 ** ( tcurx-currdec - 2 ) ).
ENDFORM. " TRATA_DECIMAIS
* O seguinte elemento de texto foi criado:
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYCIR988
Idioma: PT
Símbolo: 001
Texto: (30 caracteres)
"Critério de Seleção:"
Comprimento máximo: 30
Incluído símbolo de texto:
Idioma: PT
Símbolo: 002
Texto: (30 caracteres)
"Dados atualizados com sucesso!"
Comprimento máximo: 30
----------------------------------------------------------------------------------------------------
Modificações efetuadas em TRANS /PWS/ZYCIR988
*Criar transação para relatório