使用BAPI创建sales order的时候系统产生了两个相同的condition type,使用计数器也不起作用,
改变Pricing Type可以达到预期。
set ls_bapisdls-pricing = 'G'.
LOOP AT lt_ekpo INTO DATA(ls_ekpo).
lv_posnr = ls_ekpo-ebelp.
CLEAR:ls_sales_items,ls_sales_itemsx,ls_sales_schedules_in, ls_sales_schedules_inx,
ls_sales_conditions_in,ls_sales_conditions_inx.
ls_sales_items = VALUE #(
itm_number = lv_posnr
ref_1 = 'POC test'
material = ls_ekpo-matnr
target_qty = lv_invoicedquantity
target_qu = ls_ekpo-meins
purch_no_c = ls_ekpo-ebeln
* sd_taxcode = ls_vbap-j_1btxsdc
* PO_ITM_NO = lv_posnr
plant = ls_ekpo-werks
).
ls_sales_itemsx = VALUE #(
itm_number = lv_posnr
ref_1 = 'X'
material = 'X'
target_qty = 'X'
target_qu = 'X'
purch_no_c = 'X'
* sd_taxcode = 'X'
* po_itm_no = 'X'
plant = 'X'
).
ls_sales_schedules_in-itm_number = lv_posnr.
ls_sales_schedules_in-sched_line = '0001'.
ls_sales_schedules_in-req_date = sy-datum.
ls_sales_schedules_in-dlv_date = sy-datum.
ls_sales_schedules_in-req_qty = lv_invoicedquantity.
ls_sales_schedules_inx-itm_number = lv_posnr.
ls_sales_schedules_inx-sched_line = '0001'.
ls_sales_schedules_inx-req_date = abap_true.
ls_sales_schedules_inx-dlv_date = abap_true.
ls_sales_schedules_inx-req_qty = abap_true.
"add conditions
ls_sales_conditions_in-itm_number = lv_posnr.
ls_sales_conditions_in-cond_type = 'PR00'.
ls_sales_conditions_in-cond_value = lv_PriceAmount.
ls_sales_conditions_in-currency = 'SGD'.
ls_sales_conditions_in-cond_count = '01'.
ls_sales_conditions_in-cond_count_long = '001'.
ls_sales_conditions_inx-itm_number = lv_posnr.
ls_sales_conditions_inx-cond_type = 'PR00'.
ls_sales_conditions_inx-currency = abap_true.
ls_sales_conditions_inx-cond_value = abap_true.
ls_sales_conditions_inx-cond_count = '01'.
ls_sales_conditions_inx-updateflag = 'U'.
ls_sales_conditions_inx-cond_count_long = '001'.
*
APPEND ls_sales_conditions_in TO lt_sales_conditions_in.
APPEND ls_sales_conditions_inx TO lt_sales_conditions_inx.
APPEND ls_sales_schedules_in TO lt_sales_schedules_in.
APPEND ls_sales_schedules_inx TO lt_sales_schedules_inx.
APPEND ls_sales_items TO lt_sales_items.
APPEND ls_sales_itemsx TO lt_sales_itemsx .
ENDLOOP.
ls_bapisdls-pricing = 'G'.
CALL FUNCTION 'SD_SALESDOCUMENT_CREATE'
EXPORTING
* SALESDOCUMENT =
sales_header_in = ls_sales_header_in
sales_header_inx = ls_sales_header_inx
logic_switch = ls_bapisdls
IMPORTING
salesdocument_ex = lv_vbeln
* SALES_HEADER_OUT =
* SALES_HEADER_STATUS =
TABLES
return = lt_return[]
sales_items_in = lt_sales_items[]
sales_items_inx = lt_sales_itemsx[]
sales_partners = lt_sales_partners[]
sales_schedules_in = lt_sales_schedules_in
sales_schedules_inx = lt_sales_schedules_inx
sales_conditions_in = lt_sales_conditions_in[]
sales_conditions_inx = lt_sales_conditions_inx[]
sales_text = lt_sales_text[]
partners_ex = lt_partners_ex[].
LOOP AT lt_return INTO ls_log_message WHERE type <> 'S'
AND type <> 'W'.
APPEND ls_log_message TO et_log_message.
ENDLOOP.
IF sy-subrc NE 0 .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
READ TABLE lt_return INTO ls_log_message WITH KEY type = 'S'
id = 'V1'
number = '311'.
APPEND ls_log_message TO et_log_message.
EV_ACKNOWLEDGED = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.