antelio
11/7/2017 - 4:50 PM

ZFILE_CAT79_2017

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