Sie sind auf Seite 1von 11

*&---------------------------------------------------------------------*

*& ZSAFE013_NEWLEDGER
*& MasterSAF - Integrao de Dados da Contabilidade
*& Interfaces - SAFX01
*&---------------------------------------------------------------------*
*& DESIGNED BY: MASTERSAF
- ddmmaaaa
*& CODED BY : MASTERSAF
- ddmmaaaa
*& LOCATION : BRAZIL
*&---------------------------------------------------------------------*
REPORT zsafe013_newledger
NO STANDARD PAGE HEADING
MESSAGE-ID zmastersaf.
TABLES: bkpf.
*----------------------------------------------------------------------*
* Includes
*----------------------------------------------------------------------*
INCLUDE zsafhex.
INCLUDE zsaft01.
INCLUDE zsafx01.
************************************************************************
* Declaraes
*
************************************************************************
TABLES: t003t,
tbslt,
zsafa,
zsafb,
zsaf1,
zsaf2,
zsaf4.

"Textos de tipos de documento


"Denominao das chaves de lanamento
"Parmetros de Mscaras para Filial
"Parmetros de Mascaras para Empresa
"Parmetros de Empresas
"Parmetros de Diviso x Filial
"Parmetros de Tipos de Documentos

DATA: BEGIN OF h_arqs,


arquivo(12) TYPE c,
total
TYPE i,
END OF h_arqs.
DATA: BEGIN OF h_zsafa OCCURS 10 ,
bukrs LIKE zsafa-bukrs,
branch LIKE zsafa-branch,
mascara LIKE zsafa-mascara,
END OF h_zsafa.
DATA: BEGIN OF t_zsafa OCCURS 10 ,
bukrs LIKE zsafa-bukrs,
branch LIKE zsafa-branch,
mascara LIKE zsafa-mascara,
END OF t_zsafa.
DATA: BEGIN OF h_zsafb OCCURS 10,
bukrs LIKE zsafa-bukrs,
mascara LIKE zsafb-mascara,
END OF h_zsafb.
DATA: BEGIN OF t_zsafb OCCURS 10,
bukrs LIKE zsafa-bukrs,

mascara LIKE zsafb-mascara,


END OF t_zsafb.
DATA: BEGIN OF chv,
chv1(4)
chv2(4)
END OF chv.

TYPE c,
TYPE c,

DATA: BEGIN OF h_t001 OCCURS 50,


bukrs
LIKE t001-bukrs,
waers
LIKE t001-waers,
END OF h_t001.
DATA: BEGIN OF gs_bkpf OCCURS 500,
bukrs
LIKE bkpf-bukrs,
belnr
LIKE bkpf-belnr,
gjahr
LIKE bkpf-gjahr,
budat
LIKE bkpf-budat,
blart
LIKE bkpf-blart,
waers
LIKE bkpf-waers,
bstat
LIKE bkpf-bstat,
END OF gs_bkpf.
DATA: v_mascara(4)
v_arquivo(128)
v_cont
v_ini(2)
v_tam(2)
v_nomearq(12)
v_occbelnr
v_cctpt1(10)
v_cctpt2(10)

TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE

c,
c,
i,
n,
n,
c,
i,
c,
c.

DATA: BEGIN OF my,


rbusa
branch
END OF my.

LIKE glt0-rbusa,
LIKE zsaf1-branch,

DATA: BEGIN OF ls_faglflexa,


ryear TYPE gjahr,
docnr TYPE belnr_d,
rbukrs TYPE bukrs,
docln TYPE docln6,
rtcur TYPE rtcur,
racct TYPE racct,
rcntr TYPE kostl,
rbusa TYPE gsber,
kokrs TYPE kokrs,
tsl
TYPE vlcur12,
hsl
TYPE vlcur12,
drcrk TYPE shkzg,
budat TYPE budat,
bschl TYPE bschl,
bstat TYPE bstat,
END OF ls_faglflexa.
DATA: gt_bkpf LIKE TABLE OF gs_bkpf.
DATA: lt_faglflexa LIKE TABLE OF ls_faglflexa.
DATA: BEGIN OF lv,

"DGMSO

faglflexa TYPE tabname16,


END OF lv.
DATA: BEGIN OF lx,
cliente
LIKE bseg-kunnr,
fornecedor LIKE bseg-lifnr,
indd_vinc LIKE gs_zsaft01-indd_op_vinc,
codg_vinc LIKE gs_zsaft01-codg_op_vinc,
END OF lx.
*----------------------------------------------------------------------*
INCLUDE zsafi000.
INCLUDE zsafi001.
INCLUDE zsafz013_newledger.
*----------------------------------------------------------------------*
* Parmetros adicionais
*----------------------------------------------------------------------*
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS: s_belnr FOR bkpf-belnr,
s_gjahr FOR bkpf-gjahr.
SELECTION-SCREEN END OF BLOCK a1.
*----------------------------------------------------------------------*
START-OF-SELECTION.
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Principal
*----------------------------------------------------------------------*
*&=====================================================================
*& ATENO: Utilizar SOMENTE para customizaes do cliente, em
*&
SUBSTITUIO rotina padro disponibilizada pela Mastersaf
*&=====================================================================
PERFORM f_exec_prog_cliente USING gv_prog_cliente.
IF NOT gv_prog_cliente IS INITIAL.
LEAVE PROGRAM.
ENDIF.
*&--------------------------------------------------------------------*& Rotina padro do Mastersaf
*&--------------------------------------------------------------------PERFORM init.
PERFORM f_importar_dados.
CLEAR gv_tipo_grav.
PERFORM f_gera_arqv_vazio TABLES gt_zsafx01
PERFORM processar_dados.
PERFORM procesar_saida.

USING '01'.

*&--------------------------------------------------------------------END-OF-SELECTION.
*&---------------------------------------------------------------------

*&---------------------------------------------------------------------*
*&
Form INIT
*&---------------------------------------------------------------------*
* inicializa Tabelas internernas e estrutura
*
*----------------------------------------------------------------------*
FORM init.
REFRESH:
gt_zsaft01,
gt_zsafx01.
ENDFORM.

" INIT

*&---------------------------------------------------------------------*
*&
Form PROCESSAR_DADOS
*&---------------------------------------------------------------------*
* Atualiza tabela interna GT_ZSAFT01
*----------------------------------------------------------------------*
FORM processar_dados.
lv-faglflexa = 'FAGLFLEXA'.
*
* DATA: BEGIN OF lx,
*
cliente
LIKE bseg-kunnr,
*
fornecedor LIKE bseg-lifnr,
*
indd_vinc LIKE gs_zsaft01-indd_op_vinc,
*
codg_vinc LIKE gs_zsaft01-codg_op_vinc,
*
END OF lx.
SELECT * FROM t001
INTO CORRESPONDING FIELDS OF TABLE h_t001
WHERE bukrs BETWEEN b1_bukrs_low AND b1_bukrs_high.
LOOP AT h_t001.
CLEAR zsaf1.
SELECT SINGLE * FROM zsaf1 WHERE bukrs = h_t001-bukrs.
CHECK sy-subrc = 0.
v_ini = zsaf1-inicc.
v_tam = 10 - v_ini.
REFRESH: lt_faglflexa.

SELECT ryear docnr rbukrs docln rtcur racct rcntr


rbusa kokrs tsl hsl drcrk budat bschl
bstat
INTO CORRESPONDING FIELDS OF TABLE lt_faglflexa
FROM (lv-faglflexa)
WHERE rbukrs = h_t001-bukrs
AND docnr IN s_belnr
AND ryear IN s_gjahr
AND rldnr = zsaf1-rldnr
AND budat BETWEEN b1_pdate_low AND b1_pdate_high.
AND bstat = ' ' .

*
*
*
*

SELECT bukrs belnr gjahr budat blart waers bstat


INTO TABLE gt_bkpf
FROM bkpf
FOR ALL ENTRIES IN lt_faglflexa

*
*
*

WHERE bukrs EQ h_t001-bukrs and


belnr in s_belnr
and
gjahr in s_gjahr.
SELECT bukrs belnr gjahr budat blart waers bstat
INTO CORRESPONDING FIELDS OF TABLE gt_bkpf
FROM bkpf
WHERE bukrs EQ h_t001-bukrs AND
belnr IN s_belnr
AND
gjahr IN s_gjahr.
LOOP AT lt_faglflexa INTO ls_faglflexa.
READ TABLE gt_bkpf INTO gs_bkpf
WITH KEY bukrs = ls_faglflexa-rbukrs
belnr = ls_faglflexa-docnr
gjahr = ls_faglflexa-ryear.
CHECK sy-subrc = 0.

verifica se vai integrar o movimento contabil.


CLEAR zsaf4.
SELECT SINGLE * FROM zsaf4 WHERE blart = gs_bkpf-blart.
CHECK zsaf4-intct = 'X'.
v_occbelnr = sy-dbcnt.
IF v_occbelnr = 2.
LOOP AT lt_faglflexa INTO ls_faglflexa.
IF sy-tabix = 1.
v_cctpt1 = ls_faglflexa-racct+v_ini(v_tam).
ELSE.
v_cctpt2 = ls_faglflexa-racct+v_ini(v_tam).
ENDIF.
ENDLOOP.
ENDIF.
CLEAR lv.

*
*
*
*
*
*
*
*
**
*
*
*
*

LOOP AT lt_faglflexa INTO ls_faglflexa.


IF ls_faglflexa-docln = '001'.
"Primeiro item do doc.contbil
lv-cliente
= lt_faglflexa-kunnr.
lv-fornecedor = lt_faglflexa-lifnr.
PERFORM f_obtem_dados_cli_for USING lv-cliente
lv-fornecedor
lv-indd_vinc
lv-codg_vinc.
ENDIF.
Verifica se o valor contabil est zerado significa que
o lanamento contabil foi feito em outra moeda,
contas gerenciais.
CHECK ls_faglflexa-hsl NE 0.
IF ls_faglflexa-docln = '0000001'.
IF zsaf1-udvcf = 'X' .
my-rbusa = ls_faglflexa-rbusa .
SELECT SINGLE *
FROM zsaf2

WHERE gsber EQ ls_faglflexa-rbusa .


CHECK sy-subrc = 0 .
my-branch = zsaf2-branch .
ELSE .
my-branch = zsaf1-branch .
ENDIF .
*

filtro para filial


IF my-branch < b1_brnch_low OR
my-branch > b1_brnch_high.
EXIT.
ENDIF.
ENDIF.
PERFORM preencher_zsaft01
USING my-branch
lx-indd_vinc
lx-codg_vinc.
ENDLOOP.

ENDLOOP.
* ENDLOOP.
FREE: gt_bkpf, lt_faglflexa, h_t001.
ENDFORM .

" PROCESSAR_DADOS

*&---------------------------------------------------------------------*
*&
Form PROCESAR_SAIDA
*&---------------------------------------------------------------------*
FORM procesar_saida.
DATA v_tabix TYPE sy-tabix.
SORT gt_zsaft01 BY chave bukrs branch arqvto ASCENDING.
LOOP AT gt_zsaft01 INTO gs_zsaft01.
v_tabix = sy-tabix.
AT NEW bukrs.
SELECT SINGLE * FROM zsafb
WHERE bukrs = gs_zsaft01-bukrs.
ENDAT.
AT NEW branch.
SELECT SINGLE * FROM zsafa
WHERE bukrs = gs_zsaft01-bukrs
AND branch = gs_zsaft01-branch.
ENDAT.
PERFORM preencher_tabela_zsafx01.
AT END OF chave.
PERFORM busca_mascara
USING gs_zsaft01-chave(4)
gs_zsaft01-chave+4(4).
PERFORM gravar_dados USING '01.txt'.
REFRESH gt_zsafx01.

ENDAT.
DELETE gt_zsaft01 INDEX v_tabix.
ENDLOOP.
REFRESH gt_zsaft01.
ENDFORM.

" PROCESAR_SAIDA

*&---------------------------------------------------------------------*
*&
Form PREENCHER_ZSAFT01
*&---------------------------------------------------------------------*
FORM preencher_zsaft01
USING value(pfilial) TYPE any
pe_indd_vinc LIKE gs_zsaft01-indd_op_vinc
pe_codg_vinc LIKE gs_zsaft01-codg_op_vinc.
* Cdigo de Dbito/Crdito
IF ls_faglflexa-drcrk = 'S'.
ls_faglflexa-drcrk = 'D'.
ELSE.
ls_faglflexa-drcrk = 'C'.
ENDIF.
CLEAR gs_zsaft01.
MOVE gs_bkpf-bukrs TO chv-chv1.
IF p_fil = 'X'.
MOVE pfilial TO chv-chv2.
ELSE.
MOVE '0000' TO chv-chv2.
ENDIF.
gs_zsaft01-chave =
gs_zsaft01-bukrs =
gs_zsaft01-branch =
gs_zsaft01-budat =
gs_zsaft01-hkont =
gs_zsaft01-shkzg =
gs_zsaft01-dmbtr =
gs_zsaft01-hist_padr

chv.
ls_faglflexa-rbukrs.
pfilial.
ls_faglflexa-budat.
ls_faglflexa-racct+v_ini(v_tam).
ls_faglflexa-drcrk.
ls_faglflexa-hsl * 100.
= gs_bkpf-blart.
"Cd.Histrico Padro

CONCATENATE ls_faglflexa-docnr
ls_faglflexa-ryear
ls_faglflexa-docln INTO gs_zsaft01-arqvto.
* CONCATENATE 'C'
*
lt_faglflexa-bschl INTO gs_zsaft01-codop.
MOVE ls_faglflexa-bschl TO gs_zsaft01-codop .
* IF NOT ( lt_faglflexa-sgtxt IS INITIAL ).
*
gs_zsaft01-histc = lt_faglflexa-sgtxt.
* ELSE.
SELECT SINGLE * FROM t003t
WHERE spras = p_spras
AND blart = gs_bkpf-blart.

SELECT SINGLE * FROM tbslt


WHERE spras = p_spras
AND bschl = ls_faglflexa-bschl.
*
AND umskz = lt_faglflexa-umskz.
CONCATENATE t003t-ltext ' / ' tbslt-ltext INTO gs_zsaft01-histc.
* ENDIF.
IF NOT ( ls_faglflexa-rcntr IS INITIAL ).
CONCATENATE ls_faglflexa-kokrs ls_faglflexa-rcntr INTO gs_zsaft01-ctrct.
ELSE.
gs_zsaft01-ctrct = '@@@@@@@@@@@@@@'.
ENDIF.
IF v_occbelnr = 2.
IF sy-tabix = 1.
gs_zsaft01-cctpt = v_cctpt2.
ELSE.
gs_zsaft01-cctpt = v_cctpt1.
ENDIF.
ELSE.
gs_zsaft01-cctpt = '@@@@@@@@@@'.
ENDIF.
* moeda diferente da moeda interna
IF gs_bkpf-waers IS INITIAL.
gs_zsaft01-codind = '@'.
gs_zsaft01-vlopind = '0'.
ELSE.
IF gs_bkpf-waers = h_t001-waers.
gs_zsaft01-codind = '@'.
gs_zsaft01-vlopind = '0'.
ELSE.
gs_zsaft01-codind = gs_bkpf-waers.
gs_zsaft01-vlopind = ls_faglflexa-tsl * 10000.
ENDIF.
ENDIF.
* IN86 - campo 16
gs_zsaft01-numlanc = ls_faglflexa-docnr.
CLEAR gs_zsaft01-tipo_lcto.
gs_zsaft01-tipo_lcto = 'N'.
gs_zsaft01-indd_op_vinc = pe_indd_vinc.
gs_zsaft01-codg_op_vinc = pe_codg_vinc.
PERFORM converte_texto IN PROGRAM zsafm000 USING gs_zsaft01-histc.
PERFORM f_user_exit_append_zsaft01
IN PROGRAM zsafe013_newledger IF FOUND .
APPEND gs_zsaft01 TO gt_zsaft01.
ENDFORM.

" PREENCHER_ZSAFT01

*&---------------------------------------------------------------------*
*&
Form PREENCHER_TABELA_ZSAFX01
*&---------------------------------------------------------------------*
FORM preencher_tabela_zsafx01.

CLEAR : gs_zsafx01.
MOVE zsafb-codigo
MOVE zsafa-codigo

TO gs_zsafx01-codemp.
TO gs_zsafx01-codfil.

MOVE-CORRESPONDING gs_zsaft01 TO gs_zsafx01.


MOVE-CORRESPONDING hex_fill TO gs_zsafx01.
PERFORM f_user_exit_append_zsafx01
IN PROGRAM zsafe013_newledger IF FOUND .
APPEND gs_zsafx01 TO gt_zsafx01.
ENDFORM.

" PREENCHER_TABELA_ZSAFX01

*&---------------------------------------------------------------------*
*&
Form BUSCA_MASCARA
*&---------------------------------------------------------------------*
FORM busca_mascara
USING param1 TYPE any
param2 TYPE any.
v_mascara = 'safx'.
IF p_fil = 'X'.
SELECT SINGLE * FROM zsafa WHERE bukrs = param1
AND branch = param2.
IF sy-subrc = 0.
IF NOT ( zsafa-mascara IS INITIAL ).
v_mascara = zsafa-mascara.
MOVE-CORRESPONDING zsafa TO h_zsafa.
APPEND h_zsafa.
ENDIF.
ENDIF.
ELSE.
SELECT SINGLE * FROM zsafb WHERE bukrs = param1.
IF sy-subrc = 0.
IF NOT ( zsafb-mascara IS INITIAL ).
v_mascara = zsafb-mascara.
MOVE-CORRESPONDING zsafb TO h_zsafb.
APPEND h_zsafb.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.

" BUSCA_MASCARA

*&---------------------------------------------------------------------*
*&
Form GRAVAR_DADOS
*&---------------------------------------------------------------------*
FORM gravar_dados
USING param1 TYPE any.
*&=====================================================================
*& ATENO: Utilizar SOMENTE para customizaes do cliente, visando
*&
MODIFICAR os dados gerados pela rotina padro do Mastersaf
*&=====================================================================
PERFORM f_user_exit_trata_dados

IN PROGRAM zsafe013_newledger IF FOUND .


CONDENSE p_path NO-GAPS.
CONCATENATE p_path v_mascara param1 INTO v_arquivo.
CONDENSE v_arquivo NO-GAPS.
DESCRIBE TABLE gt_zsafx01 LINES v_cont.
CLEAR h_arqs.
h_arqs-total = v_cont.
CONCATENATE v_mascara param1 INTO h_arqs-arquivo.
CLEAR v_nomearq.
v_nomearq = h_arqs-arquivo.
PERFORM grava_dados_zsafx
IN PROGRAM zsafm000
USING p_nrarq
b1_bukrs_low
b1_bukrs_high
b1_brnch_low
b1_brnch_high
b1_pdate_low
b1_pdate_high
p_path
v_nomearq
v_cont.
CALL FUNCTION 'Z_MASTERSAF_FILE_WRITE'
EXPORTING
pe_file_name = v_arquivo
pe_frontend = p_pc
pe_datum
= gv_datum
pe_uzeit
= gv_uzeit
TABLES
te_info
= gt_zsafx01.
ENDFORM.

" GRAVAR_DADOS

*&---------------------------------------------------------------------*
*&
Form F_OBTEM_DADOS_CLI_FOR
*&---------------------------------------------------------------------*
FORM f_obtem_dados_cli_for
USING pe_cliente
TYPE bseg-kunnr
pe_fornecedor TYPE bseg-lifnr
ps_indd_vinc LIKE gs_zsaft01-indd_op_vinc
ps_codg_vinc LIKE gs_zsaft01-codg_op_vinc.
DATA: lv_indcf LIKE zsaf31-indcf,
lv_parid LIKE zsaf31-parid,
lv_auxl LIKE zsaf31-parid.
CLEAR: lv_indcf,
lv_parid,
ps_indd_vinc,
ps_codg_vinc.
IF NOT pe_cliente IS INITIAL.

lv_indcf
lv_parid
ELSEIF NOT
lv_indcf
lv_parid
ENDIF.

= 'C'.
= pe_cliente.
pe_fornecedor IS INITIAL.
= 'F'.
= pe_fornecedor.

* somente sero tratads os clientes/fornecedores cadastrados na ZSAF31


* para a empresa que est sendo processada
CLEAR lv_auxl.
SELECT SINGLE parid INTO lv_auxl
FROM zsaf31
WHERE bukrs = gs_bkpf-bukrs
AND indcf = lv_indcf
AND parid = lv_parid.
IF NOT lv_auxl IS INITIAL.
ps_codg_vinc = lv_parid.
CASE lv_indcf.
WHEN 'F'.
"Fornecedor
ps_indd_vinc = '1'.
WHEN 'C'.
"Cliente
ps_indd_vinc = '2'.
WHEN OTHERS.
ENDCASE.
ENDIF.
WHILE ps_codg_vinc(1) = '0'.
ps_codg_vinc = ps_codg_vinc+1(13).
ENDWHILE.
ENDFORM.

" F_OBTEM_DADOS_CLI_FOR

Das könnte Ihnen auch gefallen