Abap Create Bom Cs01 From SQL Data

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

ABAP Create BOM CS01 from SQL Data

url:
https://belsap.com/2021/06/abap-create-bom-cs01-from-sql-data/
METHOD get_boms_from_siito.
DATA:
exc_ref TYPE REF TO cx_root,
error_text TYPE string,
lt_bom_from_siito TYPE TABLE OF zhm_d_bom_fr_sit,
lv_date_import_osn TYPE string,
lv_date_import_from TYPE string,
lv_key_tbl TYPE int4,
ls_bom_from_siito LIKE LINE OF lt_bom_from_siito .

FIELD-SYMBOLS:

<fs_bom_from_siito> LIKE LINE OF lt_bom_from_siito.

*Connect to database
TRY.
EXEC SQL.
connect TO 'SAP_AIS'
ENDEXEC.
IF sy-subrc <> 0.
MESSAGE 'Unable to connect to SAP_AIS' TYPE 'E' DISPLAY LIKE 'I'.
RETURN.
ENDIF.

CATCH cx_sy_native_sql_error INTO exc_ref.

error_text = exc_ref->get_text( ).

MESSAGE error_text TYPE 'I'.


ENDTRY.

*SQL for select


"Fields matnr_ext,bismt,versb,pbdnr,edatv,plnmg,meins
TRY.
EXEC SQL.
OPEN dbcur FOR
SELECT
KEY_TBL
,NZ_CH
,DATA_OSN
,OZM_MAIN
,MAKTX
,MAKTX_FULL
,ZEINRKD
,MATNR_EXT
,IDNRK
,POSNR
,SORTF
,MENGE
,MEINS
,DATA_FORM
,NTGEW
,GEWEI
,LABOR
,MTART
,PRIZN_DOB
,PRIZN
FROM temp.dbo.sap_spec
ENDEXEC.
CATCH cx_sy_native_sql_error INTO exc_ref.

error_text = exc_ref->get_text( ).

MESSAGE error_text TYPE 'I'.


ENDTRY.

DO.
CLEAR ls_bom_from_siito .
TRY.
EXEC SQL.
FETCH NEXT dbcur INTO :ls_bom_from_siito-KEY_TBL,
:ls_bom_from_siito-NZ_CH,
:lv_date_import_osn,
:ls_bom_from_siito-OZM_MAIN,
:ls_bom_from_siito-MAKTX,
:ls_bom_from_siito-MAKTX_FULL,
:ls_bom_from_siito-ZEINRKD,
:ls_bom_from_siito-MATNR_EXT,
:ls_bom_from_siito-IDNRK,
:ls_bom_from_siito-POSNR,
:ls_bom_from_siito-SORTF,
:ls_bom_from_siito-MENGE,
:ls_bom_from_siito-MEINS,
:lv_date_import_from,
:ls_bom_from_siito-NTGEW,
:ls_bom_from_siito-GEWEI,
:ls_bom_from_siito-LABOR,
:ls_bom_from_siito-MTART,
:ls_bom_from_siito-PRIZN_DOB,
:ls_bom_from_siito-PRIZN
ENDEXEC.
CATCH cx_sy_native_sql_error INTO exc_ref.

error_text = exc_ref->get_text( ).
MESSAGE error_text TYPE 'I'.
ENDTRY.
IF sy-subrc <> 0.
EXEC SQL.
CLOSE dbcur
ENDEXEC.
EXIT.
ELSE.
TRANSLATE ls_bom_from_siito-meins TO UPPER CASE.
SELECT SINGLE t006~msehi
INTO ls_bom_from_siito-meins
FROM t006
INNER JOIN t006b
ON t006~msehi = t006b~msehi
WHERE mseh3 = ls_bom_from_siito-meins AND spras = 'R'.

TRANSLATE ls_bom_from_siito-meins TO UPPER CASE.


SELECT SINGLE t006~msehi
INTO ls_bom_from_siito-gewei
FROM t006
INNER JOIN t006b
ON t006~msehi = t006b~msehi
WHERE mseh3 = ls_bom_from_siito-gewei AND spras = 'R'.

REPLACE ALL OCCURRENCES OF '-' IN lv_date_import_osn WITH ''.


ls_bom_from_siito-data_osn = lv_date_import_osn(8).

REPLACE ALL OCCURRENCES OF '-' IN lv_date_import_from WITH ''.


ls_bom_from_siito-data_osn = lv_date_import_from(8).

APPEND ls_bom_from_siito TO lt_bom_from_siito.


ENDIF.
ENDDO.

MODIFY zhm_d_bom_fr_sit FROM TABLE lt_bom_from_siito.

zcl_zhm_app_bom=>create_bom_for_siito( ).
* EXEC SQL.
* CLOSE dbcur
* ENDEXEC.
ENDMETHOD.
METHOD create_bom_for_siito.
DATA:
lt_bom TYPE TABLE OF zhm_d_bom_fr_sit,
lt_bom_unique TYPE TABLE OF zhm_d_bom_fr_sit,
ls_istko TYPE stko_api01,
ls_o_stko TYPE stko_api02,
lv_data TYPE datuv_bi,
lv_change_no TYPE csap_mbom-aennr,
lt_o_stko TYPE TABLE OF stko_api02,
lt_stpo TYPE TABLE OF stpo_api03,
lt_stpo_read TYPE TABLE OF stpo_api02,
lv_aenr TYPE aennr,
iv_delete_flg TYPE char01,
lv_posnr_str TYPE char04,
lt_display TYPE TABLE OF stpo_api03,
ls_display LIKE LINE OF lt_display,
lt_stpo_read_api03 TYPE TABLE OF stpo_api02.

FIELD-SYMBOLS:
<fs_bom> LIKE LINE OF lt_bom,
<fs_bom_unique> LIKE LINE OF lt_bom,
<fs_stpo_read> LIKE LINE OF lt_stpo_read,

<fs_stpo_read_api03> LIKE LINE OF lt_stpo_read_api03,


<fs_stpo> LIKE LINE OF lt_stpo.

SELECT *
FROM zhm_d_bom_fr_sit
INTO CORRESPONDING FIELDS OF TABLE lt_bom.

lt_bom_unique[] = lt_bom[].

SORT lt_bom_unique BY ozm_main.


DELETE ADJACENT
DUPLICATES FROM lt_bom_unique COMPARING ozm_main.

LOOP AT lt_bom_unique ASSIGNING <fs_bom_unique>.


CLEAR lt_stpo.

LOOP AT lt_bom ASSIGNING <fs_bom> WHERE ozm_main = <fs_bom_uniq


ue>-ozm_main.
APPEND INITIAL LINE TO lt_stpo ASSIGNING <fs_stpo>.
lv_posnr_str = <fs_bom>-posnr.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'


EXPORTING
input = lv_posnr_str
IMPORTING
output = <fs_stpo>-item_no.

<fs_stpo>-item_categ = 'L'.
<fs_stpo>-component = <fs_bom>-idnrk.
<fs_stpo>-comp_qty = <fs_bom>-menge.
TRANSLATE <fs_stpo>-comp_qty USING '.,'.
SELECT SINGLE t006b~mseh3
INTO <fs_stpo>-comp_unit
FROM t006
INNER JOIN t006b
ON t006~msehi = t006b~msehi
WHERE t006~msehi = <fs_bom>-meins AND spras = 'R'.
<fs_stpo>-sortstring = '07'.
ENDLOOP.

lv_change_no = sy-datum(4).

CONCATENATE sy-datum+6(2) '.' sy-datum+4(2) '.' sy-


datum(4) INTO lv_data.

lv_aenr = sy-datum(4).

CALL FUNCTION 'CSAP_MAT_BOM_READ'


EXPORTING
material = <fs_bom_unique>-ozm_main
plant = '1014'
bom_usage = 'V'
TABLES
t_stpo = lt_stpo_read
EXCEPTIONS
error = 1
OTHERS = 2.

IF sy-subrc = 0.
LOOP AT lt_stpo_read ASSIGNING <fs_stpo_read>.
READ
TABLE lt_stpo ASSIGNING <fs_stpo> WITH KEY component = <fs_stpo_
read>-component

item_no = <fs_stpo_read>-item_no

comp_qty = <fs_stpo_read>-comp_qty.
IF sy-subrc <> 0.
iv_delete_flg = 'X'.
ENDIF.
ENDLOOP.

IF iv_delete_flg = 'X'.
LOOP AT lt_stpo_read ASSIGNING <fs_stpo_read>.
delete_item( EXPORTING iv_matnr_ext = <fs_bom_unique>-
ozm_main
iv_werks = '1014'
iv_bom_usage = 'V'
is_stpo = <fs_stpo_read> ).

ENDLOOP.

CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'


EXPORTING
material = <fs_bom_unique>-ozm_main
plant = '1014'
bom_usage = 'V'
valid_from = lv_data
i_stko = ls_istko
fl_commit_and_wait = 'X'
"change_no = lv_aenr
"fl_bom_create = 'X'
IMPORTING
o_stko = ls_o_stko "change_no =
lv_aenr
TABLES
t_stpo = lt_stpo
EXCEPTIONS
error = 1
OTHERS = 2.

IF sy-subrc <> 0 AND sy-batch = ''.


MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
ls_display-component = <fs_bom_unique>-ozm_main.
APPEND ls_display TO lt_display.
APPEND LINES OF lt_stpo TO lt_display.
ENDIF.
ENDIF.
ELSE.
CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'
EXPORTING
material = <fs_bom_unique>-ozm_main
plant = '1014'
bom_usage = 'V'
valid_from = lv_data
i_stko = ls_istko
fl_commit_and_wait = 'X'
" change_no = lv_aenr
IMPORTING
o_stko = ls_o_stko "change_no = lv_aenr
TABLES
t_stpo = lt_stpo
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0 AND sy-batch = ''.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
ls_display-component = <fs_bom_unique>-ozm_main.
APPEND ls_display TO lt_display.
APPEND LINES OF lt_stpo TO lt_display.
ENDIF.
ENDIF.
ENDLOOP.
IF sy-batch = ''.
zcl_zhm_super=>display_it_table( changing it_table = lt_display ).
ENDIF.
ENDMETHOD.
METHOD delete_item.
DATA :
ls_stko TYPE stko_api02 ,
lv_result TYPE sy-subrc ,
lt_tstp2 TYPE STANDARD TABLE OF stpo_api02 ,
lt_tdep2_source TYPE STANDARD TABLE OF dep_source ,
ls_tstp2 TYPE stpo_api02 ,
lv_data type datuv_bi,
lv_flwarning TYPE capiflag-flwarning.

CONCATENATE sy-datum+6(2) '.' sy-datum+4(2) '.' sy-datum(4) INTO lv_da


ta.

CALL FUNCTION 'CSAP_MAT_BOM_OPEN'


EXPORTING
material = iv_matnr_ext
plant = iv_werks
bom_usage = iv_bom_usage
valid_from = lv_data

" alternative = gs_mast_list-stlal


change_no = space
IMPORTING
o_stko = ls_stko
fl_warning = lv_flwarning
TABLES
t_stpo = lt_tstp2
EXCEPTIONS
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.
EXIT.
ENDIF.

CLEAR: lt_tstp2[] ,
lt_tdep2_source[] .

MOVE-CORRESPONDING is_stpo TO ls_tstp2 .

ls_tstp2-fldelete := abap_true.

CALL FUNCTION 'CSAP_BOM_ITEM_MAINTAIN'


EXPORTING
i_stpo = ls_tstp2
IMPORTING
fl_warning = lv_flwarning
TABLES
t_dep_source = lt_tdep2_source
EXCEPTIONS
error = 1
OTHERS = 2.

IF sy-subrc <> 0.
EXIT.
ENDIF.

CALL FUNCTION 'CSAP_MAT_BOM_CLOSE'


IMPORTING
fl_warning = lv_flwarning
EXCEPTIONS
error = 1.

IF sy-subrc <> 0.
EXIT.
ENDIF.
ENDMETHOD.

You might also like