BOM Management Class Definition
BOM Management Class Definition
PUBLIC SECTION.
TYPES:
zrange_matnr TYPE RANGE OF matnr .
TYPES:
zrange_werks TYPE RANGE OF werks_d .
TYPES:
BEGIN OF ty_mast,
matnr TYPE matnr,
werks TYPE werks_d,
stlan TYPE stlan,
stlnr TYPE stnum,
stlal TYPE stalt,
END OF ty_mast .
TYPES:
tt_mast TYPE TABLE OF ty_mast .
TYPES:
BEGIN OF ty_stko,
stlnr TYPE stnum,
stlal TYPE stalt,
stkoz TYPE cim_count,
datuv TYPE datuv,
stktx TYPE stktx,
END OF ty_stko .
TYPES:
tt_stko TYPE TABLE OF ty_stko .
METHODS constructor
IMPORTING
!ir_matnr TYPE zrange_matnr OPTIONAL
!ir_werks TYPE zrange_werks OPTIONAL .
METHODS carrega_bom_header
EXPORTING
!et_bom_header TYPE ztpp_bom_header .
METHODS carrega_bom_item
IMPORTING
!it_bom_header TYPE ztpp_relat_bom_header
EXPORTING
!et_bom_item TYPE ztpp_relat_bom_item .
METHODS gera_xls
IMPORTING
!it_bom_item TYPE ztpp_relat_bom_item .
METHODS config_fieldcat
CHANGING
!ct_fieldcat TYPE lvc_t_fcat .
METHODS valida_arquivo
IMPORTING
!it_xls_content TYPE ztpp_bom_change_xls_content
EXPORTING
!ev_retorno TYPE boolean
!ev_msg TYPE string .
METHODS alterar_lt
CHANGING
!ct_xls_content TYPE ztpp_bom_change_xls_content .
METHODS criar_lt
CHANGING
!ct_xls_content TYPE ztpp_bom_change_xls_content .
METHODS alterar_header_lt
CHANGING
!cs_lista_tecnica TYPE zspp_bom_change_xls_content .
METHODS alterar_item_lt
CHANGING
!cs_lista_tecnica TYPE zspp_bom_change_xls_content .
METHODS excluir_item_lt
CHANGING
!cs_lista_tecnica TYPE zspp_bom_change_xls_content .
METHODS incluir_item_lt
CHANGING
!cs_lista_tecnica TYPE zspp_bom_change_xls_content .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_BOM->ALTERAR_HEADER_LT
*
+----------------------------------------------------------------------------------
---------------+
* | [<-->] CS_LISTA_TECNICA TYPE ZSPP_BOM_CHANGE_XLS_CONTENT
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD alterar_header_lt.
DATA:
lv_material TYPE csap_mbom-matnr,
lv_plant TYPE csap_mbom-werks,
lv_bom_usage TYPE csap_mbom-stlan,
lv_alternative TYPE csap_mbom-stlal,
lv_change_no TYPE csap_mbom-aennr,
lv_valid_from TYPE csap_mbom-datuv,
lv_warning TYPE capiflag-flwarning,
ls_stko-base_quan = cs_lista_tecnica-bmeng.
ls_stko-base_unit = cs_lista_tecnica-bmein.
ls_stko-bom_status = cs_lista_tecnica-stlst.
ls_stko-bom_text = cs_lista_tecnica-ztext.
ls_stko-alt_text = cs_lista_tecnica-stktx.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
cs_lista_tecnica-stprc = 'Header alterado com sucesso'.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO cs_lista_tecnica-stprc.
IF cs_lista_tecnica-stprc IS INITIAL.
cs_lista_tecnica-stprc = 'Erro na alteração do header'.
ENDIF.
ENDIF.
ENDMETHOD. "ALTERAR_HEADER_LT
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_BOM->ALTERAR_ITEM_LT
*
+----------------------------------------------------------------------------------
---------------+
* | [<-->] CS_LISTA_TECNICA TYPE ZSPP_BOM_CHANGE_XLS_CONTENT
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD alterar_item_lt.
DATA:
lv_material TYPE csap_mbom-matnr,
lv_plant TYPE csap_mbom-werks,
lv_bom_usage TYPE csap_mbom-stlan,
lv_alternative TYPE csap_mbom-stlal,
lv_change_no TYPE csap_mbom-aennr,
lv_valid_from TYPE csap_mbom-datuv,
lv_postp TYPE postp,
lv_posnr TYPE sposn,
lv_idnrk TYPE idnrk,
lv_warning TYPE capiflag-flwarning,
lv_material = cs_lista_tecnica-matnr.
lv_plant = cs_lista_tecnica-werks.
lv_bom_usage = ls_mast-stlan.
lv_alternative = cs_lista_tecnica-stlal.
lv_change_no = cs_lista_tecnica-aennr.
WRITE sy-datum TO lv_valid_from MM/DD/YYYY.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO cs_lista_tecnica-stprc.
IF cs_lista_tecnica-stprc IS INITIAL.
cs_lista_tecnica-stprc = 'Erro na explosão da LT'.
ENDIF.
ENDIF.
lv_postp = cs_lista_tecnica-postp.
lv_posnr = cs_lista_tecnica-posnr.
ls_stpo_maintain = ls_stpo_open.
ls_stpo_maintain-comp_qty = cs_lista_tecnica-menge.
ls_stpo_maintain-comp_unit = cs_lista_tecnica-meins.
ls_stpo_maintain-change_no = cs_lista_tecnica-aennr.
ls_stpo_maintain-issue_loc = cs_lista_tecnica-lgort.
APPEND ls_stpo_maintain TO lt_stpo_maintain.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO cs_lista_tecnica-stprc.
IF cs_lista_tecnica-stprc IS INITIAL.
cs_lista_tecnica-stprc = 'Erro na alteração do item'.
ENDIF.
ENDIF.
ENDMETHOD. "ALTERAR_ITEM_LT
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_BOM->ALTERAR_LT
*
+----------------------------------------------------------------------------------
---------------+
* | [<-->] CT_XLS_CONTENT TYPE ZTPP_BOM_CHANGE_XLS_CONTENT
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD alterar_lt.
lt_xls_content[] = ct_xls_content[].
lv_tabix = sy-tabix.
CASE ls_xls_content-procs.
WHEN 'A'. "Alteração na LT
IF ls_xls_content-tipoi = 'H'. "alteração no header
WAIT UP TO 1 SECONDS.
WAIT UP TO 1 SECONDS.
ENDIF.
WAIT UP TO 1 SECONDS.
ENDIF.
IF ls_xls_content-tipoi = 'COMP'.
WAIT UP TO 1 SECONDS.
ENDIF.
ENDCASE.
ENDLOOP.
ENDMETHOD. "ALTERAR_LT
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_BOM->CARREGA_BOM_HEADER
*
+----------------------------------------------------------------------------------
---------------+
* | [<---] ET_BOM_HEADER TYPE ZTPP_BOM_HEADER
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD carrega_bom_header.
TYPES:
BEGIN OF ty_stko,
stlty TYPE stko-stlty,
stlnr TYPE stko-stlnr,
stlal TYPE stko-stlal,
stkoz TYPE stko-stkoz,
werks TYPE stko-wrkan,
datuv TYPE stko-datuv,
stktx TYPE stktx,
END OF ty_stko,
BEGIN OF ty_stzu,
stlnr TYPE stzu-stlnr,
ztext TYPE stzu-ztext,
stuez TYPE stzu-stuez,
END OF ty_stzu.
DATA:
lt_stko TYPE TABLE OF ty_stko,
lt_stko_aux TYPE TABLE OF ty_stko,
lt_stzu TYPE TABLE OF ty_stzu,
lt_stzu_aux TYPE TABLE OF ty_stzu,
SELECT stlty
stlnr
stlal
stkoz
wrkan
datuv
stktx
INTO TABLE lt_stko
FROM stko
FOR ALL ENTRIES IN me->t_mast
WHERE stlnr = me->t_mast-stlnr
AND stlal = me->t_mast-stlal
AND stlty = c_m.
lt_stko_aux[] = lt_stko[].
SELECT stlnr
ztext
stuez
INTO TABLE lt_stzu
FROM stzu
FOR ALL ENTRIES IN lt_stko
WHERE stlty = lt_stko-stlty
AND stlnr = lt_stko-stlnr
AND wrkan = lt_stko-werks.
lt_stzu_aux[] = lt_stzu[].
CLEAR: lv_stlnr.
ls_bom_header-stlnr = ls_stko-stlnr.
ls_bom_header-stlal = ls_stko-stlal.
ls_bom_header-stkoz = ls_stko-stkoz.
ls_bom_header-datuv = ls_stko-datuv.
ls_bom_header-stktx = ls_stko-stktx.
ls_bom_header-ztext = ls_stzu-ztext.
APPEND ls_bom_header TO et_bom_header.
ENDLOOP.
ENDMETHOD. "CARREGA_BOM_HEADER
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_BOM->CARREGA_BOM_ITEM
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IT_BOM_HEADER TYPE ZTPP_RELAT_BOM_HEADER
* | [<---] ET_BOM_ITEM TYPE ZTPP_RELAT_BOM_ITEM
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD carrega_bom_item.
DATA:
ls_bom_header TYPE zspp_relat_bom_header,
ls_mast TYPE ty_mast,
lt_stb TYPE TABLE OF stpox,
ls_stb TYPE stpox,
ls_topmat TYPE cstmat,
ls_bom_item TYPE zspp_relat_bom_item,
"montando header
CLEAR ls_bom_item.
ls_bom_item-tipoi = 'H'.
ls_bom_item-matnr = ls_mast-matnr.
ls_bom_item-werks = ls_mast-werks.
ls_bom_item-stlal = ls_mast-stlal.
ls_bom_item-stlnr = ls_mast-stlnr.
ls_bom_item-stktx = ls_bom_header-stktx.
ls_bom_item-ztext = ls_bom_header-ztext.
CONTINUE.
ENDIF.
"header
ls_bom_item-maktx = ls_topmat-maktx.
ls_bom_item-bmeng = ls_topmat-bmeng.
ls_bom_item-bmein = ls_topmat-bmein.
ls_bom_item-stlst = ls_topmat-stlst.
APPEND ls_bom_item TO et_bom_item.
"item
LOOP AT lt_stb INTO ls_stb.
ls_bom_item-tipoi = 'COMP'.
ls_bom_item-idnrk = ls_stb-idnrk.
ls_bom_item-idntx = ls_stb-ojtxp.
ls_bom_item-posnr = ls_stb-posnr.
ls_bom_item-postp = ls_stb-postp.
ls_bom_item-meins = ls_stb-meins.
ls_bom_item-menge = ls_stb-menge.
ls_bom_item-lgort = ls_stb-lgort.
APPEND ls_bom_item TO et_bom_item.
ENDLOOP.
ENDLOOP.
ENDMETHOD. "CARREGA_BOM_ITEM
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_BOM->CONFIG_FIELDCAT
*
+----------------------------------------------------------------------------------
---------------+
* | [<-->] CT_FIELDCAT TYPE LVC_T_FCAT
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD config_fieldcat.
CASE <fs_fieldcat>-fieldname.
WHEN 'PROCS'.
<fs_fieldcat>-reptext = 'PROC'.
WHEN 'TIPOI'.
<fs_fieldcat>-reptext = 'TIPO'.
WHEN 'AENNR'.
<fs_fieldcat>-reptext = 'N. MODIF.'.
WHEN 'MATNR'.
<fs_fieldcat>-reptext = 'MATERIAL'.
WHEN 'MAKTX'.
<fs_fieldcat>-reptext = 'DESCRIÇÃO'.
WHEN 'WERKS'.
<fs_fieldcat>-reptext = 'CENTRO'.
WHEN 'STLAL'.
<fs_fieldcat>-reptext = 'ALTERNATIVA'.
WHEN 'STLNR'.
<fs_fieldcat>-reptext = 'LISTA TÉCNICA'.
WHEN 'STKTX'.
<fs_fieldcat>-reptext = 'TEXTO ALT'.
WHEN 'ZTEXT'.
<fs_fieldcat>-reptext = 'BOM TEXTO'.
WHEN 'BMENG'.
<fs_fieldcat>-reptext = 'QTD BÁSICA'.
WHEN 'BMEIN'.
<fs_fieldcat>-reptext = 'UM BÁSICA'.
WHEN 'STLST'.
<fs_fieldcat>-reptext = 'STATUS'.
WHEN 'IDNRK'.
<fs_fieldcat>-reptext = 'COMPONENTE'.
WHEN 'IDNTX'.
<fs_fieldcat>-reptext = 'DENOMINAÇÃO'.
WHEN 'POSNR'.
<fs_fieldcat>-reptext = 'ITEM'.
WHEN 'POSTP'.
<fs_fieldcat>-reptext = 'CTG ITEM'.
WHEN 'MEINS'.
<fs_fieldcat>-reptext = 'UNIDADE'.
WHEN 'MENGE'.
<fs_fieldcat>-reptext = 'QTD'.
WHEN 'LGORT'.
<fs_fieldcat>-reptext = 'DEPÓSITO'.
WHEN 'STPRC'.
<fs_fieldcat>-reptext = 'STATUS'.
ENDCASE.
ENDLOOP.
ENDMETHOD. "CONFIG_FIELDCAT
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_BOM->CONSTRUCTOR
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IR_MATNR TYPE ZRANGE_MATNR(optional)
* | [--->] IR_WERKS TYPE ZRANGE_WERKS(optional)
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD constructor.
TYPES:
BEGIN OF ty_set_eliminate,
matnr TYPE matnr,
werks TYPE werks_d,
END OF ty_set_eliminate.
DATA:
lt_set_eliminate TYPE TABLE OF ty_set_eliminate,
SORT lt_set_eliminate.
DELETE ADJACENT DUPLICATES FROM lt_set_eliminate.
SELECT matnr
werks
stlan
stlnr
stlal
INTO TABLE me->t_mast
FROM mast
WHERE matnr IN ir_matnr
AND werks IN ir_werks.
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_BOM->CRIAR_LT
*
+----------------------------------------------------------------------------------
---------------+
* | [<-->] CT_XLS_CONTENT TYPE ZTPP_BOM_CHANGE_XLS_CONTENT
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD criar_lt.
lv_matnr_h = ls_xls_content_h-matnr.
lv_werks_h = ls_xls_content_h-werks.
lv_stlal_h = ls_xls_content_h-stlal.
lv_aennr_h = ls_xls_content_h-aennr.
WRITE sy-datum TO lv_valid_from MM/DD/YYYY.
ls_stpo-item_categ = ls_xls_content-postp.
ls_stpo-item_no = ls_xls_content-posnr.
ls_stpo-component = ls_xls_content-idnrk.
ls_stpo-comp_qty = ls_xls_content-menge.
ls_stpo-comp_unit = ls_xls_content-meins.
ls_stpo-issue_loc = ls_xls_content-lgort.
APPEND ls_stpo TO lt_stpo.
ENDLOOP.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
lv_msg = 'LT criada com sucesso'.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO lv_msg.
IF lv_msg IS INITIAL.
lv_msg = 'Erro na criação da LT'.
ENDIF.
ENDIF.
ls_bom_header-stype = 'M'.
ls_bom_header-tcode = 'CS01'.
ls_bom_header-aennr = ls_xls_content_h-aennr.
ls_bom_header-bmeng = ls_xls_content_h-bmeng.
ls_bom_header-datuv = lv_valid_from.
ls_bom_header-matnr = ls_xls_content_h-matnr.
ls_bom_header-stktx = ls_xls_content_h-stktx.
ls_bom_header-stlal = ls_xls_content_h-stlal.
ls_bom_header-stlan = ls_mast-stlan.
ls_bom_header-stlst = ls_xls_content_h-stlst.
ls_bom_header-werks = ls_xls_content_h-werks.
IF lv_msgty = 'S'.
lv_msg = 'LT alternativa criada com sucesso'.
ELSE.
CONCATENATE lv_msgid lv_msgno lv_msgty lv_msgv1 lv_msgv2 lv_msgv3 lv_msgv4
INTO lv_msg SEPARATED BY space.
ENDIF.
ENDIF.
ENDMETHOD. "CRIAR_LT
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_BOM->EXCLUIR_ITEM_LT
*
+----------------------------------------------------------------------------------
---------------+
* | [<-->] CS_LISTA_TECNICA TYPE ZSPP_BOM_CHANGE_XLS_CONTENT
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD excluir_item_lt.
DATA:
lv_material TYPE csap_mbom-matnr,
lv_plant TYPE csap_mbom-werks,
lv_bom_usage TYPE csap_mbom-stlan,
lv_alternative TYPE csap_mbom-stlal,
lv_change_no TYPE csap_mbom-aennr,
lv_valid_from TYPE csap_mbom-datuv,
lv_warning TYPE capiflag-flwarning,
lv_postp TYPE postp,
lv_posnr TYPE sposn,
lv_idnrk TYPE idnrk,
lv_material = cs_lista_tecnica-matnr.
lv_plant = cs_lista_tecnica-werks.
lv_bom_usage = ls_mast-stlan.
lv_alternative = cs_lista_tecnica-stlal.
lv_change_no = cs_lista_tecnica-aennr.
WRITE sy-datum TO lv_valid_from MM/DD/YYYY.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO cs_lista_tecnica-stprc.
IF cs_lista_tecnica-stprc IS INITIAL.
cs_lista_tecnica-stprc = 'Erro na explosão da LT'.
ENDIF.
EXIT.
ENDIF.
lv_postp = cs_lista_tecnica-postp.
lv_posnr = cs_lista_tecnica-posnr.
ls_stpo_open-fldelete = abap_true.
ls_stpo_maintain = ls_stpo_open.
APPEND ls_stpo_maintain TO lt_stpo_maintain.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO cs_lista_tecnica-stprc.
IF cs_lista_tecnica-stprc IS INITIAL.
cs_lista_tecnica-stprc = 'Erro na exclusão do item'.
ENDIF.
ENDIF.
ENDMETHOD. "EXCLUIR_ITEM_LT
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_BOM->GERA_XLS
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IT_BOM_ITEM TYPE ZTPP_RELAT_BOM_ITEM
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD gera_xls.
DATA:
ls_bom_item TYPE zspp_relat_bom_item,
ls_xls_content TYPE zspp_bom_change_xls_content,
lt_xls_content TYPE ztpp_bom_change_xls_content,
lv_version TYPE string,
lv_file_type TYPE salv_bs_constant,
lv_flavour TYPE string,
lt_xml_choice TYPE if_salv_bs_xml=>t_type_xml_choice,
ls_xml_choice TYPE if_salv_bs_xml=>s_type_xml_choice,
g_xstring TYPE xstring,
lo_data TYPE REF TO data,
lo_result_data TYPE REF TO cl_salv_ex_result_data_table,
lt_fieldcatalog TYPE lvc_t_fcat.
"povoando tabela de conteudo xlsx
LOOP AT it_bom_item INTO ls_bom_item.
ls_xls_content-tipoi = ls_bom_item-tipoi.
ls_xls_content-aennr = ls_bom_item-aennr.
ls_xls_content-matnr = ls_bom_item-matnr.
ls_xls_content-maktx = ls_bom_item-maktx.
ls_xls_content-werks = ls_bom_item-werks.
ls_xls_content-stlal = ls_bom_item-stlal.
ls_xls_content-stlnr = ls_bom_item-stlnr.
ls_xls_content-stktx = ls_bom_item-stktx.
ls_xls_content-ztext = ls_bom_item-ztext.
ls_xls_content-bmeng = ls_bom_item-bmeng.
ls_xls_content-bmein = ls_bom_item-bmein.
ls_xls_content-stlst = ls_bom_item-stlst.
ls_xls_content-idnrk = ls_bom_item-idnrk.
ls_xls_content-idntx = ls_bom_item-idntx.
ls_xls_content-posnr = ls_bom_item-posnr.
ls_xls_content-postp = ls_bom_item-postp.
ls_xls_content-meins = ls_bom_item-meins.
ls_xls_content-menge = ls_bom_item-menge.
ls_xls_content-lgort = ls_bom_item-lgort.
ls_xls_content-stprc = ls_bom_item-stprc.
"versão do xml
CASE cl_salv_bs_a_xml_base=>get_version( ).
WHEN if_salv_bs_xml=>version_25.
lv_version = if_salv_bs_xml=>version_25.
WHEN if_salv_bs_xml=>version_26.
lv_version = if_salv_bs_xml=>version_26.
WHEN OTHERS.
ENDCASE.
"filetype: XLSX
lv_file_type = if_salv_bs_xml=>c_type_xlsx.
"flavour: export
lv_flavour = if_salv_bs_c_tt=>c_tt_xml_flavour_export.
"configurando fieldcat
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'ZSPP_BOM_CHANGE_XLS_CONTENT'
CHANGING
ct_fieldcat = lt_fieldcatalog
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
CALL METHOD me->config_fieldcat
CHANGING
ct_fieldcat = lt_fieldcatalog.
lt_xml_choice = cl_salv_export_xml_dialog=>get_gui_spreadsheet_formats( ).
"salvando xlsx
READ TABLE lt_xml_choice INTO ls_xml_choice WITH KEY xml_type = lv_file_type.
IF sy-subrc EQ 0.
cl_salv_export_xml_dialog=>download( EXPORTING s_xml_choice = ls_xml_choice
xml = g_xstring ).
ENDIF.
IF sy-subrc IS INITIAL.
MESSAGE 'Arquivo gerado com sucesso' TYPE 'S'.
ENDIF.
ENDMETHOD. "GERA_XLS
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_BOM->INCLUIR_ITEM_LT
*
+----------------------------------------------------------------------------------
---------------+
* | [<-->] CS_LISTA_TECNICA TYPE ZSPP_BOM_CHANGE_XLS_CONTENT
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD incluir_item_lt.
lv_material = cs_lista_tecnica-matnr.
lv_plant = cs_lista_tecnica-werks.
lv_bom_usage = ls_mast-stlan.
lv_alternative = cs_lista_tecnica-stlal.
lv_change_no = cs_lista_tecnica-aennr.
WRITE sy-datum TO lv_valid_from MM/DD/YYYY.
ls_stpo-item_categ = cs_lista_tecnica-postp.
ls_stpo-item_no = cs_lista_tecnica-posnr.
ls_stpo-component = cs_lista_tecnica-idnrk.
ls_stpo-comp_qty = cs_lista_tecnica-menge.
ls_stpo-comp_unit = cs_lista_tecnica-meins.
ls_stpo-issue_loc = cs_lista_tecnica-lgort.
APPEND ls_stpo TO lt_stpo.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
cs_lista_tecnica-stprc = 'Item incluído com sucesso'.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO cs_lista_tecnica-stprc.
IF cs_lista_tecnica-stprc IS INITIAL.
cs_lista_tecnica-stprc = 'Erro na inclusão do item'.
ENDIF.
ENDIF.
ENDMETHOD. "INCLUIR_ITEM_LT
*
<SIGNATURE>------------------------------------------------------------------------
---------------+
* | Instance Public Method ZCL_BOM->VALIDA_ARQUIVO
*
+----------------------------------------------------------------------------------
---------------+
* | [--->] IT_XLS_CONTENT TYPE ZTPP_BOM_CHANGE_XLS_CONTENT
* | [<---] EV_RETORNO TYPE BOOLEAN
* | [<---] EV_MSG TYPE STRING
*
+----------------------------------------------------------------------------------
----</SIGNATURE>
METHOD valida_arquivo.
DATA:
ls_xls_content LIKE LINE OF it_xls_content,
s_procs-sign = 'I'.
s_procs-option = 'EQ'.
s_procs-low = 'A'.
APPEND s_procs TO r_procs.
s_procs-low = 'E'.
APPEND s_procs TO r_procs.
s_procs-low = 'I'.
APPEND s_procs TO r_procs.
s_procs-low = space.
APPEND s_procs TO r_procs.
s_tipoi-sign = 'I'.
s_tipoi-option = 'EQ'.
s_tipoi-low = 'H'.
APPEND s_tipoi TO r_tipoi.
s_tipoi-low = 'COMP'.
APPEND s_tipoi TO r_tipoi.
ENDLOOP.
IF ev_msg IS INITIAL.
ev_retorno = abap_true.
ENDIF.
ENDMETHOD. "VALIDA_ARQUIVO
ENDCLASS.