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.
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