ZFILE_CAT79_2017
*&---------------------------------------------------------------------*
*& Report ZFILE_CAT79_2017
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zfile_cat79_2017.
CONSTANTS: tax_type_iss TYPE i VALUE 1,
tax_type_icms TYPE i VALUE 2.
CONSTANTS: status_nota_teste TYPE i VALUE 00,
status_nota_pendente TYPE i VALUE 01,
status_nota_rps TYPE i VALUE 02,
status_nota_nfe TYPE i VALUE 03,
status_nota_cancelada TYPE i VALUE 04,
status_nota_enviada TYPE i VALUE 05,
status_nota_erro_envio TYPE i VALUE 06,
status_nota_a_enviar TYPE i VALUE 07.
CONSTANTS: company_code_locaweb TYPE zelsi_company VALUE 'locaweb',
company_code_locaweb_idc TYPE zelsi_company VALUE 'locawebidc',
company_code_locaweb_telecom TYPE zelsi_company VALUE 'locawebtelecom'.
CONSTANTS:
c_tabname TYPE tabname VALUE 'ZZTB_DDRI'.
TYPES: BEGIN OF file_name,
uf(2) TYPE c,
cnpj(14) TYPE c,
model(2) TYPE c,
serie(3) TYPE c,
ano(2) TYPE c,
mes(2) TYPE c,
status(3) TYPE c,
tipo(1) TYPE c,
separator(1) TYPE c,
extensao(3) TYPE c,
END OF file_name.
TYPES: BEGIN OF ty_notas.
INCLUDE STRUCTURE ztbnf_header.
TYPES: docnum TYPE j_1bnfdoc-docnum,
zmd5_fisco TYPE ztbnf_main-zmd5_fisco,
END OF ty_notas.
TYPES: BEGIN OF telecom_file,
name TYPE string,
customer_id TYPE string,
username TYPE string,
billyear TYPE string,
billmonth TYPE string,
calltype TYPE string,
duration TYPE string,
value TYPE string,
END OF telecom_file.
TYPES: BEGIN OF terminal_file,
company_name TYPE string,
customer_id TYPE string,
service_name TYPE string,
service_id TYPE string,
parent_id TYPE string,
create_at TYPE string,
quantity TYPE string,
ddri TYPE string,
END OF terminal_file.
TYPES: BEGIN OF main_file,
cpfcnpj(14) TYPE c, " #1
ie(14) TYPE c, " #2
razao_social(35) TYPE c, " #3
uf(2) TYPE c, " #4
tipo_assinante(1) TYPE c, " #5
tipo_utilizacao(1) TYPE c, " #6
grupo_tensao(2) TYPE c, " #7
codigo_assinante(12) TYPE c, " #8
data_emissao(8) TYPE c, "#9
modelo(2) TYPE c, "#10
serie(3) TYPE c, "#11
numero(9) TYPE c, "#12
hash(32) TYPE c, "#13
valor(12) TYPE c, "#14
base(12) TYPE c, "#15
icms(12) TYPE c, "#16
isentos(12) TYPE c, "#17
outros(12) TYPE c, "#18
situacao(1) TYPE c, "#19
mes_ano(4) TYPE c, "#20
item_ref(9) TYPE c, "#21
terminal(12) TYPE c, "#22
tipo_info(1) TYPE c,
tipo_cliente(2) TYPE c,
sub_classe(2) TYPE c,
numero_principal(12) TYPE c,
cnpj_emitente(14) TYPE c,
fatura(20) TYPE c,
valor_fatura(12) TYPE c,
data_leitura_anterior(8) TYPE c,
data_leitura_atual(8) TYPE c,
brancos50(50) TYPE c,
brancos8(8) TYPE c,
info_add(30) TYPE c,
brancos(5) TYPE c,
END OF main_file.
TYPES: BEGIN OF item_file,
cpfcnpj(14) TYPE c,
uf(2) TYPE c,
tipo_assinante(1) TYPE c,
tipo_utilizacao(1) TYPE c,
grupo_tensao(2) TYPE c,
data_emissao(8) TYPE c,
modelo(2) TYPE c,
serie(3) TYPE c,
numero(9) TYPE c,
cfop(4) TYPE c,
item(3) TYPE c,
codigo_servico(10) TYPE c,
descricao(40) TYPE c,
classificacao(4) TYPE c,
unidade(6) TYPE c,
quantidade_contratada(12) TYPE c,
quantidade_forneceida(12) TYPE c,
valor(11) TYPE c,
desconto(11) TYPE c,
acrescimos(11) TYPE c,
base(11) TYPE c,
icms(11) TYPE c,
isentos(11) TYPE c,
outros(11) TYPE c,
aliquota(4) TYPE c,
situacao(1) TYPE c,
mes_ano(4) TYPE c,
contrato(15) TYPE c,
quant_faturada(12) TYPE c,
tarifa(11) TYPE c,
aliquota_pispasep(6) TYPE c,
pispasep(11) TYPE c,
aliquota_cofins(6) TYPE c,
cofins(11) TYPE c,
desconto_judicial(1) TYPE c,
tipo_isencao(2) TYPE c,
brancos(5) TYPE c,
END OF item_file.
TYPES: BEGIN OF customer_file,
cpfcnpj(14) TYPE c,
ie(14) TYPE c,
razao_social(35) TYPE c,
logradouro(45) TYPE c,
numero(5) TYPE c,
complemento(15) TYPE c,
cep(8) TYPE c,
bairro(15) TYPE c,
municipio(30) TYPE c,
uf(2) TYPE c,
tel_contato(12) TYPE c,
codigo_assinante(12) TYPE c,
terminal(12) TYPE c,
uf_terminal(2) TYPE c,
emissao(8) TYPE c,
modelo(2) TYPE c,
serie(3) TYPE c,
nf_numero(9) TYPE c,
codigo_mun(7) TYPE c,
brancos(5) TYPE c,
END OF customer_file.
DATA: lkmestre TYPE text200,
lkitens TYPE text200,
lkclientes TYPE text200,
nmmestre TYPE text200,
nmitens TYPE text200,
nmclientes TYPE text200.
DATA: telecom_file TYPE TABLE OF telecom_file,
terminal_file TYPE TABLE OF terminal_file.
DATA: messages TYPE TABLE OF bapiret2.
DATA: cnpj LIKE j_1bwfield-cgc_number.
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE,
messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
CONSTANTS filepath TYPE string VALUE '/usr/sap/trans/tmp/'.
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE text-001.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_month TYPE month,
p_year TYPE gjahr,
p_serie TYPE zelsi_serie_rps.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_path TYPE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK 1.
SELECTION-SCREEN BEGIN OF BLOCK 2 WITH FRAME TITLE text-002.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_main AS CHECKBOX,
p_item AS CHECKBOX,
p_dest AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK 2.
SELECTION-SCREEN BEGIN OF BLOCK 3 WITH FRAME TITLE text-003.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_telco TYPE rlgrap-filename NO-DISPLAY.
PARAMETERS: p_term TYPE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK 3.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
CALL FUNCTION 'TMP_GUI_BROWSE_FOR_FOLDER'
IMPORTING
selected_folder = p_path
EXCEPTIONS
cntl_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_telco.
* CALL FUNCTION 'F4_FILENAME'
* EXPORTING
* program_name = syst-cprog
* dynpro_number = syst-dynnr
* field_name = ' '
* IMPORTING
* file_name = p_telco.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_term.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = ' '
IMPORTING
file_name = p_term.
START-OF-SELECTION.
IF p_telco IS NOT INITIAL.
PERFORM load_telecom.
ENDIF.
IF p_term IS NOT INITIAL.
PERFORM load_terminals.
ENDIF.
CONCATENATE p_path '\' INTO p_path.
CALL FUNCTION 'J_1B_BRANCH_READ'
EXPORTING
branch = '0001'
company = '0300'
IMPORTING
* ADDRESS =
* BRANCH_RECORD =
cgc_number = cnpj
* ADDRESS_VALUE =
EXCEPTIONS
branch_not_found = 1
address_not_found = 2
company_not_found = 3
OTHERS = 4
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
REFRESH messages.
PERFORM zfmnf_file_cat79
TABLES
messages
USING
p_month
p_year
p_serie
filepath
nmmestre
nmitens
nmclientes
lkmestre
lkitens
lkclientes.
CONCATENATE p_path nmmestre INTO nmmestre.
CONCATENATE p_path nmitens INTO nmitens.
CONCATENATE p_path nmclientes INTO nmclientes.
IF messages[] IS INITIAL.
PERFORM download USING lkmestre nmmestre.
PERFORM download USING lkitens nmitens.
PERFORM download USING lkclientes nmclientes.
ENDIF.
IF p_main IS NOT INITIAL.
PERFORM view_main_file USING lkmestre.
ENDIF.
IF p_dest IS NOT INITIAL.
PERFORM view_dest_file USING lkclientes.
ENDIF.
IF p_item IS NOT INITIAL..
PERFORM view_item_file USING lkitens.
ENDIF.
*&---------------------------------------------------------------------*
*& Form download
*&---------------------------------------------------------------------*
FORM download USING origin_path destiny_path.
REFRESH: bdcdata, messtab.
PERFORM bdc_dynpro USING: 'SAPLC13Z' '1010'.
PERFORM bdc_field USING: 'BDC_CURSOR' 'RCGFILETR-FTFRONT',
'BDC_OKCODE' '=EEXO',
'RCGFILETR-FTAPPL' origin_path,
'RCGFILETR-FTFRONT' destiny_path,
'RCGFILETR-FTFTYPE' 'BIN'.
PERFORM bdc_dynpro USING: 'SAPLC13Z' '1010'.
PERFORM bdc_field USING: 'BDC_OKCODE' '/EECAN',
'BDC_CURSOR' 'RCGFILETR-FTAPPL',
'RCGFILETR-FTAPPL' origin_path,
'RCGFILETR-FTFRONT' destiny_path,
'RCGFILETR-FTFTYPE' 'BIN'.
CALL TRANSACTION 'CG3Y' USING bdcdata
MODE 'N'
UPDATE 'A'
MESSAGES INTO messtab.
ENDFORM. "download
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. "BDC_FIELD
*&---------------------------------------------------------------------*
*& Form ZFMNF_FILE_CAT79
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_MONTH text
* -->P_P_YEAR text
* -->P_P_SERIE text
* -->P_FILEPATH text
* -->P_NMMESTRE text
* -->P_NMITENS text
* -->P_NMCLIENTES text
* -->P_LKMESTRE text
* -->P_LKITENS text
* -->P_LKCLIENTES text
* -->P_MESSAGES text
*----------------------------------------------------------------------*
FORM zfmnf_file_cat79
TABLES p_messages STRUCTURE bapiret2
USING month TYPE month
year TYPE gjahr
serie TYPE zelsi_serie_rps
filepath TYPE string
nmmestre TYPE text200
nmitens TYPE text200
nmclientes TYPE text200
lkmestre TYPE text200
lkitens TYPE text200
lkclientes TYPE text200.
DATA: notas TYPE TABLE OF ty_notas.
FIELD-SYMBOLS <nf> TYPE ty_notas.
PERFORM get_notas
TABLES notas
USING month year serie.
CHECK notas[] IS NOT INITIAL.
DATA: mainfilename TYPE file_name,
itemfilename TYPE file_name,
custfilename TYPE file_name.
DATA: mainstrfile TYPE string,
itemstrfile TYPE string,
custstrfile TYPE string.
DATA: mainfile TYPE localfile,
itemfile TYPE localfile,
custfile TYPE localfile.
CLEAR: mainfilename, itemfilename, custfilename.
CLEAR: mainstrfile, itemstrfile, custstrfile.
PERFORM generate_filenames
USING serie year month
CHANGING mainfilename itemfilename custfilename.
CONCATENATE filepath mainfilename INTO mainstrfile.
CONCATENATE filepath itemfilename INTO itemstrfile.
CONCATENATE filepath custfilename INTO custstrfile.
mainfile = mainstrfile.
itemfile = itemstrfile.
custfile = custstrfile.
OPEN DATASET mainfile FOR OUTPUT IN LEGACY BINARY MODE TYPE 'NT'.
OPEN DATASET itemfile FOR OUTPUT IN LEGACY BINARY MODE TYPE 'NT'.
OPEN DATASET custfile FOR OUTPUT IN LEGACY BINARY MODE TYPE 'NT'.
IF sy-subrc IS NOT INITIAL.
nmmestre = mainfilename.
nmitens = itemfilename.
nmclientes = custfilename.
lkmestre = mainstrfile.
lkitens = itemstrfile.
lkclientes = custstrfile.
RETURN.
ENDIF.
DATA: itemref TYPE i.
itemref = 1.
LOOP AT notas ASSIGNING <nf>.
PERFORM load_main_register
USING <nf>
CHANGING mainfile itemref.
PERFORM load_customer_register
USING <nf>
CHANGING custfile.
PERFORM load_itens_registers
USING <nf>
CHANGING itemfile.
ENDLOOP.
CLOSE DATASET mainfile.
CLOSE DATASET itemfile.
CLOSE DATASET custfile.
nmmestre = mainfilename.
nmitens = itemfilename.
nmclientes = custfilename.
lkmestre = mainstrfile.
lkitens = itemstrfile.
lkclientes = custstrfile.
ENDFORM. " ZFMNF_FILE_CAT79
*&---------------------------------------------------------------------*
*& Form get_notas
*&---------------------------------------------------------------------*
FORM get_notas TABLES notas STRUCTURE ztbnf_header
USING month year serie.
DATA: taxtype TYPE c.
MOVE tax_type_icms TO taxtype.
DATA: statusnfe(2) TYPE c,
statuscan(2) TYPE c.
UNPACK: status_nota_nfe TO statusnfe,
status_nota_cancelada TO statuscan.
DATA: t_fields TYPE TABLE OF dd03p,
w_fields LIKE LINE OF t_fields.
CALL FUNCTION 'DDIF_TABL_GET'
EXPORTING
name = 'ZTBNF_HEADER'
* STATE = 'A'
* LANGU = ' '
* IMPORTING
* GOTSTATE =
* DD02V_WA =
* DD09L_WA =
TABLES
dd03p_tab = t_fields
* DD05M_TAB =
* DD08V_TAB =
* DD12V_TAB =
* DD17V_TAB =
* DD35V_TAB =
* DD36M_TAB =
EXCEPTIONS
illegal_input = 1
OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
DATA: fields TYPE string.
LOOP AT t_fields INTO w_fields.
CHECK w_fields-fieldname(1) <> '.'.
IF w_fields-fieldname = 'SERIE'.
CONCATENATE fields 'J_1BNFDOC~SERIES' ' ' INTO fields RESPECTING BLANKS.
ELSE.
CONCATENATE fields 'ZTBNF_HEADER~' w_fields-fieldname ' ' INTO fields RESPECTING BLANKS.
ENDIF.
ENDLOOP.
CONCATENATE fields 'ZTBNF_MAIN~DOCNUM ZTBNF_MAIN~ZMD5_FISCO' INTO fields RESPECTING BLANKS.
REFRESH notas.
SELECT (fields)
FROM ztbnf_header
INNER JOIN ztbnf_main
ON ztbnf_header~mandt = ztbnf_main~mandt
AND ztbnf_header~md5 = ztbnf_main~zmd5
INNER JOIN j_1bnfdoc
ON ztbnf_main~mandt = j_1bnfdoc~mandt
AND ztbnf_main~docnum = j_1bnfdoc~docnum
INTO TABLE notas
WHERE ztbnf_header~company EQ company_code_locaweb_telecom
AND ztbnf_header~taxtype EQ taxtype
AND ztbnf_header~zmonth EQ month
AND ztbnf_header~zyear EQ year
AND j_1bnfdoc~series EQ serie
AND ztbnf_header~status GE statusnfe
AND ztbnf_header~numnfe GT 0
ORDER BY numnfe.
* PERFORM remove_dup_numnfe TABLES notas.
PERFORM fill_non_existing TABLES notas.
* IF serie = ' 1'.
* serie = '3'.
* FIELD-SYMBOLS <nf> LIKE ztbnf_header.
* LOOP AT notas ASSIGNING <nf>.
* <nf>-serie = '3'.
* ENDLOOP.
* ENDIF.
ENDFORM. "get_notas
*&---------------------------------------------------------------------*
*& Form generate_filenames
*&---------------------------------------------------------------------*
FORM generate_filenames USING serie year month
CHANGING mainfilename TYPE file_name
itemfilename TYPE file_name
custfilename TYPE file_name.
MOVE cnpj TO mainfilename-cnpj.
MOVE cnpj TO itemfilename-cnpj.
MOVE cnpj TO custfilename-cnpj.
MOVE '22' TO mainfilename-model.
MOVE '22' TO itemfilename-model.
MOVE '22' TO custfilename-model.
MOVE 'SP' TO mainfilename-uf.
MOVE 'SP' TO itemfilename-uf.
MOVE 'SP' TO custfilename-uf.
MOVE serie TO mainfilename-serie.
MOVE serie TO itemfilename-serie.
MOVE serie TO custfilename-serie.
UNPACK year TO mainfilename-ano.
UNPACK year TO itemfilename-ano.
UNPACK year TO custfilename-ano.
UNPACK month TO mainfilename-mes.
UNPACK month TO itemfilename-mes.
UNPACK month TO custfilename-mes.
MOVE 'N01' TO mainfilename-status.
MOVE 'N01' TO itemfilename-status.
MOVE 'N01' TO custfilename-status.
MOVE 'M' TO mainfilename-tipo.
MOVE 'I' TO itemfilename-tipo.
MOVE 'D' TO custfilename-tipo.
MOVE '.' TO mainfilename-separator.
MOVE '.' TO itemfilename-separator.
MOVE '.' TO custfilename-separator.
UNPACK '1' TO mainfilename-extensao.
UNPACK '1' TO itemfilename-extensao.
UNPACK '1' TO custfilename-extensao.
ENDFORM. "generate_filenames
*&---------------------------------------------------------------------*
*& Form load_main_register
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->NF text
* -->MAINFILE text
* -->ITEMREF text
*----------------------------------------------------------------------*
FORM load_main_register USING nf TYPE ty_notas
CHANGING mainfile itemref.
DATA: register TYPE main_file.
DATA numitens TYPE i.
CLEAR register.
REPLACE ALL OCCURRENCES OF '.' IN nf-cpfcnpj WITH ''.
REPLACE ALL OCCURRENCES OF ',' IN nf-cpfcnpj WITH ''.
REPLACE ALL OCCURRENCES OF '/' IN nf-cpfcnpj WITH ''.
REPLACE ALL OCCURRENCES OF '-' IN nf-cpfcnpj WITH ''.
UNPACK nf-cpfcnpj TO register-cpfcnpj.
IF nf-inscestad IS INITIAL.
MOVE 'ISENTO' TO register-ie.
ELSE.
MOVE nf-inscestad TO register-ie.
TRANSLATE register-ie TO UPPER CASE.
ENDIF.
MOVE nf-sacado TO register-razao_social.
TRANSLATE register-razao_social TO UPPER CASE.
MOVE nf-state TO register-uf.
DATA length TYPE i.
length = STRLEN( nf-cpfcnpj ).
IF length EQ 14.
MOVE '1' TO register-tipo_info.
MOVE '01' TO register-tipo_cliente.
MOVE '0' TO register-tipo_assinante.
ELSEIF length EQ 11.
MOVE '2' TO register-tipo_info.
MOVE '03' TO register-tipo_cliente.
MOVE '0' TO register-tipo_assinante.
ENDIF.
DATA: len TYPE i.
len = STRLEN( nf-cpfcnpj ).
IF len = 11.
MOVE '2' TO register-tipo_info.
ELSE.
MOVE '1' TO register-tipo_info.
ENDIF.
MOVE '99' TO register-tipo_cliente.
MOVE nf-idinvoice TO register-fatura.
MOVE register-valor TO register-valor_fatura.
MOVE '00' TO register-sub_classe.
MOVE cnpj TO register-cnpj_emitente.
UNPACK nf-amount TO register-valor_fatura.
MOVE '00000000' TO register-data_leitura_anterior.
MOVE '00000000' TO register-data_leitura_atual.
MOVE '00000000' TO register-brancos8.
MOVE '1' TO register-tipo_utilizacao.
UNPACK '0' TO register-grupo_tensao.
IF nf-idcustomer IS NOT INITIAL.
UNPACK nf-idcustomer TO register-codigo_assinante.
ELSE.
UNPACK nf-idcollection TO register-codigo_assinante.
ENDIF.
MOVE nf-issuedate TO register-data_emissao.
MOVE '22' TO register-modelo.
MOVE nf-serie TO register-serie.
UNPACK nf-numnfe TO register-numero.
* MOVE nf-md5 TO register-hash.
* DATA: nf_main TYPE ztbnf_main.
* SELECT SINGLE * FROM ztbnf_main INTO nf_main
* WHERE zmd5 = nf-md5.
* IF sy-subrc IS INITIAL.
MOVE nf-zmd5_fisco TO register-hash.
* ENDIF.
UNPACK nf-amount TO register-valor.
UNPACK nf-amount TO register-base.
UNPACK nf-tax_amount TO register-icms.
UNPACK 0 TO register-isentos.
UNPACK 0 TO register-outros.
IF nf-status EQ status_nota_cancelada.
MOVE 'S' TO register-situacao.
ELSE.
MOVE 'N' TO register-situacao.
ENDIF.
CONCATENATE nf-zyear+2(2) nf-zmonth INTO register-mes_ano.
UNPACK itemref TO register-item_ref.
* MOVE '000000000000' TO register-terminal.
DATA: kna1 TYPE kna1.
IF nf-idcustomer IS NOT INITIAL.
SELECT SINGLE * FROM kna1
WHERE kunnr = nf-idcustomer.
ELSE.
SELECT SINGLE * FROM kna1
WHERE kunnr = nf-idcollection.
ENDIF.
CLEAR register-terminal.
UNPACK ' ' TO register-brancos.
DATA: bytes TYPE string,
tmpreg(393) TYPE c.
CLEAR: tmpreg, bytes.
MOVE register TO tmpreg.
PERFORM get_hash_code
USING tmpreg 393
CHANGING bytes.
TRANSFER bytes TO mainfile.
CLEAR numitens.
SELECT COUNT(*)
FROM ztbnf_itens
INTO numitens
WHERE sapid EQ nf-sapid.
itemref = itemref + numitens.
ENDFORM. "load_main_register
*&---------------------------------------------------------------------*
*& Form load_customer_register
*&---------------------------------------------------------------------*
FORM load_customer_register USING nf TYPE ty_notas
CHANGING custfile.
DATA: register TYPE customer_file.
DATA: wa_customer TYPE zwasi_customer.
* CALL FUNCTION 'ZFMSI_GET_CUSTOMER'
* EXPORTING
* customer = nf-idcustomer
* IMPORTING
* customer_data = wa_customer.
CLEAR register.
REPLACE ALL OCCURRENCES OF '.' IN nf-cpfcnpj WITH ''.
REPLACE ALL OCCURRENCES OF ',' IN nf-cpfcnpj WITH ''.
REPLACE ALL OCCURRENCES OF '/' IN nf-cpfcnpj WITH ''.
REPLACE ALL OCCURRENCES OF '-' IN nf-cpfcnpj WITH ''.
UNPACK nf-cpfcnpj TO register-cpfcnpj.
IF nf-inscestad IS INITIAL.
MOVE 'ISENTO' TO register-ie.
ELSE.
MOVE nf-inscestad TO register-ie.
TRANSLATE register-ie TO UPPER CASE.
ENDIF.
MOVE nf-sacado TO register-razao_social.
TRANSLATE register-razao_social TO UPPER CASE.
"MOVE wa_customer-stras TO register-logradouro.
MOVE nf-address TO register-logradouro.
"IF wa_customer-house_num1 CO '0123456789 '.
" UNPACK wa_customer-house_num1 TO register-numero.
"ELSEIF wa_customer-house_num1 IS INITIAL.
UNPACK '0' TO register-numero.
"ELSE.
" MOVE wa_customer-house_num1 TO register-numero.
"ENDIF.
MOVE '' TO register-complemento.
"UNPACK wa_customer-pstlz TO register-cep.
REPLACE ALL OCCURRENCES OF '-' IN nf-postalcode WITH ''.
UNPACK nf-postalcode TO register-cep.
MOVE nf-district TO register-bairro.
MOVE nf-city TO register-municipio.
TRANSLATE register-municipio TO UPPER CASE.
MOVE nf-state TO register-uf.
"CONCATENATE wa_customer-area_code wa_customer-phone INTO register-tel_contato.
IF nf-idcustomer IS NOT INITIAL.
UNPACK nf-idcustomer TO register-codigo_assinante.
ELSE.
UNPACK nf-idcollection TO register-codigo_assinante.
ENDIF.
CLEAR register-tel_contato.
* MOVE nf-idcollection TO register-codigo_assinante.
CLEAR register-terminal.
CLEAR register-uf_terminal.
MOVE ' ' TO register-brancos.
MOVE nf-issuedate TO register-emissao.
MOVE '22' TO register-modelo.
MOVE nf-serie TO register-serie.
UNPACK nf-numnfe TO register-nf_numero.
DATA: kna1 TYPE kna1.
IF nf-idcustomer IS NOT INITIAL.
SELECT SINGLE * FROM kna1
WHERE kunnr = nf-idcustomer.
ELSE.
SELECT SINGLE * FROM kna1
WHERE kunnr = nf-idcollection.
ENDIF.
IF sy-subrc IS INITIAL.
IF kna1-txjcd+3(1) = ' '.
register-codigo_mun = kna1-txjcd+4(7).
ELSEIF kna1-txjcd+2(1) = ' '.
register-codigo_mun = kna1-txjcd+3(7).
ENDIF.
ENDIF.
DATA: bytes TYPE string,
tmpreg(255) TYPE c.
CLEAR: tmpreg, bytes.
tmpreg = register.
PERFORM get_hash_code
USING tmpreg 255
CHANGING bytes.
TRANSFER bytes TO custfile.
ENDFORM. "load_customer_register
*&---------------------------------------------------------------------*
*& Form load_itens_registers
*&---------------------------------------------------------------------*
FORM load_itens_registers USING nf TYPE ty_notas
CHANGING itemfile.
DATA: register TYPE item_file.
DATA: t_itens TYPE TABLE OF ztbnf_itens,
wa_item TYPE ztbnf_itens.
REFRESH t_itens.
SELECT *
FROM ztbnf_itens
INTO TABLE t_itens
WHERE sapid EQ nf-sapid
ORDER BY item.
LOOP AT t_itens INTO wa_item.
CLEAR register.
REPLACE ALL OCCURRENCES OF '.' IN nf-cpfcnpj WITH ''.
REPLACE ALL OCCURRENCES OF ',' IN nf-cpfcnpj WITH ''.
REPLACE ALL OCCURRENCES OF '/' IN nf-cpfcnpj WITH ''.
REPLACE ALL OCCURRENCES OF '-' IN nf-cpfcnpj WITH ''.
UNPACK nf-cpfcnpj TO register-cpfcnpj.
MOVE nf-state TO register-uf.
DATA length TYPE i.
length = STRLEN( nf-cpfcnpj ).
IF length EQ 14.
MOVE '0' TO register-tipo_assinante.
ELSEIF length EQ 11.
MOVE '0' TO register-tipo_assinante.
ENDIF.
MOVE '1' TO register-tipo_utilizacao.
UNPACK '0' TO register-grupo_tensao.
MOVE nf-issuedate TO register-data_emissao.
MOVE '22' TO register-modelo.
MOVE nf-serie TO register-serie.
UNPACK nf-numnfe TO register-numero.
IF nf-state EQ 'SP'.
UNPACK '5307' TO register-cfop.
ELSE.
UNPACK '6307' TO register-cfop.
ENDIF.
UNPACK wa_item-item TO register-item.
PERFORM get_pabx_service_code
USING wa_item-servicekey
CHANGING register-codigo_servico.
MOVE wa_item-description TO register-descricao.
PERFORM get_pabx_classification
USING register-codigo_servico
CHANGING register-classificacao.
MOVE '' TO register-unidade.
UNPACK '0' TO register-quantidade_contratada.
UNPACK '0' TO register-quantidade_forneceida.
UNPACK wa_item-amount TO register-valor.
UNPACK '0' TO register-desconto.
UNPACK '0' TO register-acrescimos.
UNPACK wa_item-amount TO register-base.
UNPACK wa_item-tax_amount TO register-icms.
UNPACK '0' TO register-isentos.
UNPACK '0' TO register-outros.
DATA aliquota(4) TYPE p DECIMALS 2.
aliquota = nf-tax_rate * 100.
UNPACK aliquota TO register-aliquota.
UNPACK '0' TO register-quant_faturada.
UNPACK '0' TO register-tarifa.
UNPACK '0' TO register-tipo_isencao.
DATA: amount_pis LIKE ztbnf_header-tax_amount,
amount_cof LIKE ztbnf_header-tax_amount.
MOVE '006500' TO register-aliquota_pispasep. "(6) TYPE c,
amount_pis = wa_item-amount * '0.65' / 100.
UNPACK amount_pis TO register-pispasep." (6) TYPE c,
MOVE '030000' TO register-aliquota_cofins. "(6) TYPE c,
amount_cof = wa_item-amount * 3 / 100.
UNPACK amount_cof TO register-cofins. "(11) TYPE c,
IF nf-status EQ status_nota_cancelada.
MOVE 'S' TO register-situacao.
ELSE.
MOVE 'N' TO register-situacao.
ENDIF.
CONCATENATE nf-zyear+2(2) nf-zmonth INTO register-mes_ano.
MOVE '' TO register-brancos.
DATA: bytes TYPE string,
tmpreg(299) TYPE c.
CLEAR: tmpreg, bytes.
tmpreg = register.
PERFORM get_hash_code
USING tmpreg 299
CHANGING bytes.
TRANSFER bytes TO itemfile.
ENDLOOP.
ENDFORM. "load_itens_registers
*&---------------------------------------------------------------------*
*& Form get_hash_code
*&---------------------------------------------------------------------*
FORM get_hash_code USING tmpreg $length TYPE i CHANGING bytes.
DATA: hash LIKE ztbnf_header-md5,
crlf(2) TYPE c.
crlf = cl_abap_char_utilities=>cr_lf.
CALL FUNCTION 'MD5_CALCULATE_HASH_FOR_CHAR'
EXPORTING
data = tmpreg
length = $length
IMPORTING
hash = hash
EXCEPTIONS
no_data = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc IS INITIAL.
CONCATENATE tmpreg hash crlf INTO bytes RESPECTING BLANKS.
ENDIF.
ENDFORM. "get_hash_code
*&---------------------------------------------------------------------*
*& Form get_pabx_service_code
*&---------------------------------------------------------------------*
FORM get_pabx_service_code USING servicekey
CHANGING servicecode.
CASE servicekey.
WHEN 'PABX_LOCAIS'.
servicecode = '8948'.
WHEN 'PABX_NO_ESTADO'.
servicecode = '8949'.
WHEN 'PABX_FORA_ESTADO'.
servicecode = '8950'.
WHEN ' PABX_INTERNACIONAL'.
servicecode = '8951'.
WHEN 'PABX_ESPECIAIS'.
servicecode = '8952'.
WHEN 'PABX_MINUTOS'.
servicecode = '10848'.
WHEN OTHERS.
servicecode = '99999'.
ENDCASE.
ENDFORM. "get_pabx_service_code
*&---------------------------------------------------------------------*
*& Form get_pabx_classification
*&---------------------------------------------------------------------*
FORM get_pabx_classification USING servicecode
CHANGING classificacao.
CASE servicecode.
WHEN '8948'.
UNPACK '301' TO classificacao.
WHEN '8949'.
UNPACK '302' TO classificacao.
WHEN '8950'.
UNPACK '303' TO classificacao.
WHEN '8951'.
UNPACK '304' TO classificacao.
WHEN '8952'.
UNPACK '305' TO classificacao.
WHEN '10848'.
UNPACK '499' TO classificacao.
WHEN OTHERS.
UNPACK '101' TO classificacao.
ENDCASE.
ENDFORM. "get_pabx_classification
*&---------------------------------------------------------------------*
*& Form view_main_file
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_T_MAIN text
* -->P_LKMESTRE text
*----------------------------------------------------------------------*
FORM view_main_file USING p_file.
DATA: t_data TYPE TABLE OF main_file,
w_data LIKE LINE OF t_data,
v_data TYPE string.
OPEN DATASET p_file FOR INPUT IN LEGACY TEXT MODE TYPE 'NT'.
DO.
READ DATASET p_file INTO v_data.
IF sy-subrc IS INITIAL.
MOVE v_data TO w_data.
APPEND w_data TO t_data.
ELSE.
EXIT.
ENDIF.
ENDDO.
CALL FUNCTION 'HR_IT_SHOW_ANY_TABLE_ON_ALV'
TABLES
table = t_data
* EXCEPTIONS
* FB_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " VIEW_MAIN_FILE
*&---------------------------------------------------------------------*
*& Form VIEW_DEST_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LKCLIENTES text
*----------------------------------------------------------------------*
FORM view_dest_file USING p_file.
DATA: t_data TYPE TABLE OF customer_file,
w_data LIKE LINE OF t_data,
v_data TYPE string.
OPEN DATASET p_file FOR INPUT IN LEGACY TEXT MODE TYPE 'NT'.
DO.
READ DATASET p_file INTO v_data.
IF sy-subrc IS INITIAL.
MOVE v_data TO w_data.
APPEND w_data TO t_data.
ELSE.
EXIT.
ENDIF.
ENDDO.
CALL FUNCTION 'HR_IT_SHOW_ANY_TABLE_ON_ALV'
TABLES
table = t_data
* EXCEPTIONS
* FB_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " VIEW_DEST_FILE
*&---------------------------------------------------------------------*
*& Form VIEW_ITEM_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LKITENS text
*----------------------------------------------------------------------*
FORM view_item_file USING p_file.
DATA: t_data TYPE TABLE OF item_file,
w_data LIKE LINE OF t_data,
v_data TYPE string.
OPEN DATASET p_file FOR INPUT IN LEGACY TEXT MODE TYPE 'NT'.
DO.
READ DATASET p_file INTO v_data.
IF sy-subrc IS INITIAL.
MOVE v_data TO w_data.
APPEND w_data TO t_data.
ELSE.
EXIT.
ENDIF.
ENDDO.
CALL FUNCTION 'HR_IT_SHOW_ANY_TABLE_ON_ALV'
TABLES
table = t_data
* EXCEPTIONS
* FB_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " VIEW_ITEM_FILE
*&---------------------------------------------------------------------*
*& Form REMOVE_DUP_NUMNFE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_NOTAS text
*----------------------------------------------------------------------*
FORM remove_dup_numnfe TABLES p_notas STRUCTURE ztbnf_header.
* DATA: BEGIN OF t_dupp OCCURS 0,
* sapid TYPE ztbnf_header-sapid,
* numnfe TYPE ztbnf_header-numnfe,
* serie TYPE ztbnf_header-serie,
* company TYPE ztbnf_header-company,
* md5 TYPE ztbnf_header-md5,
* docnum TYPE ztbnf_main-docnum,
* credat TYPE j_1bnfdoc-credat,
* cretim TYPE j_1bnfdoc-cretim,
* END OF t_dupp.
* DATA: w_dupp LIKE LINE OF t_dupp.
*
* SELECT head~sapid head~numnfe head~serie
* head~company head~md5 main~docnum doc~credat doc~cretim
* FROM ztbnf_header AS head
* INNER JOIN ztbnf_main AS main
* ON head~mandt = main~mandt
* AND head~md5 = main~zmd5
* INNER JOIN j_1bnfdoc AS doc
* ON main~mandt = doc~mandt
* AND main~docnum = doc~docnum
* INTO TABLE t_dupp
* FOR ALL ENTRIES IN p_notas
* WHERE head~sapid = p_notas-sapid.
* " ORDER BY head~numnfe head~serie doc~credat doc~cretim.
* SORT t_dupp BY numnfe serie credat cretim.
* DATA: last_dupp LIKE w_dupp.
* LOOP AT t_dupp INTO w_dupp.
* IF last_dupp-numnfe = w_dupp-numnfe.
* DELETE p_notas WHERE sapid = w_dupp-sapid.
* ENDIF.
* last_dupp = w_dupp.
* ENDLOOP.
"Introduzir nome correto para <...>.
ENDFORM. " REMOVE_DUP_NUMNFE
*&---------------------------------------------------------------------*
*& Form LOAD_TELECOM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM load_telecom .
DATA: file TYPE TABLE OF string,
filename TYPE string.
filename = p_telco.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = filename
* FILETYPE = 'ASC'
* HAS_FIELD_SEPARATOR = ' '
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* DAT_MODE = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* CHECK_BOM = ' '
* VIRUS_SCAN_PROFILE =
* NO_AUTH_CHECK = ' '
* IMPORTING
* FILELENGTH =
* HEADER =
TABLES
data_tab = file
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17
.
CHECK sy-subrc IS INITIAL.
CHECK file[] IS NOT INITIAL.
DATA: w_file LIKE LINE OF file,
t_split TYPE TABLE OF string,
v_lines TYPE i,
w_telecom_file TYPE telecom_file.
LOOP AT file INTO w_file.
CHECK sy-tabix > 1.
SPLIT w_file AT '|' INTO TABLE t_split.
DESCRIBE TABLE t_split LINES v_lines.
CHECK v_lines = 8.
CLEAR w_telecom_file.
READ TABLE t_split INDEX 1 INTO w_telecom_file-name.
READ TABLE t_split INDEX 2 INTO w_telecom_file-customer_id.
READ TABLE t_split INDEX 3 INTO w_telecom_file-username.
READ TABLE t_split INDEX 4 INTO w_telecom_file-billyear.
READ TABLE t_split INDEX 5 INTO w_telecom_file-billmonth.
READ TABLE t_split INDEX 6 INTO w_telecom_file-calltype.
READ TABLE t_split INDEX 7 INTO w_telecom_file-duration.
READ TABLE t_split INDEX 8 INTO w_telecom_file-value.
APPEND w_telecom_file TO telecom_file.
ENDLOOP.
ENDFORM. " LOAD_TELECOM
*&---------------------------------------------------------------------*
*& Form create_telecom_table
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM create_telecom_table.
DATA: lv_rc LIKE sy-subrc,
lv_obj_name TYPE tadir-obj_name,
ls_dd02v TYPE dd02v,
ls_dd09l TYPE dd09l,
lt_dd03p TYPE STANDARD TABLE OF dd03p WITH DEFAULT KEY.
FIELD-SYMBOLS: <ls_dd03p> LIKE LINE OF lt_dd03p.
ls_dd02v-tabname = c_tabname.
ls_dd02v-ddlanguage = sy-langu.
ls_dd02v-tabclass = 'TRANSP'.
ls_dd02v-ddtext = 'Telecom Usage'.
ls_dd02v-contflag = 'A'.
ls_dd02v-exclass = '1'.
ls_dd09l-tabname = c_tabname.
ls_dd09l-as4local = 'A'.
ls_dd09l-tabkat = '1'.
ls_dd09l-tabart = 'APPL1'.
ls_dd09l-bufallow = 'N'.
APPEND INITIAL LINE TO lt_dd03p ASSIGNING <ls_dd03p>.
<ls_dd03p>-tabname = c_tabname.
<ls_dd03p>-fieldname = 'TYPE'.
<ls_dd03p>-position = '0001'.
<ls_dd03p>-keyflag = 'X'.
<ls_dd03p>-datatype = 'CHAR'.
<ls_dd03p>-leng = '000012'.
APPEND INITIAL LINE TO lt_dd03p ASSIGNING <ls_dd03p>.
<ls_dd03p>-tabname = c_tabname.
<ls_dd03p>-fieldname = 'VALUE'.
<ls_dd03p>-position = '0002'.
<ls_dd03p>-keyflag = 'X'.
<ls_dd03p>-datatype = 'CHAR'.
<ls_dd03p>-leng = '000012'.
APPEND INITIAL LINE TO lt_dd03p ASSIGNING <ls_dd03p>.
<ls_dd03p>-tabname = c_tabname.
<ls_dd03p>-fieldname = 'DATA_STR'.
<ls_dd03p>-position = '0003'.
<ls_dd03p>-datatype = 'STRG'.
CALL FUNCTION 'DDIF_TABL_PUT'
EXPORTING
name = c_tabname
dd02v_wa = ls_dd02v
dd09l_wa = ls_dd09l
TABLES
dd03p_tab = lt_dd03p
EXCEPTIONS
tabl_not_found = 1
name_inconsistent = 2
tabl_inconsistent = 3
put_failure = 4
put_refused = 5
OTHERS = 6.
IF sy-subrc <> 0.
* zcx_abapgit_exception=>raise( 'migrate, error from DDIF_TABL_PUT' ).
ENDIF.
lv_obj_name = c_tabname.
CALL FUNCTION 'TR_TADIR_INTERFACE'
EXPORTING
wi_tadir_pgmid = 'R3TR'
wi_tadir_object = 'TABL'
wi_tadir_obj_name = lv_obj_name
wi_set_genflag = abap_true
wi_test_modus = abap_false
wi_tadir_devclass = '$TMP'
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
* zcx_abapgit_exception=>raise( 'migrate, error from TR_TADIR_INTERFACE' ).
ENDIF.
CALL FUNCTION 'DDIF_TABL_ACTIVATE'
EXPORTING
name = c_tabname
auth_chk = abap_false
IMPORTING
rc = lv_rc
EXCEPTIONS
not_found = 1
put_failure = 2
OTHERS = 3.
IF sy-subrc <> 0 OR lv_rc <> 0.
* zcx_abapgit_exception=>raise( 'migrate, error from DDIF_TABL_ACTIVATE' ).
ENDIF.
ENDFORM. "create_telecom_table
*&---------------------------------------------------------------------*
*& Form table_exists
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->VALUE(RV_EXISTS) text
*----------------------------------------------------------------------*
FORM table_exists
USING value(rv_exists) TYPE abap_bool.
DATA: lv_tabname TYPE dd02l-tabname.
SELECT SINGLE tabname FROM dd02l INTO lv_tabname
WHERE tabname = c_tabname.
IF sy-subrc IS INITIAL.
rv_exists = 'X'.
ELSE.
CLEAR rv_exists.
ENDIF.
ENDFORM. "table_exists
*&---------------------------------------------------------------------*
*& Form LOAD_TERMINALS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM load_terminals .
DATA: file TYPE TABLE OF string,
filename TYPE string.
filename = p_term.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = filename
* FILETYPE = 'ASC'
* HAS_FIELD_SEPARATOR = ' '
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* DAT_MODE = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* CHECK_BOM = ' '
* VIRUS_SCAN_PROFILE =
* NO_AUTH_CHECK = ' '
* IMPORTING
* FILELENGTH =
* HEADER =
TABLES
data_tab = file
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17
.
CHECK sy-subrc IS INITIAL.
CHECK file[] IS NOT INITIAL.
DATA: w_file LIKE LINE OF file,
t_split TYPE TABLE OF string,
v_lines TYPE i,
w_terminal_file TYPE terminal_file.
LOOP AT file INTO w_file.
CHECK sy-tabix > 1.
SPLIT w_file AT '|' INTO TABLE t_split.
DESCRIBE TABLE t_split LINES v_lines.
CHECK v_lines = 8.
CLEAR w_terminal_file.
READ TABLE t_split INDEX 1 INTO w_terminal_file-company_name.
READ TABLE t_split INDEX 2 INTO w_terminal_file-customer_id.
READ TABLE t_split INDEX 3 INTO w_terminal_file-service_name.
READ TABLE t_split INDEX 4 INTO w_terminal_file-service_id.
READ TABLE t_split INDEX 5 INTO w_terminal_file-parent_id.
READ TABLE t_split INDEX 6 INTO w_terminal_file-create_at.
READ TABLE t_split INDEX 7 INTO w_terminal_file-quantity.
READ TABLE t_split INDEX 8 INTO w_terminal_file-ddri.
APPEND w_terminal_file TO terminal_file.
ENDLOOP.
* TYPES: BEGIN OF terminal_file,
* company_name TYPE string,
* customer_id TYPE string,
* service_name TYPE string,
* servuce_id TYPE string,
* parent_id TYPE string,
* create_at TYPE string,
* quantity TYPE string,
* ddri TYPE string,
* END OF terminal_file.
ENDFORM. " LOAD_TERMINALS
*&---------------------------------------------------------------------*
*& Form FILL_NON_EXISTING
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_NOTAS text
*----------------------------------------------------------------------*
FORM fill_non_existing TABLES p_notas STRUCTURE ztbnf_header.
DATA: lines TYPE i.
DESCRIBE TABLE p_notas LINES lines.
DATA: first_line LIKE LINE OF p_notas,
last_line LIKE LINE OF p_notas.
READ TABLE p_notas INTO first_line INDEX 1.
READ TABLE p_notas INTO last_line INDEX lines.
DATA: check_last LIKE p_notas-numnfe.
check_last = first_line-numnfe.
check_last = check_last + lines - 1.
IF last_line-numnfe <> check_last.
DATA: w_nota LIKE LINE OF p_notas,
v_index TYPE i,
do_lines TYPE i.
do_lines = last_line-numnfe - first_line-numnfe.
DO do_lines TIMES.
DATA: check_index LIKE w_nota-numnfe,
line_before LIKE LINE OF p_notas.
v_index = sy-index.
check_index = first_line-numnfe + v_index.
READ TABLE p_notas WITH KEY numnfe = check_index
TRANSPORTING NO FIELDS.
IF sy-subrc IS NOT INITIAL.
check_index = check_index - 1.
WRITE: / 'Insert NF: ', check_index.
READ TABLE p_notas INTO line_before WITH KEY numnfe = check_index.
line_before-numnfe = first_line-numnfe + v_index.
ENDIF.
ENDDO.
ENDIF.
ENDFORM. " FILL_NON_EXISTING