Skip to Content
avatar image
Former Member

Create Sales Order / Delivery with BAPI

Hi,

I want to create a sales order and the its delivery using BAPI. Is there such BAPI or should i use two different BAPI functions.

I also need to post goods issue after the completition of the delivery. Which BAPI is the most appropriate for my pupose?

thanks for your help,

- ferudun

Add comment
10|10000 characters needed characters exceeded

  • Follow
  • Get RSS Feed

4 Answers

  • Best Answer
    avatar image
    Former Member
    Jan 19, 2007 at 04:18 PM

    Hi,

    Check this example of creating a sales order and for creating delivery...and PGI

    ************SALES ORDER INPUT CREATION.

    PARAMETERS: p_auart TYPE auart OBLIGATORY.

    PARAMETERS: p_vkorg TYPE vkorg OBLIGATORY.

    PARAMETERS: p_vtweg TYPE vtweg OBLIGATORY.

    PARAMETERS: p_spart TYPE vtweg OBLIGATORY.

    PARAMETERS: p_sold TYPE kunnr OBLIGATORY.

    PARAMETERS: p_ship TYPE kunnr OBLIGATORY.

    *ITEM

    PARAMETERS: p_matnr TYPE matnr OBLIGATORY.

    PARAMETERS: p_menge TYPE kwmeng OBLIGATORY.

    PARAMETERS: p_plant TYPE werks_d OBLIGATORY.

    PARAMETERS: p_itcat TYPE pstyv OBLIGATORY.

    • DATA DECLARATIONS.

    DATA: v_vbeln LIKE vbak-vbeln.

    DATA: header LIKE bapisdhead1.

    DATA: headerx LIKE bapisdhead1x.

    DATA: item LIKE bapisditem OCCURS 0 WITH HEADER LINE.

    DATA: itemx LIKE bapisditemx OCCURS 0 WITH HEADER LINE.

    DATA: partner LIKE bapipartnr OCCURS 0 WITH HEADER LINE.

    DATA: return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.

    DATA: lt_schedules_inx TYPE STANDARD TABLE OF bapischdlx

    WITH HEADER LINE.

    DATA: lt_schedules_in TYPE STANDARD TABLE OF bapischdl

    WITH HEADER LINE.

    • HEADER DATA

    header-doc_type = p_auart.

    headerx-doc_type = 'X'.

    header-sales_org = p_vkorg.

    headerx-sales_org = 'X'.

    header-distr_chan = p_vtweg.

    headerx-distr_chan = 'X'.

    header-division = p_spart.

    headerx-division = 'X'.

    headerx-updateflag = 'I'.

    • PARTNER DATA

    partner-partn_role = 'AG'.

    partner-partn_numb = p_sold.

    APPEND partner.

    partner-partn_role = 'WE'.

    partner-partn_numb = p_ship.

    APPEND partner.

    • ITEM DATA

    itemx-updateflag = 'I'.

    item-itm_number = '000010'.

    itemx-itm_number = 'X'.

    item-material = p_matnr.

    itemx-material = 'X'.

    item-plant = p_plant.

    itemx-plant = 'X'.

    item-target_qty = p_menge.

    itemx-target_qty = 'X'.

    item-target_qu = 'EA'.

    itemx-target_qu = 'X'.

    item-item_categ = p_itcat.

    itemx-item_categ = 'X'.

    APPEND item.

    APPEND itemx.

    • Fill schedule lines

    lt_schedules_in-itm_number = '000010'.

    lt_schedules_in-sched_line = '0001'.

    lt_schedules_in-req_qty = p_menge.

    APPEND lt_schedules_in.

    • Fill schedule line flags

    lt_schedules_inx-itm_number = '000010'.

    lt_schedules_inx-sched_line = '0001'.

    lt_schedules_inx-updateflag = 'X'.

    lt_schedules_inx-req_qty = 'X'.

    APPEND lt_schedules_inx.

    • Call the BAPI

    CALL FUNCTION 'BAPI_SALESDOCU_CREATEFROMDATA1'

    EXPORTING

    sales_header_in = header

    sales_header_inx = headerx

    IMPORTING

    salesdocument_ex = v_vbeln

    TABLES

    return = return

    sales_items_in = item

    sales_items_inx = itemx

    sales_schedules_in = lt_schedules_in

    sales_schedules_inx = lt_schedules_inx

    sales_partners = partner.

    • Check the return table.

    LOOP AT return WHERE type = 'E' OR type = 'A'.

    EXIT.

    ENDLOOP.

    IF sy-subrc = 0.

    WRITE: / 'Error in creating document'.

    ELSE.

    COMMIT WORK AND WAIT.

    WRITE: / 'Document ', v_vbeln, ' created'.

    ENDIF.

    ************DELIVERY CREATION.

    DATA: BEGIN OF t_vbap OCCURS 0,

    vbeln LIKE vbap-vbeln,

    posnr LIKE vbap-posnr,

    zmeng LIKE vbap-kwmeng,

    matnr LIKE vbap-matnr,

    werks LIKE vbap-werks,

    END OF t_vbap.

    DATA: t_request TYPE STANDARD TABLE OF bapideliciousrequest

    WITH HEADER LINE.

    DATA: t_created TYPE STANDARD TABLE OF bapideliciouscreateditems

    WITH HEADER LINE.

    DATA: t_return TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE.

    SELECT vbeln posnr zmeng matnr werks

    INTO TABLE t_vbap

    FROM vbap

    WHERE vbeln = v_vbeln.

    LOOP AT t_vbap.

    t_request-document_numb = t_vbap-vbeln.

    t_request-document_item = t_vbap-posnr.

    t_request-quantity_sales_uom = t_vbap-zmeng.

    t_request-quantity_base__uom = t_vbap-zmeng.

    t_request-id = 1.

    t_request-document_type = 'A'.

    t_request-delivery_date = sy-datum.

    t_request-material = t_vbap-matnr.

    t_request-plant = t_vbap-werks.

    t_request-date = sy-datum.

    t_request-goods_issue_date = sy-datum.

    t_request-goods_issue_time = sy-uzeit.

    APPEND t_request.

    ENDLOOP.

    CALL FUNCTION 'BAPI_DELIVERYPROCESSING_EXEC'

    TABLES

    request = t_request

    createditems = t_created

    return = t_return.

    READ TABLE t_return WITH KEY type = 'E'.

    IF sy-subrc = 0.

    MESSAGE e208(00) WITH 'Delivery creation error'.

    ENDIF.

    COMMIT WORK.

    *

    ************Post goods issue.

    READ TABLE t_created INDEX 1.

    DATA: vbkok_wa TYPE vbkok.

    vbkok_wa-vbeln_vl = t_created-document_numb.

    vbkok_wa-wabuc = 'X'.

    DATA: v_error.

    CALL FUNCTION 'WS_DELIVERY_UPDATE'

    EXPORTING

    vbkok_wa = vbkok_wa

    delivery = t_created-document_numb

    IMPORTING

    ef_error_in_goods_issue_0 = v_error.

    COMMIT WORK.

    Thanks,

    Naren

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Jan 19, 2007 at 04:16 PM

    we were facing same problem and there are no BAPI's as such for this.

    U can use SD BAPI...check in SE37 for posting of sales order.

    but for creation of delivery u need to use VL04N...may be write a program and use SUBMIT command by passing the Sales Order.

    Add comment
    10|10000 characters needed characters exceeded

  • Jan 19, 2007 at 04:09 PM

    Hi Ferudun!

    One BAPI will always only do as much as one transaction. If in customizing some automatic follow-on functions are defined (maybe by workflow), then this should work online or with BAPI the same way (unless requirements are used).

    For sales order:

    BAPI_SALESORDER_CREATEFROMDAT2

    For delivery:

    BAPI_OUTB_DELIVERY_CREATE_SLS

    Goods issue can be automatic with confirmation of the delivery, so maybe you should look for a FM, but maybe a small batch input will be easier (just enter the delivery in VL02N and press the goods issue on the entry screen - here even the enjoy version is no harm, because entry screen is still standard transaction).

    Regards,

    Christian

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Feb 19, 2007 at 09:33 PM

    That was excellent program Naren. Thank you.

    Add comment
    10|10000 characters needed characters exceeded