You are on page 1of 14

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

*& Include
ZXDTAU01
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Empresa..: Sonda ProcWork
*
* Tipo.....: User Exit
*
* Mdulo...: FI
*
* Descrio: Pagamento de Concessionrias e outras guias
*
* Autor....: Alex Tech (Ajustes)
*
* Data.....: 16/12/2010
*
* -------------------------------------------------------------------- *
* Histrico das modificaes
* -------------------------------------------------------------------- *
* | Autor | Data
| Request
| Comentrio
* -------------------------------------------------------------------- *
* -------------------------------------------------------------------- *
*------------------------------------------------------------------*
* Declarao de Tipos
*------------------------------------------------------------------*
TYPE-POOLS: pbr99.
TYPES : BEGIN OF ty_reguh,
laufd LIKE reguh-laufd,
rzawe LIKE reguh-rzawe,
vblnr LIKE reguh-vblnr,
zbukr LIKE reguh-zbukr,
rbetr LIKE reguh-rbetr,
name1 LIKE reguh-name1,
END OF ty_reguh,
BEGIN OF ty_regup,
zbukr LIKE regup-zbukr,
vblnr LIKE regup-vblnr,
belnr LIKE regup-belnr,
zfbdt LIKE regup-zfbdt,
zbd1t LIKE regup-zbd1t,
esrnr LIKE regup-esrnr,
esrre LIKE regup-esrre,
laufd LIKE regup-laufd,
gjahr LIKE regup-gjahr,
lifnr LIKE reguh-lifnr,
END OF ty_regup.
TYPES: BEGIN OF ty_line.
INCLUDE STRUCTURE tline.
TYPES: END OF ty_line.
TYPES: BEGIN OF ty_bseg,
bukrs LIKE bseg-bukrs,
belnr LIKE bseg-belnr,
gjahr LIKE bseg-gjahr,
sgtxt LIKE bseg-sgtxt,
zbd1t LIKE bseg-zbd1t,
zfbdt LIKE bseg-zfbdt,
END OF ty_bseg.
*------------------------------------------------------------------*
* Declarao de Tabelas

*------------------------------------------------------------------*
DATA: t_arq(1000)
TYPE c
OCCURS 0 WITH HEADER LINE,
t_itau_detail(10000) TYPE c
OCCURS 0 WITH HEADER LINE,
t_rodape(10000)
TYPE c
OCCURS 0 WITH HEADER LINE,
t_regup
TYPE ty_regup OCCURS 0 WITH HEADER LINE,
t_reguh
TYPE ty_reguh OCCURS 0 WITH HEADER LINE,
t_line
TYPE ty_line OCCURS 0 WITH HEADER LINE,
t_bseg
TYPE ty_bseg OCCURS 0 WITH HEADER LINE.
*------------------------------------------------------------------*
* Declarao de Variveis
*------------------------------------------------------------------*
DATA: w_arq(10000)
TYPE c,
w_inicio(1000)
TYPE c,
w_cabecalho(1000) TYPE c,
w_rodape(1000)
TYPE c,
w_fim(1000)
TYPE c,
v_filename
TYPE string,
v_rbetr
LIKE reguh-rbetr,
v_vblnr
LIKE regup-vblnr,
v_gjahr
LIKE bseg-gjahr,
v_zfbdt
LIKE bseg-zfbdt,
v_tabix
LIKE sy-tabix,
v_rbetr_c(13)
TYPE c,
v_lenght
TYPE i,
v_peri
TYPE c LENGTH 2,
v_tdname
LIKE thead-tdname,
v_tdid
TYPE thead-tdid,
v_tdspras
TYPE thead-tdspras,
v_tdobject
TYPE thead-tdobject,
v_sgtxt(14)
TYPE c,
v_name1
LIKE lfa1-name1,
v_cnpj
TYPE pbr99_cgc,
v_dv
TYPE pbr99_dig,
v_bukrs
LIKE t001-bukrs,
v_adrnr
LIKE t001-adrnr.
*------------------------------------------------------------------*
* Processamento
*------------------------------------------------------------------*
v_tdid
= '0001'.
v_tdspras = 'P'.
v_tdobject = 'DOC_ITEM'.
SELECT laufd rzawe vblnr zbukr rbetr name1
FROM reguh INTO TABLE t_reguh
WHERE laufi = t_regut-laufi
AND laufd = t_regut-laufd
AND zbukr = t_regut-zbukr
AND xvorl = space.
IF sy-subrc EQ 0.
SELECT zbukr vblnr belnr zfbdt zbd1t esrnr esrre laufd gjahr lifnr
FROM regup INTO TABLE t_regup
FOR ALL ENTRIES IN t_reguh
WHERE laufi = t_regut-laufi
AND laufd = t_regut-laufd
AND zbukr = t_regut-zbukr

AND xvorl = space


AND vblnr = t_reguh-vblnr.
IF sy-subrc EQ 0.
SELECT bukrs belnr gjahr sgtxt zbd1t zfbdt
FROM bseg INTO TABLE t_bseg
FOR ALL ENTRIES IN t_regup
WHERE bukrs = t_regup-zbukr AND
belnr = t_regup-belnr AND
gjahr = t_regup-gjahr.
ENDIF.
READ TABLE t_reguh INDEX 1.
ENDIF.
*----------------------------------------------------------------------*
Pagamento de Concessionrias
*----------------------------------------------------------------------IF t_reguh-rzawe = 'H'.
CLEAR: w_inicio, w_cabecalho, t_itau_detail, w_rodape, w_fim, v_gjahr.
REFRESH t_itau_detail.
v_filename = i_filename.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = v_filename
filetype = 'ASC'
TABLES
data_tab = t_arq.
LOOP AT t_arq INTO w_arq.
CASE w_arq(8).
WHEN '34100000'.
MOVE w_arq TO w_inicio.
WHEN '34100011'.
MOVE w_arq TO w_cabecalho.
WHEN '34100013'.
MOVE w_arq TO t_itau_detail.
APPEND t_itau_detail.
CLEAR t_itau_detail.
WHEN '34100015'.
MOVE w_arq TO w_rodape.
WHEN '34199999'.
MOVE w_arq TO w_fim.
ENDCASE.
ENDLOOP.
*----------------------------------------** Incio
*----------------------------------------UNPACK '0' TO w_inicio+201(39).
*----------------------------------------** Cabealho
*----------------------------------------w_cabecalho+9(7) = '2013030'.

UNPACK '0' TO w_cabecalho+222(18).


*----------------------------------------** Detalhes
*----------------------------------------LOOP AT t_itau_detail.
CLEAR v_tabix.
v_tabix = sy-tabix.
READ TABLE t_reguh WITH KEY vblnr = t_itau_detail+73(10) BINARY SEARCH.
READ TABLE t_regup WITH KEY vblnr = t_reguh-vblnr BINARY SEARCH.
*

v_gjahr = t_regup-laufd(4).
v_gjahr = t_regup-gjahr.
READ TABLE t_bseg WITH KEY bukrs = t_regup-zbukr
belnr = t_regup-belnr
gjahr = v_gjahr BINARY SEARCH.
CONCATENATE t_regut-zbukr t_regup-belnr v_gjahr
'001' INTO v_tdname.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id
= v_tdid
language = v_tdspras
name
= v_tdname
object = v_tdobject
TABLES
lines
= t_line.
READ TABLE t_line INDEX 1.
v_lenght = STRLEN( t_line-tdline ).
t_itau_detail+13(1)
= 'O'.
UNPACK '0' TO t_itau_detail+14(3).

** Se o codigo de barras tiver 43 posies


IF v_lenght = 43.
t_itau_detail+17(43) = t_line-tdline.
** Se o codigo de barras tiver 48 posies
ELSE.
t_itau_detail+17(48) = t_line-tdline.
ENDIF.
t_itau_detail+65(30)

= t_reguh-name1.

v_vblnr = t_regup-vblnr.
v_gjahr = t_regup-laufd(4).
t_itau_detail+95(2)
t_itau_detail+97(2)
t_itau_detail+99(4)
t_itau_detail+103(3)

=
=
=
=

t_reguh-laufd+6(2).
t_reguh-laufd+4(2).
t_reguh-laufd(4).
'REA'.

CLEAR t_itau_detail+106(15).
MOVE t_reguh-rbetr
UNPACK v_rbetr_c

TO v_rbetr_c.
TO t_itau_detail+121(15).

v_zfbdt
t_itau_detail+136(2)
t_itau_detail+138(2)
t_itau_detail+140(4)
UNPACK v_rbetr_c

=
=
=
=

t_bseg-zfbdt + t_bseg-zbd1t.
v_zfbdt+6(2).
v_zfbdt+4(2).
v_zfbdt(4).

TO t_itau_detail+144(15).

CLEAR t_itau_detail+159(15).
UNPACK t_regup-vblnr

TO t_itau_detail+174(20).

UNPACK '0'

TO t_itau_detail+195(45).

MODIFY t_itau_detail

INDEX v_tabix.

ENDLOOP.
*----------------------------------------** Rodap
*----------------------------------------w_rodape+41(18)
= w_rodape+23(18).
UNPACK '0'
TO w_rodape+59(181).
*----------------------------------------** Fim
*----------------------------------------UNPACK '0'
TO w_fim+35(205).
*----------------------------------------** Monta arquivo
*----------------------------------------CLEAR t_arq.
REFRESH t_arq.
MOVE w_inicio
APPEND t_arq.
CLEAR t_arq.

TO t_arq.

MOVE w_cabecalho TO t_arq.


APPEND t_arq.
CLEAR t_arq.
LOOP AT t_itau_detail.
MOVE t_itau_detail TO t_arq.
APPEND t_arq.
CLEAR t_arq.
ENDLOOP.
MOVE w_rodape TO t_arq.
APPEND t_arq.
CLEAR t_arq.
MOVE w_fim
TO t_arq.
APPEND t_arq.
CLEAR t_arq.
APPEND t_arq.
CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING
filename = v_filename
filetype = 'ASC'
TABLES
data_tab = t_arq.
*----------------------------------------------------------------------*
Pagamento GPS
*----------------------------------------------------------------------ELSEIF t_reguh-rzawe = 'G'.
CLEAR: w_inicio, w_cabecalho, t_itau_detail, w_rodape, w_fim.
REFRESH t_itau_detail.
v_filename = i_filename.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = v_filename
filetype = 'ASC'
TABLES
data_tab = t_arq.
LOOP AT t_arq INTO w_arq.
CASE w_arq(8).
WHEN '34100000'.
MOVE w_arq
TO w_inicio.
WHEN '34100011'.
MOVE w_arq
TO w_cabecalho.
WHEN '34100013'.
MOVE w_arq
TO t_itau_detail.
APPEND t_itau_detail.
CLEAR t_itau_detail.
WHEN '34100015'.
MOVE w_arq
TO w_rodape.
WHEN '34199999'.
MOVE w_arq
TO w_fim.
ENDCASE.
ENDLOOP.
*----------------------------------------** Incio
*----------------------------------------UNPACK '0' TO w_inicio+201(39).
*----------------------------------------** Cabealho
*----------------------------------------w_cabecalho+9(7) = '2217030'.
UNPACK '0' TO w_cabecalho+222(18).
*----------------------------------------** Detalhes
*----------------------------------------LOOP AT t_itau_detail.
CLEAR v_tabix.
v_tabix = sy-tabix.

READ TABLE t_reguh WITH KEY vblnr = t_itau_detail+73(10) BINARY SEARCH.


READ TABLE t_regup WITH KEY vblnr = t_reguh-vblnr BINARY SEARCH.
*

v_gjahr = t_regup-laufd(4).
v_gjahr = t_regup-gjahr.
READ TABLE t_bseg WITH KEY bukrs = t_regup-zbukr
belnr = t_regup-belnr
gjahr = v_gjahr BINARY SEARCH.

t_itau_detail+13(1)
Tributo (2)
t_itau_detail+17(2)

= 'N'.
= '01'.

Ler o campo para codigo de barras


CONCATENATE t_regut-zbukr t_regup-belnr v_gjahr
'001' INTO v_tdname.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id
= v_tdid
language = v_tdspras
name
= v_tdname
object = v_tdobject
TABLES
lines
= t_line.
READ TABLE t_line INDEX 1.

Codigo de pagamento (4)


t_itau_detail+19(3) = t_line-tdline+20(3).
t_itau_detail+22(1) = t_line-tdline+24(1).

Competencia (6)
t_itau_detail+23(2) = t_line-tdline+44(2).
t_itau_detail+25(4) = t_line-tdline+40(4).
v_gjahr = t_reguh-laufd(4).

Identificador (14)
t_itau_detail+29(10) = t_line-tdline+25(10).
t_itau_detail+39(4) = t_line-tdline+36(4).

Valor do tributo (14)


t_itau_detail+43(3) = '000'.
t_itau_detail+46(7) = t_line-tdline+4(7).
t_itau_detail+53(4) = t_line-tdline+12(4).

*
*

Valor outr. entidade (14)


Atualiz. monetaria (14)
UNPACK '0'
TO t_itau_detail+57(28).

Valor arrecado (14)


t_itau_detail+85(3) = '000'.
t_itau_detail+88(7) = t_line-tdline+4(7).
t_itau_detail+95(4) = t_line-tdline+12(4).

Data arrecadacao (8)


v_zfbdt
t_itau_detail+99(2)
t_itau_detail+101(2)
t_itau_detail+103(4)

=
=
=
=

t_bseg-zfbdt + t_bseg-zbd1t.
v_zfbdt+6(2).
v_zfbdt+4(2).
v_zfbdt(4).

*
*

*
*

Brancos (8)
Uso empresa (50)
CLEAR t_itau_detail+107(58).
IF t_itau_detail+29(3) <> '000'.
CNPJ empresa
SELECT SINGLE bukrs
FROM t001z
INTO v_bukrs
WHERE party = 'J_1BCG' AND
paval = t_itau_detail+29(8).
IF sy-subrc = 0.
SELECT SINGLE adrnr
FROM t001
INTO v_adrnr
WHERE bukrs = v_bukrs.
IF sy-subrc = 0.
SELECT SINGLE name1
FROM adrc
INTO v_name1
WHERE addrnumber = v_adrnr.
IF sy-subrc = 0 .
t_itau_detail+165(30) = v_name1.
ELSE.
CLEAR t_itau_detail+165(30).
UNPACK '0' TO t_itau_detail+29(14).
ENDIF.
ELSE.
CLEAR t_itau_detail+165(30).
UNPACK '0' TO t_itau_detail+29(14).
ENDIF.
ELSE.
CNPJ fornecedor
SELECT SINGLE name1
FROM lfa1
INTO v_name1
WHERE stcd1 = t_itau_detail+29(14).
IF sy-subrc = 0.
Contribuinte (30)
t_itau_detail+165(30) = v_name1.
ELSE.
CLEAR t_itau_detail+165(30).
UNPACK '0' TO t_itau_detail+29(14).
ENDIF.
ENDIF.
ELSE.
PIS
Contribuinte (30)
t_itau_detail+165(30) = t_bseg-sgtxt(30).
ENDIF.
UNPACK t_regup-vblnr TO t_itau_detail+195(20).
UNPACK '0'
TO t_itau_detail+215(25).
MODIFY t_itau_detail INDEX v_tabix.
ENDLOOP.

*----------------------------------------** Rodap

*----------------------------------------CLEAR v_rbetr_c.
LOOP AT t_reguh.
v_rbetr
= v_rbetr + t_reguh-rbetr.
ENDLOOP.
MOVE v_rbetr
UNPACK v_rbetr_c
UNPACK '0'
UNPACK v_rbetr_c
UNPACK '0'

TO
TO
TO
TO
TO

v_rbetr_c.
w_rodape+23(14).
w_rodape+37(29).
w_rodape+65(14).
w_rodape+79(161).

*----------------------------------------** Fim
*----------------------------------------UNPACK '0'
TO w_fim+35(205).
*----------------------------------------** Monta arquivo
*----------------------------------------CLEAR t_arq.
REFRESH t_arq.
MOVE w_inicio
APPEND t_arq.
CLEAR t_arq.

TO t_arq.

MOVE w_cabecalho
APPEND t_arq.
CLEAR t_arq.

TO t_arq.

LOOP AT t_itau_detail.
MOVE t_itau_detail TO t_arq.
APPEND t_arq.
CLEAR t_arq.
ENDLOOP.
MOVE w_rodape
APPEND t_arq.
CLEAR t_arq.

TO t_arq.

MOVE w_fim
APPEND t_arq.
CLEAR t_arq.

TO t_arq.

APPEND t_arq.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = v_filename
filetype = 'ASC'
TABLES
data_tab = t_arq.
*----------------------------------------------------------------------*
DARF
*----------------------------------------------------------------------ELSEIF t_reguh-rzawe = 'P'.

CLEAR: w_inicio, w_cabecalho, t_itau_detail, w_rodape, w_fim.


REFRESH t_itau_detail.
v_filename = i_filename.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = v_filename
filetype = 'ASC'
TABLES
data_tab = t_arq.
LOOP AT t_arq INTO w_arq.
CASE w_arq(8).
WHEN '34100000'.
MOVE w_arq
TO w_inicio.
WHEN '34100011'.
MOVE w_arq
TO w_cabecalho.
WHEN '34100013'.
MOVE w_arq
TO t_itau_detail.
APPEND t_itau_detail.
CLEAR t_itau_detail.
WHEN '34100015'.
MOVE w_arq
TO w_rodape.
WHEN '34199999'.
MOVE w_arq
TO w_fim.
ENDCASE.
ENDLOOP.
*----------------------------------------** Incio
*----------------------------------------UNPACK '0' TO w_inicio+201(39).
*----------------------------------------** Cabealho
*----------------------------------------w_cabecalho+9(7) = '2216030'.
UNPACK '0' TO w_cabecalho+222(18).
*----------------------------------------** Detalhes
*----------------------------------------LOOP AT t_itau_detail.
CLEAR v_tabix.
v_tabix = sy-tabix.
READ TABLE t_reguh WITH KEY vblnr = t_itau_detail+73(10) BINARY SEARCH.
READ TABLE t_regup WITH KEY vblnr = t_reguh-vblnr BINARY SEARCH.
*

v_gjahr = t_regup-laufd(4).
v_gjahr = t_regup-gjahr.
READ TABLE t_bseg WITH KEY bukrs = t_regup-zbukr
belnr = t_regup-belnr
gjahr = v_gjahr BINARY SEARCH.

t_itau_detail+13(1)
Tributo (2)

= 'N'.

t_itau_detail+17(2)

= '02'.

Ler o campo para codigo de barras


CONCATENATE t_regut-zbukr t_regup-belnr v_gjahr
'001' INTO v_tdname.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id
= v_tdid
language = v_tdspras
name
= v_tdname
object = v_tdobject
TABLES
lines
= t_line.
READ TABLE t_line INDEX 1.

Receita (4)
t_itau_detail+19(4) = t_line-tdline+39(4).
CONCATENATE t_line-tdline+26(9)
t_line-tdline+36(3)
INTO v_cnpj.

*
*

CALL FUNCTION 'HR_BR_CGC_CHECK_DIGITS'


EXPORTING
input
= v_cnpj
IMPORTING
output
= v_dv
EXCEPTIONS
cgc_format_not_supported = 1
OTHERS
= 2.
IF sy-subrc = 0.
Empresa - Inscricao (1)
t_itau_detail+23(1) = '2'.
Inscricao numero (14)
CONCATENATE v_cnpj v_dv INTO t_itau_detail+24(14).
ENDIF.

Periodo (8)
t_itau_detail+38(2) = t_bseg-zfbdt+6(2).
t_itau_detail+40(2) = t_bseg-zfbdt+4(2).
t_itau_detail+42(4) = t_bseg-zfbdt(4).

Referencia (17)
UNPACK '0' TO t_itau_detail+46(17).

Valor principal (14)


t_itau_detail+63(3) = '000'.
t_itau_detail+66(7) = t_line-tdline+4(7).
t_itau_detail+73(4) = t_line-tdline+12(4).

*
*

Multa(14)
Juros/Encargos (14)
UNPACK '0' TO t_itau_detail+77(28).

Valor total (14)


t_itau_detail+105(3) = '000'.
t_itau_detail+108(7) = t_line-tdline+4(7).
t_itau_detail+115(4) = t_line-tdline+12(4).

Data vencimento (8)

v_zfbdt
t_itau_detail+119(2)
t_itau_detail+121(2)
t_itau_detail+123(4)

=
=
=
=

t_bseg-zfbdt + t_bseg-zbd1t.
v_zfbdt+6(2).
v_zfbdt+4(2).
v_zfbdt(4).

Data pagamento (8)


t_itau_detail+127(2) = v_zfbdt+6(2).
t_itau_detail+129(2) = v_zfbdt+4(2).
t_itau_detail+131(4) = v_zfbdt(4).

Brancos (30)
CLEAR t_itau_detail+135(30).

CNPJ empresa
SELECT SINGLE bukrs
FROM t001z
INTO v_bukrs
WHERE party = 'J_1BCG' AND
paval = t_itau_detail+24(8).
IF sy-subrc = 0.
SELECT SINGLE adrnr
FROM t001
INTO v_adrnr
WHERE bukrs = v_bukrs.
IF sy-subrc = 0.
SELECT SINGLE name1
FROM adrc
INTO v_name1
WHERE addrnumber = v_adrnr.
IF sy-subrc = 0 .
t_itau_detail+165(30) = v_name1.
ELSE.
CLEAR t_itau_detail+165(30).
UNPACK '0' TO t_itau_detail+24(14).
ENDIF.
ELSE.
CLEAR t_itau_detail+165(30).
UNPACK '0' TO t_itau_detail+24(14).
ENDIF.
ELSE.
CNPJ fornecedor
SELECT SINGLE name1
FROM lfa1
INTO v_name1
WHERE stcd1 = t_itau_detail+24(14).
IF sy-subrc = 0.
Contribuinte (30)
t_itau_detail+165(30) = v_name1.
ELSE.
CLEAR t_itau_detail+165(30).
UNPACK '0' TO t_itau_detail+24(14).
ENDIF.
ENDIF.

UNPACK t_regup-vblnr TO t_itau_detail+195(20).


UNPACK '0'
TO t_itau_detail+215(25).
MODIFY t_itau_detail INDEX v_tabix.
ENDLOOP.

*----------------------------------------** Rodap
*----------------------------------------CLEAR v_rbetr_c.
LOOP AT t_reguh.
v_rbetr
= v_rbetr + t_reguh-rbetr.
ENDLOOP.
MOVE v_rbetr
UNPACK v_rbetr_c
UNPACK '0'
UNPACK v_rbetr_c
UNPACK '0'

TO
TO
TO
TO
TO

v_rbetr_c.
w_rodape+23(14).
w_rodape+37(29).
w_rodape+65(14).
w_rodape+79(161).

*----------------------------------------** Fim
*----------------------------------------UNPACK '0'
TO w_fim+35(205).
*----------------------------------------** Monta arquivo
*----------------------------------------CLEAR t_arq.
REFRESH t_arq.
MOVE w_inicio
APPEND t_arq.
CLEAR t_arq.

TO t_arq.

MOVE w_cabecalho
APPEND t_arq.
CLEAR t_arq.

TO t_arq.

LOOP AT t_itau_detail.
MOVE t_itau_detail TO t_arq.
APPEND t_arq.
CLEAR t_arq.
ENDLOOP.
MOVE w_rodape
APPEND t_arq.
CLEAR t_arq.

TO t_arq.

MOVE w_fim
APPEND t_arq.
CLEAR t_arq.

TO t_arq.

APPEND t_arq.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = v_filename
filetype = 'ASC'
TABLES
data_tab = t_arq.
ENDIF.

nome da exit exit_sapmfdta_001

You might also like