CE PLUS - Nota 002771

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

 

Versões Tratadas

6.0


Pré-Requisitos

Produto:

Nota

Descrição

NOTA FISCAL NÃO ESTÁ ATUALIZANDO VALOR DO CUSTO EFETIVO.

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