ZPP_BOM_UPLOAD_BAPI :
ZPP_BOM_UPLOAD_BAPI.
************************************************************************
* T Y P E P O O L S
*
************************************************************************
TYPE-POOLS: truxs, slis.
************************************************************************
* T Y P E S
*
************************************************************************
TYPES : BEGIN OF ty_data,
matnr TYPE CSAP_MBOM-MATNR, ""Material
werks TYPE CSAP_MBOM-WERKS, ""Plant
stlan TYPE CSAP_MBOM-STLAN, ""BOM Usage
STLAL TYPE CSAP_MBOM-STLAL, ""Alternate BOM
bmeng TYPE STKO_API01-base_quan, ""Base Quantity
SPOSN type STPO_API01-ITEM_NO, ""Item number
idnrk TYPE STPO_API01-component, ""New Component Material
menge TYPE STPO_API01-COMP_QTY, ""Quantity
meins TYPE STPO_API01-COMP_UNIT, ""Unit
postp TYPE STPO_API01-ITEM_CATEG, ""Item Category
avoau TYPE STPO_API01-OP_SCRAP, ""Operation Scrap %
netau TYPE STPO_API01-OP_NET_IND, ""Net ID
ausch TYPE STPO_API01-COMP_SCRAP, ""Component Scrap %
END OF ty_data,
BEGIN OF ty_alv,
line TYPE sy-tabix, "LINE
NO
matnr TYPE CSAP_MBOM-MATNR, "Mat
erial
status(4) TYPE c, "STAT
US
message(100) TYPE c,
END OF ty_alv.
************************************************************************
* I N T E R N A L T A B L E S
*
************************************************************************
DATA: gt_data TYPE TABLE OF ty_data,
gt_data1 TYPE TABLE OF ty_data,
gt_raw TYPE truxs_t_text_data,
gt_alv TYPE TABLE OF ty_alv,
gt_fcat TYPE slis_t_fieldcat_alv,
gt_T_STPO type TABLE OF STPO_API01.
************************************************************************
* W O R K A R E A S
*
************************************************************************
DATA: gs_data TYPE ty_data,
gs_data1 TYPE ty_data,
gs_alv TYPE ty_alv,
gs_fcat TYPE slis_fieldcat_alv,
gs_I_STKO type STKO_API01,
gs_T_STPO type STPO_API01,
FL_WARNING type CAPIFLAG-FLWARNING.
************************************************************************
* V A R I A B L E S
*
************************************************************************
DATA: gv_entries TYPE i,
lv_line TYPE i,
lv_line1 TYPE i,
gv_MATERIAL type CSAP_MBOM-MATNR,
gv_plant type CSAP_MBOM-WERKS,
gv_BOM_USAGE type CSAP_MBOM-STLAN,
gv_Alternate type CSAP_MBOM-STLAL,
lv_matnr type CSAP_MBOM-MATNR,
lv_werks type CSAP_MBOM-WERKS.
************************************************************************
* S E L E C T I O N S C R E E N
*
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-001.
PARAMETERS p_file TYPE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b01.
************************************************************************
* A T S E L E C T I O N S C R E E N
*
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = sy-repid
dynpro_number = sy-dynnr
field_name = 'P_FILE'
IMPORTING
file_name = p_file.
START-OF-SELECTION.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_line_header = 'X'
i_tab_raw_data = gt_raw
i_filename = p_file
TABLES
i_tab_converted_data = gt_data
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
DESCRIBE TABLE gt_data LINES gv_entries.
IF gv_entries IS INITIAL.
MESSAGE 'NO XLS FILE UPDATED! CHECK IT' TYPE 'S'.
EXIT.
LEAVE LIST-PROCESSING.
ENDIF.
CLEAR : lv_line,gt_T_STPO.
gt_data1[] = gt_data.
DELETE gt_data1 INDEX 1.
sort gt_data1 by matnr werks stlan.
clear : lv_line,lv_line1.
delete ADJACENT DUPLICATES FROM gt_data1 COMPARING matnr werks stlan.
LOOP AT gt_data1 into gs_data1.
SELECT single MATNR WERKS from mast INTO (lv_matnr,lv_werks)
where matnr = gs_data1-matnr and werks = gs_data1-werks.
IF sy-subrc <> 0.
gs_I_STKO-base_quan = gs_data1-bmeng.
LOOP AT gt_data into gs_data WHERE matnr = gs_data1-matnr
and werks = gs_data1-werks
and stlan = gs_data1-stlan..
gs_T_STPO-ITEM_CATEG = gs_data-postp.
gs_T_STPO-ITEM_NO = gs_data-SPOSN.
gs_T_STPO-component = gs_data-idnrk.
gs_T_STPO-COMP_QTY = gs_data-menge.
gs_T_STPO-COMP_UNIT = gs_data-meins.
gs_T_STPO-COMP_SCRAP = gs_data-ausch.
gs_T_STPO-OP_SCRAP = gs_data-avoau.
gs_T_STPO-OP_NET_IND = gs_data-netau.
gs_T_STPO-class = gv_material.
APPEND gs_T_STPO to gt_T_STPO.
clear :gs_T_STPO,gs_data.
ENDLOOP.
CALL FUNCTION 'CSAP_MAT_BOM_CREATE'
EXPORTING
material = gs_data1-matnr
PLANT = gs_data1-werks
bom_usage = gs_data1-stlan
* VALID_FROM =
* CHANGE_NO =
* REVISION_LEVEL =
i_stko = gs_i_stko
* FL_NO_CHANGE_DOC = ' '
* FL_COMMIT_AND_WAIT = ' '
* FL_CAD = ' '
* FL_DEFAULT_VALUES = 'X'
* FL_RECURSIVE = ' '
IMPORTING
FL_WARNING = FL_WARNING
* BOM_NO =
TABLES
T_STPO = gt_T_STPO
* T_DEP_DATA =
* T_DEP_DESCR =
* T_DEP_ORDER =
* T_DEP_SOURCE =
* T_DEP_DOC =
* T_LTX_LINE =
* T_STPU =
* T_SGT_BOMC =
EXCEPTIONS
ERROR = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
* lv_line = lv_line + 1.
IF sy-subrc = 1.
lv_line = lv_line + 1.
gs_alv-line = lv_line.
CONCATENATE 'Check Component Material Details for this ' gs_data1-
matnr ' Material'
into gs_alv-message SEPARATED BY space.
gs_alv-matnr = gs_data1-matnr.
gs_alv-status = icon_red_light. "'Success'
append gs_alv to gt_alv.
ELSEIF sy-subrc = 0.
lv_line1 = lv_line1 + 1.
gs_alv-line = lv_line1.
CONCATENATE 'BOM Created for ' gs_data1-matnr ' Material' into gs_al
v-message.
gs_alv-matnr = gs_data1-matnr.
gs_alv-status = icon_green_light. "'Success'.
append gs_alv to gt_alv.
ELSE.
lv_line = lv_line + 1.
gs_alv-line = lv_line.
CONCATENATE 'Formating Error ' ' ' GS_DATA1-MATNR ' Material' into
gs_alv-message.
gs_alv-matnr = GS_DATA1-MATNR.
gs_alv-status = icon_red_light."'Error'.
append gs_alv to gt_alv.
ENDIF.
else.
lv_line = lv_line + 1.
gs_alv-line = lv_line.
CONCATENATE 'BOM Already Exits for ' ' ' GS_DATA1-MATNR ' Materia
l' into gs_alv-message.
gs_alv-matnr = GS_DATA1-MATNR.
gs_alv-status = icon_red_light."'Error'.
append gs_alv to gt_alv.
endif.
CLEAR : gs_alv,gs_data1,gt_T_STPO,gs_i_stko,FL_WARNING.
ENDLOOP.
*ENDLOOP.
* LOOP AT gt_data into gs_data.
gs_fcat-col_pos = '1'.
gs_fcat-fieldname = 'LINE'.
gs_fcat-ref_tabname = 'GT_ALV'.
gs_fcat-seltext_l = 'Line No'.
APPEND gs_fcat TO gt_fcat.
CLEAR gs_fcat.
gs_fcat-col_pos = '2'.
gs_fcat-fieldname = 'MATNR'.
gs_fcat-ref_tabname = 'GT_ALV'.
gs_fcat-seltext_l = 'Material'.
gs_fcat-outputlen = 20.
APPEND gs_fcat TO gt_fcat.
CLEAR gs_fcat.
gs_fcat-col_pos = '3'.
gs_fcat-fieldname = 'STATUS'.
gs_fcat-ref_tabname = 'GT_ALV'.
gs_fcat-seltext_l = 'Status'.
APPEND gs_fcat TO gt_fcat.
CLEAR gs_fcat.
gs_fcat-col_pos = '4'.
gs_fcat-fieldname = 'MESSAGE'.
gs_fcat-ref_tabname = 'GT_ALV'.
gs_fcat-seltext_l = 'Message'.
gs_fcat-outputlen = 100.
APPEND gs_fcat TO gt_fcat.
CLEAR gs_fcat.
SORT gt_alv BY line.
IF gt_alv IS NOT INITIAL.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_top_of_page = 'TOP_OF_PAGE'
i_background_id = 'ALV_BACKGROUND'
* i_buffer_active = abap_true
i_callback_program = sy-repid
it_fieldcat = gt_fcat
* i_default = abap_true
TABLES
t_outtab = gt_alv
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
WRITE:/ '****************************************************************
********************'.
WRITE: /10(45) 'Total Number of Records',lv_line,
/10(45) 'Number of Records Updated',lv_line1.
WRITE:/ '****************************************************************
********************'.