When ABAP BAPI creates SO, the condition type is repeated

When ABAP BAPI creates SO, the condition type is repeated
As shown in the figure below, the first line PR01 is the extra line that comes with it, and the second line is the bapi creation

The solution is to pass parameter ‘G’ to logic_switch-pricing
is_logic_switch-pricing = G’.

Complete code:
FUNCTION zsdfu005.
*”———————————————— ———————–
“Local interface:
*” IMPORTING
*” VALUE(ZOAID) TYPE CHAR15 OPTIONAL
*” VALUE(ZNAME) TYPE SY-UNAME OPTIONAL
*” VALUE(AUART) TYPE AUART OPTIONAL
*” VALUE(VKORG) TYPE VKORG OPTIONAL
*” VALUE(BSTNK) TYPE BSTNK OPTIONAL
*” VALUE(BSTDK) TYPE BSTDK OPTIONAL
*” VALUE(TELF1) TYPE TELF1 OPTIONAL
*” VALUE(KUNNR) TYPE KUNNR OPTIONAL
*” VALUE(KUNRG) TYPE KUNRG OPTIONAL
*” VALUE(WAERK) TYPE WAERK OPTIONAL
*” VALUE(ZOANO) TYPE ZOANO OPTIONAL
*” EXPORTING
*” VALUE(ZTYPE) TYPE BAPI_MTYPE
*” VALUE(MESS) TYPE BAPI_MSG
*” VALUE(E_VBELN) TYPE VBELN
*” TABLES
*” ITEM STRUCTURE ZSD005 OPTIONAL
*”———————————————— ———————–
DATA: it_header_in LIKE bapisdhd1.
DATA: it_header_inx LIKE bapisdhd1x.
DATA: it_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA: it_items_in LIKE bapisditm OCCURS 0 WITH HEADER LINE. “Communication Field: Sales and Distribution Voucher Items
DATA: it_items_inx LIKE bapisditmx OCCURS 0 WITH HEADER LINE. “Communication Field: Sales and Distribution Voucher Items
DATA: it_schedules_in LIKE bapischdl OCCURS 0 WITH HEADER LINE. “Maintain communication fields of SD voucher schedule lines
DATA: it_schedules_inx LIKE bapischdlx OCCURS 0 WITH HEADER LINE. “Maintain communication fields of SD voucher schedule lines
DATA: it_partners LIKE bapiparnr OCCURS 0 WITH HEADER LINE. “Communication field: SD document partners
DATA: order_conditions_in LIKE bapicond OCCURS 0 WITH HEADER LINE.
DATA: order_conditions_inx LIKE bapicondx OCCURS 0 WITH HEADER LINE.
DATA: order_text LIKE bapisdtext OCCURS 0 WITH HEADER LINE.
DATA: lt_bapiparex LIKE bapiparex OCCURS 0 WITH HEADER LINE.
DATA: ls_zbape_vbap TYPE bape_vbap.
DATA: ls_zbape_vbapx TYPE bape_vbapx.
DATA: salesdocument LIKE bapivbeln-vbeln.
DATA: is_logic_switch TYPE bapisdls.

DATA:lv_error.
DATA:lv_mess(200).
DATA:i_kunnr TYPE kna1-kunnr.
DATA:i_kunrg TYPE vbrk-kunrg.
DATA:lv_werks TYPE marc-werks.
DATA:lv_kalks TYPE knvv-kalks.
DATA:it_ztsd008 TYPE TABLE OF ztsd008.
DATA:is_ztsd008 TYPE ztsd008.
DATA:lv_xh TYPE ztsd008-xh.
DATA:lv_xhitem TYPE ztsd008-xhitem.
DATA:BEGIN OF it_posnr OCCURS 0,
posnr LIKE vbap-posnr,
END OF it_posnr.

“1) Check interface data
IF zoaid = ’.
lv_error = X’.
lv_mess = OA order number is required’.
ENDIF.

IF zname = ’.
lv_error = X’.
CONCATENATE lv_mess /required by creator’ INTO lv_mess SEPARATED BY ’.
ENDIF.

IF auart = ’ OR auart <> ZSE’.
auart = ZSE’.
ENDIF.

IF vkorg = ’.
lv_error = X’.
CONCATENATE lv_mess /Required for sales organization’ INTO lv_mess SEPARATED BY ’.
ELSE.
SELECT COUNT(*) FROM tvko WHERE vkorg = vkorg.
IF sy-subrc NE 0.
lv_error = X’.
CONCATENATE lv_mess /Sales organization does not exist:’ vkorg INTO lv_mess SEPARATED BY ’.
ELSE.
SELECT SINGLE werks INTO lv_werks FROM tvkwz WHERE vkorg = vkorg.
ENDIF.
ENDIF.

IF bstnk = ’.
lv_error = X’.
CONCATENATE lv_mess /Customer PO number required’ INTO lv_mess SEPARATED BY ’.
ENDIF.

IF kunnr = ’.
lv_error = X’.
CONCATENATE lv_mess /required by the seller’ INTO lv_mess SEPARATED BY ’.
ELSE.
i_kunnr = |{ kunnr ALPHA = IN }|.

SELECT COUNT(*) FROM but000 WHERE partner = i_kunnr.
IF sy-subrc NE 0.
  lv_error = 'X'.
  CONCATENATE lv_mess '/Seller:' kunnr 'Does not exist' INTO lv_mess SEPARATED BY ''.
ELSE.
  SELECT SINGLE kalks INTO lv_kalks FROM knvv WHERE kunnr = i_kunnr
                                                AND vkorg = vkorg.
  IF sy-subrc NE 0.
    lv_error = 'X'.
    CONCATENATE lv_mess '/Sold-to party:' kunnr 'Not extended to sales organization:' vkorg INTO lv_mess SEPARATED BY ''.
  ENDIF.
ENDIF.

ENDIF.

IF kunrg <> ’.
i_kunrg = |{ kunrg ALPHA = IN }|.
SELECT COUNT() FROM but000 WHERE partner = i_kunrg.
IF sy-subrc NE 0.
lv_error = X’.
CONCATENATE lv_mess /payer:’ kunrg does not exist’ INTO lv_mess SEPARATED BY ’.
ELSE.
SELECT COUNT(
) FROM knvv WHERE kunnr = i_kunrg
AND vkorg = vkorg.
IF sy-subrc NE 0.
lv_error = X’.
CONCATENATE lv_mess /Payer:’ kunrg Not extended to sales organization:’ vkorg INTO lv_mess SEPARATED BY ’.
ENDIF.
ENDIF.
ENDIF.

IF waerk = ’.
lv_error = X’.
CONCATENATE lv_mess /Currency required’ INTO lv_mess SEPARATED BY ’.
ELSE.
SELECT COUNT(*) FROM tcurc WHERE waers = waerk.
IF sy-subrc NE 0.
lv_error = X’.
CONCATENATE lv_mess /Currency does not exist:’ waerk INTO lv_mess SEPARATED BY ’.
ENDIF.
ENDIF.

IF item[] IS INITIAL.
lv_error = X’.
CONCATENATE lv_mess /No detailed data’ INTO lv_mess SEPARATED BY ’.
ENDIF.

LOOP AT item.
IF item-posnr = ’.
lv_error = X’.
CONCATENATE lv_mess /Detailed line item number required’ INTO lv_mess SEPARATED BY ’.
EXIT.
ENDIF.

it_posnr-posnr = item-posnr.
APPEND it_posnr.

IF item-matnr = ''.
  lv_error = 'X'.
  CONCATENATE lv_mess '/Material code required' INTO lv_mess SEPARATED BY ''.
  EXIT.
ELSE.
  SELECT COUNT(*) FROM mara WHERE matnr = item-matnr.
  IF sy-subrc NE 0.
    lv_error = 'X'.
    CONCATENATE lv_mess '/Material code does not exist' item-matnr INTO lv_mess SEPARATED BY ''.
    EXIT.
  ELSE.
    SELECT COUNT(*) FROM marc WHERE matnr = item-matnr
                                AND werks = lv_werks.
    IF sy-subrc NE 0.
      lv_error = 'X'.
      CONCATENATE lv_mess '/Material:' item-matnr 'Not expanded to factory:' lv_werks INTO lv_mess SEPARATED BY ''.
      EXIT.
    ELSE.
      SELECT COUNT(*) FROM mvke WHERE matnr = item-matnr
                                  AND vkorg = vkorg.
      IF sy-subrc NE 0.
        lv_error = 'X'.
        CONCATENATE lv_mess '/Material:' item-matnr 'Not extended to sales organization:' vkorg INTO lv_mess SEPARATED BY ''.
        EXIT.
      ENDIF.
    ENDIF.
  ENDIF.
ENDIF.

IF item-menge = ''.
  lv_error = 'X'.
  CONCATENATE lv_mess '/Line item:' item-posnr 'Quantity required' INTO lv_mess SEPARATED BY ''.
  EXIT.
ENDIF.

IF item-netpr = ''.
  lv_error = 'X'.
  CONCATENATE lv_mess '/Line item:' item-posnr 'The unit price must be lost' INTO lv_mess SEPARATED BY ''.
ENDIF.

ENDLOOP.

SORT it_posnr BY posnr.
DELETE ADJACENT DUPLICATES FROM it_posnr COMPARING posnr.
IF lines( item[] ) <> lines( it_posnr[] ).
lv_error = X’.
CONCATENATE lv_mess /The line item number cannot be repeated’ INTO lv_mess SEPARATED BY ’.
ENDIF.

IF lv_error = ’.
CLEAR:it_header_in,it_header_inx,salesdocument.
REFRESH:it_return,it_items_in,it_items_inx,it_partners,order_conditions_in,order_conditions_inx,lt_bapiparex.

"Header assignment
it_header_in-doc_type = auart. "Order type
it_header_in-sales_org = vkorg. "Sales Organization
it_header_in-distr_chan = '10'. "Distribution channel
it_header_in-division = '10'. "Product Group
it_header_in-purch_no_c = bstnk. "Purchase order number
IF bstdk IS NOT INITIAL.
  it_header_in-purch_date = bstdk. "Customer PO date
ENDIF.
it_header_in-currency = waerk."Currency
it_header_in-telephone = telf1.

"Partner
it_partners-partn_role = 'AG'.
it_partners-partn_numb = i_kunnr.
it_partners-itm_number = space.
APPEND it_partners .

it_partners-partn_role = 'RG'.
IF i_kunrg <> ''.
  it_partners-partn_numb = i_kunrg.
ELSE.
  it_partners-partn_numb = i_kunnr.
ENDIF.
APPEND it_partners.

it_partners-partn_role = 'RE'.
it_partners-partn_numb = i_kunnr.
APPEND it_partners.

it_partners-partn_role = 'WE'.
it_partners-partn_numb = i_kunnr.
APPEND it_partners.

"Line item, price
LOOP AT item.
  CLEAR:it_items_in.
  it_items_in-itm_number = item-posnr.
  it_items_in-material_long = item-matnr.
  it_items_in-plant = lv_werks.
  it_items_in-target_qty = item-menge.
  SELECT SINGLE meins INTO @DATA(lv_meins) FROM mara WHERE matnr = @item-matnr.
  it_items_in-target_qu = lv_meins.
  APPEND it_items_in.

  "Line item enhanced fields
  CLEAR:ls_zbape_vbap,ls_zbape_vbapx.
  ls_zbape_vbap = VALUE #(
                          posnr = item-posnr
                          zprono = item-zprono
                          zsource2 = item-zsource2 ).
  ls_zbape_vbapx = VALUE #(
                          posnr = item-posnr
                          zprono = 'X'
                          zsource2 = 'X' ).
  CLEAR:lt_bapiparex.
  lt_bapiparex-structure = 'BAPE_VBAP'.
  lt_bapiparex + 30(960) = ls_zbape_vbap.
  APPEND lt_bapiparex.

  CLEAR:lt_bapiparex.
  lt_bapiparex-structure = 'BAPE_VBAPX'.
  lt_bapiparex + 30(960) = ls_zbape_vbap.
  APPEND lt_bapiparex.

  "price
  CLEAR:order_conditions_in.
  order_conditions_in-itm_number = item-posnr.
  CASE lv_kalks.
    WHEN '01'.
      order_conditions_in-cond_type = 'PR01'.
    WHEN '02'.
      order_conditions_in-cond_type = 'PR00'.
  ENDCASE.
  order_conditions_in-cond_value = item-netpr.
  IF item-kpein = ''.
    item-kpein = 1.
  ENDIF.
  order_conditions_in-cond_p_unt = item-kpein.
  order_conditions_in-currency = waerk.
  order_conditions_in-cond_st_no = '010'.
  order_conditions_in-cond_count = '001'.
  order_conditions_in-cond_count_long = '001'.
  APPEND order_conditions_in.

  order_conditions_inx-updateflag = 'U'.
  order_conditions_inx-itm_number = item-posnr.
  order_conditions_inx-cond_type = order_conditions_in-cond_type.
  order_conditions_inx-cond_value = 'X'.
  order_conditions_inx-cond_p_unt = 'X'.
  order_conditions_inx-currency = 'X'.
  order_conditions_inx-cond_st_no = 'X'.
  order_conditions_inx-cond_count = 'X'.
  order_conditions_inx-cond_count_long = 'X'.
  APPEND order_conditions_inx.

  "Plan line
  CLEAR it_schedules_in.
  it_schedules_in-itm_number = item-posnr.
  it_schedules_in-sched_line = 1.
  it_schedules_in-req_qty = item-menge. "Quantity
  it_schedules_in-req_date = sy-datum.
  APPEND it_schedules_in.

ENDLOOP.

is_logic_switch-pricing = 'G'.
CALL FUNCTION 'SD_SALESDOCUMENT_CREATE'
  EXPORTING
    sales_header_in = it_header_in
  •  sales_header_inx = it_header_inx
      logic_switch = is_logic_switch
    IMPORTING
      salesdocument_ex = salesdocument
    TABLES
      return = it_return
      sales_items_in = it_items_in
    
  •  sales_items_inx = it_items_inx
      sales_partners = it_partners
      sales_schedules_in = it_schedules_in
    
  •  sales_schedules_inx = it_schedules_inx
      sales_conditions_in = order_conditions_in
      sales_conditions_inx = order_conditions_inx
    
  •  sales_text = order_text
      extensionin = lt_bapiparex.
    

    IF salesdocument IS INITIAL.
    CALL FUNCTION BAPI_TRANSACTION_ROLLBACK’.

    lv_error = 'X'.
    lv_mess = 'Sales order creation failed:'.
    LOOP AT it_return WHERE type CA 'AE'.
      lv_mess = lv_mess & amp; & amp; '/' & amp; & amp; it_return-message.
    ENDLOOP.
    

    ELSE.
    CALL FUNCTION BAPI_TRANSACTION_COMMIT’
    EXPORTING
    wait = X’.

    lv_mess = 'Sales order created successfully'.
    LOOP AT item.
      item-vbeln = salesdocument.
      MODIFY item TRANSPORTING vbeln.
    ENDLOOP.
    

    ENDIF.
    ENDIF.

    IF lv_error = ’.
    ztype = S’.
    mess = lv_mess.
    e_vbeln = salesdocument.
    ELSE.
    ztype = E’.
    mess = lv_mess.
    ENDIF.

    “Record log
    CLEAR:lv_xh,lv_xhitem,it_ztsd008.
    SELECT MAX( xh ) INTO lv_xh FROM ztsd008.
    ADD 1 TO lv_xh.

    IF item IS NOT INITIAL.

    LOOP AT item.
    ADD 1 TO lv_xhitem.
    CLEAR is_ztsd008.
    is_ztsd008-xh = lv_xh.
    is_ztsd008-xhitem = lv_xhitem.
    is_ztsd008-zoaid = zoaid.
    is_ztsd008-zname = zname.
    is_ztsd008-auart = auart.
    is_ztsd008-vkorg = vkorg.
    is_ztsd008-bstnk = bstnk.
    is_ztsd008-bstdk = bstdk.
    is_ztsd008-telf1 = telf1.
    is_ztsd008-kunnr = kunnr.
    is_ztsd008-kunrg = kunrg.
    is_ztsd008-waerk = waerk.
    is_ztsd008-zoano = zoano.
    is_ztsd008-ztype = ztype.
    is_ztsd008-mess = mess.
    is_ztsd008-zdate = sy-datum.
    is_ztsd008-ztime = sy-uzeit.
    is_ztsd008-zuser = sy-uname.
    is_ztsd008-vbeln = item-vbeln.
    is_ztsd008-posnr = item-posnr.
    is_ztsd008-matnr = item-matnr.
    is_ztsd008-menge = item-menge.
    is_ztsd008-netpr = item-netpr.
    is_ztsd008-kpein = item-kpein.
    is_ztsd008-zprono = item-zprono.
    is_ztsd008-zsource2 = item-zsource2.
    APPEND is_ztsd008 TO it_ztsd008.
    ENDLOOP.
    MODIFY ztsd008 FROM TABLE it_ztsd008.

    ELSE.
    is_ztsd008-xh = lv_xh.
    is_ztsd008-xhitem = 0.
    is_ztsd008-zoaid = zoaid.
    is_ztsd008-zname = zname.
    is_ztsd008-auart = auart.
    is_ztsd008-vkorg = vkorg.
    is_ztsd008-bstnk = bstnk.
    is_ztsd008-bstdk = bstdk.
    is_ztsd008-telf1 = telf1.
    is_ztsd008-kunnr = kunnr.
    is_ztsd008-kunrg = kunrg.
    is_ztsd008-waerk = waerk.
    is_ztsd008-zoano = zoano.
    is_ztsd008-ztype = ztype.
    is_ztsd008-mess = mess.
    is_ztsd008-zdate = sy-datum.
    is_ztsd008-ztime = sy-uzeit.
    is_ztsd008-zuser = sy-uname.
    MODIFY ztsd008 FROM is_ztsd008.

    ENDIF.

ENDFUNCTION.