Program To Create Sales Order Using BAPI
Program To Create Sales Order Using BAPI
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
p_file1 = p_file.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* i_field_seperator =
i_line_header = 'X'
i_tab_raw_data = gt_raw
i_filename = p_file1
TABLES
i_tab_converted_data = gt_final
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM process_data .
* SORT gt_final ASCENDING BY ind.
CHECK gt_final IS NOT INITIAL.
CLEAR : gv_auart,gv_vkorg,gv_vtweg,gv_spart,
gv_bstnk,gv_bstdk,gv_so_kunnr,gv_sh_kunnr.
REFRESH : gt_return.
gv_auart = gs_final-auart.
gv_vkorg = gs_final-vkorg.
gv_vtweg = gs_final-vtweg.
gv_spart = gs_final-spart.
gv_bstnk = gs_final-bstnk.
gv_bstdk = gs_final-bstdk.
gv_so_kunnr = gs_final-so_kunnr.
gv_sh_kunnr = gs_final-sh_kunnr.
*Header data
AT NEW ind.
PERFORM header_data.
*Sold to party
PERFORM sold_party.
*Ship to party
PERFORM ship_party.
ENDAT.
*Item data
PERFORM item_data.
*Order Quantity
PERFORM order_quantity.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = c_x.
* IMPORTING
* RETURN =
.
ENDIF.
CLEAR : gs_ord_head,gs_ord_headx.
REFRESH : gt_item_in,gt_item_inx,gt_sched_in,gt_sched_inx,gt_ord_part.
*Perform reading for Error msgs reading
PERFORM error_msg.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form VALIDATIONS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM validations .
*Sold to party
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = cs_final-so_kunnr
IMPORTING
output = cs_final-so_kunnr.
*Ship to party
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = cs_final-sh_kunnr
IMPORTING
output = cs_final-sh_kunnr.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form VALIDATE_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM validate_data .
CLEAR: lv_msg.
*Sales Organisation
READ TABLE gt_tvko INTO gs_tvko WITH KEY vkorg = <f1>-vkorg BINARY SEARCH.
IF sy-subrc NE 0.
lv_name = TEXT-004. "'Sales Organisation'.
CONCATENATE lv_msg lv_name <f1>-vkorg '/' INTO lv_msg SEPARATED BY space.
lv_erflg = c_x.
ENDIF.
*Distibution Channel
READ TABLE gt_tvkov INTO gs_tvkov WITH KEY vtweg = <f1>-vtweg BINARY SEARCH.
IF sy-subrc NE 0.
lv_name = TEXT-005. "'Distribution Channel'.
CONCATENATE lv_msg lv_name <f1>-vtweg '/' INTO lv_msg SEPARATED BY space.
lv_erflg = c_x.
ENDIF.
*Division
READ TABLE gt_tvta INTO gs_tvta WITH KEY spart = <f1>-spart BINARY SEARCH.
IF sy-subrc NE 0.
lv_name = TEXT-006. "'Divison'.
CONCATENATE lv_msg lv_name <f1>-spart '/' INTO lv_msg SEPARATED BY space.
lv_erflg = c_x.
ENDIF.
*Plant
READ TABLE gt_t001w INTO gs_t001w WITH KEY werks = <f1>-werks BINARY SEARCH.
IF sy-subrc NE 0.
lv_name = TEXT-007. "'Plant'.
CONCATENATE lv_msg lv_name <f1>-werks '/' INTO lv_msg SEPARATED BY space.
lv_erflg = c_x.
ENDIF.
*Storage Location
READ TABLE gt_t001l INTO gs_t001l WITH KEY lgort = <f1>-lgort BINARY SEARCH.
IF sy-subrc NE 0.
lv_name = TEXT-008. "'Storage Location'.
CONCATENATE lv_msg lv_name <f1>-lgort '/' INTO lv_msg SEPARATED BY space.
lv_erflg = c_x.
ENDIF.
**Shipping Points
READ TABLE gt_tvst INTO gs_tvst WITH KEY vstel = <f1>-vstel BINARY SEARCH.
IF sy-subrc NE 0.
lv_name = TEXT-009. "'Shipping Points'.
CONCATENATE lv_msg lv_name <f1>-vstel '/' INTO lv_msg SEPARATED BY space.
lv_erflg = c_x.
ENDIF.
*Sold to party
READ TABLE gt_kna1 INTO gs_kna1 WITH KEY kunnr = <f1>-so_kunnr BINARY SEARCH.
IF sy-subrc NE 0.
lv_name = TEXT-010. "'Sold to Party'.
CONCATENATE lv_msg lv_name <f1>-so_kunnr '/' INTO lv_msg SEPARATED BY space.
lv_erflg = c_x.
ENDIF.
*Ship to party
READ TABLE gt_kna INTO gs_kna WITH KEY kunnr = <f1>-sh_kunnr BINARY SEARCH.
IF sy-subrc NE 0.
lv_name = TEXT-011. "'Ship to party'.
CONCATENATE lv_msg lv_name <f1>-sh_kunnr '/' INTO lv_msg SEPARATED BY space.
lv_erflg = c_x.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ERROR_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM error_display USING cs_final.
DATA: lr_output TYPE REF TO cl_salv_table,
lr_functions TYPE REF TO cl_salv_functions_list,
lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column.
TRY.
CALL METHOD cl_salv_table=>factory
* EXPORTING
* LIST_DISPLAY = IF_SALV_C_BOOL_SAP=>FALSE
* R_CONTAINER =
* CONTAINER_NAME =
IMPORTING
r_salv_table = lr_output
CHANGING
t_table = cs_final.
CATCH cx_salv_msg .
ENDTRY.
lr_functions = lr_output->get_functions( ).
lr_functions->set_default( abap_true ).
lr_functions->set_export_localfile( abap_true ).
* Get Columns
lr_columns = lr_output->get_columns( ).
lr_columns->set_optimize( 'X' ).
lr_output->display( ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ERROR_MSG
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM error_msg .
DATA : gv_number TYPE msgnr.
gv_number = gs_return-number.
CALL FUNCTION 'MASS_MESSAGE_GET'
EXPORTING
arbgb = gs_return-id
msgnr = gv_number
msgv1 = gs_return-message_v1
msgv2 = gs_return-message_v2
msgv3 = gs_return-message_v3
msgv4 = gs_return-message_v4
IMPORTING
msgtext = gv_text
EXCEPTIONS
message_not_found = 1
OTHERS = 2.
gs_ord_head-doc_type = gv_auart.
gs_ord_head-sales_org = gv_vkorg.
gs_ord_head-distr_chan = gv_vtweg.
gs_ord_head-division = gv_spart.
gs_ord_head-purch_date = gv_bstdk.
gs_ord_head-purch_no_c = gv_bstnk.
IF p_chk = 'X'.
gs_testrun-bapiflag = 'X'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ITEM_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM item_data .
gs_item_in-itm_number = gs_final-posnr.
gs_item_in-material = gs_final-matnr.
gs_item_in-plant = gs_final-werks.
gs_item_in-store_loc = gs_final-lgort.
* gs_item_in-price_date = gs_final-prsdt.
gs_item_in-sales_unit = gs_final-vrkme.
gs_item_in-ship_point = gs_final-vstel.
gs_item_in-material_long = gs_final-matnr.
APPEND gs_item_in TO gt_item_in.
CLEAR gs_item_in.
gs_item_inx-itm_number = gs_final-posnr.
gs_item_inx-updateflag = 'I'.
gs_item_inx-itm_number = c_x.
gs_item_inx-material = c_x.
gs_item_inx-plant = c_x.
gs_item_inx-store_loc = c_x.
* gs_item_inx-price_date = c_x.
gs_item_inx-sales_unit = c_x.
gs_item_inx-ship_point = c_x.
gs_item_inx-material_long = c_x.
APPEND gs_item_inx TO gt_item_inx.
CLEAR gs_item_inx.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SOLD_PARTY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM sold_party .
gs_ord_part-partn_role = 'AG'.
gs_ord_part-partn_numb = gv_so_kunnr.
APPEND gs_ord_part TO gt_ord_part.
CLEAR gs_ord_part.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SHIP_PARTY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM ship_party .
gs_ord_part-partn_role = 'WE'.
gs_ord_part-partn_numb = gv_sh_kunnr.
APPEND gs_ord_part TO gt_ord_part.
CLEAR gs_ord_part.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ORDER_QUANTITY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM order_quantity .
gs_sched_in-itm_number = gs_final-posnr.
gs_sched_in-req_qty = gs_final-kwmeng.
APPEND gs_sched_in TO gt_sched_in.
CLEAR gs_sched_in.
gs_sched_inx-itm_number = gs_final-posnr.
gs_sched_inx-updateflag = 'I'.
gs_sched_inx-itm_number = c_x.
gs_sched_inx-req_qty = c_x.
APPEND gs_sched_inx TO gt_sched_inx.
CLEAR gs_sched_inx.
ENDFORM.