Lập trình ABAP tạo BOM - Bill Of Material
Posted: Sun Mar 20, 2022 5:16 pm
BOM - Bill of Material là một đối tượng được sử dụng trong sản xuất nhằm lập danh sách các nguyên vật liệu sản xuất và khối lượng cần thiết được sử dụng trong sản xuất. Trong BOM cũng cho chúng ta thiết lập các thuộc tính, điều kiện áp dụng các nguyên vật liệu thành phần trong một mẫu sản phẩm nào đó chứ không nhất thiết tất cả các thành phần bao gồm trong BOM đều được áp dụng và đưa vào quy trình tính toán chi phí sản xuất sản phẩm.
Như các bạn có thể thấy trong cấu trúc BOM trong hình, BOM sẽ cần có các thông tin về nhà máy sản xuất, và danh sách các nguyên vật liệu thành phần và đặc biệt BOM cũng là một mã hàng hoá trong SAP.
SAP cung cấp cho chúng ta các Function Module để chúng ta có thể thực hiện tạo BOM thông qua các dữ liệu được cung cấp bằng programming. FM mình sẽ sử dụng trong bài viết là FM CSAP_MAT_BOM_CREATE.
Để thực hiện việc tạo ra một BOM từ chương trình, trước tiên cần phải sửa soạn các thông tin dư liệu cần thiết cho một BOM như: mã hàng hoá, mã nhà máy, và danh sách các thành phần bên trong BOM. Sau khi thu thập đủ các thông tin, chúng ta tiến hành lập trình cho chức năng tạo BOM như sau:
+ Khai báo các biến:
+ Khởi tạo BOM Header
+ Khởi tạo BOM Items:
+ Khởi tạo dữ các dữ liệu phục thuộc (object dependency) trong BOM item, các bạn có thể tìm thấy dữ liệu này trong cs02 theo đường dẫn menu trong hình
Trong ví dụ này giả sử chúng ta có 1 chuỗi thuộc tính như sau: COLOR = 'RED' OR COLOR = 'BLUE'
Sau khi tất cả mọi dữ liệu đã được khởi tạo chúng ta thực hiện việc gọi Function Module để tạo BOM
Bài viết hướng dẫn tạo BOM đến đây là kết thúc, rất mong bài viết hữu dụng cho các bạn lập trình ABAP và có thể áp dụng để giải quyết bài toán cảu mình
Như các bạn thấy trong BOM có chứa rất nhiều các item thành phần và đó chính là các nguyên liệu sản xuất, và hơn thế nữa là BOM có thể chứa các BOM khác bên trong nó. Chúng ta có các transaction liên quan đên BOM trong SAP như: CS01, CS02, CS03, CS11...Như các bạn có thể thấy trong cấu trúc BOM trong hình, BOM sẽ cần có các thông tin về nhà máy sản xuất, và danh sách các nguyên vật liệu thành phần và đặc biệt BOM cũng là một mã hàng hoá trong SAP.
SAP cung cấp cho chúng ta các Function Module để chúng ta có thể thực hiện tạo BOM thông qua các dữ liệu được cung cấp bằng programming. FM mình sẽ sử dụng trong bài viết là FM CSAP_MAT_BOM_CREATE.
Để thực hiện việc tạo ra một BOM từ chương trình, trước tiên cần phải sửa soạn các thông tin dư liệu cần thiết cho một BOM như: mã hàng hoá, mã nhà máy, và danh sách các thành phần bên trong BOM. Sau khi thu thập đủ các thông tin, chúng ta tiến hành lập trình cho chức năng tạo BOM như sau:
+ Khai báo các biến:
Code: Select all
DATA: lt_stpo TYPE TABLE OF stpo_api01,
lt_depdat TYPE TABLE OF csdep_dat,
lt_depsrce TYPE TABLE OF csdep_sorc.
DATA: lt_lines TYPE TABLE OF dep_line.
DATA: ls_stko TYPE stko_api01.
DATA: lv_itemno TYPE stpo_api01-item_no.
Code: Select all
ls_stko-base_quan = 1.
ls_stko-bom_text = 'Example BOM'.
Code: Select all
UNPACK '10' TO lv_itemno.
APPEND INITIAL LINE TO lt_stpo ASSIGNING FIELD-SYMBOL(<fs_stpo>).
<fs_stpo>-item_categ = 'L'.
<fs_stpo>-component = 'BRCDRDER'. "Material Number
<fs_stpo>-comp_qty = 10. "Quantity
<fs_stpo>-comp_unit = 'ST'. 'Unit'
<fs_stpo>-item_no = lv_itemno.
Code: Select all
DATA: lv_cond TYPE string VALUE 'COLOR = ''RED'' OR COLOR = ''BLUE'''.
<fs_stpo>-identifier = 'P' && lv_count.
APPEND INITIAL LINE TO lt_depdat ASSIGNING FIELD-SYMBOL(<fs_depdat>).
<fs_depdat>-identifier = <fs_stpo>-identifier.
<fs_depdat>-object_id = '2'.
<fs_depdat>-status = '1'.
<fs_depdat>-dep_type = '5'.
<fs_depdat>-dep_extern = 'B1'.
CALL FUNCTION 'RKD_WORD_WRAP'
EXPORTING
textline = lv_cond
outputlen = 72
TABLES
out_lines = lt_lines.
DATA: lv_count TYPE i VALUE 1.
LOOP AT lt_lines INTO DATA(lv_part).
APPEND INITIAL LINE TO lt_depsrce ASSIGNING FIELD-SYMBOL(<fs_source>).
MOVE-CORRESPONDING <fs_depdat> TO <fs_source>.
MOVE-CORRESPONDING ls_cond TO <fs_source>.
ENDLOOP.
Code: Select all
CALL FUNCTION 'CSAP_MAT_BOM_CREATE'
EXPORTING
material = iv_matnr
plant = iv_werks
bom_usage = '1'
i_stko = ls_stko
TABLES
t_stpo = lt_stpo
t_dep_data = lt_depdat
t_dep_source = lt_depsrce
EXCEPTIONS
error = 1
OTHERS = 2.