У меня похожая проблема. Бапишка работала, работала и бац, перестала условия вообще подставлять.
Второй день играюсь с парамтерами, мыпаюсь при создании в заказ цену подставить, оно тупо игнорирует все условия.
Режим расчета стоял G.
В чем может быть проблема?
Ниже код фм, котрый при сохранении заказа должен создавать копию в другой БЕ.
Code:
*"----------------------------------------------------------------------
*"*"Функциональный модуль обновления:
*"
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(IS_VBAK) TYPE VBAK
*" VALUE(IT_VBAP) TYPE VA_VBAPVB_T
*" VALUE(IT_VBEP) TYPE VA_VBEPVB_T
*" VALUE(IT_VBPA) TYPE VA_VBPAVB_T
*" VALUE(IT_KOMV) TYPE KOMV_TAB
*" VALUE(I_VKORG) TYPE VKORG DEFAULT '3100'
*" VALUE(I_WERKS) TYPE WERKS_D DEFAULT '3100'
*" VALUE(I_COMMIT) TYPE FLAG OPTIONAL
*"----------------------------------------------------------------------
" Рабочие области входящих таблиц
FIELD-SYMBOLS: <ls_vbap> LIKE LINE OF it_vbap,
<ls_vbep> LIKE LINE OF it_vbep,
<ls_vbpa> LIKE LINE OF it_vbpa,
<ls_komv> LIKE LINE OF it_komv.
" Данные для создания нового документа
DATA: ls_order_header_in TYPE bapisdhd1,
lt_order_items_in TYPE TABLE OF bapisditm WITH HEADER LINE,
lt_order_schedules_in TYPE TABLE OF bapischdl WITH HEADER LINE,
lt_order_partners TYPE TABLE OF bapiparnr WITH HEADER LINE,
lt_order_conditions_in TYPE TABLE OF bapicond WITH HEADER LINE,
ls_logic_switch TYPE bapisdls,
* lt_return TYPE bapiret2_t,
lv_salesdocument TYPE bapivbeln-vbeln.
" Данные заголовка
ls_order_header_in-doc_type = is_vbak-auart.
ls_order_header_in-sales_org = i_vkorg.
ls_order_header_in-distr_chan = is_vbak-vtweg.
ls_order_header_in-division = is_vbak-spart.
" Берем валюту из новой БЕ
SELECT SINGLE a~waers INTO ls_order_header_in-currency
FROM t001 AS a INNER JOIN tvko AS b ON b~bukrs EQ a~bukrs
WHERE vkorg EQ i_vkorg.
* NOTE: Присвоение ссылочного заказа на уровне заголовка вызывает дамп в случае запуска данного ФМ в момент создания ссылочного заказа.
ls_order_header_in-ref_doc = is_vbak-vbeln.
ls_order_header_in-refdoc_cat = is_vbak-vbtyp.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = is_vbak-vbeln
IMPORTING
output = ls_order_header_in-purch_no_c.
" Для каждой не отклоненной позиции...
LOOP AT it_vbap ASSIGNING <ls_vbap> WHERE abgru IS INITIAL.
" Данные позиции
lt_order_items_in-itm_number = <ls_vbap>-posnr.
lt_order_items_in-material = <ls_vbap>-matnr.
lt_order_items_in-plant = i_werks.
lt_order_items_in-ref_doc = is_vbak-vbeln.
lt_order_items_in-ref_doc_it = <ls_vbap>-posnr.
lt_order_items_in-ref_doc_ca = is_vbak-vbtyp.
APPEND lt_order_items_in.
" Данные партии поставки
LOOP AT it_vbep ASSIGNING <ls_vbep> WHERE posnr EQ <ls_vbap>-posnr.
lt_order_schedules_in-itm_number = <ls_vbep>-posnr.
lt_order_schedules_in-req_qty = <ls_vbep>-wmeng.
lt_order_schedules_in-sched_line = <ls_vbep>-etenr.
APPEND lt_order_schedules_in.
ENDLOOP.
" Данные условий
LOOP AT it_komv ASSIGNING <ls_komv> WHERE kposn EQ <ls_vbap>-posnr AND kschl IS NOT INITIAL AND kbetr IS NOT INITIAL.
CLEAR lt_order_conditions_in.
lt_order_conditions_in-itm_number = <ls_komv>-kposn.
lt_order_conditions_in-cond_st_no = <ls_komv>-stunr.
lt_order_conditions_in-cond_count = <ls_komv>-zaehk.
lt_order_conditions_in-cond_type = <ls_komv>-kschl.
IF <ls_komv>-krech EQ 'A'. " Для процентных условий делим значение на 10
lt_order_conditions_in-cond_value = <ls_komv>-kbetr / 10.
ELSE.
lt_order_conditions_in-cond_value = <ls_komv>-kbetr.
ENDIF.
IF <ls_komv>-waers EQ is_vbak-waerk. " Для позиций в валюте заказа меняем валюту на новую
lt_order_conditions_in-currency = ls_order_header_in-currency.
ELSE.
lt_order_conditions_in-currency = <ls_komv>-waers.
ENDIF.
lt_order_conditions_in-cond_unit = <ls_komv>-kmein.
lt_order_conditions_in-cond_p_unt = <ls_komv>-kpein.
APPEND lt_order_conditions_in.
ENDLOOP.
ENDLOOP.
* " Данные партнеров
LOOP AT it_vbpa ASSIGNING <ls_vbpa> WHERE posnr EQ '000000'.
lt_order_partners-partn_role = <ls_vbpa>-parvw.
CASE <ls_vbpa>-nrart.
WHEN 'KU'. lt_order_partners-partn_numb = <ls_vbpa>-kunnr.
WHEN 'LI'. lt_order_partners-partn_numb = <ls_vbpa>-lifnr.
WHEN 'PE'. lt_order_partners-partn_numb = <ls_vbpa>-pernr.
WHEN OTHERS.
CONTINUE.
ENDCASE.
APPEND lt_order_partners.
ENDLOOP.
" Логика расчета цены
ls_logic_switch-pricing = 'G'. " Копирование компонентов цен без изм., расчет налогов заново
" Создаем новый заказ
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
EXPORTING
order_header_in = ls_order_header_in
logic_switch = ls_logic_switch
IMPORTING
salesdocument = lv_salesdocument
TABLES
* return = lt_return
order_items_in = lt_order_items_in
order_partners = lt_order_partners
order_schedules_in = lt_order_schedules_in
order_conditions_in = lt_order_conditions_in.
* LOOP AT lt_return INTO ls_return.
* WRITE:/ ls_return-type,
* ls_return-id,
* ls_return-number,
* ls_return-message.
* ENDLOOP.
IF i_commit IS NOT INITIAL.
IF lv_salesdocument IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
ENDIF.