CE PLUS - Nota 001972

Módulo: DOC. IMPORTAÇÃO

Funcionalidade: Nota Fiscal

Data/Hora da Publicação: 23/08/2006 00:00:00

Data/Hora Última Alteração: 20/06/2011 13:24:06

Descrição da Nota: ERRO NA NF QUANDO POSSUI QUEBRAS DE ITENS. VALOR DUPLICADO NO CUSTO.

Sintoma

Ao fazer a nota fiscal com quebra de itens parametrizada na tabela /PWS/ZYCIT048, o programa está se

perdendo e não está fazendo a contabilização.

 

 

Solução

Ajustar chamada de exit no programa de nota fiscal : /PWS/SAPMZYCI016

 

Versões Tratadas

6.0


Pré-Requisitos

Produto:

Nota

Descrição

VARIÁVEL V_MODALIDADE NO COMMON PART PARA UTILIZAÇÃO EM EXIT

ARREDONDAMENTO DA BASE DO ICMS, BASE DO IPI E VALOR CONTÁBIL

PROGRAMA DE NF ESTÁ CONSUMINDO MUITA MEMÓRIA. PROBLEMAS DE PERFORMANCE.

NOTA FISCAL GLOBAL-GAP CUSTO EFETIVO - PRECISAMOS QUE TENHA UMA EXIT

Informações Complementares

----------------------------------------------------------------------------------------------------

Nota Número 01972 Data: 23/08/2006 Hora: 12:22:10

----------------------------------------------------------------------------------------------------

 

----------------------------------------------------------------------------------------------------

Nota Número              : 01972

Categoria                : Erro de Programa

Prioridade               : Alta

Versão PW.CE             : 6.0

Pacote                   : 00024

Agrupamento              : 00128

----------------------------------------------------------------------------------------------------

Referência às notas relacionadas:

Número - Ordem - Versão - Pacote - Descrição Breve

 

01340  - 00002 - 6.0    - 00023  - ARREDONDAMENTO DA BASE DO ICMS, BASE DO IPI E VALOR CONTÁBIL

01526  - 00001 - 6.0    - 00023  - VARIÁVEL V_MODALIDADE NO COMMON PART PARA UTILIZAÇÃO EM EXIT

01867  - 00003 - 6.0    - 00024  - NOTA FISCAL GLOBAL-GAP CUSTO EFETIVO - PRECISAMOS QUE TENHA UMA E

01927  - 00004 - 6.0    - 00024  - PROGRAMA DE NF ESTÁ CONSUMINDO MUITA MEMÓRIA. PROBLEMAS DE PERFOR

----------------------------------------------------------------------------------------------------

ERRO NA NF QUANDO POSSUI QUEBRAS DE ITENS. VALOR DUPLICADO NO CUSTO.

----------------------------------------------------------------------------------------------------

Palavras Chave:

NOTA FISCAL - QUEBRA - CUSTO EFETIVO - VALOR DUPLICADO

CHAMADA DE EXIT

----------------------------------------------------------------------------------------------------

Objetos da nota:

REPS /PWS/MZYCI016F01

 

REPS /PWS/MZYCI016X01

 

----------------------------------------------------------------------------------------------------

Modificações efetuadas em REPS /PWS/MZYCI016X01

 

DATA:

...

      v_mseh3       LIKE t006a-mseh3,

      v_cfop(7)     TYPE c,

      v_icms_dif    LIKE j_1bdytax-base,

      v_montante1   LIKE j_1bdytax-base,

      v_base        LIKE j_1bdytax-base,

      v_basred      LIKE /pws/zycit036-basred,

      v_excbas      LIKE j_1bdytax-base,

      v_base_dif    LIKE j_1bdytax-base,

      v_othbas      LIKE j_1bdytax-base,

      v_impostos    LIKE /pws/zycit100-vlpis,

      v_despesas    LIKE j_1bdylin-netoth,

      v_ipi         LIKE j_1bdystx-taxval,

      v_icms        LIKE j_1bdystx-taxval,

      v_tiponf(10)    ,

* >> Início da inclusão

      e_subrc         ,

* >> Fim da inclusão

      v_modo_bi       .                "Resposta do usuário p/ BI

 

DATA: END OF COMMON PART a.

 

 

 

----------------------------------------------------------------------------------------------------

Modificações efetuadas em REPS /PWS/MZYCI016F01

 

 

 

* Devido à complexidade das alterações, nessa nota consta o perform FILL_DATA_J1B1 completo.

 

FORM fill_data_j1b1.

  DATA:

    v_tpnf LIKE /pws/zycit044-tpnf,

    v_lifnr LIKE /pws/zycit042-lifnr,

    v_j_1bbranch LIKE /pws/zycit042-j_1bbranch,

 

 

    v_contitm LIKE sy-tabix,

    local_embal LIKE /pws/zycit014-tpembal,

    wa_zycit042_exit LIKE /pws/zycit042,

    wa_zycit042_exit_d LIKE /pws/zycit042.

 

  CLEAR: v_libera, v_icms_dif, v_base_dif.

  CLEAR: v_urf2, e_subrc.

 

  CLEAR    itab_zycit042_mark.

  REFRESH itab_zycit042_mark.

 

  IF v_modalidade = '99'.

    SELECT SINGLE * FROM /pws/zycit043

      WHERE nrseq = /pws/zycie041-nrseq AND

            cancel = space.

    IF sy-subrc = 0.

      SELECT SINGLE * FROM /pws/zycit045

       WHERE nrseqnf = /pws/zycie041-nrseq AND

         saldo > 0.

      IF sy-subrc NE 0.

        SELECT SINGLE * FROM /pws/zycit043

          WHERE nrseq = /pws/zycie041-nrseq AND

                belnr_mr1m EQ space AND

                cancel NE 'X'.

        IF sy-subrc NE 0 AND

        ( t001-land1 NE 'AR' AND t001-land1 NE 'CL' ).

          v_libera = 'X'.

        ENDIF.

      ENDIF.

    ENDIF.

  ENDIF.

  CLEAR: v_despmens.

* Parâmetros Gerais Nota Fiscal de Importação

 

* Se encontrar dados na /pws/zyglt369.

  CLEAR wa_zycit048.

  SELECT SINGLE * FROM /pws/zyglt369

         INTO wa_zyglt369

         WHERE bukrs  EQ /pws/zycit085-bukrs

          AND  branch EQ /pws/zycit085-j_1bbranch

          AND urfdesp EQ /pws/zycit085-urfdesp.

  IF sy-subrc EQ 0.

    SELECT SINGLE * FROM /pws/zycit048

      INTO wa_zycit048

      WHERE bukrs  EQ wa_zyglt369-bukrs

        AND branch EQ wa_zyglt369-branch.

* Se fez seleção pela tabela /pws/zyglt369 v_urf2 = 1.

    v_urf2 = 1.

  ENDIF.

  IF sy-subrc NE 0.

* Senão, faz processo normal pela /pws/zycit048.

    SELECT SINGLE * FROM /pws/zycit048

      INTO wa_zycit048

      WHERE bukrs  EQ /pws/zycie041-bukrs

        AND branch EQ /pws/zycie041-j_1bbranch.

    IF sy-subrc NE 0.

      SELECT SINGLE * FROM /pws/zycit048

         INTO wa_zycit048

         WHERE bukrs EQ /pws/zycie041-bukrs

               AND branch EQ space.

      IF sy-subrc NE 0.

        MESSAGE e015 WITH text-082.

      ENDIF.

    ENDIF.

  ENDIF.

 

  IF wa_zycit048-qtd_item IS INITIAL.

    MESSAGE i015 WITH text-054 text-055.

    EXIT.

  ENDIF.

 

* Dados da DI

  CLEAR wa_zycit085.

  SELECT SINGLE * FROM /pws/zycit085

    INTO wa_zycit085

    WHERE nrseqdi EQ /pws/zycie041-nrseq.

 

* Classificacao da Nota Fiscal Global

  FREE itab_zycit033.

  SELECT * FROM /pws/zycit033

    INTO TABLE itab_zycit033

    WHERE clnf = text-027                      " GLOBAL

     AND bukrs = /pws/zycie041-bukrs.

 

  IF NOT itab_zycit042[] IS INITIAL.

    SELECT * FROM t001w INTO TABLE itab_t001w

      FOR ALL ENTRIES IN itab_zycit042

      WHERE werks = itab_zycit042-werks.

  ENDIF.

 

 

  SORT itab_zycit042     BY tpnf j_1bbranch lifnr nrseq ebeln ebelp.

 

 

  REFRESH: itab_zycit053_s.

 

 

* Cria nota fiscal com dois itens ao mesmo tempo e

* com fornecedores diferentes.

  LOOP AT itab_zycit042 WHERE mark = 'X'.

    CLEAR v_lifnr.

 

    SELECT SINGLE modalidade FROM /pws/zycit001 INTO v_modalidade

      WHERE nrseq = itab_zycit042-nrseq.

 

    IF itab_zycit042[] IS INITIAL.

      SELECT * FROM /pws/zycit003

        INTO CORRESPONDING FIELDS OF TABLE itab_zycit003

        FOR ALL ENTRIES IN itab_zycit042

        WHERE nrseq = itab_zycit042-nrseq AND

              ebeln = itab_zycit042-ebeln AND

              ebelp = itab_zycit042-ebelp.

    ENDIF.

 

   IF wa_zycit048-sepnf = 'X'.                  " Separar Lançto. por NF

      SORT itab_zycit042_aux BY tpnf j_1bbranch lifnr nrseq ebeln ebelp.

      SORT itab_zycit042     BY tpnf j_1bbranch lifnr nrseq ebeln ebelp.

 

      CLEAR v_tpnf.

*     Controle para separar por tipo de NF e por qtde.

*     itab_42_aux = itab_42, anda pela itab_42aux preenche alguns docnum

*     na itab_42 sem deixar que reprocessem.

 

 

      LOOP AT itab_zycit042_aux WHERE ( docnum IS initial        OR

                                     docnum = '9999999999'       OR

                                     docnum = '8888888888' )     AND

                                     NOT ebeln  IS initial       AND

                                     lifnr = itab_zycit042-lifnr AND

                                     mark   =  'X'.

 

 

        CLEAR: v_counter.

        IF itab_zycit042_aux-tpnf NE v_tpnf OR

           itab_zycit042_aux-j_1bbranch NE v_j_1bbranch OR

           itab_zycit042_aux-lifnr NE v_lifnr.

          v_tpnf = itab_zycit042_aux-tpnf.

          v_j_1bbranch = itab_zycit042_aux-j_1bbranch.

          v_lifnr = itab_zycit042_aux-lifnr.

 

          PERFORM clear_date_batch.

          PERFORM cabecalho_nf.

 

          IF ( v_resp EQ 'S' ) OR

             ( v_libera = 'X' AND v_modalidade = '99' ).

            SELECT SINGLE * FROM /pws/zycit093

              WHERE nrseqce = /pws/zycit085-nrbl.

 

            SELECT SINGLE tpembal quant descr

                INTO (local_embal,it_zycee005-quant,it_zycee005-shpmrk)

                   FROM /pws/zycit014

                   WHERE nrseq = /pws/zycit085-nrbl.

            IF sy-subrc EQ 0.

          SELECT SINGLE traty FROM /pws/zycit015 INTO it_zycee005-traty

                                            WHERE tpembal = local_embal.

            ENDIF.

 

            IF /pws/zycie041-nfexterna EQ 'X'.

              it_zycee005-nftype   = wa_zycit048-catnfext.

              it_zycee005-nfnum    = itab_zycit042_aux-nfnum.

              it_zycee005-series   = itab_zycit042_aux-series.

              it_zycee005-subser   = itab_zycit042_aux-subser.

            ELSE.

* Se fez seleção pela tabela /pws/zyglt369 v_urf2 = 1.

              IF v_urf2 = 1.

                it_zycee005-nftype   = wa_zyglt369-catnfint.

              ELSE.

                it_zycee005-nftype   = wa_zycit048-catnfint.

              ENDIF.

            ENDIF.

 

           LOOP AT itab_zycit042 WHERE nrseq EQ itab_zycit042_aux-nrseq

                  AND nfglobal EQ itab_zycit042_aux-nfglobal

                      AND tpnf     EQ itab_zycit042_aux-tpnf

                     AND lifnr    EQ itab_zycit042_aux-lifnr

              AND j_1bbranch EQ itab_zycit042_aux-j_1bbranch

                                         AND mark     =  'X'

                                AND ( docnum   IS initial OR

                                  docnum   = '9999999999' OR

                                     docnum = '8888888888' )

                                   AND processado IS initial.

 

              itab_zycit042-processado = 'X'.

 

              MODIFY itab_zycit042 TRANSPORTING processado.

 

             READ TABLE itab_t001w WITH KEY werks = itab_zycit042-werks.

 

              READ TABLE itab_zycit042_d WITH KEY

                  nrseq = itab_zycit042-nrseq

                  ebeln = itab_zycit042-ebeln

                  ebelp = itab_zycit042-ebelp.

              CLEAR v_subrc.

              MOVE: itab_zycit042 TO wa_zycit042_exit,

                    itab_zycit042_d TO wa_zycit042_exit_d.

              CALL CUSTOMER-FUNCTION '001'

                EXPORTING

                 wa_zycit042 = wa_zycit042_exit

                 wa_zycit042_d = wa_zycit042_exit_d

                 wa_zycit041 = /pws/zycie041

                 v_parametro = '01'

                IMPORTING

                  v_subrc = v_subrc

                TABLES

                  it_zycee007 = it_zycee007

                  itab_zycit036 = itab_zycit036

                  itab_zycit036_di = itab_zycit036_di.

              IF v_subrc NE 'X'.

 

            READ TABLE itab_zycit033 WITH KEY tpnf = itab_zycit042-tpnf

                                               regio = itab_t001w-regio.

                IF sy-subrc EQ 0.

                  PERFORM itens_nf.

                ELSE.

            READ TABLE itab_zycit033 WITH KEY tpnf = itab_zycit042-tpnf

                                                          regio = space.

 

                  PERFORM itens_nf.

                ENDIF.

              ENDIF.

 

              PERFORM peso_global_sep.

              CLEAR itab_zycit033.

*       Verificar a qtde de itens/NFG parametrizados na 48

              v_counter = v_counter + 1.

              v_qtditem = wa_zycit048-qtd_item.

              IF v_counter >= v_qtditem.

                EXIT.

              ENDIF.

            ENDLOOP.

            IF sy-subrc NE 0.

              EXIT.

            ENDIF.

            it_zycee005-transpnac = /pws/zycie041-transpnac.

 

            APPEND it_zycee005.

 

            PERFORM mensagens_nf.

 

            LOOP AT it_zycet004.

              MESSAGE i019 WITH it_zycet004-descricao.

            ENDLOOP.

 

            IF it_zycet004 IS INITIAL.

              CLEAR: sy-subrc.

 

 

* >> Início da inclusão: FORM FILL_DATA_J1B1

              IF v_modalidade NE '99' AND ( t001-land1 NE 'AR' AND

                   t001-land1 NE 'CL' ) OR

                 ( v_modalidade = '99' AND

                   v_libera = 'X' ).

* << Fim da inclusão

 

 

*Verificação da existência de exit.

                REFRESH itab_zyglt100.

                PERFORM verifica_exit USING 'D'

                                    '/PWS/SAPMZYCI016'

                                    'DNF003'.

* >> Início da inclusão: FORM FILL_DATA_J1B1

                e_subrc = '0'.

* << Fim da inclusão

                CLEAR itab_zyglt100 .

                READ TABLE itab_zyglt100 WITH KEY

                      zexit = 'DNF003'  BINARY SEARCH.

                IF sy-subrc EQ 0.

                  "Verifica se a Exit está ativa.

                  IF NOT itab_zyglt100-zexit_ativa IS INITIAL.

 

                    "Para verificar o tipo da NF e diferenciar seus

                    "tratamentos

                    v_tiponf = 'NF'.

                    EXPORT: v_modo_bi TO MEMORY ID 'MODOBI'  ,

                            it_zycet004[] TO MEMORY ID 'CET004',

                            it_zycet005[] TO MEMORY ID 'CET005',

                            it_zycee006[] TO MEMORY ID 'CEE006'.

                    PERFORM (itab_zyglt100-formulario) IN PROGRAM

                       (itab_zyglt100-programa) TABLES itab_zycit042_d

                                                       itab_zycit042

                                                       it_zycee005

                                                       it_zycee007

                                               USING   /pws/zycie041

                                                       v_tiponf

                                               CHANGING e_subrc

                    IF FOUND .

 

                    IMPORT :  it_zycet004[] FROM MEMORY ID 'CET004_04',

                              it_zycet005[] FROM MEMORY ID 'CET005_05',

                              it_zycee006[] FROM MEMORY ID 'CEE006_06'.

                  ENDIF.

 

                ENDIF.

 

                IF e_subrc = '0'.

 

* >> Início da exclusão: FORM FILL_DATA_J1B1

                IF  v_modalidade = '99'

                 OR ( t001-land1 EQ 'AR' OR t001-land1 EQ 'CL' ).

                  IF v_modalidade = '99' AND

                     v_libera IS INITIAL.

                    it_zycet005-tcode  = text-065.

                    it_zycet005-tabela = text-014.

                    it_zycet005-cpochv = /pws/zycie041-nfglobal.

                    it_zycet005-tpmsg  = 'S'.

                    it_zycet005-belnr  = '9999999999'.

                    APPEND it_zycet005.

                  ELSEIF t001-land1 EQ 'AR' OR t001-land1 EQ 'CL'.

                    it_zycet005-tcode  = text-065.

                    it_zycet005-tabela = text-014.

                    it_zycet005-cpochv = /pws/zycie041-nfglobal.

                    it_zycet005-tpmsg  = 'S'.

                    it_zycet005-belnr  = '8888888888'.

                    APPEND it_zycet005.

                  ENDIF.

                  CLEAR v_contitm.

                  LOOP AT itab_zycit042

                    WHERE nrseq    EQ itab_zycit042_aux-nrseq

                      AND nfglobal EQ itab_zycit042_aux-nfglobal

                      AND tpnf     EQ itab_zycit042_aux-tpnf

                      AND lifnr    EQ itab_zycit042_aux-lifnr

                     AND j_1bbranch EQ itab_zycit042_aux-j_1bbranch

                      AND ( docnum   IS initial OR

                            docnum   = '9999999999' OR

                            docnum   = '8888888888' )

                       AND mark     =  'X'

                      AND processado = 'X'.

                    ADD 1 TO v_contitm.

                    itab_zycit042-itmnum = v_contitm * 10.

                    MODIFY itab_zycit042 INDEX sy-tabix.

                    READ TABLE it_zycet005 WITH KEY  tcode  = text-065

                                                     tabela = text-014

                                       cpochv = /pws/zycie041-nfglobal

                                                          tpmsg  = 'S'.

                    IF sy-subrc EQ 0.

                      IF it_zycee005-belnr NE '0000000000'.

                        SELECT SINGLE * FROM j_1bnfdoc

                                      WHERE docnum EQ it_zycee005-belnr.

                   IF sy-subrc EQ 0 OR it_zycet005-belnr = '9999999999'

                                    OR it_zycet005-belnr = '8888888888'.

                          /pws/zycie041-docnum      = it_zycee005-belnr.

                          IF it_zycet005-belnr = '9999999999'.

                          /pws/zycie041-docnum      = it_zycet005-belnr.

                          ENDIF.

                          IF it_zycet005-belnr = '8888888888'.

                          /pws/zycie041-docnum      = it_zycet005-belnr.

                          ENDIF.

                        /pws/zycie041-nfnum       = itab_zycit042-nfnum.

                       /pws/zycie041-series      = itab_zycit042-series.

                       /pws/zycie041-subser      = itab_zycit042-subser.

                          /pws/zycie041-cancel      = ' '.

                          CLEAR: /pws/zycie041-belnr_mr1m,

                                 /pws/zycie041-mblnr_mb01,

                                 /pws/zycie041-belnr_f_51,

                                 /pws/zycie041-belnr_f_02,

                                 /pws/zycie041-statusp_mr1m,

                                 /pws/zycie041-statusp_mb01,

                                 /pws/zycie041-statusp_f_51,

                                 /pws/zycie041-statusp_f_02,

                                 /pws/zycie041-dt_mr1m,

                         /pws/zycie041-dt_mb01, /pws/zycie041-dt_f_51,

                         /pws/zycie041-dt_f_02,

                   /pws/zycie041-belnrf02seg, /pws/zycie041-dt_f02seg,

                   /pws/zycie041-belnrf02fre, /pws/zycie041-dt_f02fre.

                          itab_zycit042-docnum = it_zycee005-belnr.

                          IF it_zycet005-belnr = '9999999999'.

                            itab_zycit042-docnum = it_zycet005-belnr.

                          ENDIF.

                          IF it_zycet005-belnr = '8888888888'.

                            /pws/zycit042-docnum = it_zycet005-belnr.

                          ENDIF.

                          itab_zycit042-mark   = ' '.

                          MODIFY /pws/zycit041 FROM /pws/zycie041.

                          IF NOT /pws/zycie041-docnum = '9999999999'

                          AND NOT /pws/zycie041-docnum = '8888888888'.

                            DELETE  FROM /pws/zycit041

                               WHERE nrseq = /pws/zycie041-nrseq AND

                                nfglobal = /pws/zycie041-nfglobal AND

                                     ( docnum = '9999999999' OR

                                    docnum = '8888888888' ).

                          ENDIF.

                          MODIFY itab_zycit042

                               TRANSPORTING docnum mark

                               WHERE nrseq    = itab_zycit042-nrseq

                                AND nfglobal = itab_zycit042-nfglobal

                                 AND ebeln    = itab_zycit042-ebeln

                                 AND ebelp    = itab_zycit042-ebelp

                                 AND tpnf     = itab_zycit042-tpnf

                                 AND lifnr    EQ itab_zycit042-lifnr

                           AND j_1bbranch EQ itab_zycit042-j_1bbranch

                                AND ( docnum   IS initial OR

                                      docnum   = '9999999999' OR

                                      docnum = '8888888888' )

                                 AND mark     = 'X'

                                 AND processado = 'X'.

        READ TABLE itab_matuse_aux WITH KEY ebeln = itab_zycit042-ebeln

                                            ebelp = itab_zycit042-ebelp.

                          IF sy-subrc = 0.

                            MOVE itab_matuse_aux-matnr TO

                                 itab_zycit042-matnr.

                          ENDIF.

                          MOVE: j_1bnfdoc-nfnum  TO itab_zycit042-nfnum,

                               j_1bnfdoc-series TO itab_zycit042-series.

                          MODIFY /pws/zycit042 FROM itab_zycit042.

                     UPDATE /pws/zycit003 SET tpnf = itab_zycit042-tpnf

                                     WHERE nrseq  = itab_zycit042-nrseq

                                     AND   ebeln  = itab_zycit042-ebeln

                                     AND   ebelp  = itab_zycit042-ebelp.

                          IF v_modalidade = '99'

                      OR ( t001-land1 EQ 'AR' OR t001-land1 EQ 'CL' ).

                            UPDATE /pws/zycit043 SET docnumnfg =

                                            /pws/zycie041-docnum

                              WHERE nrseq = /pws/zycie041-nrseq AND

                                nfglobal = /pws/zycie041-nfglobal AND

                                    cancel = space.

                          ENDIF.

                          v_status_s = 0.

                          COMMIT WORK.

                        ENDIF.

                        IF v_modalidade NE '99' OR

                         ( v_modalidade = '99' AND

                           v_libera IS INITIAL ).

                          PERFORM congela_despesa.

                        ENDIF.

                      ENDIF.

             ELSE.

                     READ TABLE it_zycet005 WITH KEY  tcode  = text-065

                                                      tabela = text-014

                                        cpochv = /pws/zycie041-nfglobal

                                                           tpmsg  = 'E'.

                      IF sy-subrc EQ 0.

                        LOOP AT it_zycet004.

                          MESSAGE i019 WITH it_zycet004-descricao.

                        ENDLOOP.

                        it_erro-nrseq  = itab_zycit042-nrseq.

                        it_erro-branch = itab_zycit042-j_1bbranch.

                        it_erro-msg    = it_zycet005-msg.

                        APPEND it_erro.

                      ENDIF.

                    ENDIF.

                  ENDLOOP.

                ENDIF.

              ELSEIF v_modalidade NE '99' AND ( t001-land1 NE 'AR' AND

                 t001-land1 NE 'CL' ) OR

               ( v_modalidade = '99' AND

                 v_libera = 'X' ).

* << Fim da exclusão

 

 

 

*Verificação da existência de exit.

                  REFRESH itab_zyglt100.

                  PERFORM verifica_exit USING 'D'

                                      '/PWS/SAPMZYCI016'

                                      'DNF011'.

                  e_subrc = 0.

 

                  CLEAR itab_zyglt100 .

                  READ TABLE itab_zyglt100 WITH KEY

                        zexit = 'DNF011' BINARY SEARCH.

                  IF sy-subrc EQ 0.

                    "Verifica se a Exit está ativa.

                    IF NOT itab_zyglt100-zexit_ativa IS INITIAL.

                      "Para verificar o tipo da NF e diferenciar seus

                      "tratamentos

                      v_tiponf = 'NF'.

                      e_subrc = '0'.

                      PERFORM (itab_zyglt100-formulario) IN PROGRAM

                         (itab_zyglt100-programa) IF FOUND.

                    ENDIF.

                  ENDIF.

 

                  IF e_subrc = '0'.

 

 

 

                    CALL FUNCTION '/PWS/ZYCI_TRANSACAO_J1B1N'

                         EXPORTING

                              v_modo          = v_modo_bi

                         TABLES

                              t_dados         = it_zycee005

                              t_itens         = it_zycee007

                              t_campos        = it_zycet004

                              t_zycet005      = it_zycet005

                              t_message       = it_zycee006

                         EXCEPTIONS

                              campo_em_branco = 1

                              OTHERS          = 2.

* >> Início da inclusão: FORM FILL_DATA_J1B1

                  ENDIF.

* << Fim da inclusão

                ENDIF.

              ENDIF.

 

 

 

              " Campos da tela ok, porém resultado igual 'S' ou 'E'

* >> Início da exclusão: FORM FILL_DATA_J1B1

              IF sy-subrc = 0 OR v_modalidade = '99'

* << Fim da exclusão

* >> Início da inclusão: FORM FILL_DATA_J1B1

              IF  v_modalidade = '99'

* << Fim da inclusão

               OR ( t001-land1 EQ 'AR' OR t001-land1 EQ 'CL' ).

                IF v_modalidade = '99' AND

                   v_libera IS INITIAL.

                  it_zycet005-tcode  = text-065.

                  it_zycet005-tabela = text-014.

                  it_zycet005-cpochv = /pws/zycie041-nfglobal.

                  it_zycet005-tpmsg  = 'S'.

                  it_zycet005-belnr  = '9999999999'.

                  APPEND it_zycet005.

                ELSEIF t001-land1 EQ 'AR' OR t001-land1 EQ 'CL'.

                  it_zycet005-tcode  = text-065.

                  it_zycet005-tabela = text-014.

                  it_zycet005-cpochv = /pws/zycie041-nfglobal.

                  it_zycet005-tpmsg  = 'S'.

                  it_zycet005-belnr  = '8888888888'.

                  APPEND it_zycet005.

                ENDIF.

                CLEAR v_contitm.

                LOOP AT itab_zycit042

                  WHERE nrseq    EQ itab_zycit042_aux-nrseq

                    AND nfglobal EQ itab_zycit042_aux-nfglobal

                    AND tpnf     EQ itab_zycit042_aux-tpnf

                    AND lifnr    EQ itab_zycit042_aux-lifnr

                   AND j_1bbranch EQ itab_zycit042_aux-j_1bbranch

                    AND ( docnum   IS initial OR

                          docnum   = '9999999999' OR

                          docnum   = '8888888888' )

                     AND mark     =  'X'

                    AND processado = 'X'.

 

                  ADD 1 TO v_contitm.

                  itab_zycit042-itmnum = v_contitm * 10.

                  MODIFY itab_zycit042 INDEX sy-tabix.

 

                  "Busca log de execução

                  READ TABLE it_zycet005 WITH KEY  tcode  = text-065

                                                   tabela = text-014

                                     cpochv = /pws/zycie041-nfglobal

                                                        tpmsg  = 'S'.

                  IF sy-subrc EQ 0. "SUCESSO na J1B1

                    IF it_zycee005-belnr NE '0000000000'.

 

 

                      SELECT SINGLE * FROM j_1bnfdoc

                                    WHERE docnum EQ it_zycee005-belnr.

 

                   IF sy-subrc EQ 0 OR it_zycet005-belnr = '9999999999'

                                    OR it_zycet005-belnr = '8888888888'.

                        /pws/zycie041-docnum      = it_zycee005-belnr.

                        IF it_zycet005-belnr = '9999999999'.

                          /pws/zycie041-docnum      = it_zycet005-belnr.

                        ENDIF.

                        IF it_zycet005-belnr = '8888888888'.

                          /pws/zycie041-docnum      = it_zycet005-belnr.

                        ENDIF.

                        /pws/zycie041-nfnum       = itab_zycit042-nfnum.

                       /pws/zycie041-series      = itab_zycit042-series.

                       /pws/zycie041-subser      = itab_zycit042-subser.

                        /pws/zycie041-cancel      = ' '.

                        CLEAR: /pws/zycie041-belnr_mr1m,

                               /pws/zycie041-mblnr_mb01,

                               /pws/zycie041-belnr_f_51,

                               /pws/zycie041-belnr_f_02,

                               /pws/zycie041-statusp_mr1m,

                               /pws/zycie041-statusp_mb01,

                               /pws/zycie041-statusp_f_51,

                               /pws/zycie041-statusp_f_02,

                               /pws/zycie041-dt_mr1m,

                       /pws/zycie041-dt_mb01, /pws/zycie041-dt_f_51,

                       /pws/zycie041-dt_f_02,

                 /pws/zycie041-belnrf02seg, /pws/zycie041-dt_f02seg,

                 /pws/zycie041-belnrf02fre, /pws/zycie041-dt_f02fre.

                        itab_zycit042-docnum = it_zycee005-belnr.

                        IF it_zycet005-belnr = '9999999999'.

                          itab_zycit042-docnum = it_zycet005-belnr.

                        ENDIF.

                        IF it_zycet005-belnr = '8888888888'.

                          /pws/zycit042-docnum = it_zycet005-belnr.

                        ENDIF.

 

                        itab_zycit042-mark   = ' '.

                        MODIFY /pws/zycit041 FROM /pws/zycie041.

                        IF NOT /pws/zycie041-docnum = '9999999999'

                        AND NOT /pws/zycie041-docnum = '8888888888'.

                          DELETE  FROM /pws/zycit041

                             WHERE nrseq = /pws/zycie041-nrseq AND

                              nfglobal = /pws/zycie041-nfglobal AND

                                   ( docnum = '9999999999' OR

                                  docnum = '8888888888' ).

                        ENDIF.

                        MODIFY itab_zycit042

                             TRANSPORTING docnum mark

                             WHERE nrseq    = itab_zycit042-nrseq

                              AND nfglobal = itab_zycit042-nfglobal

                               AND ebeln    = itab_zycit042-ebeln

                               AND ebelp    = itab_zycit042-ebelp

                               AND tpnf     = itab_zycit042-tpnf

                               AND lifnr    EQ itab_zycit042-lifnr

                         AND j_1bbranch EQ itab_zycit042-j_1bbranch

                              AND ( docnum   IS initial OR

                                    docnum   = '9999999999' OR

                                    docnum = '8888888888' )

                               AND mark     = 'X'

                               AND processado = 'X'.

 

        READ TABLE itab_matuse_aux WITH KEY ebeln = itab_zycit042-ebeln

                                            ebelp = itab_zycit042-ebelp.

 

                        IF sy-subrc = 0.

                          MOVE itab_matuse_aux-matnr TO

                               itab_zycit042-matnr.

                        ENDIF.

 

                        MOVE: j_1bnfdoc-nfnum  TO itab_zycit042-nfnum,

                             j_1bnfdoc-series TO itab_zycit042-series.

                        MODIFY /pws/zycit042 FROM itab_zycit042.

                     UPDATE /pws/zycit003 SET tpnf = itab_zycit042-tpnf

                                     WHERE nrseq  = itab_zycit042-nrseq

                                     AND   ebeln  = itab_zycit042-ebeln

                                     AND   ebelp  = itab_zycit042-ebelp.

                        IF v_modalidade = '99'

                    OR ( t001-land1 EQ 'AR' OR t001-land1 EQ 'CL' ).

                          UPDATE /pws/zycit043 SET docnumnfg =

                                          /pws/zycie041-docnum

                            WHERE nrseq = /pws/zycie041-nrseq AND

                              nfglobal = /pws/zycie041-nfglobal AND

                                  cancel = space.

                        ENDIF.

                        v_status_s = 0.

                        COMMIT WORK.

                      ENDIF.

                      IF v_modalidade NE '99' OR

                       ( v_modalidade = '99' AND

                         v_libera IS INITIAL ).

                        PERFORM congela_despesa.

                      ENDIF.

                    ENDIF.

                  ELSE.                          "ERRO na J1B1

                    READ TABLE it_zycet005 WITH KEY  tcode  = text-065

                                                     tabela = text-014

                                       cpochv = /pws/zycie041-nfglobal

                                                          tpmsg  = 'E'.

                    IF sy-subrc EQ 0.

                      LOOP AT it_zycet004.

                        MESSAGE i019 WITH it_zycet004-descricao.

                      ENDLOOP.

                      it_erro-nrseq  = itab_zycit042-nrseq.

                      it_erro-branch = itab_zycit042-j_1bbranch.

                      it_erro-msg    = it_zycet005-msg.

                      APPEND it_erro.

                    ENDIF.

                  ENDIF.

                ENDLOOP.

              ENDIF.

 

*      Forçar mudança de tipo para processar itens restantes do tipo

*      de NFG atual.

              v_qtditem = wa_zycit048-qtd_item.

              IF v_counter >= v_qtditem.

                v_tpnf = 0.

              ENDIF.

            ENDIF.

          ELSE.

            CALL SCREEN '0050'.

 

          ENDIF.

        ENDIF.

      ENDLOOP.

      IF sy-subrc NE 0.

        MESSAGE e015 WITH text-043.

      ENDIF.

    ELSE.           "Não QUEBRA POR TIPO DE NOTA

      LOOP AT itab_zycit042_aux WHERE ( docnum IS initial OR

                              docnum = '9999999999' OR

                              docnum = '8888888888' ) AND

                              NOT ebeln  IS initial AND

                              processado IS initial AND

                                  mark   EQ 'X'.

 

        IF v_lifnr NE itab_zycit042_aux-lifnr OR

           v_j_1bbranch NE itab_zycit042-j_1bbranch.

          v_j_1bbranch = itab_zycit042_aux-j_1bbranch.

          v_lifnr = itab_zycit042_aux-lifnr.

          CLEAR v_counter.

          PERFORM clear_date_batch.

          PERFORM cabecalho_nf.

          IF ( v_resp EQ 'S' ) OR

             ( v_libera = 'X' AND v_modalidade = '99' ).

 

            SELECT SINGLE * FROM /pws/zycit093

              WHERE nrseqce = /pws/zycit085-nrbl.

 

            SELECT SINGLE tpembal quant descr

                INTO (local_embal,it_zycee005-quant,

                 it_zycee005-shpmrk)

                   FROM /pws/zycit014

                   WHERE nrseq = /pws/zycit085-nrbl.

            IF sy-subrc EQ 0.

              SELECT SINGLE traty FROM /pws/zycit015 INTO

                  it_zycee005-traty

                  WHERE tpembal = local_embal.

 

            ENDIF.

 

*    READ TABLE ITAB_ZYCIT042 INDEX 1.

            IF /pws/zycie041-nfexterna EQ 'X'.

              it_zycee005-nftype   = wa_zycit048-catnfext.

              it_zycee005-nfnum    = itab_zycit042_aux-nfnum.

              it_zycee005-series   = itab_zycit042_aux-series.

              it_zycee005-subser   = itab_zycit042_aux-subser.

            ELSE.

              "Se for Sucata, manda tiponf de sucata

              IF v_urf2 = 1.

                it_zycee005-nftype   = wa_zyglt369-catnfint.

              ELSE.

                it_zycee005-nftype   = wa_zycit048-catnfint.

              ENDIF.

            ENDIF.

 

            LOOP AT itab_zycit042 WHERE nrseq

               EQ itab_zycit042_aux-nrseq

                     AND nfglobal EQ itab_zycit042_aux-nfglobal

                  AND j_1bbranch = itab_zycit042_aux-j_1bbranch

                            AND lifnr = itab_zycit042_aux-lifnr

                                   AND ( docnum   IS initial OR

                                     docnum   = '9999999999' OR

                                        docnum = '8888888888' )

                                            AND mark     =  'X'

                          AND processado IS initial.

 

              itab_zycit042-processado = 'X'.

              MODIFY itab_zycit042 TRANSPORTING processado.

 

              itab_zycit042_aux-processado = 'X'.

              MODIFY itab_zycit042_aux TRANSPORTING processado WHERE

                                    nrseq    EQ itab_zycit042-nrseq

                              AND j_1bbranch = itab_zycit042-j_1bbranch

                                   AND lifnr = itab_zycit042-lifnr

                                AND nfglobal EQ itab_zycit042-nfglobal

                                AND ebeln    EQ itab_zycit042-ebeln

                                AND ebelp    EQ itab_zycit042-ebelp.

 

             READ TABLE itab_t001w WITH KEY werks = itab_zycit042-werks.

 

              READ TABLE itab_zycit042_d WITH KEY

                  nrseq = itab_zycit042-nrseq

                  ebeln = itab_zycit042-ebeln

                  ebelp = itab_zycit042-ebelp.

              CLEAR v_subrc.

              MOVE: itab_zycit042 TO wa_zycit042_exit,

                    itab_zycit042_d TO wa_zycit042_exit_d.

              CALL CUSTOMER-FUNCTION '001'

                EXPORTING

                 wa_zycit042 = wa_zycit042_exit

                 wa_zycit042_d = wa_zycit042_exit_d

                 wa_zycit041 = /pws/zycie041

                 v_parametro = '01'

                IMPORTING

                  v_subrc = v_subrc

                TABLES

                  it_zycee007 = it_zycee007

                  itab_zycit036 = itab_zycit036

                  itab_zycit036_di = itab_zycit036_di.

              IF v_subrc NE 'X'.

 

            READ TABLE itab_zycit033 WITH KEY tpnf = itab_zycit042-tpnf

                                               regio = itab_t001w-regio.

                IF sy-subrc EQ 0.

                  PERFORM itens_nf.

                ELSE.

            READ TABLE itab_zycit033 WITH KEY tpnf = itab_zycit042-tpnf

                                                          regio = space.

 

                  PERFORM itens_nf.

                ENDIF.

              ENDIF.

              CLEAR itab_zycit033.

              PERFORM peso_global_n.

*     Verificar a qtde de itens/NFG parametrizados na 48

              v_counter = v_counter + 1.

              v_qtditem =  wa_zycit048-qtd_item.

              IF v_counter >= v_qtditem.

                EXIT.

              ENDIF.

            ENDLOOP.

            it_zycee005-transpnac = /pws/zycie041-transpnac.

 

            APPEND it_zycee005.

 

            PERFORM mensagens_nf.

 

            LOOP AT it_zycet004.

              MESSAGE i019 WITH it_zycet004-descricao.

            ENDLOOP.

 

            IF it_zycet004 IS INITIAL.

* >> Início da inclusão: FORM FILL_DATA_J1B1

              IF ( v_modalidade NE '99' AND t001-land1 NE 'AR'

              AND t001-land1 NE 'CL' ) OR

                 ( v_modalidade = '99' AND

                   v_libera = 'X' ).

* << Fim da inclusão

 

*Verificação da existência de exit.

                REFRESH itab_zyglt100.

                PERFORM verifica_exit USING 'D'

                                    '/PWS/SAPMZYCI016'

                                    'DNF003'.

* >> Início da inclusão: FORM FILL_DATA_J1B1

                e_subrc = '0'.

* << Fim da inclusão

                CLEAR itab_zyglt100 .

                READ TABLE itab_zyglt100 WITH KEY

                      zexit = 'DNF003'  BINARY SEARCH.

                IF sy-subrc EQ 0.

                  "Verifica se a Exit está ativa.

                  IF NOT itab_zyglt100-zexit_ativa IS INITIAL.

                    "Para verificar o tipo da NF e diferenciar seus

                    "tratamentos

                    v_tiponf = 'NF'.

                    EXPORT: v_modo_bi TO MEMORY ID 'MODOBI'  ,

                            it_zycet004[] TO MEMORY ID 'CET004',

                            it_zycet005[] TO MEMORY ID 'CET005',

                            it_zycee006[] TO MEMORY ID 'CEE006'.

                    PERFORM (itab_zyglt100-formulario) IN PROGRAM

                       (itab_zyglt100-programa) TABLES itab_zycit042_d

                                                       itab_zycit042

                                                       it_zycee005

                                                       it_zycee007

                                                USING  /pws/zycie041

                                                       v_tiponf

                                                CHANGING e_subrc

                    IF FOUND.

 

                    IMPORT :  it_zycet004[] FROM MEMORY ID 'CET004_04',

                              it_zycet005[] FROM MEMORY ID 'CET005_05',

                              it_zycee006[] FROM MEMORY ID 'CEE006_06'.

 

                  ENDIF.

 

                ENDIF.

 

                IF e_subrc = '0'.

 

* >> Início da exclusão: FORM FILL_DATA_J1B1

                IF sy-subrc = 0 OR v_modalidade = '99' OR

                   ( t001-land1 EQ 'AR' OR t001-land1 EQ 'CL' ).

                  IF v_modalidade = '99' AND

                    v_libera IS INITIAL.

                    it_zycet005-tcode  = text-065.

                    it_zycet005-tabela = text-014.

                    it_zycet005-cpochv = /pws/zycie041-nfglobal.

                    it_zycet005-tpmsg  = 'S'.

                    it_zycet005-belnr  = '9999999999'.

                    APPEND it_zycet005.

                  ELSEIF t001-land1 EQ 'AR' OR  t001-land1 EQ 'CL'.

                    it_zycet005-tcode  = text-065.

                    it_zycet005-tabela = text-014.

                    it_zycet005-cpochv = /pws/zycie041-nfglobal.

                    it_zycet005-tpmsg  = 'S'.

                    it_zycet005-belnr  = '8888888888'.

                    APPEND it_zycet005.

                  ENDIF.

                  CLEAR v_contitm.

                  LOOP AT itab_zycit042

                          WHERE nrseq    EQ itab_zycit042_aux-nrseq

                           AND nfglobal EQ itab_zycit042_aux-nfglobal

                        AND j_1bbranch = itab_zycit042_aux-j_1bbranch

                            AND lifnr = itab_zycit042_aux-lifnr

                            AND ( docnum   IS initial OR

                              docnum   = '9999999999' OR

                                docnum = '8888888888' )

                            AND mark     = 'X'

                            AND processado = 'X'.

                    ADD 1 TO v_contitm.

                    itab_zycit042-itmnum = v_contitm * 10.

                    MODIFY itab_zycit042 INDEX sy-tabix.

                    READ TABLE it_zycet005 WITH KEY  tcode  = text-065

                                                     tabela = text-014

                                       cpochv = /pws/zycie041-nfglobal

                                                       tpmsg  = 'S'.

                    IF sy-subrc EQ 0.

                      IF it_zycee005-belnr NE '0000000000'.

                        SELECT SINGLE * FROM j_1bnfdoc

                                      WHERE docnum EQ it_zycee005-belnr.

                   IF sy-subrc EQ 0 OR it_zycet005-belnr = '9999999999'

                                    OR it_zycet005-belnr = '8888888888'.

                          /pws/zycie041-docnum      = it_zycee005-belnr.

                          IF it_zycet005-belnr = '9999999999'.

                          /pws/zycie041-docnum      = it_zycet005-belnr.

                          ENDIF.

                          IF it_zycet005-belnr = '8888888888'.

                          /pws/zycie041-docnum      = it_zycet005-belnr.

                          ENDIF.

                        /pws/zycie041-nfnum       = itab_zycit042-nfnum.

                       /pws/zycie041-series      = itab_zycit042-series.

                       /pws/zycie041-subser      = itab_zycit042-subser.

                          /pws/zycie041-cancel      = ' '.

                          CLEAR: /pws/zycie041-belnr_mr1m,

                                 /pws/zycie041-mblnr_mb01,

                                 /pws/zycie041-belnr_f_51,

                                 /pws/zycie041-belnr_f_02,

                                 /pws/zycie041-statusp_mr1m,

                                 /pws/zycie041-statusp_mb01,

                                 /pws/zycie041-statusp_f_51,

                                 /pws/zycie041-statusp_f_02,

                                 /pws/zycie041-dt_mr1m,

                                 /pws/zycie041-dt_mb01,

                                 /pws/zycie041-dt_f_51,

                                 /pws/zycie041-dt_f_02,

                                 /pws/zycie041-belnrf02seg,

                                 /pws/zycie041-dt_f02seg,

                                 /pws/zycie041-belnrf02fre,

                                 /pws/zycie041-dt_f02fre.

                          itab_zycit042-docnum = it_zycee005-belnr.

                          IF it_zycet005-belnr = '9999999999'.

                            itab_zycit042-docnum = it_zycet005-belnr.

                          ENDIF.

                          IF it_zycet005-belnr = '8888888888'.

                            itab_zycit042-docnum = it_zycet005-belnr.

                          ENDIF.

                          itab_zycit042-mark   = ' '.

                          MODIFY /pws/zycit041 FROM /pws/zycie041.

                          IF NOT /pws/zycie041-docnum = '9999999999'

                          AND NOT /pws/zycie041-docnum = '8888888888'.

                            DELETE  FROM /pws/zycit041

                               WHERE nrseq = /pws/zycie041-nrseq AND

                                nfglobal = /pws/zycie041-nfglobal AND

                                     ( docnum = '9999999999' OR

                                     docnum = '8888888888' ).

                          ENDIF.

                          MODIFY itab_zycit042 TRANSPORTING docnum mark

                              WHERE nrseq    = itab_zycit042-nrseq

                                AND nfglobal = itab_zycit042-nfglobal

                              AND j_1bbranch = itab_zycit042-j_1bbranch

                                AND lifnr = itab_zycit042-lifnr

                                AND ebeln    = itab_zycit042-ebeln

                                AND ebelp    = itab_zycit042-ebelp

                                AND ( docnum   IS initial OR

                                      docnum   = '9999999999'  OR

                                      docnum = '8888888888' )

                                AND mark     = 'X'

                                AND processado = 'X'.

        READ TABLE itab_matuse_aux WITH KEY ebeln = itab_zycit042-ebeln

                                            ebelp = itab_zycit042-ebelp.

                          IF sy-subrc = 0.

                            MOVE itab_matuse_aux-matnr TO

                                 itab_zycit042-matnr.

                          ENDIF.

                          MOVE: j_1bnfdoc-nfnum  TO itab_zycit042-nfnum,

                               j_1bnfdoc-series TO itab_zycit042-series.

                          MODIFY /pws/zycit042 FROM itab_zycit042.

                     UPDATE /pws/zycit003 SET tpnf = itab_zycit042-tpnf

                                     WHERE nrseq  = itab_zycit042-nrseq

                                     AND   ebeln  = itab_zycit042-ebeln

                                     AND   ebelp  = itab_zycit042-ebelp.

                          IF v_modalidade = '99'

                      OR ( t001-land1 EQ 'AR' OR t001-land1 EQ 'CL' ).

                            UPDATE /pws/zycit043 SET docnumnfg =

                                   /pws/zycie041-docnum

                              WHERE nrseq = /pws/zycie041-nrseq AND

                                nfglobal = /pws/zycie041-nfglobal AND

                                    cancel = space.

                          ENDIF.

                          v_status_s = 0.

                          COMMIT WORK.

                        ENDIF.

                        IF v_modalidade NE '99' OR

                     ( t001-land1 NE 'AR' AND t001-land1 NE 'CL' AND

                          v_modalidade NE '99' ) OR

                         ( v_modalidade = '99' AND

                           v_libera IS INITIAL ).

                          PERFORM congela_despesa.

                        ENDIF.

                      ENDIF.

                    ELSE.

                     READ TABLE it_zycet005 WITH KEY  tcode  = text-065

                                                      tabela = text-014

                                        cpochv = /pws/zycie041-nfglobal

                                                           tpmsg  = 'E'.

                      IF sy-subrc EQ 0.

                        it_erro-nrseq  = itab_zycit042-nrseq.

                        it_erro-branch = itab_zycit042-j_1bbranch.

                        it_erro-msg    = it_zycet005-msg.

                        APPEND it_erro.

                      ENDIF.

                    ENDIF.

                  ENDLOOP.

                ENDIF.

              ELSEIF ( v_modalidade NE '99' AND t001-land1 NE 'AR'

            AND t001-land1 NE 'CL' ) OR

               ( v_modalidade = '99' AND

                 v_libera = 'X' )..

* << Fim da exclusão

 

*Verificação da existência de exit.

                  REFRESH itab_zyglt100.

                  PERFORM verifica_exit USING 'D'

                                      '/PWS/SAPMZYCI016'

                                      'DNF011'.

                  e_subrc = 0.

 

                  CLEAR itab_zyglt100 .

                  READ TABLE itab_zyglt100 WITH KEY

                        zexit = 'DNF011' BINARY SEARCH.

                  IF sy-subrc EQ 0.

                    "Verifica se a Exit está ativa.

                    IF NOT itab_zyglt100-zexit_ativa IS INITIAL.

                      "Para verificar o tipo da NF e diferenciar seus

                      "tratamentos

                      v_tiponf = 'NF'.

                      e_subrc = '0'.

                      PERFORM (itab_zyglt100-formulario) IN PROGRAM

                         (itab_zyglt100-programa) IF FOUND.

                    ENDIF.

                  ENDIF.

 

                  IF e_subrc = '0'.

 

 

                    CALL FUNCTION '/PWS/ZYCI_TRANSACAO_J1B1N'

                         EXPORTING

                              v_modo          = v_modo_bi

                         TABLES

                              t_dados         = it_zycee005

                              t_itens         = it_zycee007

                              t_campos        = it_zycet004

                              t_zycet005      = it_zycet005

                              t_message       = it_zycee006

                         EXCEPTIONS

                              campo_em_branco = 1

                              OTHERS          = 2.

                  ENDIF.

                ENDIF.

* >> Início da inclusão: FORM FILL_DATA_J1B1

              ENDIF.

* << Fim da inclusão

 

              " Campos da tela ok, porém resultado igual 'S' ou 'E'

              IF sy-subrc = 0 OR v_modalidade = '99' OR

                 ( t001-land1 EQ 'AR' OR t001-land1 EQ 'CL' ).

                IF v_modalidade = '99' AND

                  v_libera IS INITIAL.

                  it_zycet005-tcode  = text-065.

                  it_zycet005-tabela = text-014.

                  it_zycet005-cpochv = /pws/zycie041-nfglobal.

                  it_zycet005-tpmsg  = 'S'.

                  it_zycet005-belnr  = '9999999999'.

                  APPEND it_zycet005.

                ELSEIF t001-land1 EQ 'AR' OR  t001-land1 EQ 'CL'.

                  it_zycet005-tcode  = text-065.

                  it_zycet005-tabela = text-014.

                  it_zycet005-cpochv = /pws/zycie041-nfglobal.

                  it_zycet005-tpmsg  = 'S'.

                  it_zycet005-belnr  = '8888888888'.

                  APPEND it_zycet005.

                ENDIF.

                CLEAR v_contitm.

                LOOP AT itab_zycit042

                        WHERE nrseq    EQ itab_zycit042_aux-nrseq

                         AND nfglobal EQ itab_zycit042_aux-nfglobal

                      AND j_1bbranch = itab_zycit042_aux-j_1bbranch

                          AND lifnr = itab_zycit042_aux-lifnr

                          AND ( docnum   IS initial OR

                            docnum   = '9999999999' OR

                              docnum = '8888888888' )

                          AND mark     = 'X'

                          AND processado = 'X'.

 

                  ADD 1 TO v_contitm.

                  itab_zycit042-itmnum = v_contitm * 10.

                  MODIFY itab_zycit042 INDEX sy-tabix.

 

                  "Busca log de execução

                  READ TABLE it_zycet005 WITH KEY  tcode  = text-065

                                                   tabela = text-014

                                     cpochv = /pws/zycie041-nfglobal

                                                     tpmsg  = 'S'.

                  IF sy-subrc EQ 0.                "SUCESSO na J1B1

                    IF it_zycee005-belnr NE '0000000000'.

 

                      SELECT SINGLE * FROM j_1bnfdoc

                                    WHERE docnum EQ it_zycee005-belnr.

                   IF sy-subrc EQ 0 OR it_zycet005-belnr = '9999999999'

                                    OR it_zycet005-belnr = '8888888888'.

                        /pws/zycie041-docnum      = it_zycee005-belnr.

                        IF it_zycet005-belnr = '9999999999'.

                          /pws/zycie041-docnum      = it_zycet005-belnr.

                        ENDIF.

                        IF it_zycet005-belnr = '8888888888'.

                          /pws/zycie041-docnum      = it_zycet005-belnr.

                        ENDIF.

                        /pws/zycie041-nfnum       = itab_zycit042-nfnum.

                       /pws/zycie041-series      = itab_zycit042-series.

                       /pws/zycie041-subser      = itab_zycit042-subser.

                        /pws/zycie041-cancel      = ' '.

                        CLEAR: /pws/zycie041-belnr_mr1m,

                               /pws/zycie041-mblnr_mb01,

                               /pws/zycie041-belnr_f_51,

                               /pws/zycie041-belnr_f_02,

                               /pws/zycie041-statusp_mr1m,

                               /pws/zycie041-statusp_mb01,

                               /pws/zycie041-statusp_f_51,

                               /pws/zycie041-statusp_f_02,

                               /pws/zycie041-dt_mr1m,

                               /pws/zycie041-dt_mb01,

                               /pws/zycie041-dt_f_51,

                               /pws/zycie041-dt_f_02,

                               /pws/zycie041-belnrf02seg,

                               /pws/zycie041-dt_f02seg,

                               /pws/zycie041-belnrf02fre,

                               /pws/zycie041-dt_f02fre.

                        itab_zycit042-docnum = it_zycee005-belnr.

                        IF it_zycet005-belnr = '9999999999'.

                          itab_zycit042-docnum = it_zycet005-belnr.

                        ENDIF.

                        IF it_zycet005-belnr = '8888888888'.

                          itab_zycit042-docnum = it_zycet005-belnr.

                        ENDIF.

                        itab_zycit042-mark   = ' '.

                        MODIFY /pws/zycit041 FROM /pws/zycie041.

                        IF NOT /pws/zycie041-docnum = '9999999999'

                        AND NOT /pws/zycie041-docnum = '8888888888'.

                          DELETE  FROM /pws/zycit041

                             WHERE nrseq = /pws/zycie041-nrseq AND

                              nfglobal = /pws/zycie041-nfglobal AND

                                   ( docnum = '9999999999' OR

                                   docnum = '8888888888' ).

                        ENDIF.

                        MODIFY itab_zycit042 TRANSPORTING docnum mark

                            WHERE nrseq    = itab_zycit042-nrseq

                              AND nfglobal = itab_zycit042-nfglobal

                            AND j_1bbranch = itab_zycit042-j_1bbranch

                              AND lifnr = itab_zycit042-lifnr

                              AND ebeln    = itab_zycit042-ebeln

                              AND ebelp    = itab_zycit042-ebelp

                              AND ( docnum   IS initial OR

                                    docnum   = '9999999999'  OR

                                    docnum = '8888888888' )

                              AND mark     = 'X'

                              AND processado = 'X'.

        READ TABLE itab_matuse_aux WITH KEY ebeln = itab_zycit042-ebeln

                                            ebelp = itab_zycit042-ebelp.

 

                        IF sy-subrc = 0.

                          MOVE itab_matuse_aux-matnr TO

                               itab_zycit042-matnr.

                        ENDIF.

 

                        MOVE: j_1bnfdoc-nfnum  TO itab_zycit042-nfnum,

                             j_1bnfdoc-series TO itab_zycit042-series.

 

                        MODIFY /pws/zycit042 FROM itab_zycit042.

 

                        " Atualiza Embarque com tipo de nf

                     UPDATE /pws/zycit003 SET tpnf = itab_zycit042-tpnf

                                     WHERE nrseq  = itab_zycit042-nrseq

                                     AND   ebeln  = itab_zycit042-ebeln

                                     AND   ebelp  = itab_zycit042-ebelp.

                        IF v_modalidade = '99'

* >> Início da exclusão: FORM FILL_DATA_J1B1

                      OR ( t001-land1 EQ 'AR' OR t001-land1 EQ 'CL'  ).

* << Fim da exclusão

* >> Início da inclusão: FORM FILL_DATA_J1B1

                    OR ( t001-land1 EQ 'AR' OR t001-land1 EQ 'CL' ).

* << Fim da inclusão

                          UPDATE /pws/zycit043 SET docnumnfg =

                                 /pws/zycie041-docnum

                            WHERE nrseq = /pws/zycie041-nrseq AND

                                nfglobal = /pws/zycie041-nfglobal AND

                                  cancel = space.

                        ENDIF.

                        v_status_s = 0.

* >> Início da inclusão: FORM FILL_DATA_J1B1

                        COMMIT WORK.

* << Fim da inclusão

                      ENDIF.

                      IF v_modalidade NE '99' OR

                     ( t001-land1 NE 'AR' AND t001-land1 NE 'CL' AND

                        v_modalidade NE '99' ) OR

                       ( v_modalidade = '99' AND

                         v_libera IS INITIAL ).

                        PERFORM congela_despesa.

                      ENDIF.

                    ENDIF.

                  ELSE.                            "ERRO na J1B1

                    READ TABLE it_zycet005 WITH KEY  tcode  = text-065

                                                     tabela = text-014

                                       cpochv = /pws/zycie041-nfglobal

                                                          tpmsg  = 'E'.

                    IF sy-subrc EQ 0.

                      it_erro-nrseq  = itab_zycit042-nrseq.

                      it_erro-branch = itab_zycit042-j_1bbranch.

                      it_erro-msg    = it_zycet005-msg.

                      APPEND it_erro.

                    ENDIF.

                  ENDIF.

                ENDLOOP.

              ENDIF.

            ENDIF.

          ELSE.

            CALL SCREEN '0050'.

          ENDIF.

        ENDIF.

      ENDLOOP.

    ENDIF.

  ENDLOOP.

  MODIFY /pws/zycit053 FROM TABLE itab_zycit053_s.

  COMMIT WORK.

 

 IF v_modalidade = '99' OR ( t001-land1 EQ 'AR' OR t001-land1 EQ 'CL' ).

    LOOP AT itab_zycit042 WHERE docnum IS initial OR

                                docnum = '9999999999' OR

                                docnum = '8888888888'.

    ENDLOOP.

    IF sy-subrc NE 0.

      PERFORM contabiliza_impostos.

    ENDIF.

  ENDIF.

  CLEAR v_modo_bi.

 

*Verificação da existência de exit.

  REFRESH itab_zyglt100.

  PERFORM verifica_exit USING 'D'

                       '/PWS/SAPMZYCI016'

                       'DNF009'.

  CLEAR itab_zyglt100 .

  READ TABLE itab_zyglt100 WITH KEY zexit = 'DNF009'  BINARY SEARCH.

 

  IF sy-subrc EQ 0.

    "Verifica se a Exit está ativa.

    IF NOT itab_zyglt100-zexit_ativa IS INITIAL.

      PERFORM (itab_zyglt100-formulario) IN PROGRAM

              (itab_zyglt100-programa) IF FOUND .

    ENDIF.

  ENDIF.

*Verificação da existência de exit.

  REFRESH itab_zyglt100.

  PERFORM verifica_exit USING 'D'

                      '/PWS/SAPMZYCI016'

                      'DNF008'.

  CLEAR: itab_zyglt100 .

  READ TABLE itab_zyglt100 WITH KEY zexit = 'DNF008' BINARY SEARCH.

 

  IF sy-subrc EQ 0.

    "Verifica se a Exit está ativa.

    IF NOT itab_zyglt100-zexit_ativa IS INITIAL.

      PERFORM (itab_zyglt100-formulario) IN PROGRAM

          (itab_zyglt100-programa) IF FOUND.

    ENDIF.

  ENDIF.

 

ENDFORM.                    " FILL_DATA_J1B1