Поискал на форуме как делать BAPI_GOODSMVT_CREATE в комбинации с 543 видом движения.
Не нашел решения. Помучался сам. Получилось. Может кому пригодится...
Моя ситуация следующая:
Давальческая схема. Поступление материала 101 вдв - первая проводка.
Последующий перерасчет (списание компонентов) 121 вдв + 543 вдв - вторая проводка.
Текст проги для 101 (101+543) вдв:Code:
line_id = 0.
CLEAR: i_goodsmvt_item[].
READ TABLE gt_tab2 INTO wa_tab2 INDEX 1.
IF sy-subrc = 0.
READ TABLE gt_ekkn INTO wa_ekkn
WITH KEY ebeln = wa_tab2-ebeln
ebelp = wa_tab2-ebelp.
CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT'
EXPORTING
input = wa_ekkn-ps_psp_pnr
IMPORTING
output = l_pspnr
EXCEPTIONS
length_error = 1
OTHERS = 2.
line_id = line_id + 1.
CLEAR: i_goodsmvt_item.
i_goodsmvt_item-line_id = line_id.
i_goodsmvt_item-parent_id = '000000'.
i_goodsmvt_item-line_depth = '00'.
i_goodsmvt_item-material = wa_tab2-matnr.
i_goodsmvt_item-plant = wa_tab2-werks.
i_goodsmvt_item-move_type = '101'. "'501'.
i_goodsmvt_item-entry_qnt = wa_tab2-menge.
* i_goodsmvt_item-amount_lc = wa_tab2-dmbtr. "'1'.
i_goodsmvt_item-gl_account = wa_ekkn-sakto. "'0035020000'. "'0090991010'.
i_goodsmvt_item-wbs_elem = l_pspnr.
i_goodsmvt_item-po_number = wa_ebeln_re-low.
i_goodsmvt_item-po_item = wa_ebelp_re-low.
* i_goodsmvt_item-vendor = ch_lifnr. "'0000000123'.
i_goodsmvt_item-mvt_ind = 'B'.
* "'B'. " к заказу на поставку
i_goodsmvt_item-withdrawn = 'X'. " конечная поставка
i_goodsmvt_item-nb_slips = 1. " число накладных
i_goodsmvt_item-par_compco = 'JNZ'.
i_goodsmvt_item-item_text = p_txt. "'Перенос запаса'.
APPEND i_goodsmvt_item.
ENDIF.
LOOP AT gt_resb INTO wa_resb.
READ TABLE gt_mseg541 INTO wa_mseg541
WITH KEY ebeln = wa_resb-ebeln
ebelp = wa_resb-ebelp
matnr = wa_resb-matnr.
CLEAR ch_lifnr.
CALL FUNCTION 'CONVERSION_EXIT_LIFNR_OUTPUT'
EXPORTING
input = wa_resb-lifnr
IMPORTING
output = ch_lifnr.
line_id = line_id + 1.
CLEAR: i_goodsmvt_item.
i_goodsmvt_item-line_id = line_id.
i_goodsmvt_item-parent_id = '000001'.
i_goodsmvt_item-line_depth = '01'.
i_goodsmvt_item-material = wa_resb-matnr.
i_goodsmvt_item-plant = wa_resb-werks.
* i_goodsmvt_item-stge_loc = wa_resb-lgort.
i_goodsmvt_item-batch = wa_mseg541-charg.
i_goodsmvt_item-move_type = '543'. "'501'.
i_goodsmvt_item-spec_stock = 'O'.
i_goodsmvt_item-entry_qnt = 0. " menge = 0
* i_goodsmvt_item-amount_lc = wa_tab2-dmbtr. "'1'.
i_goodsmvt_item-gl_account = wa_ekkn-sakto. "'0035020000'. "'0090991010'.
i_goodsmvt_item-wbs_elem = l_pspnr.
i_goodsmvt_item-po_number = wa_ebeln_re-low.
i_goodsmvt_item-po_item = wa_ebelp_re-low.
i_goodsmvt_item-vendor = ch_lifnr. "'0000000123'.
i_goodsmvt_item-mvt_ind = 'B'.
* "'B'. " к заказу на поставку
i_goodsmvt_item-withdrawn = 'X'. " конечная поставка
i_goodsmvt_item-nb_slips = 1. " число накладных
i_goodsmvt_item-par_compco = 'JNZ'.
i_goodsmvt_item-item_text = p_txt. "'Перенос запаса'.
APPEND i_goodsmvt_item.
ENDLOOP. " resb
CLEAR i_goodsmvt_header.
i_goodsmvt_header-pstng_date = wa_budat_re-low.
i_goodsmvt_header-doc_date = wa_bldat_re-low.
i_goodsmvt_header-pr_uname = sy-uname.
i_goodsmvt_header-header_txt = p_txt.
*
i_goodsmvt_code-gm_code = '01'.
*01 MB01 Провести ПМ к заказу на поставку
*02 MB31 ПМ к производственному заказу
*03 MB1A Выдача материала
*04 MB1B Проводка переноса
*05 MB1C Прочие поступления материалов
*06 MB11 Движение материала
*07 MB04 Корректировка расхода ДавальчМтрл
* MBST 'BAPI_GOODSMVT_CANCEL'
* Domain: KZBEW - Movement Indicator
* Движение материала без ссылки
*B Движение материала к заказу на поставку
*F Движение материала к заказу
*L Движение материала к накладной
*K Движение материала к запросу Канбан (только внутр. СУС)
*O Корректировка расхода давальческого материала
*W Корректировка расхода материала, ЕИ долевая/продукта
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = i_goodsmvt_header
goodsmvt_code = i_goodsmvt_code
testrun = i_testrun
IMPORTING
goodsmvt_headret = i_goodsmvt_headret
materialdocument = i_materialdocument
matdocumentyear = i_matdocumentyear
TABLES
goodsmvt_item = i_goodsmvt_item
goodsmvt_serialnumber = i_goodsmvt_serialnumber
return = i_return.
break mm.
IF i_return[] IS INITIAL.
COMMIT WORK AND WAIT.
wa_tab2-mblnr = i_materialdocument.
wa_tab2-mjahr = i_matdocumentyear.
ELSE.
ROLLBACK WORK.
CONCATENATE 'MB01'
i_return-type
i_return-id
i_return-number
i_return-MESSAGE
INTO wa_tab2-err.
ENDIF.
Примечание : Если для 101 вдв пишет E LB 031 "Из запрошенного количества для материала 204400 остаются открытыми 1,000 ШТ",
то необходимо к 101 вдв добавить позиции 543 вдв
Текст проги для 121+543 вдв:Code:
line_id = 0.
CLEAR: i_goodsmvt_item[].
READ TABLE gt_tab2 INTO wa_tab2 INDEX 1.
IF sy-subrc = 0.
READ TABLE gt_ekkn INTO wa_ekkn
WITH KEY ebeln = wa_tab2-ebeln
ebelp = wa_tab2-ebelp.
CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT'
EXPORTING
input = wa_ekkn-ps_psp_pnr
IMPORTING
output = l_pspnr
EXCEPTIONS
length_error = 1
OTHERS = 2.
line_id = line_id + 1.
CLEAR: i_goodsmvt_item.
i_goodsmvt_item-line_id = line_id.
i_goodsmvt_item-parent_id = '000000'.
i_goodsmvt_item-line_depth = '00'.
i_goodsmvt_item-material = wa_tab2-matnr.
i_goodsmvt_item-plant = wa_tab2-werks.
i_goodsmvt_item-move_type = '121'. "'501'.
i_goodsmvt_item-spec_stock = ''.
* i_goodsmvt_item-entry_qnt = wa_tab2-menge.
* i_goodsmvt_item-amount_lc = wa_tab2-dmbtr. "'1'.
i_goodsmvt_item-gl_account = wa_ekkn-sakto. "'0035020000'. "'0090991010'.
i_goodsmvt_item-wbs_elem = l_pspnr.
i_goodsmvt_item-po_number = wa_ebeln_re-low.
i_goodsmvt_item-po_item = wa_ebelp_re-low.
i_goodsmvt_item-vendor = ch_lifnr. "'0000000123'.
i_goodsmvt_item-mvt_ind = 'O'.
* "'B'. " к заказу на поставку
i_goodsmvt_item-withdrawn = 'X'. " конечная поставка
i_goodsmvt_item-nb_slips = 1. " число накладных
i_goodsmvt_item-par_compco = 'JNZ'.
i_goodsmvt_item-item_text = p_txt. "'Перенос запаса'.
APPEND i_goodsmvt_item.
ENDIF.
LOOP AT gt_resb INTO wa_resb.
READ TABLE gt_mseg541 INTO wa_mseg541
WITH KEY ebeln = wa_resb-ebeln
ebelp = wa_resb-ebelp
matnr = wa_resb-matnr.
CLEAR ch_lifnr.
CALL FUNCTION 'CONVERSION_EXIT_LIFNR_OUTPUT'
EXPORTING
input = wa_resb-lifnr
IMPORTING
output = ch_lifnr.
line_id = line_id + 1.
CLEAR: i_goodsmvt_item.
i_goodsmvt_item-line_id = line_id.
i_goodsmvt_item-parent_id = '000001'.
i_goodsmvt_item-line_depth = '01'.
i_goodsmvt_item-material = wa_resb-matnr.
i_goodsmvt_item-plant = wa_resb-werks.
* i_goodsmvt_item-stge_loc = wa_resb-lgort.
i_goodsmvt_item-batch = wa_mseg541-charg.
i_goodsmvt_item-move_type = '543'. "'501'.
i_goodsmvt_item-spec_stock = 'O'.
i_goodsmvt_item-entry_qnt = wa_mseg541-menge.
* i_goodsmvt_item-amount_lc = wa_tab2-dmbtr. "'1'.
i_goodsmvt_item-gl_account = wa_ekkn-sakto. "'0035020000'. "'0090991010'.
i_goodsmvt_item-wbs_elem = l_pspnr.
i_goodsmvt_item-po_number = wa_ebeln_re-low.
i_goodsmvt_item-po_item = wa_ebelp_re-low.
i_goodsmvt_item-vendor = ch_lifnr. "'0000000123'.
i_goodsmvt_item-mvt_ind = 'O'.
* "'B'. " к заказу на поставку
i_goodsmvt_item-withdrawn = 'X'. " конечная поставка
i_goodsmvt_item-nb_slips = 1. " число накладных
i_goodsmvt_item-par_compco = 'JNZ'.
i_goodsmvt_item-item_text = p_txt. "'Перенос запаса'.
APPEND i_goodsmvt_item.
ENDLOOP. " resb
clear i_goodsmvt_header.
i_goodsmvt_header-pstng_date = wa_budat_re-low.
i_goodsmvt_header-doc_date = wa_bldat_re-low.
i_goodsmvt_header-pr_uname = sy-uname.
i_goodsmvt_header-header_txt = p_txt.
*
i_goodsmvt_code-gm_code = '07'.
*01 MB01 Провести ПМ к заказу на поставку
*02 MB31 ПМ к производственному заказу
*03 MB1A Выдача материала
*04 MB1B Проводка переноса
*05 MB1C Прочие поступления материалов
*06 MB11 Движение материала
*07 MB04 Корректировка расхода ДавальчМтрл
* MBST 'BAPI_GOODSMVT_CANCEL'
* Domain: KZBEW - Movement Indicator
* Движение материала без ссылки
*B Движение материала к заказу на поставку
*F Движение материала к заказу
*L Движение материала к накладной
*K Движение материала к запросу Канбан (только внутр. СУС)
*O Корректировка расхода давальческого материала
*W Корректировка расхода материала, ЕИ долевая/продукта
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = i_goodsmvt_header
goodsmvt_code = i_goodsmvt_code
testrun = i_testrun
IMPORTING
goodsmvt_headret = i_goodsmvt_headret
materialdocument = i_materialdocument
matdocumentyear = i_matdocumentyear
TABLES
goodsmvt_item = i_goodsmvt_item
goodsmvt_serialnumber = i_goodsmvt_serialnumber
return = i_return.
IF i_return[] IS INITIAL.
COMMIT WORK AND WAIT.
ELSE.
ROLLBACK WORK.
ENDIF.