CE PLUS - Nota 000192

Módulo: DOC. EXPORTAÇÃO

Funcionalidade: Prestação de Contas

Data/Hora da Publicação: 25/10/2005 00:00:00

Data/Hora Última Alteração: 21/02/2011 13:42:33

Descrição da Nota: RETENÇÃO DE IMPOSTOS PARA TODOS OS TIPOS DE DESPESAS NA PRESTAÇÃO

Sintoma

Na prestação de contas o programa esta retendo impostos para qualquer tipo de despesa,

independentemente do cadastro da tabela /PWS/ZYCET021.

 

 

Solução

Efetuar o tratamento anexo nessa nota.

 

Versões Tratadas

6.0


Pré-Requisitos

Produto:

Nota

Descrição

SUBSTITUIÇÃO DE EXITS VIA CALL-CUSTOMER POR EXITS PADRÕES PROCWORK

CENTRO DE CUSTO NA CONTABILIZAÇÃO DA LIBERAÇÃO DA PRESTAÇÃO DE CONTAS

Informações Complementares

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

Nota Número 00192 Data: 25/10/2005 Hora: 15:49:57

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

 

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

Nota Número              : 00192

Categoria                : Erro de Programa

Prioridade               : Alta

Versão PW.CE             : 6.0

Pacote                   : 00021

Agrupamento              : 00085

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

Referência às notas relacionadas:

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

 

00111  - 00002 - 6.0    - 00021  - CENTRO DE CUSTO NA CONTABILIZAÇÃO DA LIBERAÇÃO DA PRESTAÇÃO DE CO

00148  - 00001 - 6.0    - 00021  - SUBSTITUIÇÃO DE EXITS VIA CALL-CUSTOMER POR EXITS PADRÕES PROCWOR

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

RETENÇÃO DE IMPOSTOS PARA TODOS OS TIPOS DE DESPESAS NA PRESTAÇÃO

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

Palavras Chave:

EXPORTAÇÃO PRESTAÇÃO DE CONTAS IMPOSTO RETENÇÃO DESPESA

 

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

Objetos da nota:

FUNC /PWS/ZYCE_TRANSACAO_F_43B

FUNC /PWS/ZYGL_IMPOSTO

REPS /PWS/MZYCE013F01

 

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

Modificações efetuadas em FUNC /PWS/ZYCE_TRANSACAO_F_43B

 

...

  DATA:

    v_string_debito        LIKE tbsl-faus1,

    v_string_debito2       LIKE tbsl-faus2,

    v_data_doc_char(10)    TYPE c,

    v_data_conv_char(10)   TYPE c,

    v_data_conver_char(10) TYPE c,

    v_data_val_char(10)    TYPE c,

    v_data_lanc_char(10)   TYPE c,

    v_data_venc_char(10)   TYPE c,

    v_zfbdt(10)            TYPE c,

    v_base_char(16)        TYPE c,

    v_kursf(9)             TYPE c,

    v_wrbtr(16)            TYPE c,

    v_wrbtr1(16)           TYPE c,

    v_wrbtr_irrf(20)       TYPE c,

    v_wrbtr_inss(20)       TYPE c,

    v_flag_in,

    v_flag_ir,

* >> Início da Inclusão <<

    v_flag_cf,

    v_flag_ps,

    v_flag_cs,

* >> Fim da Inclusão <<

    v_chave_debito         LIKE tbsl-bschl VALUE '40',

    v_nrmsg                TYPE i VALUE 0,

    v_transacao(4)         TYPE c,

    v_mode                 TYPE c,

    v_update               TYPE c,

    v_msgid                LIKE t100-arbgb,

    v_msgno                LIKE t100-msgnr,

    v_koart                LIKE t001b-mkoar,

    v_ok(1)                VALUE 'N',

    v_monat                LIKE t001b-frpe1,

    v_bukrs                LIKE t001-bukrs,

    v_gjahr                LIKE t001b-frye1,

    v_skfbt                LIKE bseg-skfbt VALUE 0,

    v_pep                  LIKE prps-posid,

    v_dconta               LIKE /pws/zycbe033-d_newko,

    v_conta                LIKE lfb1-akont,

    v_index_aux            LIKE sy-tabix,

    v_index_aux2           LIKE sy-tabix,

    v_ind_ir,

    v_ind_in,

    v_wrbtr_irrf_aux       LIKE v_wrbtr_irrf,

    v_campo(25),

    v_wrbtr_cf(20)         TYPE c,

    v_wrbtr_cs(20)         TYPE c,

    v_wrbtr_ps(20)         TYPE c,

    v_wrbtr_is(20)         TYPE c,

    v_ind_cf(2)            TYPE n,

    v_ind_cs(2)            TYPE n,

    v_ind_ps(2)            TYPE n,

* >> Início da Inclusão <<

    v_wrbtr_in(20)         TYPE c,

* >> Fim da Inclusão <<

    v_ind_is(2)            TYPE n.

...

 

      IF v_wrbtr1 IS INITIAL.

        PERFORM bdc_field  USING:

                'RF05A-NEWBS'  t_debito-chave,             "Chv.lançto

                'RF05A-NEWKO'  t_debito-d_newko.           "Cta débito

        IF v_irrf EQ 'S'.

          PERFORM bdc_field  USING 'BDC_OKCODE'   'QS'.

* >> Início da Exclusão <<

          IF NOT t_dados-wrbtrinss IS INITIAL. Chamado 259676

* >> Fim da Exclusão <<

          WRITE: t_dados-wrbtrinss TO v_wrbtr_inss

                CURRENCY t_dados-waers.

 

          PERFORM bdc_screen USING 'SAPLFWTD' '0100'.

 

          SELECT *

           FROM /pws/zycit212

           INTO TABLE t_zycit212.

...

            READ TABLE t_zycit212 WITH KEY impdesc  = 'IRRF'.

            IF sy-subrc = 0.

              READ TABLE t_lfbw WITH KEY witht = t_zycit212-catsap.

              IF sy-subrc = 0.

                v_ind_ir = sy-tabix.

 

                WRITE: t_dados-wrbtrirrf TO v_wrbtr_irrf

                       CURRENCY t_dados-waers.

                CONCATENATE 'WITH_DIALG-WT_BASE(' v_ind_ir ')'

                INTO v_campo.

                PERFORM bdc_field  USING v_campo v_wrbtr_irrf.

 

               READ TABLE itab_t059p WITH KEY witht = t_zycit212-catsap.

* >> Início da Exclusão <<

                IF sy-subrc = 0 AND itab_t059p-wt_postm = '2'.

* >> Fim da Exclusão <<

* >> Início da Inclusão <<

                IF sy-subrc           = 0 AND

                   itab_t059p-wt_postm = '2' or

                   t_dados-wrbtrirrf   is initial.

* >> Fim da Inclusão <<

                  CONCATENATE 'WITH_ITEM-WT_WITHCD(' v_ind_ir ')'

                  INTO v_campo.

                  PERFORM bdc_field  USING v_campo ' '.

                ENDIF.

              ENDIF.

            ENDIF.

 

          READ TABLE t_zycit212 WITH KEY impdesc  = 'COFI'.

          IF sy-subrc = 0.

            READ TABLE t_lfbw WITH KEY witht = t_zycit212-catsap.

            IF sy-subrc = 0.

              v_ind_cf = sy-tabix.

 

              WRITE: t_dados-wrbtrcf TO v_wrbtr_cf

                     CURRENCY t_dados-waers.

              CONCATENATE 'WITH_DIALG-WT_BASE(' v_ind_cf ')'

              INTO v_campo.

              PERFORM bdc_field  USING v_campo v_wrbtr_cf.

 

              READ TABLE itab_t059p WITH KEY witht = t_zycit212-catsap.

* >> Início da Exclusão <<

              IF sy-subrc = 0 AND itab_t059p-wt_postm = '2'.

* >> Fim da Exclusão <<

* >> Início da Inclusão <<

              IF sy-subrc           = 0 AND

                 itab_t059p-wt_postm = '2' or

                 t_dados-wrbtrcf   is initial.

* >> Fim da Inclusão <<

                CONCATENATE 'WITH_ITEM-WT_WITHCD(' v_ind_cf ')'

                INTO v_campo.

                PERFORM bdc_field  USING v_campo ' '.

 

              ENDIF.

            ENDIF.

          ENDIF.

 

          READ TABLE t_zycit212 WITH KEY impdesc  = 'PIS'.

          IF sy-subrc = 0.

            READ TABLE t_lfbw WITH KEY witht = t_zycit212-catsap.

            IF sy-subrc = 0.

              v_ind_ps = sy-tabix.

 

              WRITE: t_dados-wrbtrps TO v_wrbtr_ps

                     CURRENCY t_dados-waers.

              CONCATENATE 'WITH_DIALG-WT_BASE(' v_ind_ps ')'

              INTO v_campo.

              PERFORM bdc_field  USING v_campo v_wrbtr_ps.

 

              READ TABLE itab_t059p WITH KEY witht = t_zycit212-catsap.

* >> Início da Exclusão <<

              IF sy-subrc = 0 AND itab_t059p-wt_postm = '2'.

* >> Fim da Exclusão <<

* >> Início da Inclusão <<

              IF sy-subrc           = 0 AND

                 itab_t059p-wt_postm = '2' or

                 t_dados-wrbtrps   is initial.

* >> Fim da Inclusão <<

                CONCATENATE 'WITH_ITEM-WT_WITHCD(' v_ind_ps ')'

                INTO v_campo.

                PERFORM bdc_field  USING v_campo ' '.

              ENDIF.

            ENDIF.

          ENDIF.

 

          READ TABLE t_zycit212 WITH KEY impdesc  = 'CSLL'.

          IF sy-subrc = 0.

            READ TABLE t_lfbw WITH KEY witht = t_zycit212-catsap.

            IF sy-subrc = 0.

              v_ind_cs = sy-tabix.

 

              WRITE: t_dados-wrbtrcs TO v_wrbtr_cs

                     CURRENCY t_dados-waers.

              CONCATENATE 'WITH_DIALG-WT_BASE(' v_ind_cs ')'

              INTO v_campo.

              PERFORM bdc_field  USING v_campo v_wrbtr_cs.

 

              READ TABLE itab_t059p WITH KEY witht = t_zycit212-catsap.

* >> Início da Exclusão <<

              IF sy-subrc = 0 AND itab_t059p-wt_postm = '2'.

* >> Fim da Exclusão <<

* >> Início da Inclusão <<

              IF sy-subrc           = 0 AND

                 itab_t059p-wt_postm = '2' or

                 t_dados-wrbtrcs   is initial.

* >> Fim da Inclusão <<

                CONCATENATE 'WITH_ITEM-WT_WITHCD(' v_ind_cs ')'

                INTO v_campo.

                PERFORM bdc_field  USING v_campo ' '.

 

              ENDIF.

            ENDIF.

          ENDIF.

 

          READ TABLE t_zycit212 WITH KEY impdesc  = 'INSS'.

          IF sy-subrc = 0.

            READ TABLE t_lfbw WITH KEY witht = t_zycit212-catsap.

            IF sy-subrc = 0.

              v_ind_is = sy-tabix.

 

              WRITE: t_dados-wrbtrinss TO v_wrbtr_is

                  CURRENCY t_dados-waers.

              CONCATENATE 'WITH_DIALG-WT_BASE(' v_ind_is ')'

                  INTO v_campo.

              PERFORM bdc_field  USING v_campo v_wrbtr_is.

 

              READ TABLE itab_t059p WITH KEY witht = t_zycit212-catsap.

* >> Início da Exclusão <<

              IF sy-subrc = 0 AND itab_t059p-wt_postm = '2'.

* >> Fim da Exclusão <<

* >> Início da Inclusão <<

              IF sy-subrc           = 0 AND

                 itab_t059p-wt_postm = '2' or

                 t_dados-wrbtrinss   is initial.

* >> Fim da Inclusão <<

                CONCATENATE 'WITH_ITEM-WT_WITHCD(' v_ind_is ')'

                    INTO v_campo.

                PERFORM bdc_field USING v_campo ' '.

 

              ENDIF.

            ENDIF.

          ENDIF.

...

        ELSE.

          PERFORM bdc_field  USING 'BDC_OKCODE'   'ZK'.

          PERFORM bdc_screen USING 'SAPMF05A' '0332'.

          PERFORM bdc_field  USING:

                  'BSEG-BVTYP' t_dados-bvtyp.

          IF NOT t_dados-ebene IS INITIAL.

            PERFORM bdc_field  USING:

                    'BSEG-FDLEV' t_dados-ebene,

                    'BDC_OKCODE' '/00'.

          ELSE.

            PERFORM bdc_field USING 'BDC_OKCODE' '/00'.

          ENDIF.

* >> Início da Exclusão <<

          ENDIF.

* >> Fim da Exclusão <<

        ENDIF.

      ENDIF.

      WRITE:   t_debito-wrbtr TO v_wrbtr1 CURRENCY  t_dados-waers,

               t_debito-c_valut TO v_data_conver_char.

      PERFORM bdc_screen USING 'SAPMF05A' '0300'.

      PERFORM bdc_field  USING:

              'BSEG-WRBTR' v_wrbtr1,               "Montante

              'BSEG-ZUONR' t_debito-c_zuonr,      "Atribuição

              'BSEG-SGTXT' t_debito-c_sgtxt,      "Texto

              'DKACB-FMORE'  'X'.

...

 

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

Modificações efetuadas em FUNC /PWS/ZYGL_IMPOSTO

 

FUNCTION /pws/zygl_imposto.

*"----------------------------------------------------------------------

*"*"Interface local:

*"  IMPORTING

*"     REFERENCE(P_REGIO) LIKE  /PWS/ZYGLT378-REGIO OPTIONAL

*"     REFERENCE(P_LAND1) LIKE  /PWS/ZYGLT378-LAND1 OPTIONAL

*"     REFERENCE(P_BUKRS) LIKE  /PWS/ZYGLT378-BUKRS

*"     REFERENCE(P_LIFNR) LIKE  LFA1-LIFNR

*"     REFERENCE(P_WERKS) LIKE  /PWS/ZYCIE001-WERKS

*"     REFERENCE(P_COD_MOD) LIKE  /PWS/ZYGLT378-CODMOD

*"     REFERENCE(P_OKCODE) LIKE  SY-UCOMM OPTIONAL

*"  TABLES

*"      ITAB_DESPESA STRUCTURE  /PWS/ZYGLE370

*"      ITAB_IMPOSTO STRUCTURE  /PWS/ZYGLE369

*"      ITAB_WITH_ITEM_AUX STRUCTURE  WITH_ITEM OPTIONAL

*"      ITAB_BKPF_AUX STRUCTURE  BKPF OPTIONAL

*"  EXCEPTIONS

*"      CENTRO_EM_BRANCO

*"---------------------------------------------------------------------*

* Chamado    Data            Descrição                                 *

*----------------------------------------------------------------------*

 

* >> Início da Exclusão <<

  TABLES:

          t059p,

          /pws/zycit353,

          t001.

 

  DATA: v_first_day      LIKE sy-datum            , "Primeiro dia do mes

        v_last_day       LIKE sy-datum            , "Ultimo dia do mes

        v_ano            LIKE bkpf-gjahr          , "Ano corrente

        v_mes(2)         TYPE c                   , "Mes corrente

        v_qsshh          LIKE with_item-wt_qsshh  , "Mont.acumul. no mes

        v_qbshh          LIKE with_item-wt_qbshh   , "vALOR aCUM NO MES

        v_total          LIKE /pws/zygle369-vl_base,"Total dos Impostos

        v_qsatz          LIKE t059z-qsatz          ,

        v_ratez          LIKE t059z-wt_ratez       ,

        v_raten          LIKE t059z-wt_raten       ,

        v_xqfor          LIKE t059z-xqfor          ,

        i                TYPE i        , "Numero de cacteres da variavel

        itab_lfbw        LIKE lfbw          OCCURS 0 WITH HEADER LINE,

        itab_t059minmax  LIKE t059minmax    OCCURS 0 WITH HEADER LINE,

        itab_t059fb      LIKE t059fb        OCCURS 0 WITH HEADER LINE,

        itab_t059p       LIKE t059p         OCCURS 0 WITH HEADER LINE,

        itab_zyglt378    LIKE /pws/zyglt378 OCCURS 0 WITH HEADER LINE,

        itab_imposto_aux LIKE /pws/zygle369 OCCURS 0 WITH HEADER LINE,

        itab_bkpf        LIKE bkpf          OCCURS 0 WITH HEADER LINE.

 

  DATA: BEGIN OF itab_with_item OCCURS 1000,

        belnr LIKE with_item-belnr,

        gjahr LIKE with_item-gjahr,

        witht LIKE with_item-witht,

        wt_withcd LIKE with_item-wt_withcd,

        wt_qsshh LIKE with_item-wt_qsshh,

        wt_qbshh LIKE with_item-wt_qbshh,

        END OF itab_with_item.

  DATA itab_t059pp LIKE v_t059pp OCCURS 0 WITH HEADER LINE.

* Monta o primeiro dia do mes para selecionar da with_item

  CLEAR v_first_day.

  MOVE sy-datum+4(2) TO v_mes.

  MOVE sy-datum(4) TO v_ano.

  i = strlen( v_mes ).

  IF i = 1.

    CONCATENATE v_ano '0' v_mes '01' INTO v_first_day.

  ELSE.

    CONCATENATE v_ano v_mes '01' INTO v_first_day.

  ENDIF.

 

* Pega ultimo dia do mes para selecionar da with_item

  CLEAR v_last_day.

  CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'

       EXPORTING

            day_in            = sy-datum

       IMPORTING

            last_day_of_month = v_last_day.

 

* Empresas

  CLEAR t001-land1.

  SELECT SINGLE land1 FROM t001

      INTO t001-land1

      WHERE bukrs = p_bukrs .

 

  SELECT SINGLE * FROM /pws/zycbt007

    WHERE bukrs = p_bukrs .

 

* GL - PARAMETRIZAÇÃO DE IMPOSTOS

  CLEAR itab_zyglt378. REFRESH itab_zyglt378.

  SELECT *

    FROM /pws/zyglt378

    INTO TABLE itab_zyglt378

    WHERE codmod EQ p_cod_mod AND

          bukrs EQ p_bukrs AND

          land1 EQ t001-land1 AND

          regio EQ p_regio.

  IF sy-subrc NE 0.

    SELECT *

      FROM /pws/zyglt378

      INTO TABLE itab_zyglt378

      WHERE codmod EQ p_cod_mod AND

            bukrs EQ p_bukrs AND

            land1 EQ t001-land1 AND

            regio EQ space.

    IF sy-subrc NE 0.

      SELECT *

        FROM /pws/zyglt378

        INTO TABLE itab_zyglt378

        WHERE codmod EQ p_cod_mod AND

              bukrs EQ p_bukrs AND

              land1 EQ space AND

              regio EQ p_regio .

      IF sy-subrc NE 0.

        SELECT *

          FROM /pws/zyglt378

          INTO TABLE itab_zyglt378

          WHERE codmod EQ p_cod_mod AND

                bukrs EQ space AND

                land1 EQ t001-land1 AND

                regio EQ p_regio .

        IF sy-subrc NE 0.

          SELECT *

            FROM /pws/zyglt378

            INTO TABLE itab_zyglt378

            WHERE codmod EQ p_cod_mod AND

                  bukrs EQ space AND

                  land1 EQ space AND

                  regio EQ p_regio .

          IF sy-subrc NE 0.

            SELECT *

              FROM /pws/zyglt378

              INTO TABLE itab_zyglt378

              WHERE codmod EQ p_cod_mod AND

                    bukrs EQ space AND

                    land1 EQ t001-land1 AND

                    regio EQ space .

            IF sy-subrc NE 0.

              SELECT *

                FROM /pws/zyglt378

                INTO TABLE itab_zyglt378

                WHERE codmod EQ p_cod_mod AND

                      bukrs EQ p_bukrs AND

                      land1 EQ space AND

                      regio EQ space .

              IF sy-subrc NE 0.

                SELECT *

                  FROM /pws/zyglt378

                  INTO TABLE itab_zyglt378

                  WHERE codmod EQ p_cod_mod AND

                        bukrs EQ space AND

                        land1 EQ space AND

                        regio EQ space .

              ENDIF.

            ENDIF.

          ENDIF.

        ENDIF.

      ENDIF.

    ENDIF.

  ENDIF.

 

  SELECT * FROM lfbw INTO TABLE itab_lfbw

       WHERE lifnr     EQ p_lifnr

         AND bukrs     EQ p_bukrs

         AND wt_subjct NE space.

  LOOP AT itab_lfbw WHERE wt_withcd IS initial.

    IF NOT p_werks IS INITIAL.

      CLEAR /pws/zycit353.

      SELECT SINGLE wt_withcd

        FROM /pws/zycit353

        INTO itab_lfbw-wt_withcd

        WHERE werks   EQ p_werks

          AND witht   EQ itab_lfbw-witht

          AND cod_mod EQ p_cod_mod.

    ENDIF.

  ENDLOOP.

 

  MOVE itab_bkpf_aux[] TO itab_bkpf[].

  LOOP AT itab_with_item_aux.

    MOVE-CORRESPONDING itab_with_item_aux TO itab_with_item.

    APPEND itab_with_item.

  ENDLOOP.

 

* tabela com as depesas e valores

  LOOP AT itab_despesa.

    LOOP AT itab_zyglt378 WHERE cod_desp = itab_despesa-cod_desp.

*     Monta tabela com os imposotos e o montente base

      itab_imposto-vl_base = itab_despesa-vl_desp.

      itab_imposto-cod_impo = itab_zyglt378-witht.

      APPEND itab_imposto.

      CLEAR itab_imposto.

    ENDLOOP.

  ENDLOOP.

  SORT itab_imposto BY cod_impo.

 

* tabela com os imposto e valor base

  LOOP AT itab_imposto.

    MOVE itab_imposto TO itab_imposto_aux.

*   agrupa os impostos e soma o Vl. BASE

    COLLECT itab_imposto_aux.

  ENDLOOP.

 

  CLEAR itab_imposto. REFRESH itab_imposto.

  itab_imposto[] = itab_imposto_aux[].

 

  LOOP AT itab_imposto.

    READ TABLE itab_with_item WITH KEY

                      witht = itab_imposto-cod_impo.

    IF sy-subrc NE 0.

      REFRESH itab_with_item.

    ENDIF.

  ENDLOOP.

  IF p_okcode IS INITIAL.

    CLEAR itab_with_item. REFRESH itab_with_item.

  ENDIF.

  IF NOT itab_imposto[] IS INITIAL AND

   (  itab_with_item[] IS INITIAL OR p_okcode = 'APROV' OR

      p_okcode = 'SAVE' OR p_okcode IS INITIAL ).

 

*   Seleciona saldo para verificar o range da tabela de impostos(t059fb)

    SELECT belnr gjahr  witht wt_withcd wt_qsshh wt_qbshh

      FROM with_item

      INTO TABLE itab_with_item

      WHERE bukrs     EQ p_bukrs               AND

            wt_acco   EQ p_lifnr               AND

            gjahr     EQ v_ano."                 AND

 

    SORT itab_imposto BY cod_impo.

    LOOP AT itab_with_item.

      READ TABLE itab_imposto WITH KEY

                  cod_impo = itab_with_item-witht

                  BINARY SEARCH.

      IF sy-subrc NE 0.

        DELETE itab_with_item.

      ENDIF.

    ENDLOOP.

 

    LOOP AT itab_with_item

      WHERE wt_qsshh >= '0.00'.

      DELETE itab_with_item .

    ENDLOOP.

    LOOP AT itab_with_item.

      READ TABLE itab_lfbw WITH KEY

                   wt_withcd =  itab_with_item-wt_withcd

                   witht  = itab_with_item-witht.

      IF sy-subrc NE 0.

        DELETE itab_with_item.

      ENDIF.

    ENDLOOP.

  ENDIF.

  IF p_okcode IS INITIAL.

    CLEAR itab_bkpf. REFRESH itab_bkpf.

  ENDIF.

  IF NOT itab_with_item[] IS INITIAL AND

     (  itab_bkpf[] IS INITIAL OR p_okcode = 'APROV' OR

      p_okcode = 'SAVE' OR p_okcode IS INITIAL ).

 

*   Seleciona na BKPF os documento encontrados na with_item, pois os

*   alguns docs da with_item estão cancelados

    SELECT *

      FROM bkpf

      INTO TABLE itab_bkpf

      FOR ALL ENTRIES IN itab_with_item

      WHERE bukrs EQ p_bukrs              AND

            belnr EQ itab_with_item-belnr AND

            gjahr EQ itab_with_item-gjahr AND

            budat >= v_first_day          AND

            budat <= v_last_day           .

  ENDIF.

 

 

 

  LOOP AT itab_imposto.

 

*   Mestre de fornecedores (ctgs.de impostos retidos na fonte)

    CLEAR: lfbw, v_qsshh, v_qbshh.

    SELECT SINGLE * FROM lfbw WHERE lifnr     EQ p_lifnr

                                AND bukrs     EQ p_bukrs

                                AND witht     EQ itab_imposto-cod_impo

                                AND wt_subjct NE space.

 

* Caso o wt_withcd esteja em branco pega da 353 pelo centro

    IF sy-subrc EQ 0 AND lfbw-wt_withcd IS INITIAL.

      IF NOT p_werks IS INITIAL.

        CLEAR /pws/zycit353.

        SELECT SINGLE wt_withcd

          FROM /pws/zycit353

          INTO lfbw-wt_withcd

          WHERE werks   EQ p_werks

            AND witht   EQ lfbw-witht

            AND cod_mod EQ p_cod_mod.

      ENDIF.

    ELSEIF sy-subrc NE 0.

      DELETE itab_imposto.

      CONTINUE.

    ENDIF.

 

 

 

*   Código IRF (funcionalidade ampliada)

    CLEAR: v_qsatz, v_ratez, v_raten, v_xqfor.

    SELECT SINGLE qsatz wt_ratez wt_raten xqfor

           INTO (v_qsatz, v_ratez, v_raten, v_xqfor)

           FROM t059z

           WHERE witht     EQ itab_imposto-cod_impo

             AND land1     EQ t001-land1

             AND wt_withcd EQ lfbw-wt_withcd.

 

*   Categorias de impostos retidos na fonte

    CLEAR t059p.

    SELECT SINGLE *

      FROM t059p

      WHERE land1 EQ t001-land1            AND

            witht EQ itab_imposto-cod_impo AND

            wt_accpt EQ '3'.

 

*   Caso não encontre, é q o imposto ñ é acumulativo

    IF sy-subrc NE 0 AND lfbw-wt_subjct EQ 'X'.

 

      CLEAR itab_t059minmax.

      REFRESH itab_t059minmax[].

 

      SELECT *

          FROM t059minmax

          INTO TABLE itab_t059minmax

          WHERE land1     EQ t001-land1

            AND witht     EQ itab_imposto-cod_impo

            AND waers     EQ /pws/zycbt007-waersb

            AND wt_withcd IN (lfbw-wt_withcd, space).

 

      IF sy-subrc = 0.

 

        SORT itab_t059minmax BY wt_withcd wt_date DESCENDING.

        READ TABLE itab_t059minmax INDEX 1.

 

      ENDIF.

 

      CLEAR t059p.

      SELECT SINGLE *

        FROM t059p

        WHERE land1 EQ t001-land1            AND

              witht EQ itab_imposto-cod_impo.

 

      IF itab_imposto-vl_base >= itab_t059minmax-wt_wtminb.

        itab_imposto-vl_imposto = ( itab_imposto-vl_base * v_qsatz )

                                                              / 100.

        IF itab_imposto-vl_imposto < itab_t059minmax-wt_wtmin.

          CLEAR itab_imposto-vl_imposto.

        ENDIF.

      ENDIF.

 

    ELSEIF lfbw-wt_subjct EQ 'X' AND sy-subrc EQ 0. "AND v_xqfor EQ 'X'.

 

      CLEAR itab_t059minmax.

      REFRESH itab_t059minmax[].

 

      SELECT *

          FROM t059minmax

          INTO TABLE itab_t059minmax

          WHERE land1     EQ t001-land1

            AND witht     EQ itab_imposto-cod_impo

            AND waers     EQ /pws/zycbt007-waersb

            AND wt_withcd IN (lfbw-wt_withcd, space).

 

      IF sy-subrc = 0.

 

        SORT itab_t059minmax BY wt_withcd wt_date DESCENDING.

        READ TABLE itab_t059minmax INDEX 1.

 

      ENDIF.

 

*     Fórmulas para cálculo de IRF (nova funcionalidade)

      CLEAR itab_t059fb. REFRESH itab_t059fb.

      SELECT *

        FROM t059fb

        INTO TABLE itab_t059fb

        WHERE land1     EQ t001-land1      AND

              witht     EQ lfbw-witht      AND

              wt_withcd EQ lfbw-wt_withcd  AND

              wt_valid  <= sy-datum.

      IF sy-subrc = 0.

        SORT itab_t059fb BY wt_bbasb.

 

*     Soma da contabilizações feita no mes

        LOOP AT itab_with_item WHERE witht EQ itab_imposto-cod_impo.

* Le o documento da with_item para ver se ele não esta estornado

* Se o doc. estiver estorndo o campo stgrd(motivo do estorno) esta

* preenchido

          CLEAR itab_bkpf.

          READ TABLE itab_bkpf WITH KEY bukrs = p_bukrs

                                        belnr = itab_with_item-belnr

                                        gjahr = itab_with_item-gjahr

                                        stgrd = ''.

          IF sy-subrc EQ 0.

            v_qsshh = abs( itab_with_item-wt_qsshh ) + v_qsshh.

            v_qbshh = abs( itab_with_item-wt_qbshh ) + v_qbshh.

 

          ENDIF.

        ENDLOOP.

 

* le o primeiro registro da tabela para verificar se ja passou do minimo

        CLEAR itab_t059fb.

        READ TABLE itab_t059fb INDEX 1.

*     Se v_qsshh for menor que o total do mes significa que ainda não

*     passou, ou seja, soma o total do mes a base do imposto para ver

*     se vai passar

        v_total = itab_imposto-vl_base + v_qsshh.

        IF v_total > itab_t059fb-wt_bbasb.

*       caso passe calcula o valor do imposto

          READ TABLE itab_t059fb INDEX 2.

 

          IF NOT v_qsshh IS INITIAL AND

             NOT v_qbshh IS INITIAL.

            itab_imposto-vl_imposto = ( ( v_total *

                                    itab_t059fb-qsatz ) / 100 ) -

                                      ( ( v_qsshh *

                                    itab_t059fb-qsatz ) / 100 ).

          ELSE.

            itab_imposto-vl_imposto = ( ( v_total *

                                    itab_t059fb-qsatz ) / 100 ).

          ENDIF.

 

          IF itab_imposto-vl_imposto < '0.00' .

 

            CLEAR itab_imposto-vl_imposto.

          ENDIF.

        ELSE.

          CLEAR itab_imposto-vl_imposto.

        ENDIF.

 

      ELSEIF NOT itab_t059minmax IS INITIAL.

*     Soma da contabilizações feita no mes

        LOOP AT itab_with_item WHERE witht EQ itab_imposto-cod_impo.

* Le o documento da with_item para ver se ele não esta estornado

* Se o doc. estiver estorndo o campo stgrd(motivo do estorno) esta

* preenchido

          CLEAR itab_bkpf.

          READ TABLE itab_bkpf WITH KEY bukrs = p_bukrs

                                        belnr = itab_with_item-belnr

                                        gjahr = itab_with_item-gjahr

                                        stgrd = ''.

          IF sy-subrc EQ 0.

            v_qsshh = abs( itab_with_item-wt_qsshh ) + v_qsshh.

            v_qbshh = abs( itab_with_item-wt_qbshh ) + v_qbshh.

 

          ENDIF.

        ENDLOOP.

*     Se v_qsshh for menor que o total do mes significa que ainda não

*     passou, ou seja, soma o total do mes a base do imposto para ver

*     se vai passar

        v_total = itab_imposto-vl_base + v_qsshh.

        IF v_total >= itab_t059minmax-wt_wtminb.

*       caso passe calcula o valor do imposto

          IF NOT v_qsatz IS INITIAL.

            itab_imposto-vl_imposto = ( ( v_total *

                                    v_qsatz ) / 100 ) - v_qbshh.

          ENDIF.

          IF itab_imposto-vl_imposto < '0.00' .

            CLEAR itab_imposto-vl_imposto.

          ENDIF.

        ELSE.

          CLEAR itab_imposto-vl_imposto.

        ENDIF.

 

 

      ENDIF.

    ENDIF.

    MODIFY itab_imposto.

  ENDLOOP.

 

* Mestre de fornecedores (ctgs.de impostos retidos na fonte)

  CLEAR itab_lfbw. REFRESH itab_lfbw.

  SELECT *

    FROM lfbw

    INTO TABLE itab_lfbw

    WHERE lifnr     EQ p_lifnr

      AND bukrs     EQ p_bukrs

      AND wt_subjct NE space.

 

 

  LOOP AT itab_lfbw.

    CLEAR itab_imposto.

    READ TABLE itab_imposto WITH KEY cod_impo = itab_lfbw-witht.

    IF sy-subrc NE 0.

      CLEAR itab_imposto.

      itab_imposto-cod_impo = itab_lfbw-witht.

      APPEND itab_imposto.

    ENDIF.

  ENDLOOP.

 

  REFRESH itab_with_item_aux.

 

  LOOP AT itab_with_item.

    MOVE-CORRESPONDING itab_with_item TO itab_with_item_aux.

    APPEND itab_with_item_aux.

  ENDLOOP.

  MOVE itab_bkpf[] TO itab_bkpf_aux[].

 

  LOOP AT itab_imposto.

    SELECT  SINGLE * FROM t059p

      WHERE land1 = t001-land1 AND

            witht = itab_imposto-cod_impo AND

            wt_postm  NE '1'.

    IF sy-subrc = 0.

      CLEAR itab_imposto-vl_imposto.

      MODIFY itab_imposto.

    ENDIF.

  ENDLOOP.

* >> Fim da Exclusão <<

*===========================================================================

* >> Início da Inclusão <<

  TABLES:

          t059p,

          /pws/zycit353,

          t001.

 

  DATA: v_first_day      LIKE sy-datum            , "Primeiro dia do mes

        v_last_day       LIKE sy-datum            , "Ultimo dia do mes

        v_ano            LIKE bkpf-gjahr          , "Ano corrente

        v_mes(2)         TYPE c                   , "Mes corrente

        v_qsshh          LIKE with_item-wt_qsshh  , "Mont.acumul. no mes

        v_qbshh          LIKE with_item-wt_qbshh   , "vALOR aCUM NO MES

        v_total          LIKE /pws/zygle369-vl_base,"Total dos Impostos

        v_qsatz          LIKE t059z-qsatz          ,

        v_ratez          LIKE t059z-wt_ratez       ,

        v_raten          LIKE t059z-wt_raten       ,

        v_xqfor          LIKE t059z-xqfor          ,

        i                TYPE i        , "Numero de cacteres da variavel

        itab_lfbw        LIKE lfbw          OCCURS 0 WITH HEADER LINE,

        itab_t059minmax  LIKE t059minmax    OCCURS 0 WITH HEADER LINE,

        itab_t059fb      LIKE t059fb        OCCURS 0 WITH HEADER LINE,

        itab_t059p       LIKE t059p         OCCURS 0 WITH HEADER LINE,

        itab_zyglt378    LIKE /pws/zyglt378 OCCURS 0 WITH HEADER LINE,

        itab_imposto_aux LIKE /pws/zygle369 OCCURS 0 WITH HEADER LINE,

        itab_bkpf        LIKE bkpf          OCCURS 0 WITH HEADER LINE.

 

  DATA: BEGIN OF itab_with_item OCCURS 1000,

        belnr LIKE with_item-belnr,

        gjahr LIKE with_item-gjahr,

        witht LIKE with_item-witht,

        wt_withcd LIKE with_item-wt_withcd,

        wt_qsshh LIKE with_item-wt_qsshh,

        wt_qbshh LIKE with_item-wt_qbshh,

        END OF itab_with_item.

  DATA itab_t059pp LIKE v_t059pp OCCURS 0 WITH HEADER LINE.

* Monta o primeiro dia do mes para selecionar da with_item

  CLEAR v_first_day.

  MOVE sy-datum+4(2) TO v_mes.

  MOVE sy-datum(4) TO v_ano.

  i = strlen( v_mes ).

  IF i = 1.

    CONCATENATE v_ano '0' v_mes '01' INTO v_first_day.

  ELSE.

    CONCATENATE v_ano v_mes '01' INTO v_first_day.

  ENDIF.

 

* Pega ultimo dia do mes para selecionar da with_item

  CLEAR v_last_day.

  CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'

       EXPORTING

            day_in            = sy-datum

       IMPORTING

            last_day_of_month = v_last_day.

 

* Empresas

  CLEAR t001-land1.

  SELECT SINGLE land1 FROM t001

      INTO t001-land1

      WHERE bukrs = p_bukrs .

 

  SELECT SINGLE * FROM /pws/zycbt007

    WHERE bukrs = p_bukrs .

 

* GL - PARAMETRIZAÇÃO DE IMPOSTOS

  CLEAR itab_zyglt378. REFRESH itab_zyglt378.

  SELECT *

    FROM /pws/zyglt378

    INTO TABLE itab_zyglt378

    WHERE codmod EQ p_cod_mod AND

          bukrs EQ p_bukrs AND

          land1 EQ t001-land1 AND

          regio EQ p_regio.

  IF sy-subrc NE 0.

    SELECT *

      FROM /pws/zyglt378

      INTO TABLE itab_zyglt378

      WHERE codmod EQ p_cod_mod AND

            bukrs EQ p_bukrs AND

            land1 EQ t001-land1 AND

            regio EQ space.

    IF sy-subrc NE 0.

      SELECT *

        FROM /pws/zyglt378

        INTO TABLE itab_zyglt378

        WHERE codmod EQ p_cod_mod AND

              bukrs EQ p_bukrs AND

              land1 EQ space AND

              regio EQ p_regio .

      IF sy-subrc NE 0.

        SELECT *

          FROM /pws/zyglt378

          INTO TABLE itab_zyglt378

          WHERE codmod EQ p_cod_mod AND

                bukrs EQ space AND

                land1 EQ t001-land1 AND

                regio EQ p_regio .

        IF sy-subrc NE 0.

          SELECT *

            FROM /pws/zyglt378

            INTO TABLE itab_zyglt378

            WHERE codmod EQ p_cod_mod AND

                  bukrs EQ space AND

                  land1 EQ space AND

                  regio EQ p_regio .

          IF sy-subrc NE 0.

            SELECT *

              FROM /pws/zyglt378

              INTO TABLE itab_zyglt378

              WHERE codmod EQ p_cod_mod AND

                    bukrs EQ space AND

                    land1 EQ t001-land1 AND

                    regio EQ space .

            IF sy-subrc NE 0.

              SELECT *

                FROM /pws/zyglt378

                INTO TABLE itab_zyglt378

                WHERE codmod EQ p_cod_mod AND

                      bukrs EQ p_bukrs AND

                      land1 EQ space AND

                      regio EQ space .

              IF sy-subrc NE 0.

                SELECT *

                  FROM /pws/zyglt378

                  INTO TABLE itab_zyglt378

                  WHERE codmod EQ p_cod_mod AND

                        bukrs EQ space AND

                        land1 EQ space AND

                        regio EQ space .

              ENDIF.

            ENDIF.

          ENDIF.

        ENDIF.

      ENDIF.

    ENDIF.

  ENDIF.

 

  SELECT * FROM lfbw INTO TABLE itab_lfbw

       WHERE lifnr     EQ p_lifnr

         AND bukrs     EQ p_bukrs

         AND wt_subjct NE space.

  LOOP AT itab_lfbw WHERE wt_withcd IS initial.

    IF NOT p_werks IS INITIAL.

      CLEAR /pws/zycit353.

      SELECT SINGLE wt_withcd

        FROM /pws/zycit353

        INTO itab_lfbw-wt_withcd

        WHERE werks   EQ p_werks

          AND witht   EQ itab_lfbw-witht

          AND cod_mod EQ p_cod_mod.

    ENDIF.

  ENDLOOP.

 

  MOVE itab_bkpf_aux[] TO itab_bkpf[].

  LOOP AT itab_with_item_aux.

    MOVE-CORRESPONDING itab_with_item_aux TO itab_with_item.

    APPEND itab_with_item.

  ENDLOOP.

 

* tabela com as depesas e valores

  LOOP AT itab_despesa.

    LOOP AT itab_zyglt378 WHERE cod_desp = itab_despesa-cod_desp.

*     Monta tabela com os imposotos e o montente base

      itab_imposto-vl_base = itab_despesa-vl_desp.

      itab_imposto-cod_impo = itab_zyglt378-witht.

      APPEND itab_imposto.

      CLEAR itab_imposto.

    ENDLOOP.

  ENDLOOP.

  SORT itab_imposto BY cod_impo.

 

* tabela com os imposto e valor base

  LOOP AT itab_imposto.

    MOVE itab_imposto TO itab_imposto_aux.

*   agrupa os impostos e soma o Vl. BASE

    COLLECT itab_imposto_aux.

  ENDLOOP.

 

  CLEAR itab_imposto. REFRESH itab_imposto.

  itab_imposto[] = itab_imposto_aux[].

 

  LOOP AT itab_imposto.

    READ TABLE itab_with_item WITH KEY

                      witht = itab_imposto-cod_impo.

    IF sy-subrc NE 0.

      REFRESH itab_with_item.

    ENDIF.

  ENDLOOP.

  IF p_okcode IS INITIAL.

    CLEAR itab_with_item. REFRESH itab_with_item.

  ENDIF.

  IF NOT itab_imposto[] IS INITIAL AND

   (  itab_with_item[] IS INITIAL OR p_okcode = 'APROV' OR

      p_okcode = 'SAVE' OR p_okcode IS INITIAL ).

 

*   Seleciona saldo para verificar o range da tabela de impostos(t059fb)

    SELECT belnr gjahr  witht wt_withcd wt_qsshh wt_qbshh

      FROM with_item

      INTO TABLE itab_with_item

      WHERE bukrs     EQ p_bukrs               AND

            wt_acco   EQ p_lifnr               AND

            gjahr     EQ v_ano."                 AND

 

    SORT itab_imposto BY cod_impo.

    LOOP AT itab_with_item.

      READ TABLE itab_imposto WITH KEY

                  cod_impo = itab_with_item-witht

                  BINARY SEARCH.

      IF sy-subrc NE 0.

        DELETE itab_with_item.

      ENDIF.

    ENDLOOP.

 

    LOOP AT itab_with_item

      WHERE wt_qsshh >= '0.00'.

      DELETE itab_with_item .

    ENDLOOP.

    LOOP AT itab_with_item.

      READ TABLE itab_lfbw WITH KEY

                   wt_withcd =  itab_with_item-wt_withcd

                   witht  = itab_with_item-witht.

      IF sy-subrc NE 0.

        DELETE itab_with_item.

      ENDIF.

    ENDLOOP.

  ENDIF.

  IF p_okcode IS INITIAL.

    CLEAR itab_bkpf. REFRESH itab_bkpf.

  ENDIF.

  IF NOT itab_with_item[] IS INITIAL AND

     (  itab_bkpf[] IS INITIAL OR p_okcode = 'APROV' OR

      p_okcode = 'SAVE' OR p_okcode IS INITIAL ).

 

*   Seleciona na BKPF os documento encontrados na with_item, pois os

*   alguns docs da with_item estão cancelados

    SELECT *

      FROM bkpf

      INTO TABLE itab_bkpf

      FOR ALL ENTRIES IN itab_with_item

      WHERE bukrs EQ p_bukrs              AND

            belnr EQ itab_with_item-belnr AND

            gjahr EQ itab_with_item-gjahr AND

            budat >= v_first_day          AND

            budat <= v_last_day           .

  ENDIF.

 

 

 

  LOOP AT itab_imposto.

 

*   Mestre de fornecedores (ctgs.de impostos retidos na fonte)

    CLEAR: lfbw, v_qsshh, v_qbshh.

    SELECT SINGLE * FROM lfbw WHERE lifnr     EQ p_lifnr

                                AND bukrs     EQ p_bukrs

                                AND witht     EQ itab_imposto-cod_impo

                                AND wt_subjct NE space.

 

* Caso o wt_withcd esteja em branco pega da 353 pelo centro

    IF sy-subrc EQ 0 AND lfbw-wt_withcd IS INITIAL.

      IF NOT p_werks IS INITIAL.

        CLEAR /pws/zycit353.

        SELECT SINGLE wt_withcd

          FROM /pws/zycit353

          INTO lfbw-wt_withcd

          WHERE werks   EQ p_werks

            AND witht   EQ lfbw-witht

            AND cod_mod EQ p_cod_mod.

      ENDIF.

    ELSEIF sy-subrc NE 0.

      DELETE itab_imposto.

      CONTINUE.

    ENDIF.

 

 

 

*   Código IRF (funcionalidade ampliada)

    CLEAR: v_qsatz, v_ratez, v_raten, v_xqfor.

    SELECT SINGLE qsatz wt_ratez wt_raten xqfor

           INTO (v_qsatz, v_ratez, v_raten, v_xqfor)

           FROM t059z

           WHERE witht     EQ itab_imposto-cod_impo

             AND land1     EQ t001-land1

             AND wt_withcd EQ lfbw-wt_withcd.

 

*   Categorias de impostos retidos na fonte

    CLEAR t059p.

    SELECT SINGLE *

      FROM t059p

      WHERE land1 EQ t001-land1            AND

            witht EQ itab_imposto-cod_impo AND

            wt_accpt EQ '3'.

 

*   Caso não encontre, é q o imposto ñ é acumulativo

    IF sy-subrc NE 0 AND lfbw-wt_subjct EQ 'X'.

 

      CLEAR itab_t059minmax.

      REFRESH itab_t059minmax[].

 

      SELECT *

          FROM t059minmax

          INTO TABLE itab_t059minmax

          WHERE land1     EQ t001-land1

            AND witht     EQ itab_imposto-cod_impo

            AND waers     EQ /pws/zycbt007-waersb

            AND wt_withcd IN (lfbw-wt_withcd, space).

 

      IF sy-subrc = 0.

 

        SORT itab_t059minmax BY wt_withcd wt_date DESCENDING.

        READ TABLE itab_t059minmax INDEX 1.

 

      ENDIF.

 

      CLEAR t059p.

      SELECT SINGLE *

        FROM t059p

        WHERE land1 EQ t001-land1            AND

              witht EQ itab_imposto-cod_impo.

 

      IF itab_imposto-vl_base >= itab_t059minmax-wt_wtminb.

        itab_imposto-vl_imposto = ( itab_imposto-vl_base * v_qsatz )

                                                              / 100.

        IF itab_imposto-vl_imposto < itab_t059minmax-wt_wtmin.

          CLEAR itab_imposto-vl_imposto.

        ENDIF.

      ENDIF.

 

    ELSEIF lfbw-wt_subjct EQ 'X' AND sy-subrc EQ 0. "AND v_xqfor EQ 'X'.

 

      CLEAR itab_t059minmax.

      REFRESH itab_t059minmax[].

 

      SELECT *

          FROM t059minmax

          INTO TABLE itab_t059minmax

          WHERE land1     EQ t001-land1

*            AND wt_withcd EQ lfbw-WT_WITHCD

            AND witht     EQ itab_imposto-cod_impo

            AND waers     EQ /pws/zycbt007-waersb

            AND wt_withcd IN (lfbw-wt_withcd, space).

 

      IF sy-subrc = 0.

 

        SORT itab_t059minmax BY wt_withcd wt_date DESCENDING.

        READ TABLE itab_t059minmax INDEX 1.

 

      ENDIF.

 

      CLEAR t059p.

      SELECT SINGLE *

        FROM t059p

        WHERE land1 EQ t001-land1            AND

              witht EQ itab_imposto-cod_impo.

 

      IF NOT itab_t059minmax[] IS INITIAL.

*     Soma da contabilizações feita no mes

        LOOP AT itab_with_item WHERE witht EQ itab_imposto-cod_impo.

* Le o documento da with_item para ver se ele não esta estornado

* Se o doc. estiver estorndo o campo stgrd(motivo do estorno) esta

* preenchido

          CLEAR itab_bkpf.

          READ TABLE itab_bkpf WITH KEY bukrs = p_bukrs

                                        belnr = itab_with_item-belnr

                                        gjahr = itab_with_item-gjahr

                                        stgrd = ''.

          IF sy-subrc EQ 0.

            v_qsshh = abs( itab_with_item-wt_qsshh ) + v_qsshh.

            v_qbshh = abs( itab_with_item-wt_qbshh ) + v_qbshh.

 

          ENDIF.

        ENDLOOP.

*     Se v_qsshh for menor que o total do mes significa que ainda não

*     passou, ou seja, soma o total do mes a base do imposto para ver

*     se vai passar

        v_total = itab_imposto-vl_base + v_qsshh.

* Chamado 259676 - Início 1

        if t059p-wt_mainta eq '1'.

          READ TABLE itab_t059minmax

            with key land1     = t001-land1

                     wt_withcd = ' '

                     witht     = itab_imposto-cod_impo.

        else.

          READ TABLE itab_t059minmax

            with key land1     = t001-land1

                     wt_withcd = lfbw-WT_WITHCD

                     witht     = itab_imposto-cod_impo.

        endif.

        IF v_total >= itab_t059minmax-wt_wtminb.

*        IF v_total GE itab_t059minmax-wt_wtbex.

* Chamado 259676 - Término 1

*       caso passe calcula o valor do imposto

          IF NOT v_qsatz IS INITIAL.

            if v_qbshh < itab_t059minmax-wt_wtbex.

              v_total = v_total -

                        ( itab_t059minmax-wt_wtbex -  v_qbshh ).

            endif.

            itab_imposto-vl_imposto = ( ( v_total *

                                    v_qsatz ) / 100 ) - v_qbshh.

          ENDIF.

          IF itab_imposto-vl_imposto < '0.00' .

            CLEAR itab_imposto-vl_imposto.

          ENDIF.

        ELSE.

          CLEAR itab_imposto-vl_imposto.

        ENDIF.

       endif.

      ELSE.

*     Fórmulas para cálculo de IRF (nova funcionalidade)

 

        CLEAR itab_t059fb. REFRESH itab_t059fb.

        SELECT *

          FROM t059fb

          INTO TABLE itab_t059fb

          WHERE land1     EQ t001-land1      AND

                witht     EQ lfbw-witht      AND

                wt_withcd EQ lfbw-wt_withcd  AND

                wt_valid  <= sy-datum.

        IF sy-subrc = 0.

          SORT itab_t059fb BY wt_bbasb.

 

*     Soma da contabilizações feita no mes

          LOOP AT itab_with_item WHERE witht EQ itab_imposto-cod_impo.

* Le o documento da with_item para ver se ele não esta estornado

* Se o doc. estiver estorndo o campo stgrd(motivo do estorno) esta

* preenchido

            CLEAR itab_bkpf.

            READ TABLE itab_bkpf WITH KEY bukrs = p_bukrs

                                          belnr = itab_with_item-belnr

                                          gjahr = itab_with_item-gjahr

                                          stgrd = ''.

            IF sy-subrc EQ 0.

              v_qsshh = abs( itab_with_item-wt_qsshh ) + v_qsshh.

              v_qbshh = abs( itab_with_item-wt_qbshh ) + v_qbshh.

 

            ENDIF.

          ENDLOOP.

 

* le o primeiro registro da tabela para verificar se ja passou do minimo

          CLEAR itab_t059fb.

          READ TABLE itab_t059fb INDEX 1.

*     Se v_qsshh for menor que o total do mes significa que ainda não

*     passou, ou seja, soma o total do mes a base do imposto para ver

*     se vai passar

          v_total = itab_imposto-vl_base + v_qsshh.

 

          IF v_total > itab_t059fb-wt_bbasb.

 

*       caso passe calcula o valor do imposto

            READ TABLE itab_t059fb INDEX 2.

 

            IF NOT v_qsshh IS INITIAL AND

               NOT v_qbshh IS INITIAL.

              itab_imposto-vl_imposto = ( ( v_total *

                                      itab_t059fb-qsatz ) / 100 ) -

                                        ( ( v_qsshh *

                                      itab_t059fb-qsatz ) / 100 ).

            ELSE.

              itab_imposto-vl_imposto = ( ( v_total *

                                      itab_t059fb-qsatz ) / 100 ).

            ENDIF.

 

            IF itab_imposto-vl_imposto < '0.00' .

 

              CLEAR itab_imposto-vl_imposto.

            ENDIF.

          ELSE.

            CLEAR itab_imposto-vl_imposto.

          ENDIF.

 

 

        ENDIF.

      ENDIF.

      MODIFY itab_imposto.

    ENDLOOP.

 

* Mestre de fornecedores (ctgs.de impostos retidos na fonte)

    CLEAR itab_lfbw. REFRESH itab_lfbw.

    SELECT *

      FROM lfbw

      INTO TABLE itab_lfbw

      WHERE lifnr     EQ p_lifnr

        AND bukrs     EQ p_bukrs

        AND wt_subjct NE space.

 

 

    LOOP AT itab_lfbw.

      CLEAR itab_imposto.

      READ TABLE itab_imposto WITH KEY cod_impo = itab_lfbw-witht.

      IF sy-subrc NE 0.

        CLEAR itab_imposto.

        itab_imposto-cod_impo = itab_lfbw-witht.

        APPEND itab_imposto.

      ENDIF.

    ENDLOOP.

 

    REFRESH itab_with_item_aux.

 

    LOOP AT itab_with_item.

      MOVE-CORRESPONDING itab_with_item TO itab_with_item_aux.

      APPEND itab_with_item_aux.

    ENDLOOP.

    MOVE itab_bkpf[] TO itab_bkpf_aux[].

 

    LOOP AT itab_imposto.

      SELECT  SINGLE * FROM t059p

        WHERE land1 = t001-land1 AND

              witht = itab_imposto-cod_impo AND

              wt_postm  NE '1'.

      IF sy-subrc = 0.

        CLEAR itab_imposto-vl_imposto.

        MODIFY itab_imposto.

      ENDIF.

    ENDLOOP.

* >> Fim da Inclusão <<

 

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

Modificações efetuadas em REPS /PWS/MZYCE013F01

 

FORM atualiza_total.

  CLEAR: v_vldp, v_vladto, itab_desp_real.

  REFRESH: itab_desp_real.

 

* Total real das despesas por Condição

  LOOP AT itab_zycet043 WHERE kschl NE space.

    itab_desp_real-nrseq  = itab_zycet043-nrseq.

    itab_desp_real-kschl  = itab_zycet043-kschl.

    itab_desp_real-kwert  = itab_zycet043-vldp.

    COLLECT itab_desp_real.

  ENDLOOP.

...

    ENDIF.

    v_vldp   =  v_vldp  +  itab_zycet043-vldp.

    v_vladto =  v_vladto  +  itab_zycet043-vldp45.

    MODIFY itab_zycet043 INDEX v_index.

  ENDLOOP.

 

* >> Início da Exclusão <<

  IF sy-tcode = '/PWS/ZYCE013_C'.

* >> Fim da Exclusão <<

* >> Início da Inclusão <<

  if /pws/zycee033-status ne 'A'.

* >> Fim da Inclusão <<

    /pws/zycee033-vlmi    = v_vladto.

    /pws/zycee033-vldf    = /pws/zycee033-vlmi - v_vldp.

    /pws/zycee033-totdep  = v_vldp.

    PERFORM existe_imposto.

    PERFORM calcula_diferenca_2.

  ENDIF.                                                    " Ch201298

 

  PERFORM buscar_estrategia.

 

  PERFORM busca_taxa.

 

ENDFORM.                    " atualiza_total