Lập trình ABAP tạo BOM - Bill Of Material

Các bài viết chia sẽ về các đoạn code, chương trình hoạt động và hữu ích trong lạp trình ABAP
Post Reply
abaper
Posts: 5
Joined: Wed Mar 09, 2022 9:12 pm

Lập trình ABAP tạo BOM - Bill Of Material

Post by abaper »

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.
bomsample.png
bomsample.png (82.49 KiB) Viewed 751 times
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.
+ Khởi tạo BOM Header

Code: Select all

    ls_stko-base_quan = 1.
    ls_stko-bom_text = 'Example BOM'.
+ Khởi tạo BOM Items:

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.

+ 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
objdepency.png
objdepency.png (32.65 KiB) Viewed 728 times
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'

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.
     
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

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.
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
Post Reply