Módulo: DOC. IMPORTAÇÃO
Funcionalidade: DI
Data/Hora da Publicação: 07/02/2007 00:00:00
Data/Hora Última Alteração: 22/02/2011 13:39:55
Descrição da Nota: ESTA NOTA CRIA A FUNÇÃO DE RECLASSIFICAÇÃO DE IA
Sintoma
é preciso fazer a variação cambial no recebimento, caso não seja feito na DI, qualquer alteração
teria que ser feita em mais de um programa.
modificação na variação cambial da DI e no recebimento.
Solução
Criada uma função para se usada no recebimento e na DI.
6.0
Produto:
Nota
Descrição
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 03047 Data: 07/02/2007 Hora: 10:52:49
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 03047
Categoria : Melhoria
Prioridade : Média
Versão PW.CE : 6.0
Pacote : 00026
Agrupamento : 00151
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
02778 - 00001 - 6.0 - 00026 - AJUSTE PARA NÃO RECLASSIFICAR IA NA DI PARA EMBARQUES A GRANEL.
----------------------------------------------------------------------------------------------------
ESTA NOTA CRIA A FUNÇÃO DE RECLASSIFICAÇÃO DE IA
----------------------------------------------------------------------------------------------------
Palavras Chave:
IA - DI - RECEBIMENTO - FUNÇÃO
----------------------------------------------------------------------------------------------------
Objetos da nota:
FUNC /PWS/ZYCI_RECLASSIFICACAO_IA
REPS /PWS/LZYCIGF2F01
REPS /PWS/LZYCIGF2TOP
REPS /PWS/LZYCIGF2UXX
REPS /PWS/MZYCI023F01
REPS /PWS/MZYCI023F04
----------------------------------------------------------------------------------------------------
MODIFICAR MÓDULO DE FUNÇÃO: /PWS/ZYCI_RECLASSIFICACAO_IA
CARACTERÍSTICAS
CLASSIFICAÇÃO:
GRUPO DE FUNÇÕES: /PWS/ZYCIGF2
TEXTO BREVE: Reclassificação de IA p/ DI e Recebimento
TIPO DE EXECUÇÃO:
(X) - MÓDULO DE FUNÇÃO NORMAL
(X) - INÍCIO IMEDIATO
IMPORTAÇÃO:
NOME PARAM. ATRIB. TIPO REFERÊNCIA VL. PROPOSTO OPCIONAL TRANSF. TEXT
I_ZYCIT001 TYPE /PWS/ZYCIT001 X CI - Embarque de Importação
V_MODO TYPE /PWS/ZYCBT039-MODO Campo de texto do comprimento 1
I_PROGRAMA TYPE CHAR3 Campo de 3 bytes de comprimento
EXPORTAÇÃO:
NOME PARAM. ATRIB. TIPO REFERÊNCIA TRANSF. TEXTO BREVE
E_BELNR_F_05 TYPE BELNR Atribuição nºs item doc.material - doc.compra
E_BELNR_F_51 TYPE BELNR Atribuição nºs item doc.material - doc.compra
TABELAS:
NOME PARAM. ATRIB. TIPO REFERÊNCIA OPCIONAL TEXTO BREVE
T_ZYCIT100 LIKE /PWS/ZYCIT100 X CI - Itens da DSI
T_ZYCIT003 LIKE /PWS/ZYCIT003 X CI - Itens Pedidos por Embarque
T_ZYCBT032 LIKE /PWS/ZYCBT032 X GL - Log de Execução de Transações.
ITAB_VARIACAO LIKE /PWS/ZYCIT085 X CI - DI 2
EXCEÇÕES:
EXCEÇÃO TEXTO BREVE
TABLE_INITIAL Tabela de cabeçalho do embarque vazia
EXISTE_RECEBIMENTO Se o reclassificação de ia for na DI e já houver recebimento não faz IA
FLAG_RECLASSIFICACAO Se na tabela IT000 não estiver flegado, não faz variação
DADOS_DI_INICIAL Se adata ou o numero da di for inicial, não faz variação
Modificações efetuadas em FUNC /PWS/ZYCI_RECLASSIFICACAO_IA
****************************************************************************************************
******Criada a função de reclassificação de IA *****************************************************
****************************************************************************************************
FUNCTION /pws/zyci_reclassificacao_ia.
*"----------------------------------------------------------------------
*"*"Interface local:
*" IMPORTING
*" REFERENCE(I_ZYCIT001) TYPE /PWS/ZYCIT001
*" REFERENCE(V_MODO) TYPE /PWS/ZYCBT039-MODO OPTIONAL
*" REFERENCE(I_PROGRAMA) TYPE CHAR3
*" EXPORTING
*" REFERENCE(E_BELNR_F_05) TYPE BELNR
*" REFERENCE(E_BELNR_F_51) TYPE BELNR
*" TABLES
*" T_ZYCIT100 STRUCTURE /PWS/ZYCIT100 OPTIONAL
*" T_ZYCIT003 STRUCTURE /PWS/ZYCIT003 OPTIONAL
*" T_ZYCBT032 STRUCTURE /PWS/ZYCBT032 OPTIONAL
*" ITAB_VARIACAO STRUCTURE /PWS/ZYCIT085 OPTIONAL
*" EXCEPTIONS
*" TABLE_INITIAL
*" EXISTE_RECEBIMENTO
*" FLAG_RECLASSIFICACAO
*" DADOS_DI_INICIAL
*"----------------------------------------------------------------------
*" DADOS_DI_INICIAL
*"----------------------------------------------------------------------
TABLES: /pws/zycit041,
/pws/zycit042.
DATA: BEGIN OF itab_matuse OCCURS 0 ,
ebeln TYPE ekpo-ebeln ,
ebelp TYPE ekpo-ebelp ,
matnr TYPE ekpo-matnr ,
bwtar TYPE ekpo-bwtar ,
j_1bmatuse TYPE ekpo-j_1bmatuse,
knttp TYPE ekpo-knttp ,
werks TYPE t001w-werks ,
bwkey TYPE mbew-bwkey ,
END OF itab_matuse .
DATA: BEGIN OF itab_bsis_aux1 OCCURS 10,
hkont TYPE bsis-hkont ,
dmbtr TYPE bsis-dmbtr ,
wrbtr TYPE bsis-wrbtr ,
belnr TYPE bsis-belnr ,
buzei TYPE bsis-buzei ,
tpfatura TYPE /pws/zycit006-tpfatura,
END OF itab_bsis_aux1.
DATA: BEGIN OF itab_zycit132 OCCURS 0.
INCLUDE STRUCTURE /pws/zycit132.
DATA: END OF itab_zycit132.
DATA:
itab_zycit094 TYPE /pws/zycie094 OCCURS 0 WITH HEADER LINE,
itab_zycit006 TYPE /pws/zycit006 OCCURS 0 WITH HEADER LINE,
itab_matuse_aux3 LIKE itab_matuse_aux OCCURS 0 WITH HEADER LINE,
itab_zycit263 TYPE /pws/zycit263 OCCURS 0 WITH HEADER LINE,
v_gjahr TYPE bsis-gjahr,
v_tntgew TYPE /pws/zycie003-ntgew,
v_rec_ia TYPE i.
*------------------- Se houver recebimento não pode fazer IA na DI
SELECT SINGLE * FROM /pws/zycit042
WHERE nrseq EQ i_zycit001-nrseq.
IF sy-subrc EQ 0.
SELECT SINGLE * FROM /pws/zycit041 INTO /pws/zycit041
WHERE nrseq EQ /pws/zycit042-nrseqnf AND
( belnr_mr1m NE space OR
mblnr_mb01 NE space OR
belnr_f_51 NE space OR
belnr_f_02 NE space OR
belnrf02fre NE space ).
ENDIF.
IF sy-subrc EQ 0 AND i_programa EQ 'DI'.
RAISE existe_recebimento.
ENDIF.
*-------------------Seleção de Parametros
SELECT SINGLE *
FROM t001
WHERE bukrs EQ i_zycit001-bukrs.
SELECT SINGLE *
FROM /pws/zycit000
WHERE land1 EQ t001-land1.
IF /pws/zycit000-flag_reclass IS INITIAL.
RAISE flag_reclassificacao.
ENDIF.
SELECT SINGLE *
FROM /pws/zycbt007
WHERE bukrs EQ i_zycit001-bukrs.
*-------------------Seleção de Dados
* Itens do embarque
IF t_zycit003[] IS INITIAL AND NOT i_zycit001-nrseq IS INITIAL.
SELECT *
FROM /pws/zycit003
INTO TABLE t_zycit003
WHERE nrseq EQ i_zycit001-nrseq.
ENDIF.
* Itens da DI
IF t_zycit100[] IS INITIAL AND NOT i_zycit001-nrseq IS INITIAL.
SELECT *
FROM /pws/zycit100
INTO TABLE t_zycit100
WHERE nrseq EQ i_zycit001-nrseq.
ENDIF.
READ TABLE t_zycit100 INDEX 1.
* DI cabeçalho
SELECT SINGLE *
FROM /pws/zycit085
INTO /pws/zycie085
WHERE nrseqdi EQ t_zycit100-nrseqdi.
IF /pws/zycie085-nrdi IS INITIAL OR /pws/zycie085-dtreg IS INITIAL.
RAISE dados_di_inicial.
ENDIF.
* BL
IF NOT t_zycit003[] IS INITIAL.
SELECT *
FROM /pws/zycit094
INTO TABLE itab_zycit094
FOR ALL ENTRIES IN t_zycit003
WHERE nrseq = t_zycit003-nrseq.
ENDIF.
READ TABLE itab_zycit094 INDEX 1.
* Seleciona fatura(cabeçalho)
SELECT *
FROM /pws/zycit006
INTO TABLE itab_zycit006
WHERE nrseqce EQ itab_zycit094-nrseqce
AND tpfatura NE '11'
AND eliminado EQ space.
* Dados do BL
SELECT SINGLE *
FROM /pws/zycit093
WHERE nrseqce EQ itab_zycit094-nrseqce.
*-------------------Raise table_initial
IF itab_zycit006[] IS INITIAL OR
itab_zycit094[] IS INITIAL OR
t_zycit100[] IS INITIAL OR
t_zycit003[] IS INITIAL.
RAISE table_initial.
ENDIF.
* Caso exista faturas parceladas os registro são gravado na tabela IT132
* Essa rotina "joga" os registros para o table IT006
* Verificando Faturas Parceladas
REFRESH itab_zycit132. CLEAR itab_zycit132.
LOOP AT itab_zycit006 WHERE belnr_p IS initial AND
tpfatura = '01'.
SELECT *
FROM /pws/zycit132
APPENDING TABLE itab_zycit132
WHERE nrseq = itab_zycit006-nrseq AND
eliminado = space.
ENDLOOP.
LOOP AT itab_zycit132.
READ TABLE itab_zycit006 WITH KEY nrseq = itab_zycit132-nrseq.
IF sy-subrc = 0.
MOVE: itab_zycit132-belnr_p TO itab_zycit006-belnr_p,
itab_zycit132-dt_belnrp TO itab_zycit006-dt_belnrp.
APPEND itab_zycit006.
ENDIF.
ENDLOOP.
* Deleta registros com o numero do documento em branco,
* caso não estaja contabilzado não faz variação
LOOP AT itab_zycit006 WHERE belnr_p IS initial.
DELETE itab_zycit006.
ENDLOOP.
SORT itab_zycit006 BY belnr_p.
* Itens do pedido de compra
CLEAR: itab_matuse.
REFRESH: itab_matuse.
IF NOT t_zycit003[] IS INITIAL.
SELECT ebeln ebelp matnr bwtar j_1bmatuse knttp werks
FROM ekpo INTO TABLE itab_matuse
FOR ALL ENTRIES IN t_zycit003
WHERE ebeln = t_zycit003-ebeln
AND ebelp = t_zycit003-ebelp.
ENDIF.
* Verificação dos matuse e suas respectivas contas.
LOOP AT itab_matuse.
READ TABLE t_zycit003 WITH KEY ebeln = itab_matuse-ebeln
ebelp = itab_matuse-ebelp.
* Busca o número da conta específica, passando a chave de
* operação a ela relacionada.
CLEAR itab_cta. REFRESH itab_cta.
CALL FUNCTION '/PWS/ZYGL_READ_ACCOUNT_NUMBER'
EXPORTING
bukrs = i_zycit001-bukrs
ktosl = 'IPA'
werks = t_zycit003-werks
bklas = space
codaux1 = itab_matuse-j_1bmatuse
codaux2 = space
codaux3 = space
TABLES
account = itab_cta
EXCEPTIONS
key_not_found = 1 " Chave não encontrada
rules_not_found = 2 " Regras não parametrizadas
OTHERS = 3. " Outros erros
READ TABLE itab_cta INDEX 1.
READ TABLE itab_matuse_aux
WITH KEY hkont = itab_cta-konth
j_1bmatuse = itab_matuse-j_1bmatuse.
IF sy-subrc NE 0.
MOVE: itab_matuse-j_1bmatuse TO itab_matuse_aux-j_1bmatuse,
itab_cta-konth TO itab_matuse_aux-hkont .
APPEND itab_matuse_aux.
CLEAR itab_matuse_aux.
ENDIF.
ENDLOOP.
*--------seleciona a tabela BSIS, que é a tabela de documentos p/
*-----------fazer a variação(com esses documentos).
MOVE itab_matuse_aux[] TO itab_matuse_aux3[].
SORT itab_matuse_aux3 BY hkont.
DELETE ADJACENT DUPLICATES FROM itab_matuse_aux3 COMPARING hkont.
LOOP AT itab_zycit006.
IF NOT itab_matuse_aux3[] IS INITIAL.
LOOP AT itab_matuse_aux3.
UNPACK itab_zycit006-belnr_p TO itab_zycit006-belnr_p.
CALL FUNCTION '/PWS/ZYGL_OBTEM_ANO_CONTABIL'
EXPORTING
v_bukrs = i_zycit001-bukrs
v_date = itab_zycit006-dt_belnrp
IMPORTING
v_year = v_gjahr.
IF sy-subrc NE 0.
v_gjahr = itab_zycit006-dtlanc+0(4).
ENDIF.
SELECT hkont dmbtr wrbtr belnr buzei
FROM bsis
INTO TABLE itab_bsis_aux1
WHERE bukrs EQ /pws/zycie085-bukrs
AND hkont EQ itab_matuse_aux3-hkont
AND gjahr EQ v_gjahr
AND belnr EQ itab_zycit006-belnr_p.
LOOP AT itab_bsis_aux1.
MOVE: itab_bsis_aux1-hkont TO itab_bsis-hkont,
itab_bsis_aux1-buzei TO itab_bsis-buzei,
itab_bsis_aux1-belnr TO itab_bsis-belnr.
itab_bsis-dmbtr = itab_bsis-dmbtr + itab_bsis_aux1-dmbtr.
itab_bsis-wrbtr = itab_bsis-wrbtr + itab_bsis_aux1-wrbtr.
ENDLOOP.
IF sy-subrc = 0.
MOVE itab_zycit006-tpfatura TO itab_bsis-tpfatura.
APPEND itab_bsis.
CLEAR itab_bsis.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
* Caso não esteja flegado na IT00 não faz a provisão
IF NOT /pws/zycit000-provfre IS INITIAL.
DELETE itab_bsis WHERE tpfatura = '02'.
ENDIF.
IF NOT /pws/zycit000-provseg IS INITIAL.
DELETE itab_bsis WHERE tpfatura = '03'.
ENDIF.
MOVE itab_matuse_aux[] TO itab_matuse_aux2[].
LOOP AT itab_bsis.
MOVE: itab_bsis-hkont TO itab_bsis_aux-hkont ,
itab_bsis-wrbtr TO itab_bsis_aux-wrbtr ,
itab_bsis-dmbtr TO itab_bsis_aux-dmbtr ,
itab_bsis-tpfatura TO itab_bsis_aux-tpfatura.
COLLECT itab_bsis_aux.
ENDLOOP.
LOOP AT itab_matuse.
READ TABLE t_zycit003 WITH KEY ebeln = itab_matuse-ebeln
ebelp = itab_matuse-ebelp.
READ TABLE itab_zycit094 WITH KEY nrseq = t_zycit003-nrseq.
READ TABLE itab_zycit006 WITH KEY nrseqce = itab_zycit094-nrseqce.
READ TABLE itab_matuse_aux
WITH KEY j_1bmatuse = itab_matuse-j_1bmatuse.
IF sy-subrc NE 0.
MOVE: itab_matuse-j_1bmatuse TO itab_matuse_aux-j_1bmatuse.
* MOVE: itab_matuse-knttp TO itab_matuse_aux-knttp.
* Busca o número da conta específica, passando a chave de
* operação a ela relacionada.
CLEAR itab_cta. REFRESH itab_cta.
CALL FUNCTION '/PWS/ZYGL_READ_ACCOUNT_NUMBER'
EXPORTING
bukrs = i_zycit001-bukrs
ktosl = 'VCI'
werks = t_zycit003-werks
bklas = space
codaux1 = itab_matuse_aux-hkont
codaux2 = itab_zycit006-tpfatura
codaux3 = space
TABLES
account = itab_cta
EXCEPTIONS
key_not_found = 1 " Chave não encontrada
rules_not_found = 2 " Regras não parametrizadas
OTHERS = 3. " Outros erros
READ TABLE itab_cta INDEX 1.
IF itab_cta-konts IS INITIAL.
* Busca o número da conta específica, passando a chave de
* operação a ela relacionada.
CLEAR itab_cta. REFRESH itab_cta.
CALL FUNCTION '/PWS/ZYGL_READ_ACCOUNT_NUMBER'
EXPORTING
bukrs = i_zycit001-bukrs
ktosl = 'VCI'
werks = t_zycit003-werks
bklas = space
codaux1 = itab_matuse_aux-hkont
codaux2 = space
codaux3 = space
TABLES
account = itab_cta
EXCEPTIONS
key_not_found = 1 " Chave não encontrada
rules_not_found = 2 " Regras não parametrizadas
OTHERS = 3. " Outros erros
ENDIF.
APPEND itab_matuse_aux.
CLEAR itab_matuse_aux.
ENDIF.
ENDLOOP.
CLEAR v_tntgew.
LOOP AT t_zycit003.
v_tntgew = v_tntgew + t_zycit003-ntgew.
ENDLOOP.
IF itab_zycit263[] IS INITIAL AND NOT itab_zycit006[] IS INITIAL.
SELECT *
FROM /pws/zycit263
INTO TABLE itab_zycit263
FOR ALL ENTRIES IN itab_zycit006
WHERE nrseq_pgfat EQ itab_zycit006-nrseq_pgfat.
ENDIF.
LOOP AT t_zycit100.
READ TABLE itab_zycit263 WITH KEY ebeln = t_zycit100-ebeln
ebelp = t_zycit100-ebelp.
CLEAR itab_zycit006.
READ TABLE itab_zycit006
WITH KEY nrseq_pgfat = itab_zycit263-nrseq_pgfat.
CHECK NOT itab_zycit006-belnr_p IS INITIAL.
CLEAR: itab_matuse, itab_matuse_aux.
READ TABLE itab_matuse WITH KEY ebeln = t_zycit100-ebeln
ebelp = t_zycit100-ebelp.
READ TABLE itab_matuse_aux WITH KEY
j_1bmatuse = itab_matuse-j_1bmatuse.
MOVE: itab_matuse_aux-hkont TO itab_di-hkont,
t_zycit100-vlseg TO itab_di-vlseg,
t_zycit100-vlfre TO itab_di-vlfre.
itab_di-vlfob = t_zycit100-dttaxbem * t_zycit100-vlfob.
IF NOT /pws/zycit093-ternacion IS INITIAL.
READ TABLE t_zycit003 WITH KEY
nrseq = t_zycit100-nrseq
ebeln = t_zycit100-ebeln
ebelp = t_zycit100-ebelp .
IF NOT v_tntgew IS INITIAL.
itab_di-vlfren = ( ( t_zycit003-ntgew / v_tntgew ) *
/pws/zycit093-ternacion ) * /pws/zycie085-ukursfre .
ENDIF.
ENDIF.
itab_di-vldi = itab_di-vlfob + itab_di-vlseg +
itab_di-vlfre + itab_di-vlfren.
COLLECT itab_di.
CLEAR itab_di.
ENDLOOP.
CLEAR: v_rec_ia, v_rec_ia_1.
LOOP AT itab_matuse_aux2.
* Verifica se já existe doctos compensados.
READ TABLE itab_bsis_aux WITH KEY hkont = itab_matuse_aux2-hkont.
IF sy-subrc NE 0.
CONTINUE.
ENDIF.
IF itab_matuse_aux2-j_1bmatuse = 0.
IF /pws/zycie085-belnr_0 IS INITIAL OR
/pws/zycie085-flag_reclass IS INITIAL.
IF /pws/zycie085-belnr_0_f05 IS INITIAL.
v_rec_ia = v_rec_ia + 1.
PERFORM fill_date_f_05_variacao TABLES t_zycbt032
t_zycit003
USING /pws/zycbt007
i_zycit001
v_modo.
IF NOT v_belnrf05 IS INITIAL. "Documento da F05
PERFORM fill_date_f_51_variacao TABLES t_zycbt032
t_zycit003
itab_zycit006
USING /pws/zycbt007
i_zycit001
v_modo.
ELSE.
* MESSAGE i015 WITH text-218.
ENDIF.
ENDIF.
ENDIF.
ELSEIF itab_matuse_aux2-j_1bmatuse = 1.
IF /pws/zycie085-belnr_1 IS INITIAL OR
/pws/zycie085-flag_reclass IS INITIAL.
IF /pws/zycie085-belnr_1_f05 IS INITIAL.
v_rec_ia = v_rec_ia + 1.
PERFORM fill_date_f_05_variacao TABLES t_zycbt032
t_zycit003
USING /pws/zycbt007
i_zycit001
v_modo.
IF NOT v_belnrf05 IS INITIAL. "Documento da F05
PERFORM fill_date_f_51_variacao TABLES t_zycbt032
t_zycit003
itab_zycit006
USING /pws/zycbt007
i_zycit001
v_modo.
ELSE.
* MESSAGE i015 WITH text-218.
ENDIF.
ENDIF.
ENDIF.
ELSEIF itab_matuse_aux2-j_1bmatuse = 2.
IF /pws/zycie085-belnr_2 IS INITIAL OR
/pws/zycie085-flag_reclass IS INITIAL.
IF /pws/zycie085-belnr_2_f05 IS INITIAL.
v_rec_ia = v_rec_ia + 1.
PERFORM fill_date_f_05_variacao TABLES t_zycbt032
t_zycit003
USING /pws/zycbt007
i_zycit001
v_modo.
IF NOT v_belnrf05 IS INITIAL. "Documento da F05
PERFORM fill_date_f_51_variacao TABLES t_zycbt032
t_zycit003
itab_zycit006
USING /pws/zycbt007
i_zycit001
v_modo.
ELSE.
* MESSAGE i015 WITH text-218.
ENDIF.
ENDIF.
ENDIF.
ELSEIF itab_matuse_aux2-j_1bmatuse = 3.
IF /pws/zycie085-belnr_3 IS INITIAL OR
/pws/zycie085-flag_reclass IS INITIAL.
IF /pws/zycie085-belnr_3_f05 IS INITIAL.
v_rec_ia = v_rec_ia + 1.
PERFORM fill_date_f_05_variacao TABLES t_zycbt032
t_zycit003
USING /pws/zycbt007
i_zycit001
v_modo.
IF NOT v_belnrf05 IS INITIAL. "Documento da F05
PERFORM fill_date_f_51_variacao TABLES t_zycbt032
t_zycit003
itab_zycit006
USING /pws/zycbt007
i_zycit001
v_modo.
ELSE.
* MESSAGE i015 WITH text-218.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
itab_variacao-belnr_0 = /pws/zycie085-belnr_0.
itab_variacao-belnr_1 = /pws/zycie085-belnr_1.
itab_variacao-belnr_2 = /pws/zycie085-belnr_2.
itab_variacao-belnr_3 = /pws/zycie085-belnr_3.
itab_variacao-budat_0 = /pws/zycie085-budat_0.
itab_variacao-budat_1 = /pws/zycie085-budat_1.
itab_variacao-budat_2 = /pws/zycie085-budat_2.
itab_variacao-budat_3 = /pws/zycie085-budat_3.
itab_variacao-belnr_0_f05 = /pws/zycie085-belnr_0_f05.
itab_variacao-belnr_1_f05 = /pws/zycie085-belnr_1_f05.
itab_variacao-belnr_2_f05 = /pws/zycie085-belnr_2_f05.
itab_variacao-belnr_3_f05 = /pws/zycie085-belnr_3_f05.
append itab_variacao.
* verificando se todos os lançamentos foram feitos com exito.
IF NOT v_rec_ia IS INITIAL AND v_rec_ia = v_rec_ia_1.
UPDATE /pws/zycit085 SET flag_reclass = 'X'
WHERE nrseqdi = /pws/zycie085-nrseqdi.
ENDIF.
ENDFUNCTION.
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/LZYCIGF2F01
*Criado o trecho abaixo:
FORM fill_date_f_05_variacao TABLES p_zycbt032 STRUCTURE /pws/zycbt032
p_zycit003 STRUCTURE /pws/zycit003
USING p_zycbt007 STRUCTURE /pws/zycbt007
p_zycit001 STRUCTURE /pws/zycit001
v_modo.
DATA: itab_zycbe033 LIKE /pws/zycbe033 OCCURS 10 WITH HEADER LINE,
itab_zycbt011 TYPE /pws/zycbt011 OCCURS 10 WITH HEADER LINE,
v_sgtxt LIKE bseg-sgtxt,
v_zuonr LIKE bseg-zuonr,
v_xblnr LIKE bkpf-xblnr,
v_bktxt LIKE bkpf-bktxt.
SELECT *
FROM /pws/zycbt011
INTO TABLE itab_zycbt011
WHERE codmod = 'D'.
READ TABLE itab_zycbt011 WITH KEY codeven = '001VM'.
* Mandante
itab_zycbe033-mandt = sy-mandt.
* Código da transação
itab_zycbe033-tcode = 'F-05'.
* Nome da Tabela de Fatura
itab_zycbe033-tabela = '/PWS/ZYCIT044'.
* Campo chave da tabela de Financ.
itab_zycbe033-cpochv = /pws/zycie085-nrseqdi.
** Data do lançamento
itab_zycbe033-bldat = sy-datlo.
itab_zycbe033-d_valut = sy-datlo.
* Data do lançamento
itab_zycbe033-budat = sy-datlo.
* Texto cabeçalho
itab_zycbe033-bktxt = p_zycbt007-bktxt.
* Conta do razão para a busca das partidas
itab_zycbe033-d_newko = itab_matuse_aux2-hkont.
* Tipo de Conta
itab_zycbe033-agkoa = 'S'. "contas do razão
* Divisão
READ TABLE p_zycit003 INDEX 1.
itab_zycbe033-d_gsber = p_zycit003-gsber.
itab_zycbe033-c_gsber = p_zycit003-gsber.
* Empresa
* PERFORM verify_null_field USING i_zycit001-bukrs
* 'BUKRS'
* text-157.
itab_zycbe033-bukrs = p_zycit001-bukrs.
* Moeda
* PERFORM verify_null_field USING wa_zycbt007-waersb
* 'WAERS'
* text-158.
itab_zycbe033-waers = p_zycbt007-waersb.
*
** Tipo de documento
* PERFORM verify_null_field USING wa_zycbt011-blart
* 'BLART'
* text-159.
itab_zycbe033-blart = itab_zycbt011-blart.
* Cabeçalho - Textos
CLEAR: v_xblnr, v_zuonr, v_sgtxt, v_bktxt.
* READ TABLE itab_zycit100 WITH KEY nrseqdi = /pws/zycie085-nrseqdi.
CALL FUNCTION '/PWS/ZYCI_TEXTOS_CONTABEIS'
EXPORTING
v_nrseq = p_zycit001-nrseq
* v_nrfat = /pws/zycie006-nrfat
* V_EBELP =
* V_EBELN =
v_codeven = '001VM'
* V_KTOSL =
* V_NFSERV =
* V_NRPARC =
IMPORTING
v_xblnr = v_xblnr
v_zuonr = v_zuonr
v_sgtxt = v_sgtxt
v_bktxt = v_bktxt
.
itab_zycbe033-d_zuonr = itab_zycbe033-c_zuonr = v_zuonr.
itab_zycbe033-d_sgtxt = itab_zycbe033-c_sgtxt = v_sgtxt.
itab_zycbe033-xblnr = v_xblnr.
itab_zycbe033-bktxt = v_bktxt.
APPEND itab_zycbe033.
PERFORM lanctos_variacao TABLES itab_zycbt011
USING p_zycbt007
p_zycit001
itab_zycbe033.
LOOP AT itab_contas.
CLEAR: v_xblnr, v_zuonr, v_sgtxt, v_bktxt.
CALL FUNCTION '/PWS/ZYCI_TEXTOS_CONTABEIS'
EXPORTING
v_nrseq = p_zycit001-nrseq
* v_nrfat = /pws/zycie006-nrfat
* V_EBELP =
* V_EBELN =
v_codeven = '001VM'
v_ktosl = 'VCI'
* V_NFSERV =
* V_NRPARC =
* V_DESCR1 =
IMPORTING
v_xblnr = v_xblnr
v_zuonr = v_zuonr
v_sgtxt = v_sgtxt
v_bktxt = v_bktxt
.
itab_contas-d_sgtxt = itab_contas-c_sgtxt = v_sgtxt.
itab_contas-d_zuonr = itab_contas-c_zuonr = v_zuonr.
itab_contas-d_xblnr = itab_contas-c_xblnr = v_xblnr.
* Lança Divisão
* itab_contas-d_gsber = itab_contas-c_gsber = /pws/zycie003-gsber.
MODIFY itab_contas.
ENDLOOP.
* Exit usada na variação da DI, tazida para o função
e_subrc = '0' .
* e_contab = 'F05'.
PERFORM verifica_exit USING 'D'
'/PWS/SAPMZYCI023'
'DI005'.
CLEAR itab_zyglt100 .
READ TABLE itab_zyglt100 WITH KEY zexit = 'DI005' 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.
IF e_subrc = '8'.
EXIT.
ENDIF.
ENDIF.
ENDIF.
IF e_subrc = '0'.
IF NOT v_erro_f05 EQ 'S'. "caso não haja variação
CALL FUNCTION '/PWS/ZYCI_TRANSACAO_F_05'
EXPORTING
v_modo = v_modo
TABLES
t_dados = itab_zycbe033
t_contas = itab_contas
t_zycbt032 = p_zycbt032
EXCEPTIONS
campo_em_branco = 1
periodo_fechado = 2
OTHERS = 3.
IF sy-subrc EQ 0.
READ TABLE p_zycbt032 WITH KEY tcode = 'F-05'
tabela = '/PWS/ZYCIT044'
cpochv = /pws/zycie085-nrseqdi
tpmsg = 'S'.
IF sy-subrc = 0.
* MESSAGE i015 WITH text-216 itab_zycbt032-belnr
* text-217 /pws/zycie085-bukrs.
CLEAR: v_belnrf05.
LOOP AT itab_matuse_aux WHERE
hkont = itab_matuse_aux2-hkont.
IF itab_matuse_aux-j_1bmatuse = 0.
/pws/zycie085-belnr_0_f05 = p_zycbt032-belnr.
v_belnrf05 = /pws/zycie085-belnr_0_f05.
ELSEIF itab_matuse_aux-j_1bmatuse = 1.
/pws/zycie085-belnr_1_f05 = p_zycbt032-belnr.
v_belnrf05 = /pws/zycie085-belnr_1_f05.
ELSEIF itab_matuse_aux-j_1bmatuse = 2.
/pws/zycie085-belnr_2_f05 = p_zycbt032-belnr.
v_belnrf05 = /pws/zycie085-belnr_2_f05.
ELSEIF itab_matuse_aux-j_1bmatuse = 3.
/pws/zycie085-belnr_3_f05 = p_zycbt032-belnr.
v_belnrf05 = /pws/zycie085-belnr_3_f05.
ENDIF.
ENDLOOP.
UPDATE /pws/zycit085 SET belnr_0_f05 = /pws/zycie085-belnr_0_f05
belnr_1_f05 = /pws/zycie085-belnr_1_f05
belnr_2_f05 = /pws/zycie085-belnr_2_f05
belnr_3_f05 = /pws/zycie085-belnr_3_f05
WHERE nrseqdi = /pws/zycie085-nrseqdi.
COMMIT WORK.
ELSE.
LOOP AT p_zycbt032.
* MESSAGE i104 WITH itab_zycbt032-msg+0(50)
* itab_zycbt032-msg+50(50).
ENDLOOP.
ENDIF.
ELSE.
LOOP AT p_zycbt032.
* MESSAGE i104 WITH itab_zycbt032-msg+0(50)
* itab_zycbt032-msg+50(50).
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " fill_date_f_05_variacao
*&---------------------------------------------------------------------*
*& Form lanctos_variacao
*&---------------------------------------------------------------------*
FORM lanctos_variacao TABLES itab_zycbt011 STRUCTURE /pws/zycbt011
USING p_zycbt007 STRUCTURE /pws/zycbt007
p_zycit001 STRUCTURE /pws/zycit001
itab_zycbe033 STRUCTURE /pws/zycbe033.
DATA: itab_zycbt012 TYPE /pws/zycbt012 OCCURS 10 WITH HEADER LINE,
v_soma TYPE /pws/zycit085-vlfob,
vl_variacao TYPE /pws/zycit085-vlfob.
SELECT * FROM /pws/zycbt012 INTO TABLE itab_zycbt012
WHERE codmod = 'D'.
SELECT SINGLE *
FROM /pws/zycit031
WHERE codmod EQ 'D'
AND inco1 EQ p_zycit001-inco1
AND land1 EQ t001-land1.
LOOP AT itab_bsis_aux WHERE hkont = itab_matuse_aux2-hkont.
READ TABLE itab_di WITH KEY hkont = itab_matuse_aux2-hkont.
IF itab_bsis_aux-tpfatura = '01'.
READ TABLE itab_zycbt011 WITH KEY codeven = '001VM'.
READ TABLE itab_zycbt012 WITH KEY
codeven = '001VM'
codaux = itab_matuse_aux2-j_1bmatuse.
* Lançamentos de variação
IF /pws/zycit031-inco1_ci = 'FOB'.
vl_variacao = itab_di-vlfob - itab_bsis_aux-dmbtr.
IF itab_zycbe033-tcode = 'F-51'
AND NOT v_belnrf05 IS INITIAL.
PERFORM: move_lanctos USING itab_di-vlfob
vl_variacao.
ELSEIF itab_zycbe033-tcode = 'F-51'.
PERFORM move_lanctos USING itab_di-vlfob
vl_variacao.
ELSEIF itab_zycbe033-tcode = 'F-05'.
* IF vl_variacao > '0.03'.
if not vl_variacao is initial.
PERFORM move_lanctos_f05 USING vl_variacao.
ELSE.
v_erro_f05 = 'S'.
ENDIF.
ENDIF.
ELSEIF /pws/zycit031-inco1_ci = 'C&F'.
vl_variacao = itab_di-vlfob + itab_di-vlfre + itab_di-vlfren -
itab_bsis_aux-dmbtr.
v_soma = itab_di-vlfob + itab_di-vlfre + itab_di-vlfren .
IF itab_zycbe033-tcode = 'F-51'
AND NOT v_belnrf05 IS INITIAL.
PERFORM: move_lanctos USING v_soma
vl_variacao.
ELSEIF itab_zycbe033-tcode = 'F-51'.
PERFORM move_lanctos USING v_soma
vl_variacao.
ELSEIF itab_zycbe033-tcode = 'F-05'.
IF vl_variacao > '0.03'.
PERFORM move_lanctos_f05 USING vl_variacao.
ELSE.
v_erro_f05 = 'S'.
ENDIF.
ENDIF.
ELSEIF /pws/zycit031-inco1_ci = 'CIF'.
vl_variacao = itab_di-vlfob + itab_di-vlfre + itab_di-vlfren +
itab_di-vlseg - itab_bsis_aux-dmbtr.
IF itab_zycbe033-tcode = 'F-51'
AND NOT v_belnrf05 IS INITIAL.
PERFORM: move_lanctos USING itab_di-vldi
vl_variacao.
ELSEIF itab_zycbe033-tcode = 'F-51'.
PERFORM move_lanctos USING itab_di-vldi
vl_variacao.
ELSEIF itab_zycbe033-tcode = 'F-05'.
IF vl_variacao > '0.03'.
PERFORM move_lanctos_f05 USING vl_variacao.
ELSE.
v_erro_f05 = 'S'.
ENDIF.
ENDIF.
ENDIF.
ELSEIF itab_bsis_aux-tpfatura = '02'
AND NOT itab_di-vlfre IS INITIAL.
IF NOT /pws/zycit000-provfre IS INITIAL.
CONTINUE.
ENDIF.
READ TABLE itab_zycbt011 WITH KEY codeven = '001VF'.
READ TABLE itab_zycbt012 WITH KEY
codaux = itab_matuse_aux2-j_1bmatuse
codeven = '001VF'.
* Valor da variação
vl_variacao = itab_di-vlfre - itab_bsis_aux-dmbtr.
IF itab_zycbe033-tcode = 'F-51'.
PERFORM move_lanctos USING itab_di-vlfre
vl_variacao.
ELSEIF itab_zycbe033-tcode = 'F-05'.
IF vl_variacao > '0.03'.
PERFORM move_lanctos_f05 USING vl_variacao.
ELSE.
v_erro_f05 = 'S'.
ENDIF.
ENDIF.
ELSEIF itab_bsis_aux-tpfatura = '03'
AND NOT itab_di-vlfre IS INITIAL.
IF NOT /pws/zycit000-provseg IS INITIAL.
CONTINUE.
ENDIF.
READ TABLE itab_zycbt011 WITH KEY codeven = '001VS'.
READ TABLE itab_zycbt012 WITH KEY
codaux = itab_matuse_aux2-j_1bmatuse
codeven = '001VS'.
* Valor da variação
vl_variacao = itab_di-vlseg - itab_bsis_aux-dmbtr.
IF itab_zycbe033-tcode = 'F-51'.
PERFORM move_lanctos USING itab_di-vlfre
vl_variacao.
ELSEIF itab_zycbe033-tcode = 'F-05'.
IF vl_variacao > '0.03'.
PERFORM move_lanctos_f05 USING vl_variacao.
ELSE.
v_erro_f05 = 'S'.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " lanctos_variacao
*&---------------------------------------------------------------------*
*& Form move_lanctos
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ITAB_DI_VLFOB text
*----------------------------------------------------------------------*
FORM move_lanctos USING p_valor
vl_variacao.
DATA: v_conta TYPE hkont,
vl_variacao_aux TYPE p DECIMALS 2,
v_valor_variacao TYPE p DECIMALS 2,
v_diferenca TYPE p DECIMALS 2.
MOVE vl_variacao TO vl_variacao_aux.
IF vl_variacao_aux < 0.
v_valor_variacao = itab_bsis_aux-dmbtr - ABS( vl_variacao_aux ).
ELSE.
v_valor_variacao = itab_bsis_aux-dmbtr + ABS( vl_variacao_aux ).
ENDIF.
v_diferenca = v_valor_variacao - p_valor.
IF ( v_diferenca < 1
AND v_diferenca > -1
AND v_diferenca NE 0 ).
p_valor = v_valor_variacao.
ENDIF.
* Valor da variação
itab_contas-tcode = 'F-51'.
itab_contas-mandt = sy-mandt.
itab_contas-tabela = '/PWS/ZYCIT044'.
IF v_belnrf05 IS INITIAL.
* Retira zeros à esquerda
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
* input = itab_matuse_aux-hkont
input = itab_matuse_aux2-hkont
IMPORTING
output = v_conta.
* Busca o número da conta específica, passando a chave de
* operação a ela relacionada.
CLEAR itab_cta. REFRESH itab_cta.
CALL FUNCTION '/PWS/ZYGL_READ_ACCOUNT_NUMBER'
EXPORTING
bukrs = /pws/zycie085-bukrs
ktosl = 'VCI'
werks = space
bklas = space
codaux1 = v_conta
codaux2 = itab_bsis_aux-tpfatura
codaux3 = space
TABLES
account = itab_cta " Retorno das contas
EXCEPTIONS
key_not_found = 1 " Chave não encontrada
rules_not_found = 2 " Regras não parametrizadas
OTHERS = 3. " Outros erros
IF vl_variacao >= 0.
READ TABLE itab_cta INDEX 1.
itab_contas-bschl = '50'.
itab_contas-wrbtr = abs( vl_variacao ).
itab_contas-d_newko = itab_cta-konth.
ELSE.
READ TABLE itab_cta INDEX 1.
itab_contas-bschl = '40'.
itab_contas-wrbtr = abs( vl_variacao ).
itab_contas-d_newko = itab_cta-konts.
ENDIF.
APPEND itab_contas.
CLEAR itab_contas.
ENDIF.
* Valor da DI
itab_contas-tcode = 'F-51'.
itab_contas-mandt = sy-mandt.
itab_contas-tabela = '/PWS/ZYCIT044'.
itab_contas-bschl = '40'.
itab_contas-wrbtr = p_valor .
itab_contas-d_newko = itab_bsis_aux-hkont.
APPEND itab_contas.
CLEAR itab_contas.
ENDFORM. " move_lanctos
*&---------------------------------------------------------------------*
*& Form move_lanctos_f05
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM move_lanctos_f05 USING vl_variacao.
DATA: v_conta TYPE hkont,
v_variadec TYPE /pws/zycit085-vlfre.
CLEAR v_erro_f05.
itab_contas-tcode = 'F-05'.
itab_contas-mandt = sy-mandt.
itab_contas-tabela = '/PWS/ZYCIT044'.
IF vl_variacao > 0.
itab_contas-bschl = '40'.
ELSEIF vl_variacao < 0.
itab_contas-bschl = '50'.
ELSE .
v_erro_f05 = 'S'.
ENDIF.
v_variadec = vl_variacao.
itab_contas-wrbtr = abs( v_variadec ).
itab_contas-d_newko = itab_bsis_aux-hkont.
APPEND itab_contas.
CLEAR itab_contas.
itab_contas-tcode = 'F-05'.
itab_contas-mandt = sy-mandt.
itab_contas-tabela = '/PWS/ZYCIT044'.
* Retira zeros à esquerda
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
* input = itab_matuse_aux-hkont
input = itab_matuse_aux2-hkont
IMPORTING
output = v_conta.
" Busca o número da conta específica, passando a chave de
" operação a ela relacionada.
CLEAR itab_cta. REFRESH itab_cta.
CALL FUNCTION '/PWS/ZYGL_READ_ACCOUNT_NUMBER'
EXPORTING
bukrs = /pws/zycie085-bukrs
ktosl = 'VCI'
werks = space
bklas = space
codaux1 = v_conta
codaux2 = itab_bsis_aux-tpfatura
codaux3 = space
TABLES
account = itab_cta " Retorno das contas
EXCEPTIONS
key_not_found = 1 " Chave não encontrada
rules_not_found = 2 " Regras não parametrizadas
OTHERS = 3. " Outros erros
READ TABLE itab_cta INDEX 1.
* if itab_bsis_aux-dmbtr < itab_di-vlfob.
IF vl_variacao > 0.
itab_contas-bschl = '50'.
itab_contas-d_newko = itab_cta-konth.
ELSE.
* elseif itab_bsis_aux-dmbtr > itab_di-vlfob.
itab_contas-bschl = '40'.
itab_contas-d_newko = itab_cta-konts.
ENDIF.
itab_contas-wrbtr = abs( vl_variacao ).
* itab_contas-d_newko = itab_cta-konts.
APPEND itab_contas.
CLEAR itab_contas.
ENDFORM. " move_lanctos_f05
*&---------------------------------------------------------------------*
*& Form fill_date_f_51_variacao
*&---------------------------------------------------------------------*
FORM fill_date_f_51_variacao TABLES p_zycbt032 STRUCTURE /pws/zycbt032
p_zycit003 STRUCTURE /pws/zycit003
p_zycit006 STRUCTURE /pws/zycit006
USING p_zycbt007 STRUCTURE /pws/zycbt007
p_zycit001 STRUCTURE /pws/zycit001
v_modo.
.
DATA: itab_zycbe033 TYPE /pws/zycbe033 OCCURS 10 WITH HEADER LINE,
itab_zycbt011 TYPE /pws/zycbt011 OCCURS 10 WITH HEADER LINE,
itab_zycbt036 TYPE /pws/zycbt036 OCCURS 10 WITH HEADER LINE,
v_ano TYPE t001b-frye1,
v_sgtxt TYPE bseg-sgtxt,
v_zuonr TYPE bseg-zuonr,
v_xblnr TYPE bkpf-xblnr,
v_bktxt TYPE bkpf-bktxt.
FREE: itab_zycbe033, itab_contas, itab_zycbt036.
CLEAR: itab_zycbe033, itab_contas, itab_zycbt036.
SELECT SINGLE * FROM /pws/zycbt011 INTO itab_zycbt011
WHERE codmod = 'D'.
READ TABLE itab_zycbt011 WITH KEY codeven = '001VM'.
* Mandante
itab_zycbe033-mandt = sy-mandt.
* Código da transação
itab_zycbe033-tcode = 'F-51'.
* Nome da Tabela de Fatura
itab_zycbe033-tabela = '/PWS/ZYCIT044'.
* Campo chave da tabela de Financ.
itab_zycbe033-cpochv = /pws/zycie085-nrseqdi.
* Data do documento e data valor de acordo com param. geral
itab_zycbe033-bldat = sy-datlo.
itab_zycbe033-d_valut = sy-datlo.
* Data do lançamento
itab_zycbe033-budat = sy-datlo.
* Conta do razão para a busca das partidas
itab_zycbe033-d_newko = itab_matuse_aux2-hkont.
* Tipo de Conta
itab_zycbe033-agkoa = 'S'. "contas do razão
* Cabeçalho - Textos
CLEAR: v_xblnr, v_zuonr, v_sgtxt, v_bktxt.
CALL FUNCTION '/PWS/ZYCI_TEXTOS_CONTABEIS'
EXPORTING
v_nrseq = p_zycit001-nrseq
* v_nrfat = /pws/zycie006-nrfat
v_ebelp = p_zycit003-ebelp
v_ebeln = p_zycit003-ebeln
v_codeven = '001VM' "'002D'
* V_KTOSL =
* V_NFSERV =
* V_NRPARC =
IMPORTING
v_xblnr = v_xblnr
v_zuonr = v_zuonr
v_sgtxt = v_sgtxt
v_bktxt = v_bktxt
.
itab_zycbe033-d_zuonr = itab_zycbe033-c_zuonr = v_zuonr.
itab_zycbe033-d_sgtxt = itab_zycbe033-c_sgtxt = v_sgtxt.
itab_zycbe033-xblnr = v_xblnr.
itab_zycbe033-bktxt = v_bktxt.
READ TABLE p_zycit003 INDEX 1.
itab_zycbe033-d_gsber = p_zycit003-gsber.
itab_zycbe033-c_gsber = p_zycit003-gsber.
* Empresa
itab_zycbe033-bukrs = /pws/zycie085-bukrs.
* Moeda
itab_zycbe033-waers = p_zycbt007-waersb.
* Tipo de documento
itab_zycbe033-blart = itab_zycbt011-blart.
itab_zycbe033-brnch = /pws/zycie085-j_1bbranch.
APPEND itab_zycbe033.
LOOP AT p_zycit006 WHERE belnr_p NE space.
READ TABLE itab_di INDEX 1.
IF p_zycit006-tpfatura EQ '02' AND itab_di-vlfre IS INITIAL.
CONTINUE.
ELSEIF p_zycit006-tpfatura EQ '03' AND itab_di-vlseg IS INITIAL.
CONTINUE.
ENDIF.
UNPACK itab_matuse_aux2-hkont TO itab_matuse_aux2-hkont.
UNPACK p_zycit006-belnr_p TO p_zycit006-belnr_p.
READ TABLE itab_bsis WITH KEY hkont = itab_matuse_aux2-hkont
belnr = p_zycit006-belnr_p.
IF sy-subrc = 0.
itab_zycbt036-mandt = sy-mandt.
itab_zycbt036-tcode = 'F-51'.
itab_zycbt036-tabela = '/PWS/ZYCIT044'.
itab_zycbt036-cpochv = /pws/zycie085-nrseqdi.
itab_zycbt036-dtdocto = p_zycit006-dtlanc.
UNPACK itab_bsis-belnr TO itab_bsis-belnr.
itab_zycbt036-belnr = itab_bsis-belnr.
CALL FUNCTION '/PWS/ZYGL_OBTEM_ANO_CONTABIL'
EXPORTING
v_bukrs = /pws/zycie085-bukrs
v_date = p_zycit006-dt_belnrp
IMPORTING
v_year = v_ano.
IF sy-subrc NE 0.
v_ano = p_zycit006+0(4).
ENDIF.
SELECT SINGLE awkey FROM bkpf INTO itab_zycbt036-awkey
WHERE belnr = itab_bsis-belnr
AND bukrs = p_zycit006-bukrs
AND gjahr = v_ano.
APPEND itab_zycbt036.
CLEAR itab_zycbt036.
ENDIF.
ENDLOOP.
PERFORM lanctos_variacao TABLES itab_zycbt011
USING p_zycbt007
p_zycit001
itab_zycbe033.
* Tabela de param. de campos textos é verificado qual a parametrização.
* Itens - Textos
LOOP AT itab_contas.
CLEAR: v_zuonr, v_sgtxt, v_bktxt, v_xblnr.
CALL FUNCTION '/PWS/ZYCI_TEXTOS_CONTABEIS'
EXPORTING
v_nrseq = p_zycit001-nrseq
v_nrfat = p_zycit006-nrfat
v_ebelp = p_zycit003-ebelp
v_ebeln = p_zycit003-ebeln
v_codeven = '001VM'
v_ktosl = 'VCI' "itab_contas-KTOSL
* V_NFSERV =
* V_NRPARC =
IMPORTING
v_xblnr = v_xblnr
v_zuonr = v_zuonr
v_sgtxt = v_sgtxt
v_bktxt = v_bktxt
.
itab_contas-d_zuonr = itab_contas-c_zuonr = v_zuonr.
itab_contas-d_xblnr = itab_contas-c_xblnr = v_xblnr.
itab_contas-d_sgtxt = itab_contas-c_sgtxt = v_sgtxt.
* Lança Divisão
itab_contas-d_gsber = itab_contas-c_gsber = p_zycit003-gsber.
MODIFY itab_contas.
ENDLOOP.
* Exit da DI trazida para a função
e_subrc = '0' .
* e_contab = 'F51'.
PERFORM verifica_exit USING 'D'
'/PWS/SAPMZYCI023'
'DI005'.
CLEAR itab_zyglt100 .
READ TABLE itab_zyglt100 WITH KEY zexit = 'DI005' 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.
IF e_subrc = '8'.
EXIT.
ENDIF.
ENDIF.
ENDIF.
IF e_subrc = '0'.
CALL FUNCTION '/PWS/ZYCI_TRANSACAO_F_51C'
EXPORTING
v_modo = v_modo
v_belnr = v_belnrf05
* v_totline = v_totline
v_rec = 'X'
TABLES
t_dados = itab_zycbe033
* t_campo = itab_zycbt034
t_zycbt032 = p_zycbt032
t_contas = itab_contas
t_doc = itab_zycbt036
EXCEPTIONS
campo_em_branco = 1
periodo_fechado = 2
OTHERS = 3.
IF sy-subrc = 0.
READ TABLE p_zycbt032 WITH KEY tcode = 'F-51'
tabela = '/PWS/ZYCIT044'
cpochv = /pws/zycie085-nrseqdi
tpmsg = 'S'.
IF sy-subrc = 0. "Sucesso no BI
* MESSAGE i059 WITH itab_zycbt032-belnr.
LOOP AT itab_matuse_aux WHERE
hkont = itab_matuse_aux2-hkont.
IF itab_matuse_aux-j_1bmatuse = 0.
/pws/zycie085-belnr_0 = p_zycbt032-belnr.
/pws/zycie085-budat_0 = sy-datlo.
ELSEIF itab_matuse_aux-j_1bmatuse = 1.
/pws/zycie085-belnr_1 = p_zycbt032-belnr.
/pws/zycie085-budat_1 = sy-datlo.
ELSEIF itab_matuse_aux-j_1bmatuse = 2.
/pws/zycie085-belnr_2 = p_zycbt032-belnr.
/pws/zycie085-budat_2 = sy-datlo.
ELSEIF itab_matuse_aux-j_1bmatuse = 3.
/pws/zycie085-belnr_3 = p_zycbt032-belnr.
/pws/zycie085-budat_3 = sy-datlo.
ENDIF.
ENDLOOP.
UPDATE /pws/zycit085 SET belnr_0 = /pws/zycie085-belnr_0
belnr_1 = /pws/zycie085-belnr_1
belnr_2 = /pws/zycie085-belnr_2
belnr_3 = /pws/zycie085-belnr_3
budat_0 = /pws/zycie085-budat_0
budat_1 = /pws/zycie085-budat_1
budat_2 = /pws/zycie085-budat_2
budat_3 = /pws/zycie085-budat_3
WHERE nrseqdi = /pws/zycie085-nrseqdi.
COMMIT WORK.
v_rec_ia_1 = v_rec_ia_1 + 1.
* limpando as partidas que acabaram de ser compensadas da itab_bsis_aux.
DELETE itab_bsis_aux WHERE hkont = itab_matuse_aux2-hkont.
ELSE.
READ TABLE p_zycbt032 WITH KEY tpmsg = 'E'.
IF sy-subrc EQ 0.
* Msgs de erro
* Deletando o documento gerando na F-05
PERFORM executa_fb08 TABLES p_zycbt032
USING v_belnrf05
sy-datlo
p_zycbt007
v_modo.
LOOP AT itab_matuse_aux WHERE hkont = itab_matuse_aux2-hkont.
IF itab_matuse_aux-j_1bmatuse = 0.
CLEAR /pws/zycie085-belnr_0_f05.
ELSEIF itab_matuse_aux-j_1bmatuse = 1.
CLEAR /pws/zycie085-belnr_1_f05.
ELSEIF itab_matuse_aux-j_1bmatuse = 2.
CLEAR /pws/zycie085-belnr_2_f05.
ELSEIF itab_matuse_aux-j_1bmatuse = 3.
CLEAR /pws/zycie085-belnr_3_f05.
ENDIF.
ENDLOOP.
UPDATE /pws/zycit085
SET belnr_0_f05 = /pws/zycie085-belnr_0_f05
belnr_1_f05 = /pws/zycie085-belnr_1_f05
belnr_2_f05 = /pws/zycie085-belnr_2_f05
belnr_3_f05 = /pws/zycie085-belnr_3_f05
WHERE nrseqdi = /pws/zycie085-nrseqdi.
COMMIT WORK.
ENDIF.
ENDIF.
ELSE.
READ TABLE p_zycbt032 WITH KEY tpmsg = 'E'.
IF sy-subrc EQ 0.
PERFORM executa_fb08 TABLES p_zycbt032
USING v_belnrf05
sy-datlo
p_zycbt007
v_modo.
LOOP AT itab_matuse_aux WHERE hkont = itab_matuse_aux2-hkont.
IF itab_matuse_aux-j_1bmatuse = 0.
CLEAR /pws/zycie085-belnr_0_f05.
ELSEIF itab_matuse_aux-j_1bmatuse = 1.
CLEAR /pws/zycie085-belnr_1_f05.
ELSEIF itab_matuse_aux-j_1bmatuse = 2.
CLEAR /pws/zycie085-belnr_2_f05.
ELSEIF itab_matuse_aux-j_1bmatuse = 3.
CLEAR /pws/zycie085-belnr_3_f05.
ENDIF.
ENDLOOP.
UPDATE /pws/zycit085
SET belnr_0_f05 = /pws/zycie085-belnr_0_f05
belnr_1_f05 = /pws/zycie085-belnr_1_f05
belnr_2_f05 = /pws/zycie085-belnr_2_f05
belnr_3_f05 = /pws/zycie085-belnr_3_f05
WHERE nrseqdi = /pws/zycie085-nrseqdi.
COMMIT WORK.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " fill_date_f_51_variacao
*&---------------------------------------------------------------------*
*& Form verifica_exit
*&---------------------------------------------------------------------*
FORM verifica_exit USING p_modulo
p_func
p_exit.
CLEAR itab_zyglt100.
REFRESH itab_zyglt100.
CALL FUNCTION '/PWS/ZYGL_BUSCA_EXIT_CLIENTE'
EXPORTING
i_codmod = p_modulo
i_func = p_func
i_zexit = p_exit
TABLES
itab_zyglt100 = itab_zyglt100
EXCEPTIONS
i_codmod_nao_encontrado = 1
i_func_nao_encontrado = 2
i_zexit_nao_encontrado = 3
OTHERS = 4.
ENDFORM. " verifica_exit
*&---------------------------------------------------------------------*
*& Form executa_fb08
*&---------------------------------------------------------------------*
* -->P_V_BELNRF05 text
* -->P_SY_DATLO text
*----------------------------------------------------------------------*
FORM executa_fb08 TABLES p_zycbt032 STRUCTURE /pws/zycbt032
USING p_belnr
p_budat
p_zycbt007 STRUCTURE /pws/zycbt007
v_modo.
DATA: itab_zycbe033 TYPE /pws/zycbe033 OCCURS 10 WITH HEADER LINE,
vsubrc TYPE sy-subrc.
FREE: itab_zycbe033, p_zycbt032.
CLEAR: p_zycbt032, itab_zycbe033, itab_contas, itab_zycbt036.
itab_zycbe033-tcode = 'FB08'.
itab_zycbe033-tabela = '/PWS/ZYCIE085'.
itab_zycbe033-cpochv = /pws/zycie085-nrseqdi.
itab_zycbe033-belnr = p_belnr.
itab_zycbe033-bukrs = /pws/zycie085-bukrs.
itab_zycbe033-bldat = p_budat.
itab_zycbe033-gjahs = itab_zycbe033-bldat+0(4).
CALL FUNCTION '/PWS/ZYGL_MOTIVO_ESTORNO'
EXPORTING
v_data = p_budat
v_bukrs = /pws/zycie085-bukrs
v_koart = 'K'
IMPORTING
v_subrc = vsubrc
v_gjahr = itab_zycbe033-gjahr.
IF vsubrc IS INITIAL.
itab_zycbe033-budat = p_budat.
itab_zycbe033-stgrd = p_zycbt007-percorr.
ELSE.
itab_zycbe033-budat = sy-datlo.
itab_zycbe033-stgrd = p_zycbt007-perencer.
ENDIF.
APPEND itab_zycbe033.
e_subrc = '0' .
PERFORM verifica_exit USING 'D'
'/PWS/SAPMZYCI023'
'DI005'.
CLEAR itab_zyglt100 .
READ TABLE itab_zyglt100 WITH KEY zexit = 'DI005' 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.
IF e_subrc = '8'.
EXIT.
ENDIF.
ENDIF.
ENDIF.
IF e_subrc = '0'.
CALL FUNCTION '/PWS/ZYCI_TRANSACAO_FB08_A'
EXPORTING
v_modo = v_modo
TABLES
t_dados = itab_zycbe033
t_zycbt032 = p_zycbt032
EXCEPTIONS
campo_em_branco = 1
OTHERS = 2.
IF sy-subrc = 0.
READ TABLE p_zycbt032 WITH KEY tcode = 'FB08'
tabela = '/PWS/ZYCIE085'
tpmsg = 'S'.
ELSE.
ENDIF.
ELSE.
READ TABLE p_zycbt032 WITH KEY tcode = 'FB08'
tabela = '/PWS/ZYCIE085'
tpmsg = 'S'.
ENDIF.
ENDFORM. " executa_fb08.
* << Fim da inclusão
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/LZYCIGF2TOP
...
wa_rpy_dyfatc TYPE rpy_dyfatc OCCURS 0 WITH HEADER LINE,
v_input LIKE screen-input,
v_output LIKE screen-output,
v_required LIKE screen-required,
v_invisible LIKE screen-invisible,
v_tela LIKE sy-dynnr,
v_programa(40) TYPE c VALUE 'SAPMF05A'.
DATA: BEGIN OF itab_zycit019 OCCURS 0.
INCLUDE STRUCTURE /pws/zycit019.
DATA: END OF itab_zycit019.
* Esta pate não possui precedencia, pois é so criar no include TOP, em qq lugar!!!
* >> Início da inclusão:
DATA: v_belnrf05 TYPE /pws/zycbt032-belnr,
v_erro_f05,
e_subrc VALUE '0',
v_rec_ia_1 TYPE i.
DATA: BEGIN OF itab_bsis_aux OCCURS 10,
hkont LIKE bsis-hkont ,
dmbtr LIKE bsis-dmbtr ,
wrbtr LIKE bsis-wrbtr ,
tpfatura LIKE /pws/zycit006-tpfatura,
END OF itab_bsis_aux.
DATA: BEGIN OF itab_matuse_aux2 OCCURS 0.
DATA: j_1bmatuse LIKE ekpo-j_1bmatuse,
hkont LIKE bsis-hkont .
DATA: END OF itab_matuse_aux2 .
DATA: BEGIN OF itab_di OCCURS 0,
hkont LIKE bsis-hkont,
vlseg LIKE /pws/zycit100-vlseg,
vlfre LIKE /pws/zycit100-vlfre,
vlfob LIKE /pws/zycit100-vlfob,
vldi LIKE /pws/zycit100-vlfob,
vlfren LIKE /pws/zycit100-vlfre,
END OF itab_di .
DATA: BEGIN OF itab_contas OCCURS 0.
INCLUDE STRUCTURE /pws/zycbe035.
DATA: END OF itab_contas.
DATA: BEGIN OF itab_cta OCCURS 0.
INCLUDE STRUCTURE /pws/zygle316.
DATA: END OF itab_cta.
DATA: BEGIN OF itab_matuse_aux OCCURS 0,
j_1bmatuse LIKE ekpo-j_1bmatuse,
hkont LIKE bsis-hkont ,
END OF itab_matuse_aux .
DATA: BEGIN OF itab_bsis OCCURS 10.
DATA: hkont LIKE bsis-hkont ,
dmbtr LIKE bsis-dmbtr ,
wrbtr LIKE bsis-wrbtr ,
belnr LIKE bsis-belnr ,
buzei LIKE bsis-buzei ,
tpfatura LIKE /pws/zycit006-tpfatura.
DATA: END OF itab_bsis.
DATA: BEGIN OF itab_zyglt100 OCCURS 10.
INCLUDE STRUCTURE /pws/zyglt100.
DATA: END OF itab_zyglt100.
* << Fim da inclusão
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI023F01
...
itab_zycit118[] TO itab_zycit118a[],
itab_zycit121[] TO itab_zycit121a[],
itab_zycit124[] TO itab_zycit124a[],
itab_zycit200[] TO itab_zycit200a[],
itab_zycit049di2[] TO itab_zycit049di[],
itab_it[] TO itab_ita[],
/pws/zycie085 TO wa_zycit085.
PERFORM save_especificacao.
READ TABLE itab_zycit003 INDEX 1.
IF itab_zycit003-qtd_itend IS INITIAL.
* >> Início da exclusão: FORM SAVE_DATA
PERFORM reclassificacao_ia.
* << Fim da exclusão
* >> Início da inclusão: FORM SAVE_DATA
perform reclassificacao_ia_funcao.
* << Fim da inclusão
ENDIF.
PERFORM verifica_exit USING 'D'
'/PWS/SAPMZYCI023'
'DI006'.
CLEAR itab_zyglt100 .
READ TABLE itab_zyglt100 WITH KEY zexit = 'DI006' BINARY SEARCH.
IF sy-subrc EQ 0.
IF NOT itab_zyglt100-zexit_ativa IS INITIAL.
PERFORM (itab_zyglt100-formulario) IN PROGRAM
(itab_zyglt100-programa) IF FOUND.
...
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCI023F04
...
* >> Início da inclusão:
form reclassificacao_ia_funcao.
data: begin of itab_variacao occurs 0.
include structure /pws/zycit085.
data: end of itab_variacao.
CHECK NOT /pws/zycie085-dtreg IS INITIAL AND
NOT /pws/zycie085-nrdi IS INITIAL.
IF v_modo_bi IS INITIAL .
v_modo_bi = 'N'.
ENDIF.
CALL FUNCTION '/PWS/ZYCI_RECLASSIFICACAO_IA'
EXPORTING
i_zycit001 = itab_zycit001
v_modo = v_modo_bi
i_programa = 'DI'
TABLES
t_zycit100 = itab_zycit100[]
t_zycit003 = itab_zycit003[]
t_zycbt032 = itab_zycbt032[]
itab_variacao = itab_variacao[]
EXCEPTIONS
table_initial = 1
existe_recebimento = 2
flag_reclassificacao = 3
dados_di_inicial = 4
OTHERS = 5
.
IF sy-subrc <> 0.
ENDIF.
read table itab_variacao index 1.
move :
itab_variacao-belnr_0 to /pws/zycie085-belnr_0 ,
itab_variacao-belnr_1 to /pws/zycie085-belnr_1,
itab_variacao-belnr_2 to /pws/zycie085-belnr_2,
itab_variacao-belnr_3 to /pws/zycie085-belnr_3,
itab_variacao-budat_0 to /pws/zycie085-budat_0,
itab_variacao-budat_1 to /pws/zycie085-budat_1,
itab_variacao-budat_2 to /pws/zycie085-budat_2,
itab_variacao-budat_3 to /pws/zycie085-budat_3,
itab_variacao-belnr_0_f05 to /pws/zycie085-belnr_0_f05,
itab_variacao-belnr_1_f05 to /pws/zycie085-belnr_1_f05,
itab_variacao-belnr_2_f05 to /pws/zycie085-belnr_2_f05,
itab_variacao-belnr_3_f05 to /pws/zycie085-belnr_3_f05.
endform.
* << Fim da inclusão