0% found this document useful (0 votes)
80 views6 pages

ZPP BOM Upload BAPI Overview

This document describes a program that uploads a bill of materials (BOM) from an Excel file into SAP. It converts the Excel file to internal tables, validates the data, and uses BAPI functions to create or update BOM records in SAP. Any errors or status messages are captured in message tables that are then displayed in an ALV grid for the user.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
80 views6 pages

ZPP BOM Upload BAPI Overview

This document describes a program that uploads a bill of materials (BOM) from an Excel file into SAP. It converts the Excel file to internal tables, validates the data, and uses BAPI functions to create or update BOM records in SAP. Any errors or status messages are captured in message tables that are then displayed in an ALV grid for the user.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

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:/ '****************************************************************
********************'.

You might also like