Skip to content
Skip to content
Menu
SAP ABAP DWIMAN
  • About
SAP ABAP DWIMAN

SAP ABAP – BS01_SALESDOCUMENT_CREATE

By juananda.satria on January 30, 2024

I get this code from someone in the SAP answer forum. Maybe this code will be useful for someone else.

reference: https://community.sap.com/t5/application-development-discussions/trying-to-use-bapi-salesorder-createfromdat2-to-create-sales-order-with/m-p/10040808

PROGRAM zsdi_salesdoc_upload.
*&---------------------------------------------------------------------*
*&  TABLES DECLARATIONS
*&---------------------------------------------------------------------*

TABLES : vbak,vbap.

*&---------------------------------------------------------------------*
*&  TYPES POOLS DECLARATIONS
*&---------------------------------------------------------------------*

TYPE-POOLS: slis.

*&---------------------------------------------------------------------*
*&  TYPES DECLARATIONS
*&---------------------------------------------------------------------*
TYPES : BEGIN OF ty_salesdoc,

**********Header
          ref_no                           TYPE txz01_dcm,                    "Reference Doc No
          doc_type                         TYPE auart,                        "Document Type
          sales_org                        TYPE vkorg,                        "Sales Organization
          distr_chan                       TYPE vtweg,                        "Distribution Channel
          division                         TYPE spart,                        "Division
          sales_off                        TYPE vkbur,                        "Sales Office
          ref_doc                          TYPE vgbel,                        "Reference Document  Number
          sold                             TYPE kunnr,                        "Sold to Party
          ship                             TYPE kunnr,                        "Ship to Party
          purch_no_c                       TYPE bstkd,                        "PO Number
          purch_date                       TYPE bstdk,                        "PO Date
          qt_valid_f                       TYPE angdt_v,                      "Valid From
          qt_valid_t                       TYPE bnddt,                        "Valid To
          pmnttrms                         TYPE dzterm,                       "Terms Of Payment
          dlvschduse                       TYPE abrvw,                        "Usage
          version                          TYPE vsnmr_v,                      "Version
          cust_group                       TYPE kdgrp,                        "Customer Group
          ord_reason                       TYPE augru,                        "Order Reason
**********Long Texts
          terms_cond                       TYPE string,                       "Terms & Conditions
          addn_text                        TYPE string,                       "Additional Text
          head_text                        TYPE string,                       "Header Text
          footer                           TYPE string,                       "Footer details
          mix_design                       TYPE string,                       "Mix Design Created
          quote_progress                   TYPE string,                       "Quote In Progress
          sent_cust                        TYPE string,                       "Sent To Customer
          create_mix                       TYPE string,                       "Create Mix Design
          technical_change                 TYPE string,                       "Technical Changes
          commercial_change                TYPE string,                       "Commercial Changes
          mix_approve                      TYPE string,                       "Mix Design Approve
          quote_rejected                   TYPE string,                       "Quote Rejected
          quote_accepted                   TYPE string,                       "Quote Accepted
**********Partner Function
          partn_numb                       TYPE kunnr,                        "Partner Function Employee Responsible
**********Line Item
          itm_number                       TYPE posnr_va,                     "Item Number
          material                         TYPE matnr,                        "Material
          req_qty                          TYPE wmeng,                        "Order Quantity
          plant                            TYPE werks_d,                      "Plant
          ship_point                       TYPE vstel,                        "Shipping Point
**********Customer Data
          zsdclient                        TYPE zsd_del_cleint,               "Client
          zsdconsultant                    TYPE zsd_del_consultant,           "Consultant
          projspec                         TYPE zsd_del_projspec,             "Project Specification
          contractor                       TYPE zsd_del_addtab_contrct,       "Contractor
          subcontractor                    TYPE zsd_del_addtab_subcnt,        "Sub Contractor
          plant_addtab                     TYPE name1,                        "Plant
          date_addtab                      TYPE ersda,                        "Date
          aircontent                       TYPE zsd_del_aircontent,           "Air Content (assumed) %
          placeslump                       TYPE zsd_del_placeslump,           "Target Slump at Site(+/- mm)
          targetcontemp                    TYPE zsd_del_targetcontemp,        "Target Concrete Temperature (0 C)
          minwetmix                        TYPE zsd_del_minwetmix,            "Minimum wet mixing time (sec.)
          chemdosage                       TYPE zsd_del_chemdosage,           "Chemical admixture dosage
          agg_cement_ratio                 TYPE zsd_del_addtab_chbox,         "Aggregate-Cementitious Ratio(volume)
          hydrated_paste                   TYPE zsd_del_addtab_chbox,         "Hydrated paste (% by volume)
          agg_cement_ratio_mass            TYPE zsd_del_addtab_chbox,         "Aggregate-Cementitious Ratio(mass)
          fineness_modulus_sand            TYPE zsd_del_addtab_chbox,         "Fineness Modulus of combined sand
          fineness_modulus_agg             TYPE zsd_del_addtab_chbox,         "Fineness Modulus of combined agg.
          total_sand                       TYPE zsd_del_addtab_chbox,         "Total Sand(by mass of total agg.)
**********Customer Data Table
          code                             TYPE zsd_del_code,                 "Code
          spec                             TYPE zsd_del_spec,                 "Specification
          tar_design                       TYPE zsd_del_targdesign,           "Target Design
**********Characteristics
          charc                            TYPE cu_charc,                     "Characteristics Name
          value                            TYPE cux_value,                    "Value From
**********Condition Types
          cond_type                        TYPE kscha,                        "Condition Type
          cond_value                       TYPE bapikbetr1,                   "Condition Value
        END OF ty_salesdoc.


TYPES : BEGIN OF ty_add_data,
          itm_number                       TYPE posnr_va,                     "Item Number
          zsdclient                        TYPE zsd_del_cleint,               "Client
          zsdconsultant                    TYPE zsd_del_consultant,           "Consultant
          projspec                         TYPE zsd_del_projspec,             "Project Specification
          contractor                       TYPE zsd_del_addtab_contrct,       "Contractor
          subcontractor                    TYPE zsd_del_addtab_subcnt,        "Sub Contractor
          plant_addtab                     TYPE name1,                        "Plant
          date_addtab                      TYPE ersda,                        "Date
          aircontent                       TYPE zsd_del_aircontent,           "Air Content (assumed) %
          placeslump                       TYPE zsd_del_placeslump,           "Target Slump at Site(+/- mm)
          targetcontemp                    TYPE zsd_del_targetcontemp,        "Target Concrete Temperature (0 C)
          minwetmix                        TYPE zsd_del_minwetmix,            "Minimum wet mixing time (sec.)
          chemdosage                       TYPE zsd_del_chemdosage,           "Chemical admixture dosage
          agg_cement_ratio                 TYPE zsd_del_addtab_chbox,         "Aggregate-Cementitious Ratio(volume)
          hydrated_paste                   TYPE zsd_del_addtab_chbox,         "Hydrated paste (% by volume)
          agg_cement_ratio_mass            TYPE zsd_del_addtab_chbox,         "Aggregate-Cementitious Ratio(mass)
          fineness_modulus_sand            TYPE zsd_del_addtab_chbox,         "Fineness Modulus of combined sand
          fineness_modulus_agg             TYPE zsd_del_addtab_chbox,         "Fineness Modulus of combined agg.
          total_sand                       TYPE zsd_del_addtab_chbox,         "Total Sand(by mass of total agg.)
        END OF ty_add_data.

TYPES : BEGIN OF ty_final,
          ref_no    TYPE string,
          vbeln     TYPE vbak-vbeln,
          type      TYPE string,
          error     TYPE string,
        END OF ty_final.
*&---------------------------------------------------------------------*
*&  INTERNAL TABLE DECLARATIONS
*&---------------------------------------------------------------------*
DATA : it_salesdoc        TYPE TABLE OF ty_salesdoc,         "Sales Document Data from Excel
       it_salesdoc_h      TYPE TABLE OF ty_salesdoc,         "Sales Document Data from Excel
       it_salesdoc_l      TYPE TABLE OF ty_salesdoc,         "Sales Document Data from Excel
       it_zsdt_add_tab    TYPE TABLE OF zsdt_add_tab,
       it_add             TYPE TABLE OF ty_add_data.

DATA : it_final TYPE TABLE OF ty_final.                      "Sales Document Uploaded in system

*****************************BAPI Parameters**************************

DATA : sales_header_in                TYPE bapisdhd1,
       sales_header_inx               TYPE bapisdhd1x,
       salesdocument_ex               TYPE bapivbeln-vbeln,
       it_sales_items_in              TYPE TABLE OF bapisditmbos,
       it_sales_items_inx             TYPE TABLE OF bapisditmxbos,
       it_sales_partners              TYPE TABLE OF bapiparnr,
       it_sales_schedules_in          TYPE TABLE OF bapischdl,
       it_sales_schedules_inx         TYPE TABLE OF bapischdlx,
       it_sales_conditions_in         TYPE TABLE OF bapicond,
       it_sales_cfgs_ref              TYPE TABLE OF bapicucfg,
       it_sales_cfgs_inst             TYPE TABLE OF bapicuins,
       it_sales_cfgs_value            TYPE TABLE OF bapicuval,
       it_sales_cfgs_refinst          TYPE TABLE OF bapicuref,
       it_sales_text                  TYPE TABLE OF bapisdtext.

DATA : it_return              TYPE TABLE OF bapiret2,                         "Return Parameter
       it_return_commit       TYPE bapiret2.
*********************************************************************
*&---------------------------------------------------------------------*
*&  WORK AREA DECLARATIONS
*&---------------------------------------------------------------------*

DATA : wa_salesdoc          TYPE ty_salesdoc,          "Sales Document Data from Excel
       wa_salesdoc_h        TYPE ty_salesdoc,          "Sales Document Data from Excel
       wa_salesdoc_l        TYPE ty_salesdoc,          "Sales Document Data from Excel
       wa_zsdt_add_tab      TYPE zsdt_add_tab,
       wa_add               TYPE ty_add_data.

DATA : wa_final TYPE ty_final.                         "Sales Document Uploaded in system

*****************************BAPI Parameters**************************
DATA : wa_sales_items_in              TYPE bapisditmbos,
       wa_sales_items_inx             TYPE bapisditmxbos,
       wa_sales_partners              TYPE bapiparnr,
       wa_sales_schedules_in          TYPE bapischdl,
       wa_sales_schedules_inx         TYPE bapischdlx,
       wa_sales_conditions_in         TYPE bapicond,
       wa_sales_cfgs_ref              TYPE bapicucfg,
       wa_sales_cfgs_inst             TYPE bapicuins,
       wa_sales_cfgs_value            TYPE bapicuval,
       wa_sales_cfgs_refinst          TYPE bapicuref,
       wa_sales_text                  TYPE bapisdtext.


DATA : wa_return              TYPE bapiret2.                                    "Return Parameter

**********************************************************************

*&---------------------------------------------------------------------*
*&  VARIABLE DECLARATIONS
*&---------------------------------------------------------------------*

DATA : lv_subrc         TYPE sy-subrc,
       business_object  TYPE bapiusw01-objtype,
       lv_posnr         TYPE posnr,
       lv_line          TYPE etenr,
       lv_config        TYPE posnr,
       lv_instance      TYPE co_rmzhl,
       lv_waerk         TYPE waerk,
       lv_srno          TYPE i.



DATA : it_line TYPE TABLE OF tline,
       wa_line TYPE tline,
       lv_text(1024) TYPE c,
       lv_land1      TYPE land1_gp,
       lv_waers      TYPE waers_005.

*&---------------------------------------------------------------------*
*& ALV DECLRATIONS                                                     *
*&---------------------------------------------------------------------*
* FIELDCATALOG DECLARATION
DATA:  wa_fieldcat  TYPE slis_fieldcat_alv,
       it_fieldcat  TYPE slis_t_fieldcat_alv,
       layout       TYPE TABLE OF slis_layout_alv WITH HEADER LINE ,
       wa_sort      TYPE slis_sortinfo_alv,
       it_sort      TYPE slis_t_sortinfo_alv,
       wa_header    TYPE slis_listheader,
       it_header    TYPE slis_t_listheader.

*&---------------------------------------------------------------------*
*&  SELECTION SCREEN
*&---------------------------------------------------------------------*

SELECTION-SCREEN : BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERS : p_file TYPE rlgrap-filename.

SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN COMMENT /1(79) tscomm.
SELECTION-SCREEN COMMENT /1(79) tnote.
SELECTION-SCREEN COMMENT /1(79) tecomm.
PARAMETERS : r1 TYPE c RADIOBUTTON GROUP rg1 DEFAULT 'X' USER-COMMAND app,
             r2 TYPE c RADIOBUTTON GROUP rg1.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN COMMENT /1(79) t1.
SELECTION-SCREEN COMMENT /1(79) t2.
SELECTION-SCREEN COMMENT /1(79) t3.
SELECTION-SCREEN COMMENT /1(79) t4.
SELECTION-SCREEN COMMENT /1(79) t5.
SELECTION-SCREEN COMMENT /1(79) t6.
SELECTION-SCREEN COMMENT /1(79) t7.
SELECTION-SCREEN COMMENT /1(79) t8.
SELECTION-SCREEN COMMENT /1(79) t9.
SELECTION-SCREEN COMMENT /1(79) t10.
SELECTION-SCREEN COMMENT /1(79) t11.
SELECTION-SCREEN COMMENT /1(79) t12.
SELECTION-SCREEN COMMENT /1(79) t13.
SELECTION-SCREEN COMMENT /1(79) t14.

SELECTION-SCREEN : END OF BLOCK b1.

*&---------------------------------------------------------------------*
*&  INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.

  tscomm = '************************************************************************'.
  tecomm = '************************************************************************'.
  tnote = 'Note :- Program is used to Upload Sales Document with Variant Configuration'.
  t1 = 'Open Doc No|Doc Type|Sales Org|Dist Channel|Division|Sales Office|Ref Doc No.|'.
  t2 = 'Sold To Party|Ship To Party|PO No.|PO Date|Valid From|Valid To|Terms Of Payment|'.
  t3 = 'Usage|Version|Customer Group|Order Reason|Terms & Cond|Add Text|Header Text|'.
  t4 = 'Footer Details|Mix Details Created|Quote in progress|Sent To customer|'.
  t5 = 'Create Mix Details|Technical Changes|Commercial Changes|Mix Design Approved|'.
  t6 = 'Quote Rejected|Quote accepted|Partner function ZM|Item No.|Material|'.
  t7 = 'Order Qty|Plant|Shipping Point|Client|Consultant|Project Specification|'.
  t8 = 'Contractor|Sub-Contractor|Plant|Date|Air Content (assumed) %|'.
  t9 = 'Target Slump at Site(+/- mm)|Target Concrete Temperature (0 C)|'.
  t10 = 'Minimum wet mixing time (sec.)|Chemical admixture dosage|'.
  t11 = 'Aggregate-Cementitious Ratio(volume)|Hydrated paste (% by volume)|'.
  t12 = 'Aggregate-Cementitious Ratio(mass)|Fineness Modulus of combined sand|'.
  t13 = 'Fineness Modulus of combined agg|Total Sand(by mass of total agg.)|'.
  t14 = 'Code|Specification|Target Design|Characteristics|Value|Cond Type|Value|'.

*&---------------------------------------------------------------------*
*&  AT SELECTION_SCREEN ON VALUE REQUEST
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM f4_file.

*&---------------------------------------------------------------------*
*&  AT SELECTION SCREEN
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN  .

  IF sy-ucomm EQ 'ONLI'.
    PERFORM get_data.
  ENDIF.

*&---------------------------------------------------------------------*
*&  START OF SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.

*&---------------------------------------------------------------------*
*&  END OF SELECTION
*&---------------------------------------------------------------------*

END-OF-SELECTION.
  PERFORM final_data.
  PERFORM disp_output.


*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data .

  FIELD-SYMBOLS : <l_fs> TYPE any.
  DATA : p_filename   TYPE ibipparms-path,
         it_type      TYPE truxs_t_text_data.


  CLEAR : it_salesdoc[].

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     I_FIELD_SEPERATOR    =
      i_line_header        = 'X'
      i_tab_raw_data       = it_type
      i_filename           = p_file
    TABLES
      i_tab_converted_data = it_salesdoc
    EXCEPTIONS
      conversion_failed    = 1
      OTHERS               = 2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

  IF it_salesdoc[] IS INITIAL.
    MESSAGE 'File Conversion Error' TYPE 'E'.
  ENDIF.




ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  FINAL_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM final_data .

  break abap1.

  it_salesdoc_h[] = it_salesdoc[].
  it_salesdoc_l[] = it_salesdoc[].

  DELETE ADJACENT DUPLICATES FROM it_salesdoc_h COMPARING ref_no.
  DELETE ADJACENT DUPLICATES FROM it_salesdoc_l COMPARING ref_no itm_number.

  PERFORM create_salesdocument.

ENDFORM.                    " FINAL_DATA
*&---------------------------------------------------------------------*
*&      Form  DISP_OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM disp_output .

******* Important :  Only 9 values can Pass to macro *******
  PERFORM sub_create_fcat USING :  '1'  'Reference Document'                         'REF_NO'        '' '' .
  PERFORM sub_create_fcat USING :  '2'  'Sales Document No Generated'                'VBELN'         '' '' .
  PERFORM sub_create_fcat USING :  '3'  'Type'                                       'TYPE'         '' '' .
  PERFORM sub_create_fcat USING :  '4'  'Error'                                      'ERROR'         '' '' .



**  **FOR LAYOUT
  layout-zebra = 'X'.
  layout-info_fieldname = 'COLOR'.
  layout-colwidth_optimize = 'X'.
  APPEND layout .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = sy-repid
*     I_CALLBACK_USER_COMMAND = ' '
      i_callback_top_of_page  = 'SUB_TOP_OF_PAGE'
*     I_GRID_TITLE            =
      is_layout               = layout
      it_fieldcat             = it_fieldcat
      i_default               = 'X'
      i_save                  = 'A'
      it_sort	                = it_sort
    TABLES
      t_outtab                = it_final
    EXCEPTIONS
      program_error           = 1
      OTHERS                  = 2.
  IF sy-subrc <> 0.
* IMPLEMENT SUITABLE ERROR HANDLING HERE
  ENDIF.

ENDFORM.                    " DISP_OUTPUT
*&---------------------------------------------------------------------*
*&      FORM  SUB_CREATE_FCAT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->P_0126   TEXT
*      -->P_0127   TEXT
*      -->P_0128   TEXT
*      -->P_0129   TEXT
*      -->P_0130   TEXT
*----------------------------------------------------------------------*
FORM sub_create_fcat  USING  p_col TYPE char2
                             p_text TYPE char40
                             p_fnam TYPE slis_fieldcat_alv-fieldname "char10
                             p_sum TYPE char1
                             p_out TYPE char1.

  wa_fieldcat-col_pos = p_col.
  wa_fieldcat-seltext_l = p_text.
  wa_fieldcat-fieldname = p_fnam.
  wa_fieldcat-do_sum    = p_sum.
  wa_fieldcat-no_out    = p_out.
  wa_fieldcat-no_zero   = 'X'.
*  wa_fieldcat-outputlen = 10.

  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


ENDFORM.                    " SUB_CREATE_FCAT

*&---------------------------------------------------------------------*
*&      Form  SUB_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM sub_top_of_page .
  DATA : lv_char(60) TYPE c   .
  REFRESH it_header.
  CLEAR wa_header.

  wa_header-typ = 'H'.
  wa_header-info = 'Uploading of Open Quotation Result'.
  APPEND wa_header TO it_header.
  CLEAR wa_header.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = it_header
*     I_LOGO             =
*     I_END_OF_LIST_GRID =
*     I_ALV_FORM         =
    .


ENDFORM.                    " SUB_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*&      Form  F4_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM f4_file .

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  = sy-repid
      dynpro_number = sy-dynnr
      field_name    = 'FILENAME'
    IMPORTING
      file_name     = p_file.

ENDFORM.                    " F4_FILE
*&---------------------------------------------------------------------*
*&      Form  CALL_CREATE_BAPI
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_LV_SUBRC  text
*----------------------------------------------------------------------*
FORM call_create_bapi  CHANGING p_lv_subrc.

*****For Quotation
  business_object = 'BUS2031'.
*****Sales Order
*  business_object = 'BUS2032'.

  CALL FUNCTION 'BS01_SALESDOCUMENT_CREATE'
    EXPORTING
*     SALESDOCUMENT             =
      sales_header_in           = sales_header_in
      sales_header_inx          = sales_header_inx
*     SENDER                    =
*     BINARY_RELATIONSHIPTYPE   = ' '
*     INT_NUMBER_ASSIGNMENT     = ' '
*     BEHAVE_WHEN_ERROR         = ' '
*     LOGIC_SWITCH              = ' '
*     business_object           = business_object
*     TESTRUN                   =
*     COSTINGVARIANT            =
    IMPORTING
      salesdocument_ex          = salesdocument_ex
    TABLES
      return                    = it_return
      sales_items_in            = it_sales_items_in
      sales_items_inx           = it_sales_items_inx
      sales_partners            = it_sales_partners
      sales_schedules_in        = it_sales_schedules_in
      sales_schedules_inx       = it_sales_schedules_inx
      sales_conditions_in       = it_sales_conditions_in
      sales_cfgs_ref            = it_sales_cfgs_ref
      sales_cfgs_inst           = it_sales_cfgs_inst
*     SALES_CFGS_PART_OF        =
      sales_cfgs_value          = it_sales_cfgs_value
*     SALES_CFGS_BLOB           =
*     SALES_CFGS_VK             =
      sales_cfgs_refinst        = it_sales_cfgs_refinst
*     SALES_CCARD               =
      sales_text                = it_sales_text
*     SALES_KEYS                =
*     SALES_CONTRACT_IN         =
*     SALES_CONTRACT_INX        =
*     EXTENSIONIN               =
*     SALES_SERVICES            =
*     SALES_SERVICES_TEXT       =
*     SALES_SERVICES_COND       =
*     SALES_SERVICES_COST_ITEMS =
*     SALES_SERVICES_COST_MODEL =
*     SALES_SERVICES_MODEL_VAL  =
*     PARTNERADDRESSES          =
    .

  SORT it_return BY type.

  READ TABLE it_return INTO wa_return WITH KEY type = 'A'.
  IF sy-subrc NE 0.
    READ TABLE it_return INTO wa_return WITH KEY type = 'E'.
    IF sy-subrc NE 0.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait   = 'X'
        IMPORTING
          return = it_return_commit.

      p_lv_subrc = 0.

    ELSE.
      p_lv_subrc = 4.
      wa_final-ref_no              = wa_salesdoc_h-ref_no.
      LOOP AT it_return INTO wa_return WHERE type EQ 'E'
                                          OR type EQ 'A'.
        wa_final-error = wa_return-message.
        APPEND wa_final TO it_final.
        CLEAR wa_final.
      ENDLOOP.
    ENDIF.
  ELSE.
    p_lv_subrc = 4.
    wa_final-ref_no              = wa_salesdoc_h-ref_no.
    LOOP AT it_return INTO wa_return WHERE type EQ 'E'
                                        OR type EQ 'A'.
      wa_final-error = wa_return-message.
      APPEND wa_final TO it_final.
      CLEAR wa_final.
    ENDLOOP.
  ENDIF.



ENDFORM.                    " CALL_CREATE_BAPI
*&---------------------------------------------------------------------*
*&      Form  CREATE_SALESDOCUMENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM create_salesdocument .

  LOOP AT it_salesdoc_h INTO wa_salesdoc_h.

*--------------------------------------------------------------------*
*Header Data
*--------------------------------------------------------------------*
***************************
*Document Type
***************************
    IF wa_salesdoc_h-doc_type IS NOT INITIAL.
      sales_header_in-doc_type       = wa_salesdoc_h-doc_type.
      sales_header_inx-doc_type      = 'X'.
    ENDIF.

***************************
*Sales Organization
***************************
    IF wa_salesdoc_h-sales_org IS NOT INITIAL.
      sales_header_in-sales_org    = wa_salesdoc_h-sales_org.
      sales_header_inx-sales_org   = 'X'.
    ENDIF.

***************************
*Distribution Channel
***************************
    IF wa_salesdoc_h-distr_chan IS NOT INITIAL.
      sales_header_in-distr_chan  = wa_salesdoc_h-distr_chan.
      sales_header_inx-distr_chan = 'X'.
    ENDIF.

***************************
*Division
***************************
    IF wa_salesdoc_h-division IS NOT INITIAL.
      sales_header_in-division  = wa_salesdoc_h-division.
      sales_header_inx-division = 'X'.
    ENDIF.

***************************
*sales_off
***************************
    IF wa_salesdoc_h-sales_off IS NOT INITIAL.
      sales_header_in-sales_off   = wa_salesdoc_h-sales_off.
      sales_header_inx-sales_off  = 'X'.
    ENDIF.

    IF r2 = 'X'.
***************************
*Reference Document
***************************
      IF wa_salesdoc_h-ref_doc IS NOT INITIAL.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  = wa_salesdoc_h-ref_doc
          IMPORTING
            output = wa_salesdoc_h-ref_doc.

        sales_header_in-ref_doc   = wa_salesdoc_h-ref_doc.
        sales_header_inx-ref_doc  = 'X'.

        sales_header_in-refdoc_cat   = 'A'.
        sales_header_inx-refdoc_cat  = 'X'.
      ENDIF.
    ENDIF.


***************************
*Valid From
***************************
    IF wa_salesdoc_h-qt_valid_f IS NOT INITIAL.
      sales_header_in-qt_valid_f = wa_salesdoc_h-qt_valid_f.
      sales_header_inx-qt_valid_f = 'X'.
    ENDIF.

***************************
*Valid To
***************************
    IF wa_salesdoc_h-qt_valid_t IS NOT INITIAL.
      sales_header_in-qt_valid_t = wa_salesdoc_h-qt_valid_t.
      sales_header_inx-qt_valid_t = 'X'.
    ENDIF.

***************************
*Terms Of Payment
***************************
    IF wa_salesdoc_h-pmnttrms IS NOT INITIAL.
      sales_header_in-pmnttrms = wa_salesdoc_h-pmnttrms.
      sales_header_inx-pmnttrms = 'X'.
    ENDIF.

***************************
*Usage
***************************
    IF wa_salesdoc_h-dlvschduse IS NOT INITIAL.
      sales_header_in-dlvschduse = wa_salesdoc_h-dlvschduse.
      sales_header_inx-dlvschduse = 'X'.
    ENDIF.

***************************
*Version
***************************
    IF wa_salesdoc_h-version IS NOT INITIAL.
      sales_header_in-version = wa_salesdoc_h-version.
      sales_header_inx-version = 'X'.
    ENDIF.

***************************
*Customer Group
***************************
    IF wa_salesdoc_h-cust_group IS NOT INITIAL.
      sales_header_in-cust_group = wa_salesdoc_h-cust_group.
      sales_header_inx-cust_group = 'X'.
    ENDIF.

***************************
*Order Reason
***************************
    IF wa_salesdoc_h-ord_reason IS NOT INITIAL.
      sales_header_in-ord_reason = wa_salesdoc_h-ord_reason.
      sales_header_inx-ord_reason = 'X'.
    ENDIF.

*--------------------------------------------------------------------*
*Partner Function
*--------------------------------------------------------------------*
    IF wa_salesdoc_h-partn_numb IS NOT INITIAL.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = wa_salesdoc_h-partn_numb
        IMPORTING
          output = wa_salesdoc_h-partn_numb.

      wa_sales_partners-partn_role = 'ER'.
      wa_sales_partners-partn_numb = wa_salesdoc_h-partn_numb.

      APPEND wa_sales_partners TO it_sales_partners.
      CLEAR wa_sales_partners.
    ENDIF.

    IF  r1 = 'X'.
      IF wa_salesdoc_h-ship IS NOT INITIAL.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  = wa_salesdoc_h-ship
          IMPORTING
            output = wa_salesdoc_h-ship.

        wa_sales_partners-partn_role = 'WE'.
        wa_sales_partners-partn_numb = wa_salesdoc_h-ship.
        APPEND wa_sales_partners TO it_sales_partners.
        CLEAR wa_sales_partners.
      ENDIF.

      IF wa_salesdoc_h-sold IS NOT INITIAL.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  = wa_salesdoc_h-sold
          IMPORTING
            output = wa_salesdoc_h-sold.

        wa_sales_partners-partn_role = 'AG'.
        wa_sales_partners-partn_numb = wa_salesdoc_h-sold.
        APPEND wa_sales_partners TO it_sales_partners.
        CLEAR wa_sales_partners.
      ENDIF.
    ENDIF.

    IF r2 = 'X'.
      wa_sales_partners-partn_role = 'WE'.
      SELECT SINGLE kunnr
                    FROM vbpa
                    INTO wa_sales_partners-partn_numb
                    WHERE vbeln EQ wa_salesdoc_h-ref_doc
                      AND parvw EQ 'WE'.
      APPEND wa_sales_partners TO it_sales_partners.
      CLEAR wa_sales_partners.

      wa_sales_partners-partn_role = 'AG'.
      SELECT SINGLE kunnr
                    FROM vbpa
                    INTO wa_sales_partners-partn_numb
                    WHERE vbeln EQ wa_salesdoc_h-ref_doc
                      AND parvw EQ 'AG'.
      APPEND wa_sales_partners TO it_sales_partners.
      CLEAR wa_sales_partners.
    ENDIF.

***************************
*Currency
***************************
    IF r2 = 'X'.
      SELECT SINGLE waerk
                    FROM vbak
                    INTO lv_waerk
                    WHERE vbeln EQ wa_salesdoc_h-ref_doc.
    ENDIF.

*--------------------------------------------------------------------*
*Long Texts
*--------------------------------------------------------------------*
***************************
*Terms & Conditions
***************************
    IF wa_salesdoc_h-terms_cond IS NOT INITIAL.
      CLEAR:  lv_text,it_line[].
      lv_text = wa_salesdoc_h-terms_cond.
      CALL FUNCTION 'C14W_STRING_TO_TLINE'
        EXPORTING
          i_string    = lv_text
        TABLES
          e_tline_tab = it_line.

      LOOP AT it_line INTO wa_line.
        wa_sales_text-text_id     = 'Z001'.
        wa_sales_text-text_line   = wa_line-tdline.
        APPEND wa_sales_text TO it_sales_text.
        CLEAR : wa_sales_text,wa_line.
      ENDLOOP.
    ENDIF.

***************************
*Additional Text
***************************
    IF wa_salesdoc_h-addn_text IS NOT INITIAL.
      CLEAR:  lv_text,it_line[].
      lv_text = wa_salesdoc_h-addn_text.
      CALL FUNCTION 'C14W_STRING_TO_TLINE'
        EXPORTING
          i_string    = lv_text
        TABLES
          e_tline_tab = it_line.

      LOOP AT it_line INTO wa_line.
        wa_sales_text-text_id     = 'Z046'.
        wa_sales_text-text_line   = wa_line-tdline.
        APPEND wa_sales_text TO it_sales_text.
        CLEAR : wa_sales_text,wa_line.
      ENDLOOP.
    ENDIF.

***************************
*Header Text
***************************
    IF wa_salesdoc_h-head_text IS NOT INITIAL.
      CLEAR:  lv_text,it_line[].
      lv_text = wa_salesdoc_h-head_text.
      CALL FUNCTION 'C14W_STRING_TO_TLINE'
        EXPORTING
          i_string    = lv_text
        TABLES
          e_tline_tab = it_line.

      LOOP AT it_line INTO wa_line.
        wa_sales_text-text_id     = 'Z048'.
        wa_sales_text-text_line   = wa_line-tdline.
        APPEND wa_sales_text TO it_sales_text.
        CLEAR : wa_sales_text,wa_line.
      ENDLOOP.
    ENDIF.

***************************
*Footer Details
***************************
    IF wa_salesdoc_h-footer IS NOT INITIAL.
      CLEAR:  lv_text,it_line[].
      lv_text = wa_salesdoc_h-footer.
      CALL FUNCTION 'C14W_STRING_TO_TLINE'
        EXPORTING
          i_string    = lv_text
        TABLES
          e_tline_tab = it_line.

      LOOP AT it_line INTO wa_line.
        wa_sales_text-text_id     = 'Z060'.
        wa_sales_text-text_line   = wa_line-tdline.
        APPEND wa_sales_text TO it_sales_text.
        CLEAR : wa_sales_text,wa_line.
      ENDLOOP.
    ENDIF.

***************************
*Mix Design Created
***************************
    IF wa_salesdoc_h-mix_design IS NOT INITIAL.
      CLEAR:  lv_text,it_line[].
      lv_text = wa_salesdoc_h-mix_design.
      CALL FUNCTION 'C14W_STRING_TO_TLINE'
        EXPORTING
          i_string    = lv_text
        TABLES
          e_tline_tab = it_line.

      LOOP AT it_line INTO wa_line.
        wa_sales_text-text_id     = 'Z006'.
        wa_sales_text-text_line   = wa_line-tdline.
        APPEND wa_sales_text TO it_sales_text.
        CLEAR : wa_sales_text,wa_line.
      ENDLOOP.
    ENDIF.

***************************
*Quote In Progress
***************************
    IF wa_salesdoc_h-quote_progress IS NOT INITIAL.
      CLEAR:  lv_text,it_line[].
      lv_text = wa_salesdoc_h-quote_progress.
      CALL FUNCTION 'C14W_STRING_TO_TLINE'
        EXPORTING
          i_string    = lv_text
        TABLES
          e_tline_tab = it_line.

      LOOP AT it_line INTO wa_line.
        wa_sales_text-text_id     = 'Z007'.
        wa_sales_text-text_line   = wa_line-tdline.
        APPEND wa_sales_text TO it_sales_text.
        CLEAR : wa_sales_text,wa_line.
      ENDLOOP.
    ENDIF.

***************************
*Sent To Customer
***************************
    IF wa_salesdoc_h-sent_cust IS NOT INITIAL.
      CLEAR:  lv_text,it_line[].
      lv_text = wa_salesdoc_h-sent_cust.
      CALL FUNCTION 'C14W_STRING_TO_TLINE'
        EXPORTING
          i_string    = lv_text
        TABLES
          e_tline_tab = it_line.

      LOOP AT it_line INTO wa_line.
        IF wa_salesdoc_h-doc_type = 'ZQ04'.
          wa_sales_text-text_id     = 'Z008'.
        ELSEIF wa_salesdoc_h-doc_type = 'ZQ05'.
          wa_sales_text-text_id     = 'Z011'.
        ENDIF.
        wa_sales_text-text_line   = wa_line-tdline.
        APPEND wa_sales_text TO it_sales_text.
        CLEAR : wa_sales_text,wa_line.
      ENDLOOP.
    ENDIF.

***************************
*Create Mix Design
***************************
    IF wa_salesdoc_h-create_mix IS NOT INITIAL.
      CLEAR:  lv_text,it_line[].
      lv_text = wa_salesdoc_h-create_mix.
      CALL FUNCTION 'C14W_STRING_TO_TLINE'
        EXPORTING
          i_string    = lv_text
        TABLES
          e_tline_tab = it_line.

      LOOP AT it_line INTO wa_line.
        wa_sales_text-text_id     = 'Z009'.
        wa_sales_text-text_line   = wa_line-tdline.
        APPEND wa_sales_text TO it_sales_text.
        CLEAR : wa_sales_text,wa_line.
      ENDLOOP.
    ENDIF.

***************************
*Technical Changes
***************************
    IF wa_salesdoc_h-technical_change IS NOT INITIAL.
      CLEAR:  lv_text,it_line[].
      lv_text = wa_salesdoc_h-technical_change.
      CALL FUNCTION 'C14W_STRING_TO_TLINE'
        EXPORTING
          i_string    = lv_text
        TABLES
          e_tline_tab = it_line.

      LOOP AT it_line INTO wa_line.
        wa_sales_text-text_id     = 'Z042'.
        wa_sales_text-text_line   = wa_line-tdline.
        APPEND wa_sales_text TO it_sales_text.
        CLEAR : wa_sales_text,wa_line.
      ENDLOOP.
    ENDIF.

***************************
*Commercial Changes
***************************
    IF wa_salesdoc_h-commercial_change IS NOT INITIAL.
      CLEAR:  lv_text,it_line[].
      lv_text = wa_salesdoc_h-commercial_change.
      CALL FUNCTION 'C14W_STRING_TO_TLINE'
        EXPORTING
          i_string    = lv_text
        TABLES
          e_tline_tab = it_line.

      LOOP AT it_line INTO wa_line.
        wa_sales_text-text_id     = 'Z041'.
        wa_sales_text-text_line   = wa_line-tdline.
        APPEND wa_sales_text TO it_sales_text.
        CLEAR : wa_sales_text,wa_line.
      ENDLOOP.
    ENDIF.

***************************
*Mix Design Approve
***************************
    IF wa_salesdoc_h-mix_approve IS NOT INITIAL.
      CLEAR:  lv_text,it_line[].
      lv_text = wa_salesdoc_h-mix_approve.
      CALL FUNCTION 'C14W_STRING_TO_TLINE'
        EXPORTING
          i_string    = lv_text
        TABLES
          e_tline_tab = it_line.

      LOOP AT it_line INTO wa_line.
        wa_sales_text-text_id     = 'Z043'.
        wa_sales_text-text_line   = wa_line-tdline.
        APPEND wa_sales_text TO it_sales_text.
        CLEAR : wa_sales_text,wa_line.
      ENDLOOP.
    ENDIF.

***************************
*Quote Rejected
***************************
    IF wa_salesdoc_h-quote_rejected IS NOT INITIAL.
      CLEAR:  lv_text,it_line[].
      lv_text = wa_salesdoc_h-quote_rejected.
      CALL FUNCTION 'C14W_STRING_TO_TLINE'
        EXPORTING
          i_string    = lv_text
        TABLES
          e_tline_tab = it_line.

      LOOP AT it_line INTO wa_line.
        wa_sales_text-text_id     = 'Z016'.
        wa_sales_text-text_line   = wa_line-tdline.
        APPEND wa_sales_text TO it_sales_text.
        CLEAR : wa_sales_text,wa_line.
      ENDLOOP.
    ENDIF.

***************************
*Quote Accepted
***************************
    IF wa_salesdoc_h-quote_accepted IS NOT INITIAL.
      CLEAR:  lv_text,it_line[].
      lv_text = wa_salesdoc_h-quote_accepted.
      CALL FUNCTION 'C14W_STRING_TO_TLINE'
        EXPORTING
          i_string    = lv_text
        TABLES
          e_tline_tab = it_line.

      LOOP AT it_line INTO wa_line.
        wa_sales_text-text_id     = 'Z040'.
        wa_sales_text-text_line   = wa_line-tdline.
        APPEND wa_sales_text TO it_sales_text.
        CLEAR : wa_sales_text,wa_line.
      ENDLOOP.
    ENDIF.


*--------------------------------------------------------------------*
*Item Data
*--------------------------------------------------------------------*
    LOOP AT it_salesdoc_l INTO wa_salesdoc_l WHERE ref_no EQ wa_salesdoc_h-ref_no.

      lv_posnr = lv_posnr + 10.
***************************
*Item Number
***************************
      wa_sales_items_in-itm_number  = lv_posnr.
      wa_sales_items_in-po_itm_no   = lv_posnr.
      wa_sales_items_inx-itm_number = lv_posnr.
      wa_sales_items_inx-po_itm_no  = 'X'.

***************************
*Material
***************************
      IF wa_salesdoc_l-material IS NOT INITIAL.
        CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
          EXPORTING
            input        = wa_salesdoc_l-material
          IMPORTING
            output       = wa_salesdoc_l-material
          EXCEPTIONS
            length_error = 1
            OTHERS       = 2.
        IF sy-subrc <> 0.
* Implement suitable error handling here
        ENDIF.

        wa_sales_items_in-material = wa_salesdoc_l-material.
        wa_sales_items_inx-material = 'X'.
      ENDIF.

***************************
*Order Quantity
***************************
      IF wa_salesdoc_l-req_qty IS NOT INITIAL.
        wa_sales_items_in-target_qty = wa_salesdoc_l-req_qty.
        wa_sales_items_inx-target_qty = 'X'.
      ENDIF.

***************************
*Plant
***************************
      IF wa_salesdoc_l-plant IS NOT INITIAL.
        wa_sales_items_in-plant = wa_salesdoc_l-plant.
        wa_sales_items_inx-plant = 'X'.
      ENDIF.

***************************
*Shipping Point
***************************
      IF wa_salesdoc_l-ship_point IS NOT INITIAL.
        wa_sales_items_in-ship_point = wa_salesdoc_l-ship_point.
        wa_sales_items_inx-ship_point = 'X'.
      ENDIF.

*--------------------------------------------------------------------*
*Schedule Lines
*--------------------------------------------------------------------*
      lv_line = lv_line + 1.
      wa_sales_schedules_in-itm_number  = lv_posnr.
      wa_sales_schedules_inx-itm_number = lv_posnr.
      wa_sales_schedules_in-sched_line  = lv_line.
      wa_sales_schedules_inx-sched_line = lv_line.
      wa_sales_schedules_in-req_qty     = wa_salesdoc_l-req_qty.
      wa_sales_schedules_inx-req_qty    = 'X'.


      APPEND : wa_sales_items_in TO it_sales_items_in,
               wa_sales_items_inx TO it_sales_items_inx,
               wa_sales_schedules_in TO it_sales_schedules_in,
               wa_sales_schedules_inx TO it_sales_schedules_inx.
      CLEAR : wa_sales_items_in,wa_sales_items_inx,
              wa_sales_schedules_in,wa_sales_schedules_inx .

*--------------------------------------------------------------------*
*Characteristics & Conditions Data
*--------------------------------------------------------------------*
      IF wa_salesdoc_l-charc IS NOT INITIAL.
        lv_config   = lv_config + 1.
        lv_instance = lv_instance + 1.

        wa_sales_cfgs_ref-posex         = lv_posnr.
        wa_sales_cfgs_ref-config_id     = lv_config.
        wa_sales_cfgs_ref-root_id       = lv_instance.

        wa_sales_cfgs_inst-config_id    = lv_config.
        wa_sales_cfgs_inst-inst_id      = lv_instance.
        wa_sales_cfgs_inst-obj_type     = 'MARA'.
        wa_sales_cfgs_inst-class_type   = '300'.
        wa_sales_cfgs_inst-obj_key      = wa_salesdoc_l-material.
        wa_sales_cfgs_inst-quantity     = wa_salesdoc_l-req_qty.
        CONDENSE wa_sales_cfgs_inst-quantity.
        wa_sales_cfgs_inst-author       = '8'.



        wa_sales_cfgs_refinst-posex     = lv_posnr.
        wa_sales_cfgs_refinst-config_id = lv_config.
        wa_sales_cfgs_refinst-inst_id   = lv_instance.

        APPEND : wa_sales_cfgs_ref TO it_sales_cfgs_ref,
                 wa_sales_cfgs_inst TO it_sales_cfgs_inst,
                 wa_sales_cfgs_refinst TO it_sales_cfgs_refinst.
        CLEAR : wa_sales_cfgs_ref,wa_sales_cfgs_inst,wa_sales_cfgs_refinst.
      ENDIF.

***************************
*Additional Data
***************************
      IF  wa_salesdoc_l-zsdclient        IS NOT INITIAL OR  wa_salesdoc_l-zsdconsultant   IS NOT INITIAL OR
          wa_salesdoc_l-projspec         IS NOT INITIAL OR  wa_salesdoc_l-contractor      IS NOT INITIAL OR
          wa_salesdoc_l-subcontractor    IS NOT INITIAL OR  wa_salesdoc_l-plant_addtab    IS NOT INITIAL OR
          wa_salesdoc_l-date_addtab      IS NOT INITIAL OR  wa_salesdoc_l-aircontent      IS NOT INITIAL OR
          wa_salesdoc_l-placeslump       IS NOT INITIAL OR  wa_salesdoc_l-targetcontemp   IS NOT INITIAL OR
          wa_salesdoc_l-minwetmix        IS NOT INITIAL OR  wa_salesdoc_l-chemdosage      IS NOT INITIAL OR
          wa_salesdoc_l-agg_cement_ratio IS NOT INITIAL OR  wa_salesdoc_l-hydrated_paste  IS NOT INITIAL OR
          wa_salesdoc_l-agg_cement_ratio_mass   IS NOT INITIAL OR  wa_salesdoc_l-fineness_modulus_sand    IS NOT INITIAL OR
          wa_salesdoc_l-fineness_modulus_agg   IS NOT INITIAL OR  wa_salesdoc_l-total_sand    IS NOT INITIAL.

        wa_add-itm_number                     = lv_posnr.
        wa_add-zsdclient                      = wa_salesdoc_l-zsdclient.
        wa_add-zsdconsultant                  = wa_salesdoc_l-zsdconsultant.
        wa_add-projspec                       = wa_salesdoc_l-projspec.
        wa_add-contractor                     = wa_salesdoc_l-contractor.
        wa_add-subcontractor                  = wa_salesdoc_l-subcontractor.
        wa_add-plant_addtab                   = wa_salesdoc_l-plant_addtab.
        wa_add-date_addtab                    = wa_salesdoc_l-date_addtab.
        wa_add-aircontent                     = wa_salesdoc_l-aircontent.
        wa_add-placeslump                     = wa_salesdoc_l-placeslump.
        wa_add-targetcontemp                  = wa_salesdoc_l-targetcontemp.
        wa_add-minwetmix                      = wa_salesdoc_l-minwetmix.
        wa_add-chemdosage                     = wa_salesdoc_l-chemdosage.
        wa_add-agg_cement_ratio               = wa_salesdoc_l-agg_cement_ratio.
        wa_add-hydrated_paste                 = wa_salesdoc_l-hydrated_paste.
        wa_add-agg_cement_ratio_mass          = wa_salesdoc_l-agg_cement_ratio_mass.
        wa_add-fineness_modulus_sand          = wa_salesdoc_l-fineness_modulus_sand.
        wa_add-fineness_modulus_agg           = wa_salesdoc_l-fineness_modulus_agg.
        wa_add-total_sand                     = wa_salesdoc_l-total_sand.

        APPEND wa_add TO it_add.
        CLEAR wa_add.
      ENDIF.


      LOOP AT it_salesdoc INTO wa_salesdoc WHERE ref_no     EQ wa_salesdoc_l-ref_no
                                             AND itm_number EQ wa_salesdoc_l-itm_number.

        IF wa_salesdoc-charc IS NOT INITIAL.
          wa_sales_cfgs_value-config_id = lv_config.
          wa_sales_cfgs_value-inst_id   = lv_instance.
          wa_sales_cfgs_value-charc     = wa_salesdoc-charc.
          wa_sales_cfgs_value-value     = wa_salesdoc-value.
          wa_sales_cfgs_value-valcode   = 1.
          APPEND wa_sales_cfgs_value TO it_sales_cfgs_value.
          CLEAR wa_sales_cfgs_value.
        ENDIF.

        IF wa_salesdoc-cond_type IS NOT INITIAL.
          wa_sales_conditions_in-itm_number = lv_posnr.
          wa_sales_conditions_in-cond_type  = wa_salesdoc-cond_type.
          wa_sales_conditions_in-cond_value = wa_salesdoc-cond_value.
*          wa_sales_conditions_in-currency   = lv_waerk.
          APPEND wa_sales_conditions_in TO it_sales_conditions_in.
          CLEAR wa_sales_conditions_in.
        ENDIF.

        IF wa_salesdoc-code IS NOT INITIAL.
          wa_zsdt_add_tab-srnum      = lv_srno = lv_srno + 1.
          wa_zsdt_add_tab-posnr      = lv_posnr.
          wa_zsdt_add_tab-code       = wa_salesdoc-code.
          wa_zsdt_add_tab-spec       = wa_salesdoc-spec.
          wa_zsdt_add_tab-tar_design = wa_salesdoc-tar_design.
          APPEND wa_zsdt_add_tab TO it_zsdt_add_tab.
          CLEAR wa_zsdt_add_tab.
        ENDIF.

        CLEAR : wa_salesdoc.
      ENDLOOP.
      CLEAR : wa_salesdoc_l.
    ENDLOOP.

    PERFORM call_create_bapi CHANGING lv_subrc.
    IF lv_subrc EQ 0.
      wa_final-ref_no = wa_salesdoc_h-ref_no.
      wa_final-vbeln = salesdocument_ex.
      wa_final-type  = 'Quotation Created'.
      APPEND wa_final TO it_final.
      CLEAR : wa_final,lv_subrc.

      LOOP AT it_zsdt_add_tab INTO wa_zsdt_add_tab.
        wa_zsdt_add_tab-vbeln = salesdocument_ex.
        MODIFY it_zsdt_add_tab FROM wa_zsdt_add_tab INDEX sy-tabix TRANSPORTING vbeln.
      ENDLOOP.
      IF it_zsdt_add_tab[] IS NOT INITIAL.
        MODIFY zsdt_add_tab FROM TABLE it_zsdt_add_tab.
        IF sy-subrc EQ 0.
          COMMIT WORK.
        ENDIF.
      ENDIF.

      WAIT UP TO 1 SECONDS.

      IF it_add[] IS NOT INITIAL.
        LOOP AT it_add INTO wa_add.
          UPDATE vbap SET zsdclient                      = wa_add-zsdclient
                          zsdconsultant                  = wa_add-zsdconsultant
                          projspec                       = wa_add-projspec
                          contractor                     = wa_add-contractor
                          subcontractor                  = wa_add-subcontractor
                          plant_addtab                   = wa_add-plant_addtab
                          date_addtab                    = wa_add-date_addtab
                          aircontent                     = wa_add-aircontent
                          placeslump                     = wa_add-placeslump
                          targetcontemp                  = wa_add-targetcontemp
                          minwetmix                      = wa_add-minwetmix
                          chemdosage                     = wa_add-chemdosage
                          agg_cement_ratio               = wa_add-agg_cement_ratio
                          hydrated_paste                 = wa_add-hydrated_paste
                          agg_cement_ratio_mass          = wa_add-agg_cement_ratio_mass
                          fineness_modulus_sand          = wa_add-fineness_modulus_sand
                          fineness_modulus_agg           = wa_add-fineness_modulus_agg
                          total_sand                     = wa_add-total_sand
                       WHERE vbeln EQ salesdocument_ex
                         AND posnr EQ wa_add-itm_number.
          IF sy-subrc EQ 0.
            COMMIT WORK .
          ENDIF.
        ENDLOOP.
      ENDIF.

    ENDIF.

    REFRESH : it_return,it_sales_items_in,it_sales_items_inx,it_sales_partners,it_sales_schedules_in,
              it_sales_schedules_inx,it_sales_conditions_in,it_sales_cfgs_ref,it_sales_cfgs_inst,
              it_sales_cfgs_value,it_sales_cfgs_refinst,it_sales_text,it_add,it_zsdt_add_tab.
    CLEAR : wa_salesdoc_h,wa_return,wa_sales_items_in,wa_sales_items_inx,wa_sales_partners,wa_sales_schedules_in,
            wa_sales_schedules_inx,wa_sales_conditions_in,wa_sales_cfgs_ref,wa_sales_cfgs_inst,
            wa_sales_cfgs_value,wa_sales_cfgs_refinst,wa_sales_text,wa_add,wa_zsdt_add_tab,
            lv_waerk,lv_posnr,lv_config,lv_instance,lv_srno.
  ENDLOOP.


ENDFORM.                    " CREATE_SALESDOCUMENT


*   P_FILE  File Path
*   R1  Sales Document Upload
*   R2  Open Quotation Upload

Post navigation

SAP ABAP – Handling Shortdump
SAP ABAP – DO… WHILE VARYING

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • SAP ABAP – Generate Fiori URL
  • SAP ABAP – Workflow Agents CDS
  • SAP ABAP – Workflow Level with Table Function
  • SAP ABAP – Download ALV to Excel with Total and Subtotal
  • SAP ABAP – BDC Template

Recent Comments

  1. SAP ABAP – Simple Interface FTP Inbound (SAP Consume File From FTP) – SAP ABAP DWIMAN on SAP ABAP – String Encode & Decode BASE64
  2. Upload file – SAP ABAP DWIMAN on F4 Search Help File

Archives

  • May 2025
  • August 2024
  • June 2024
  • May 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • May 2023
  • April 2023

Categories

  • Uncategorized
©2026 SAP ABAP DWIMAN | WordPress Theme by SuperbThemes.com