Upload/Overwrite a BOM
Posted: Sun Jan 26, 2020 2:27 pm
- Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
- *&---------------------------------------------------------------------*
- *& Report YCS_BOM_UPLOAD *
- *& *
- *&---------------------------------------------------------------------*
- *& *
- *& *
- *&---------------------------------------------------------------------*
- REPORT ycs_bom_upload .
- * Data Filenames: MATNR.txt
- * BMK(SORTF);MENGE;MATNR;CATEG;SHKZ
- *e.g.
- * -SH14;5,00;271252832;L;X
- * -*;6,00;271252838;L;
- * -A10;7,00;271252844;L;X
- * -1U1;2,00;271259006;D;
- * POPUP Selection def
- BEGIN OF ty_sel,
- component TYPE stpo_api02-component,
- change_no TYPE stpo_api02-change_no,
- bom_text TYPE stko_api01-bom_text,
- checkbox(1),
- END OF ty_sel.
- DATA g_exit.
- DATA:
- * Data displayed
- gt_seldat TYPE TABLE OF ty_sel.
- * Datenfile
- sortstring TYPE sortp,
- comp_qty TYPE i,
- component TYPE matnr,
- item_categ TYPE postp,
- item_no TYPE sposn,
- item_text2 TYPE potx2,
- bulk_mat TYPE schgt,
- END OF it_bom.
- fname TYPE file_table-filename,
- component TYPE matnr,
- * aennr TYPE csap_mbom-aennr,
- END OF t_files.
- * File Table
- gv_heute TYPE csap_mbom-datuv.
- * Datei
- *** Drucktaste 1
- p_werk = '1207'.
- * siehe RSSYSTDB Gui Status %_00
- *** "Ausführen" verbieten
- *** "Ausführen + Drucken" verbieten
- *** "Im Hintergrund ausführen" verbieten
- *** Variante sichern verbieten
- *** Variante löschen verbieten
- *** Variante holen
- *** Variante anzeigen verbieten
- * ZURÜCK unterdrücken
- * APPEND 'E' TO gt_exclude.
- * BEENDEN unterdrücken
- * ABBRECHEN unterdrücken
- *** Aktuellen Status setzen und obige Funktionen verbieten
- CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
- EXPORTING
- p_status = sy-pfkey
- p_exclude = gt_exclude.
- * Datumsformat = DD.MM.JJJJ
- *** Selektionsbild (PAI)
- AT SELECTION-SCREEN.
- *** Drucktasten abfragen
- FREE it_bom.
- rc = 0.
- PERFORM file_select.
- EXIT.
- * Read the selected files into it_files
- PERFORM update_filetab.
- rc = 0.
- PERFORM file_upload.
- EXIT.
- PERFORM renew_bom.
- EXIT.
- rc = 0.
- PERFORM maint_bom.
- * IF rc NE 0.
- * Ausgabe des Protokolls
- CALL FUNCTION 'Y_BAL_LOG'
- EXPORTING
- i_display = 'X'
- i_refresh = 'X'
- i_repid = sy-repid
- EXCEPTIONS
- error_create = 1
- error_add_message = 2
- error_refresh = 3
- error_display_profile = 4
- error_display = 5
- OTHERS = 6.
- * LEAVE PROGRAM.
- * EXIT.
- * ENDIF.
- * MESSAGE s030(29) WITH <p>-component .
- *&---------------------------------------------------------------------*
- *& Form file_select
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- FORM file_select.
- lv_title = 'Open BOM file'(014).
- lv_filter = 'BOM-file(*.TXT)|*.txt'.
- CALL METHOD cl_gui_frontend_services=>file_open_dialog
- EXPORTING
- window_title = lv_title
- initial_directory = 'C:\temp'
- file_filter = lv_filter
- multiselection = 'X'
- CHANGING
- file_table = file_table[]
- rc = rc
- EXCEPTIONS
- file_open_dialog_failed = 1
- cntl_error = 2
- error_no_gui = 3
- not_supported_by_gui = 4
- OTHERS = 5.
- rc = 1.
- ELSE.
- ls_files-fname = f_name.
- rc = 0.
- *&---------------------------------------------------------------------*
- *& Form file_upload
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- FORM file_upload.
- lv_fname = <p>-fname.
- REFRESH it_bom.
- CALL METHOD cl_gui_frontend_services=>gui_upload
- EXPORTING
- filename = lv_fname
- filetype = 'ASC'
- has_field_separator = 'X'
- CHANGING
- data_tab = it_data
- 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
- not_supported_by_gui = 17
- error_no_gui = 18
- OTHERS = 19.
- rc = 1.
- EXIT.
- lv_index = sy-tabix * 10.
- CLEAR it_bom.
- k = lines( lt_split ).
- * GET BMK
- READ TABLE lt_split INDEX 1 INTO ls_split.
- it_bom-sortstring = ls_split.
- ELSE.
- * GET Quantity
- READ TABLE lt_split INDEX 2 INTO ls_split.
- it_bom-comp_qty = ls_split.
- ELSE.
- * GET Component
- READ TABLE lt_split INDEX 3 INTO ls_split.
- * Matnr mapping
- it_bom-component = ls_split.
- ELSE.
- * GET Item Category
- READ TABLE lt_split INDEX 4 INTO ls_split.
- it_bom-item_categ = ls_split.
- ELSE.
- * GET additional Document info text
- READ TABLE lt_split INDEX 5 INTO ls_split.
- it_bom-item_text2 = ls_split.
- ELSE.
- ELSE.
- * GET Bulk Mat hook
- READ TABLE lt_split INDEX 6 INTO ls_split.
- ELSE.
- it_bom-bulk_mat = 'X'.
- ELSE.
- * GET Posnr
- it_bom-item_no = lv_index.
- APPEND it_bom.
- *rc = 1.
- *&---------------------------------------------------------------------*
- *& Form renew_bom
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- FORM renew_bom.
- * DATA lv_ans(1).
- * DATA lv_matnr TYPE matnr.
- * DATA lv_aennr TYPE aennr.
- * DATA ls_stko TYPE stko_api02.
- * DATA lt_stko TYPE TABLE OF stko_api02.
- * DATA ls_stpo TYPE stpo_api02.
- * DATA lt_stpo TYPE TABLE OF stpo_api02.
- ** Teste ob Materialstückliste schon existiert
- * SELECT COUNT(*) FROM mast WHERE
- * matnr = <p>-component AND
- * werks = p_werk AND
- * stlan = p_stlan.
- * Check BOM exisitence (incl. ChangeNo)
- * CALL FUNCTION 'CSAP_MAT_BOM_READ'
- * EXPORTING
- * material = <p>-component
- * plant = p_werk
- * bom_usage = p_stlan
- * TABLES
- * t_stpo = lt_stpo
- * t_stko = lt_stko
- * EXCEPTIONS
- * error = 1
- * OTHERS = 2.
- *
- * IF sy-subrc = 0.
- * READ TABLE lt_stko INDEX 1 INTO ls_stko.
- *
- * LOOP AT lt_stpo INTO ls_stpo WHERE change_no NE ' '.
- * EXIT.
- * ENDLOOP.
- *
- ** check for HEAD change number and POS change number
- * IF ls_stpo-change_no IS INITIAL AND ls_stko-chg_no IS INITIAL.
- * ELSE.
- * PERFORM write_log USING <p>-component 'discarded - Change numbers'(016).
- * CLEAR <p>-component.
- * EXIT.
- * ENDIF.
- *
- * ENDIF."sy-subrc
- * IF NOT lt_stko[] IS INITIAL.
- * für BOM_OPEN
- ** DATA: BEGIN OF tstpo2 OCCURS 0.
- ** INCLUDE STRUCTURE stpo_api02.
- ** DATA: END OF tstpo2.
- ** DATA ls_tstpo2 TYPE stpo_api02.
- **
- ** REFRESH tstpo2.
- ** CALL FUNCTION 'CSAP_MAT_BOM_OPEN'
- ** EXPORTING
- ** material = <p>-component
- ** plant = p_werk
- ** bom_usage = p_stlan
- ** valid_from = ls_stko-valid_from
- *** change_no = lv_aennr
- ** fl_no_change_doc = 'X'
- ** TABLES
- ** t_stpo = tstpo2
- ** EXCEPTIONS
- ** error = 1
- ** OTHERS = 2.
- **
- ** IF sy-subrc = 0.
- ** LOOP AT tstpo2 INTO ls_tstpo2.
- **
- ** ls_tstpo2-fldelete = 'X'.
- **
- ** CALL FUNCTION 'CSAP_BOM_ITEM_MAINTAIN'
- ** EXPORTING
- ** i_stpo = ls_tstpo2
- ** EXCEPTIONS
- ** error = 1
- ** OTHERS = 2.
- **
- ** ENDLOOP.
- **
- ** ENDIF.
- **
- **
- ** CALL FUNCTION 'CSAP_MAT_BOM_CLOSE'
- ** EXCEPTIONS
- ** error = 1
- ** OTHERS = 2.
- **
- ** IF sy-subrc <> 0.
- ** ENDIF.
- rc = 0.
- CALL FUNCTION 'CSAP_MAT_BOM_DELETE'
- EXPORTING
- material = <p>-component
- plant = p_werk
- bom_usage = p_stlan
- * valid_from = ls_stko-valid_from
- * change_no = lv_aennr
- fl_commit_and_wait = 'X'
- EXCEPTIONS
- error = 1
- OTHERS = 2.
- * MESSAGE ID 'SY' TYPE 'E' NUMBER '002' WITH
- * 'Error while trying to delete BOM.'(011).
- *- Materialstückliste anlegen (nur Kopfdaten)
- *- Kopfdaten füllen
- * lv_tstko-base_quan = '1.000'. " Ticket#4293878 delete
- lv_tstko-base_quan = lc_base_quan. " Ticket#4293878 insert
- lv_tstko-bom_text = 'Bill of Material from file'(012).
- CALL FUNCTION 'CSAP_MAT_BOM_CREATE'
- EXPORTING
- material = <p>-component
- plant = p_werk
- bom_usage = p_stlan
- valid_from = gv_heute
- * change_no = <p>-aennr
- i_stko = lv_tstko
- EXCEPTIONS
- error = 1.
- 'Error trying to create BOM.'(013).
- * ELSE.
- * existiert nicht - neu anlegen
- *- Materialstückliste anlegen (nur Kopfdaten)
- *- Kopfdaten füllen
- * lv_tstko-base_quan = '1.000'.
- * lv_tstko-bom_text = 'Bill of Material from file'(012).
- *
- * CALL FUNCTION 'CSAP_MAT_BOM_CREATE'
- * EXPORTING
- * material = <p>-component
- * plant = p_werk
- * bom_usage = p_stlan
- * valid_from = gv_heute
- ** change_no = <p>-aennr
- * i_stko = lv_tstko
- * EXCEPTIONS
- * error = 1.
- *
- * IF sy-subrc EQ 1.
- * MESSAGE ID 'SY' TYPE 'E' NUMBER '002' WITH
- * 'Error trying to create BOM.'(013).
- * ENDIF.
- *
- * ENDIF."bom exist
- *&---------------------------------------------------------------------*
- *& Form maint_bom
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- FORM maint_bom.
- * für BOM_OPEN
- INCLUDE STRUCTURE stpo_api02.
- * Böse Falle !
- WAIT UP TO 1 SECONDS.
- CALL FUNCTION 'CSAP_MAT_BOM_OPEN'
- EXPORTING
- material = <p>-component
- plant = p_werk
- bom_usage = p_stlan
- valid_from = gv_heute
- * change_no = <p>-aennr
- fl_no_change_doc = 'X'
- t_stpo = tstpo2
- EXCEPTIONS
- error = 1
- OTHERS = 2.
- EXIT.
- i = lines( it_bom ).
- LOOP AT it_bom.
- lv_cnt = sy-tabix.
- CLEAR ls_tstpo2.
- * ls_tstpo2-item_categ = 'L'. "Mußeingabe
- ls_tstpo2-rel_cost = space.
- ls_tstpo2-rel_engin = space.
- ls_tstpo2-rel_pmaint = space.
- ls_tstpo2-rel_sales = space.
- ls_tstpo2-rel_prod = 'X'.
- * CLEAR ls_tstpo2-BULK_MAT.
- ls_tstpo2-document = ls_tstpo2-component.
- ls_tstpo2-doc_type = 'SEG'.
- CALL FUNCTION 'CSAP_BOM_ITEM_MAINTAIN'
- EXPORTING
- i_stpo = ls_tstpo2
- EXCEPTIONS
- error = 1
- OTHERS = 2.
- ELSE.
- rc = 1.
- * Fortschrittsanzeige
- lv_ptext = 'bearbeite Material'.
- SEPARATED BY space.
- SEPARATED BY space.
- CONCATENATE lv_ptext lv_txt INTO lv_ptext
- SEPARATED BY space.
- CALL FUNCTION 'PROGRESS_INDICATOR'
- EXPORTING
- i_text = lv_ptext
- i_processed = lv_cnt
- i_total = i
- i_output_immediately = 'X'.
- CALL FUNCTION 'CSAP_MAT_BOM_CLOSE'
- EXCEPTIONS
- error = 1
- OTHERS = 2.
- break guenther.
- ELSE.
- *&---------------------------------------------------------------------*
- *& Form write_log
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * -->MATNR text
- * -->TEXT text
- *----------------------------------------------------------------------*
- CALL FUNCTION 'Y_BAL_LOG'
- EXPORTING
- i_msgty = 'E'
- i_msgid = '0U'
- i_msgno = '533'
- i_msgv1 = matnr
- i_msgv2 = text
- i_msgv3 = ' '
- i_repid = sy-repid
- EXCEPTIONS
- error_create = 1
- error_add_message = 2
- error_refresh = 3
- error_display_profile = 4
- error_display = 5
- OTHERS = 6.
- *&---------------------------------------------------------------------*
- *& Form update_filetab
- *&---------------------------------------------------------------------*
- * Extract BomNo and ChangeNo from filename
- *----------------------------------------------------------------------*
- FORM update_filetab.
- k = lines( lt_split ).
- READ TABLE lt_split INDEX k INTO ls_split.
- k = lines( lt_split ).
- READ TABLE lt_split INDEX 1 INTO ls_split.
- k = lines( lt_split ).
- READ TABLE lt_split INDEX 1 INTO <p>-component.
- * check if material exist
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- IMPORTING
- output = <p>-component.
- PERFORM f_display_data.
- *---------------------------------------------------------------------*
- * Form f_display_data
- *---------------------------------------------------------------------*
- FORM f_display_data.
- * Macro definition
- DEFINE m_fieldcat.
- ls_fieldcat-fieldname = &1.
- ls_fieldcat-ref_tabname = &2.
- DATA:
- ls_private TYPE slis_data_caller_exit,
- ls_seldat TYPE ty_sel,
- ls_fieldcat TYPE slis_fieldcat_alv,
- lt_fieldcat TYPE slis_t_fieldcat_alv.
- REFRESH gt_seldat.
- * Copy entries for selection
- CLEAR ls_seldat.
- ls_seldat-component = <p>-component.
- matnr = <p>-component AND spras = sy-langu.
- ls_seldat-checkbox = ' '.
- ls_seldat-change_no = 'X'.
- ELSE.
- ls_seldat-checkbox = 'X'.
- ls_seldat-change_no = ' '.
- * Build the field catalog chg_kz
- m_fieldcat 'COMPONENT' 'STPO_API02'.
- m_fieldcat 'CHANGE_NO' 'STPO_API02'.
- m_fieldcat 'BOM_TEXT' 'STKO_API01'.
- * Optimize column width
- ls_private-columnopt = 'X'.
- * Display data in a POPUP
- CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
- EXPORTING
- i_title = 'Please select items'
- i_selection = 'X'
- i_zebra = 'X'
- it_fieldcat = lt_fieldcat
- i_tabname = 'GT_SELDAT'
- i_checkbox_fieldname = 'CHECKBOX'
- is_private = ls_private
- IMPORTING
- e_exit = g_exit
- t_outtab = gt_seldat.
- * Terminate
- EXIT.
- READ TABLE gt_seldat WITH KEY component = <p>-component checkbox = 'X' INTO ls_seldat.
- *&---------------------------------------------------------------------*
- *& Form check_bom_change_num
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * -->I_BOM text
- *----------------------------------------------------------------------*
- * Check BOM exisitence (incl. ChangeNo)
- CALL FUNCTION 'CSAP_MAT_BOM_READ'
- EXPORTING
- material = i_bom
- plant = p_werk
- bom_usage = p_stlan
- t_stpo = lt_stpo
- t_stko = lt_stko
- EXCEPTIONS
- error = 1
- OTHERS = 2.
- READ TABLE lt_stko INDEX 1 INTO ls_stko.
- EXIT.
- * check for HEAD change number and POS change number
- ELSE.
- CLEAR i_bom.
- EXIT.
- GeSHi ©