Advertisement
Guest User

Untitled

a guest
Jul 3rd, 2018
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 14.00 KB | None | 0 0
  1. *&---------------------------------------------------------------------*
  2. *& Report ZPP_MASS_LOAD_BOM
  3. *&---------------------------------------------------------------------*
  4. *&
  5. *&---------------------------------------------------------------------*
  6. REPORT zpp_bom_one_line_from_table.
  7.  
  8. DATA:
  9.   BEGIN OF s_bom,
  10.     werks(004)    TYPE c, "zakład
  11.     prod(018)     TYPE c, "produkt
  12.     qty_prd(013)  TYPE c, "ilość
  13.     uom_prd(003)  TYPE c, "jednostka miary
  14.     comp(018)     TYPE c, "komponent
  15.     qty_comp(013) TYPE c, "ilość
  16.     uom_comp(003) TYPE c, "jednostka miary
  17.   END OF s_bom.
  18.  
  19. DATA: BEGIN OF lt_bom OCCURS 0.
  20.     INCLUDE STRUCTURE s_bom.
  21. DATA: END OF lt_bom.
  22.  
  23. DATA: lv_file TYPE string.
  24.  
  25. DATA: ls_return TYPE bapiret2.
  26.  
  27. DATA: lv_qty            LIKE bapi1080_bom_c-base_qty,
  28.       lv_item           TYPE i,
  29.       lv_item_c(4)      TYPE c,
  30.       lv_mat_missing(1) TYPE c,
  31.       lv_matnr          TYPE matnr,
  32.       lv_matnr_found    TYPE matnr,
  33.       lv_create(1)      TYPE c,
  34.       lv_lines          TYPE i,
  35.       lv_tabix          TYPE sy-tabix,
  36.       lv_last_step      TYPE i,
  37.       lv_error(1)       TYPE c.
  38.  
  39.  
  40. DATA: ls_log        TYPE bal_s_log,
  41.       lv_loghandler TYPE balloghndl,
  42.       ls_message    TYPE bal_s_msg,
  43.       ls_mhandler   TYPE balmsghndl,
  44.       lv_mlogged    TYPE boolean,
  45.       lv_mdisplayed TYPE boolean,
  46.       lt_loghandler TYPE bal_t_logh.
  47.  
  48. * Data Declaration
  49. DATA:
  50.   lt_bomgroup LIKE bapi1080_bgr_c OCCURS 0 WITH HEADER LINE,
  51.   lt_variants LIKE bapi1080_bom_c OCCURS 0 WITH HEADER LINE,
  52.   lt_items    LIKE bapi1080_itm_c OCCURS 0 WITH HEADER LINE,
  53.   lt_matrel   LIKE bapi1080_mbm_c OCCURS 0 WITH HEADER LINE,
  54.   lt_itemas   LIKE bapi1080_rel_itm_bom_c OCCURS 0 WITH HEADER LINE,
  55.   lt_return   LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
  56.  
  57. DATA: lt_zpp_master_data     TYPE TABLE OF zpp_master_data,
  58.       lt_zpp_master_data_tmp TYPE TABLE OF zpp_master_data,
  59.       ls_zpp_master_data     TYPE zpp_master_data,
  60.       ls_zpp_check           TYPE zpp_master_data.
  61.  
  62. DATA: lt_mvke TYPE TABLE OF mvke,
  63.       lt_mbew TYPE TABLE OF mbew,
  64.       lt_marc TYPE TABLE OF marc,
  65.       lt_mard TYPE TABLE OF mard,
  66.       lt_makt TYPE TABLE OF makt,
  67.       lt_marm TYPE TABLE OF marm,
  68.       lt_mean TYPE TABLE OF mean,
  69.       lt_mlan TYPE TABLE OF mlan.
  70.  
  71. DATA: ls_mvke TYPE mvke,
  72.       ls_mbew TYPE mbew,
  73.       ls_marc TYPE marc,
  74.       ls_mard TYPE mard,
  75.       ls_makt TYPE makt,
  76.       ls_marm TYPE marm,
  77.       ls_mean TYPE mean,
  78.       ls_mlan TYPE mlan.
  79.  
  80. DATA: lv_meins TYPE meins.
  81.  
  82. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-002.
  83. PARAMETERS:p_obj_id LIKE lt_bomgroup-object_id DEFAULT 'LOAD002',
  84.            p_text   LIKE lt_bomgroup-bom_text DEFAULT 'Załadunek BOM próbniki',
  85.            p_gr_id  LIKE lt_bomgroup-bom_group_identification  DEFAULT 'BOM_GR_002',
  86.            p_usage  LIKE lt_bomgroup-bom_usage,
  87.            p_labor  LIKE lt_variants-lab_design.
  88. SELECTION-SCREEN END OF BLOCK b1 .
  89.  
  90. START-OF-SELECTION.
  91.  
  92.   SELECT * FROM zpp_master_data INTO CORRESPONDING FIELDS OF TABLE lt_zpp_master_data.
  93.  
  94.   lt_zpp_master_data_tmp[] = lt_zpp_master_data[].
  95.  
  96.   LOOP AT lt_zpp_master_data INTO ls_zpp_master_data WHERE zz_werks = 'SKXX'.
  97.  
  98.     REFRESH lt_marc.
  99.  
  100.     CALL FUNCTION 'CRS_MATERIAL_READ_ALL'
  101.       EXPORTING
  102.         iv_matnr = ls_zpp_master_data-zz_matnr_master
  103.       TABLES
  104.         et_mvke  = lt_mvke
  105.         et_mbew  = lt_mbew
  106.         et_marc  = lt_marc
  107.         et_mard  = lt_mard
  108.         et_makt  = lt_makt
  109.         et_marm  = lt_marm
  110.         et_mean  = lt_mean
  111.         et_mlan  = lt_mlan.
  112.  
  113.     DELETE lt_marc WHERE werks = 'CDXX'.
  114.     DELETE lt_marc WHERE werks = 'SKXX'.
  115.     IF p_usage = '5'.
  116.       DELETE lt_marc WHERE werks = 'M100'.
  117.     ENDIF.
  118.  
  119.     LOOP AT lt_marc INTO ls_marc.
  120.  
  121.       READ TABLE lt_zpp_master_data_tmp INTO ls_zpp_check
  122.         WITH KEY zz_matnr_master = ls_zpp_master_data-zz_matnr_master zz_werks = ls_marc-werks.
  123.  
  124.       IF sy-subrc = 0 AND ls_zpp_check-zz_bom = 'X'.
  125.       ELSE.
  126.         lt_bom-werks = ls_marc-werks.
  127.         lt_bom-prod = ls_zpp_master_data-zz_matnr_master.
  128.         lt_bom-qty_prd = '1'.
  129.  
  130.         SELECT SINGLE meins INTO lv_meins FROM mara
  131.           WHERE matnr = ls_zpp_master_data-zz_matnr_master.
  132.  
  133.         lt_bom-uom_prd = lv_meins.
  134.         CLEAR lv_meins.
  135.  
  136.         lt_bom-comp = ls_zpp_master_data-zz_matnr_slave.
  137.         lt_bom-qty_comp = '1'.
  138.  
  139.         SELECT SINGLE meins INTO lv_meins FROM mara
  140.           WHERE matnr = ls_zpp_master_data-zz_matnr_slave.
  141.  
  142.         lt_bom-uom_comp = lv_meins.
  143.         CLEAR lv_meins.
  144.  
  145.         APPEND lt_bom.
  146.       ENDIF.
  147.     ENDLOOP.
  148.  
  149. *  ENDLOOP.
  150.  
  151.  
  152.     DESCRIBE TABLE lt_bom LINES lv_lines.
  153.  
  154.     LOOP AT lt_bom.
  155.  
  156.       lv_tabix = sy-tabix.
  157.  
  158.       lv_last_step = 1.
  159.  
  160.       CLEAR lv_mat_missing.
  161. * szukaj materiału!!!
  162.       CLEAR lv_matnr.
  163.  
  164.       CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  165.         EXPORTING
  166.           input  = lt_bom-prod
  167.         IMPORTING
  168.           output = lv_matnr.
  169.  
  170.       SELECT SINGLE matnr INTO lv_matnr_found FROM mara
  171.         WHERE matnr = lv_matnr.
  172.  
  173.       IF sy-subrc = 0.
  174.         lv_matnr = lv_matnr_found.
  175.       ELSE.
  176.  
  177.         SELECT SINGLE matnr INTO lv_matnr_found FROM mara
  178.           WHERE bismt = lt_bom-prod.
  179.  
  180.         IF sy-subrc = 0.
  181.           lv_matnr = lv_matnr_found.
  182.         ELSE.
  183.           lv_mat_missing = 'X'.
  184.         ENDIF.
  185.       ENDIF.
  186.  
  187.       lv_item = 0.
  188. * Fill the data
  189. * Material BoM Group Header Data
  190.       CLEAR lt_bomgroup.
  191.       lt_bomgroup-bom_group_identification = p_gr_id. "'BAPI_SMP_COL1'.
  192.       lt_bomgroup-object_type = 'BGR'.
  193.       lt_bomgroup-object_id = p_obj_id. "'SIMPLE1'.
  194.       lt_bomgroup-bom_usage = p_usage. "'1'.
  195.       lt_bomgroup-ltxt_lang = sy-langu.
  196.       lt_bomgroup-technical_type = ' '.
  197.       lt_bomgroup-bom_text = p_text. "'Simple BoM - FM'.
  198.       lt_bomgroup-created_in_plant = lt_bom-werks.
  199.       APPEND lt_bomgroup.
  200.  
  201. * Header Details of the different variants
  202.       CLEAR lt_variants.
  203.       lt_variants-bom_group_identification = p_gr_id. "'BAPI_SMP_COL1'.
  204.       lt_variants-object_type = 'BOM'.
  205.       lt_variants-object_id = p_obj_id. "'SIMPLE1'.
  206.       lt_variants-alternative_bom = '01'.
  207.       lt_variants-bom_status = '01'.
  208.       lt_variants-lab_design = p_labor.
  209.  
  210.       lv_qty = lt_bom-qty_prd.
  211.  
  212.       CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
  213.         EXPORTING
  214.           input          = lt_bom-uom_prd
  215.           language       = sy-langu
  216.         IMPORTING
  217.           output         = lt_variants-base_unit
  218.         EXCEPTIONS
  219.           unit_not_found = 1
  220.           OTHERS         = 2.
  221.  
  222.       lt_variants-base_qty = lv_qty. "'1.000'.
  223.       lt_variants-valid_from_date = sy-datum.
  224.       lt_variants-function = 'NEW'.
  225.       APPEND lt_variants.
  226.  
  227. * Details of the materials of the different variants
  228.       CLEAR lt_matrel.
  229.       lt_matrel-bom_group_identification = p_gr_id. "'BAPI_SMP_COL1'.
  230.       lt_matrel-material = lv_matnr. "'000000000100000457'.
  231.       lt_matrel-bom_usage = p_usage. "'1'.
  232.       lt_matrel-alternative_bom = '01'.
  233.       lt_matrel-plant = lt_bom-werks.
  234.       APPEND lt_matrel.
  235.  
  236. * Linking items to the corresponding variants
  237.       CLEAR lt_itemas.
  238.       lt_itemas-bom_group_identification = p_gr_id. "'BAPI_SMP_COL1'.
  239.       lt_itemas-sub_object_type = 'ITM'.
  240.       lt_itemas-sub_object_id = p_obj_id. "'SIMPLE1'.
  241.       lt_itemas-super_object_type = 'BOM'.
  242.       lt_itemas-super_object_id = p_obj_id. "'SIMPLE1'.
  243.       lt_itemas-valid_from_date = sy-datum.
  244.       lt_itemas-function = 'NEW'.
  245.       APPEND lt_itemas.
  246.  
  247.  
  248. * szukaj komponentu!!!
  249.       CLEAR lv_matnr.
  250.       CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  251.         EXPORTING
  252.           input  = lt_bom-comp
  253.         IMPORTING
  254.           output = lv_matnr.
  255.  
  256.       SELECT SINGLE matnr INTO lv_matnr_found FROM mara
  257.         WHERE matnr = lv_matnr.
  258.  
  259.       IF sy-subrc = 0.
  260.         lv_matnr = lv_matnr_found.
  261.       ELSE.
  262.  
  263.         SELECT SINGLE matnr INTO lv_matnr_found FROM mara
  264.           WHERE bismt = lt_bom-comp.
  265.  
  266.         IF sy-subrc = 0.
  267.           lv_matnr = lv_matnr_found.
  268.         ELSE.
  269.           lv_mat_missing = 'X'.
  270.         ENDIF.
  271.       ENDIF.
  272.  
  273.       lv_item = lv_item + 10.
  274.       lv_item_c = lv_item.
  275. * Details of the items of the variants
  276.       CLEAR lt_items.
  277.       lt_items-bom_group_identification = p_gr_id. "'BAPI_SMP_COL1'.
  278.       lt_items-object_type = 'ITM'.
  279.       lt_items-object_id = p_obj_id. "'SIMPLE1'.
  280.       lt_items-item_no = lv_item_c. "'0010'.
  281.       lt_items-item_cat = 'L'.
  282.       lt_items-component = lv_matnr. "'000000000100000445'.
  283.  
  284.       lv_qty = lt_bom-qty_comp.
  285.       lt_items-comp_qty = lv_qty. "'2'.
  286.  
  287. *    lt_items-comp_unit = 'PAC'.
  288. *    lt_bom-uom = 'PAC'.
  289.  
  290.       CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
  291.         EXPORTING
  292.           input          = lt_bom-uom_comp
  293.           language       = sy-langu
  294.         IMPORTING
  295.           output         = lt_items-comp_unit
  296.         EXCEPTIONS
  297.           unit_not_found = 1
  298.           OTHERS         = 2.
  299.  
  300.       lt_items-valid_from_date = sy-datum.
  301.       APPEND lt_items.
  302.  
  303.       lv_last_step = 2.
  304. **CLEAR it_items.
  305. **it_items-bom_group_identification = 'BAPI_SMP_COL1'.
  306. **it_items-object_type = 'ITM'.
  307. **it_items-object_id = 'SIMPLE1'.
  308. **it_items-item_no = '0020'.
  309. **it_items-item_cat = 'L'.
  310. **it_items-component = 'COMPON2'.
  311. **it_items-comp_qty = '3'.
  312. **it_items-valid_from_date = sy-datum.
  313. **APPEND it_items.
  314.  
  315. * Create variants
  316.       CALL FUNCTION 'BAPI_MATERIAL_BOM_GROUP_CREATE'
  317.         EXPORTING
  318.           all_error         = 'X'
  319.         TABLES
  320.           bomgroup          = lt_bomgroup
  321.           variants          = lt_variants
  322.           items             = lt_items
  323.           materialrelations = lt_matrel
  324.           itemassignments   = lt_itemas
  325.           return            = lt_return.
  326.  
  327.  
  328.       LOOP AT lt_return WHERE type = 'A' OR type = 'E'.
  329.         WRITE:/ 'błąd ', lt_return-type, lt_return-id, lt_return-number,
  330.           lt_return-message.
  331.         lv_error = 'X'.
  332.       ENDLOOP.
  333.  
  334.       IF lv_error <> 'X'.
  335.         CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
  336.         ls_zpp_master_data-zz_matnr_master = lt_bom-prod.
  337.         ls_zpp_master_data-zz_werks = lt_bom-werks.
  338.         ls_zpp_master_data-zz_matnr_slave = lt_bom-comp.
  339.         ls_zpp_master_data-zz_bom = 'X'.
  340.         APPEND ls_zpp_master_data TO lt_zpp_master_data.
  341.         MODIFY zpp_master_data FROM TABLE lt_zpp_master_data.
  342.         COMMIT WORK.
  343.         LOOP AT lt_return.
  344.           WRITE:/ lt_return-type, lt_return-id, lt_return-number,
  345.           lt_return-message.
  346.         ENDLOOP.
  347.       ELSE.
  348.         CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  349.       ENDIF.
  350.  
  351.       REFRESH lt_bomgroup.
  352.       REFRESH lt_variants.
  353.       REFRESH lt_items.
  354.       REFRESH lt_matrel.
  355.       REFRESH lt_itemas.
  356.       REFRESH lt_return.
  357.       CLEAR lv_error.
  358.  
  359.     ENDLOOP.
  360.     CLEAR lt_bom.
  361.     REFRESH lt_bom.
  362.   ENDLOOP.
  363.  
  364. **** This code will create a material BoM for the material
  365. **** MAINMATERIAL with the components COMPON1 and COMPON2.
  366. ***
  367. **** Data Declaration
  368. ***DATA:
  369. ***it_bomgroup LIKE bapi1080_bgr_c OCCURS 0 WITH HEADER LINE,
  370. ***it_variants LIKE bapi1080_bom_c OCCURS 0 WITH HEADER LINE,
  371. ***it_items LIKE bapi1080_itm_c OCCURS 0 WITH HEADER LINE,
  372. ***it_matrel LIKE bapi1080_mbm_c OCCURS 0 WITH HEADER LINE,
  373. ***it_itemas LIKE bapi1080_rel_itm_bom_c OCCURS 0 WITH HEADER LINE,
  374. ***it_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
  375. ***
  376. **** Fill the data
  377. **** Material BoM Group Header Data
  378. ***CLEAR it_bomgroup.
  379. ***it_bomgroup-bom_group_identification = 'BAPI_SMP_COL1'.
  380. ***it_bomgroup-object_type = 'BGR'.
  381. ***it_bomgroup-object_id = 'SIMPLE1'.
  382. ***it_bomgroup-bom_usage = '5'. " YOU COULD CHANGE THE BOM USAGE TO YOUR
  383. ***NEEDS
  384. ***it_bomgroup-ltxt_lang = sy-langu.
  385. ***it_bomgroup-technical_type = ' '.
  386. ***it_bomgroup-bom_text = 'Simple BoM - FM'.
  387. ***APPEND it_bomgroup.
  388. ***
  389. **** Header Details of the different variants
  390. ***CLEAR it_variants.
  391. ***it_variants-bom_group_identification = 'BAPI_SMP_COL1'.
  392. ***it_variants-object_type = 'BOM'.
  393. ***it_variants-object_id = 'SIMPLE1'.
  394. ***it_variants-alternative_bom = '01'.
  395. ***it_variants-bom_status = '01'.
  396. ***it_variants-base_qty = '1.000'.
  397. ***it_variants-valid_from_date = sy-datum.
  398. ***it_variants-function = 'NEW'.
  399. ***APPEND it_variants.
  400. ***
  401. **** Details of the items of the variants
  402. ***CLEAR it_items.
  403. ***it_items-bom_group_identification = 'BAPI_SMP_COL1'.
  404. ***it_items-object_type = 'ITM'.
  405. ***it_items-object_id = 'SIMPLE1'.
  406. ***it_items-item_no = '0010'.
  407. ***it_items-item_cat = 'L'.
  408. ***it_items-component = 'COMPON1'.
  409. ***it_items-comp_qty = '2'.
  410. ***it_items-valid_from_date = sy-datum.
  411. ***APPEND it_items.
  412. ***
  413. ***CLEAR it_items.
  414. ***it_items-bom_group_identification = 'BAPI_SMP_COL1'.
  415. ***it_items-object_type = 'ITM'.
  416. ***it_items-object_id = 'SIMPLE1'.
  417. ***it_items-item_no = '0020'.
  418. ***it_items-item_cat = 'L'.
  419. ***it_items-component = 'COMPON2'.
  420. ***it_items-comp_qty = '3'.
  421. ***it_items-valid_from_date = sy-datum.
  422. ***APPEND it_items.
  423. ***
  424. ***
  425. **** Details of the materials of the different variants
  426. ***CLEAR it_matrel.
  427. ***it_matrel-bom_group_identification = 'BAPI_SMP_COL1'.
  428. ***it_matrel-material = 'MAINMATERIAL'.
  429. ***it_matrel-bom_usage = '5'.
  430. ***it_matrel-alternative_bom = '01'.
  431. ***APPEND it_matrel.
  432. ***
  433. **** Linking items to the corresponding variants
  434. ***CLEAR it_itemas.
  435. ***it_itemas-bom_group_identification = 'BAPI_SMP_COL1'.
  436. ***it_itemas-sub_object_type = 'ITM'.
  437. ***it_itemas-sub_object_id = 'SIMPLE1'.
  438. ***it_itemas-super_object_type = 'BOM'.
  439. ***it_itemas-super_object_id = 'SIMPLE1'.
  440. ***it_itemas-valid_from_date = sy-datum.
  441. ***it_itemas-function = 'NEW'.
  442. ***APPEND it_itemas.
  443. ***
  444. **** Create variants
  445. ***CALL FUNCTION 'BAPI_MATERIAL_BOM_GROUP_CREATE'
  446. ***EXPORTING
  447. ***all_error = 'X'
  448. ***TABLES
  449. ***bomgroup = it_bomgroup
  450. ***variants = it_variants
  451. ***items = it_items
  452. ***materialrelations = it_matrel
  453. ***itemassignments = it_itemas
  454. ***return = it_return.
  455. ***
  456. ***CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
  457. ***
  458. ***LOOP AT it_return.
  459. ***WRITE:/ it_return-type, it_return-id, it_return-number,
  460. ***it_return-message.
  461. ***ENDLOOP.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement