销售订单创建BAPI实例(刘欣)
生活随笔
收集整理的這篇文章主要介紹了
销售订单创建BAPI实例(刘欣)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
好把,到新公司我的第一個程序,銷售訂單批量創建(帶配置)
?
使用ABAP的BAPI: BAPI_SALESORDER_CREATEFROMDAT2?
?
每一條數據處理邏輯:
1、準備BAPI參數
2、調用BAPI
3、查詢BAPI返回信息:
如果正確,提交保存;并得到銷售訂單憑證號,用憑證號,保存行項目的備注文本,寫日志表。
如果錯誤,放棄其它操作,寫日志表。
*&---------------------------------------------------------------------* *& report zsde0006 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* report zsde0006. tables ztsd0026.data gs_ztsd0026 like ztsd0026. data gt_ztsd0026 like table of ztsd0026."ecxel數據定義 types :begin of gs_t_excel,doc_type like ztsd0026-doc_type,sales_org like ztsd0026-sales_org,distr_chan like ztsd0026-distr_chan,division like ztsd0026-division,req_date_h like ztsd0026-req_date_h,partn_numb like ztsd0026-partn_numb,name like ztsd0026-name,material like ztsd0026-material,maktx like ztsd0026-maktx,xmlx like ztsd0026-xmlx,pmnttrms like ztsd0026-pmnttrms,plant like ztsd0026-plant,ship_point like ztsd0026-ship_point,req_qty like ztsd0026-req_qty,zmodel like ztsd0026-zmodel,zcolor like ztsd0026-zcolor,zinterior like ztsd0026-zinterior,zoptpack like ztsd0026-zoptpack,text like ztsd0026-text,excelid like ztsd0026-excelid,end of gs_t_excel.data gs_excel type gs_t_excel.data gs_excel_check type gs_t_excel.data gs_excel_temp type gs_t_excel.data gt_excel type table of gs_t_excel.data gt_excel_check type table of gs_t_excel."備注文本text零時表定義types :begin of gs_t_bztxt,text like ztsd0026-text,posnr TYPE posnr,end of gs_t_bztxt.data gs_bztxt type gs_t_bztxt.data gt_bztxt type table of gs_t_bztxt."檢查用types :begin of gs_t_field6,doc_type like ztsd0026-doc_type,sales_org like ztsd0026-sales_org,distr_chan like ztsd0026-distr_chan,division like ztsd0026-division,req_date_h like ztsd0026-req_date_h,end of gs_t_field6.data gs_field6 type gs_t_field6. data gt_field6 type table of gs_t_field6."BAPI 數據定義DATA gs_header TYPE bapisdhd1.DATA gt_partner TYPE TABLE OF bapiparnr.DATA gs_partner TYPE bapiparnr.DATA gv_posnr TYPE posnr. " 訂單Item號DATA gv_charact_cfgid TYPE cux_cfg_id.DATA gv_charact_insid TYPE cu_inst_id.DATA gt_item TYPE TABLE OF bapisditm.DATA gs_item TYPE bapisditm.DATA gv_etenr TYPE etenr. " 訂單Schedule Line號DATA gt_sl TYPE TABLE OF bapischdl.DATA gs_sl TYPE bapischdl.DATA gt_cfgins TYPE TABLE OF bapicuins.DATA gs_cfgins TYPE bapicuins.DATA gt_cfgref TYPE TABLE OF bapicucfg.DATA gs_cfgref TYPE bapicucfg.DATA gv_class TYPE cuib_objkey.DATA gt_cfgval TYPE TABLE OF bapicuval.DATA gs_cfgval TYPE bapicuval.DATA gs_cha TYPE char70.DATA gt_cha TYPE TABLE OF char70.DATA gv_char50 TYPE char50.DATA gv_vbeln TYPE vbeln. " SO憑證號DATA gt_rc TYPE TABLE OF bapiret2.DATA gs_rc TYPE bapiret2.DATA gv_err_flag TYPE xfeld.DATA ls_header TYPE thead.data gt_line type table of tline.data wa_line like tline.selection-screen begin of block bk with frame title text-b02. parameter:p_path like rlgrap-filename modif id md1. selection-screen end of block bk.DATA: functxt TYPE smp_dyntxt. TABLES: sscrfields. SELECTION-SCREEN: FUNCTION KEY 1,FUNCTION KEY 2."download template.initialization.functxt-icon_id = icon_xxl.functxt-icon_text = text-002.sscrfields-functxt_01 = functxt.functxt-icon_id = ICON_SPOOL_REQUEST.functxt-icon_text = text-003.sscrfields-functxt_02 = functxt.AT SELECTION-SCREEN.CASE sscrfields-ucomm.WHEN 'FC01'.PERFORM frm_template_down.WHEN 'FC02'.SUBMIT ZSDR0026 VIA SELECTION-SCREEN.ENDCASE.at selection-screen on value-request for p_path.perform frm_sel_file changing p_path.start-of-selection.perform frm_excel_import.FORM frm_template_down .DATA: lv_filename TYPE string,lv_path TYPE string,lv_fullpath TYPE string,lv_user_action TYPE i,lv_destination TYPE rlgrap-filename,ls_objdata TYPE wwwdatatab,lv_objid TYPE wwwdatatab-objid,lv_rc TYPE sy-subrc.lv_filename = 'Template Download'.CONCATENATE sy-datum '-' sy-uzeit '-' lv_filename INTO lv_filename.IF lv_user_action <> 9.SELECT SINGLE relid objidFROM wwwdataINTO CORRESPONDING FIELDS OF ls_objdataWHERE srtf2 = 0AND objid = 'ZSDE0006'AND relid = 'MI'.IF sy-subrc = 0.CLEAR lv_rc.CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'EXPORTINGkey = ls_objdatadestination = lv_destinationIMPORTINGrc = lv_rc * CHANGING * TEMP =.IF lv_rc EQ 0 .MESSAGE 'Template download sucessful.' TYPE 'S'.ELSE.MESSAGE 'The template is not exit.' TYPE 'S' DISPLAY LIKE 'E'.ENDIF.ELSE.MESSAGE 'The template is not exit.' TYPE 'S' DISPLAY LIKE 'E'.ENDIF.ENDIF. ENDFORM. " FRM_TEMPLATE_DOWN.*&---------------------------------------------------------------------* *& form frm_sel_file *&---------------------------------------------------------------------* * text 選擇文件 *----------------------------------------------------------------------* form frm_sel_file changing po_path.data:lt_filetable type filetable,ls_filetable type file_table,lv_rc type sy-subrc,lv_filename type string."lv_initial_path type string value 'c:\'.clear lv_filename.lv_filename = p_path.call method cl_gui_frontend_services=>file_open_dialogexportingdefault_filename = lv_filenamefile_filter = cl_gui_frontend_services=>filetype_excel " initial_directory = lv_initial_pathchangingfile_table = lt_filetablerc = lv_rcexceptionsfile_open_dialog_failed = 1cntl_error = 2error_no_gui = 3not_supported_by_gui = 4.if sy-subrc ne 0 or lv_rc lt 0.message '上傳文件選擇失敗' TYPE 'I'."上傳文件選擇失敗else.if lv_rc = 1.read table lt_filetable into ls_filetable index 1.po_path = ls_filetable-filename.else.exit.endif.endif. endform.*&---------------------------------------------------------------------* *& form frm_excel_import *&---------------------------------------------------------------------* * text 讀取excel文件 *----------------------------------------------------------------------* form frm_excel_import.data cl_ex type ref to cx_root.check p_path is not initial.try .call function 'ZALSM_EXCEL_TO_INTERNAL_TABLE'exportingfilename = p_pathi_begin_col = 1i_begin_row = 3i_end_col = 21i_end_row = 5000 * sheet_name =tablesintern = gt_excelexceptionsinconsistent_parameters = 1upload_ole = 2others = 3.catch cx_root into cl_ex.message cl_ex->get_text( ) TYPE 'I' .endtry.*gs_excel-PARTN_NUMB. "客戶編碼 *gs_excel-MATERIAL. "物料 *gs_excel-ZMODEL. "基本車型 *gs_excel-ZCOLOR. "外飾 *gs_excel-ZINTERIOR. "內飾 *gs_excel-ZOPTPACK. "選裝包sort gt_excel by PARTN_NUMB .DATA n type i VALUE 0."按表頭字段檢查,分類 gt_excel_check = gt_excel .loop at gt_excel_check into gs_excel_check.gs_field6-doc_type = gs_excel_check-doc_type. " 訂單類型gs_field6-sales_org = gs_excel_check-sales_org. " 銷售組織gs_field6-distr_chan = gs_excel_check-distr_chan. " 分銷渠道gs_field6-division = gs_excel_check-division. " 產品組gs_field6-REQ_DATE_H = gs_excel_check-REQ_DATE_H. "請求交貨日期APPEND gs_field6 TO gt_field6.AT END OF PARTN_NUMB.DELETE ADJACENT DUPLICATES FROM gt_field6.DESCRIBE TABLE gt_field6 LINES n.IF n <> 1.write :/ gs_excel_check-PARTN_NUMB && ' 多行表頭數據必須相同!'.RETURN.ENDIF.ENDAT.endloop."行項目號初始化gv_posnr = '000000'.gv_etenr = '0000'.gv_charact_cfgid = '000000'.gv_charact_insid = '00000001'.loop at gt_excel into gs_excel."so headergs_header-doc_type = gs_excel-doc_type. " 訂單類型gs_header-sales_org = gs_excel-sales_org. " 銷售組織gs_header-distr_chan = gs_excel-distr_chan. " 分銷渠道gs_header-division = gs_excel-division. " 產品組gs_header-REQ_DATE_H = gs_excel-REQ_DATE_H. "請求交貨日期"so partnergs_partner-partn_numb = gs_excel-PARTN_NUMB.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGINPUT = gs_partner-partn_numbIMPORTINGOUTPUT = gs_partner-partn_numb. "'0011000001'.gs_partner-partn_role = 'AG'.APPEND gs_partner TO gt_partner."so itemgv_posnr = gv_posnr + 10.gs_item-itm_number = gv_posnr.gs_item-material = gs_excel-material . "物料gs_item-plant = gs_excel-plant. "工廠gs_item-ship_point = gs_excel-ship_point. "裝運點、接收點gs_item-pmnttrms = gs_excel-pmnttrms.gs_item-po_itm_no = gv_posnr. "注意這個參數,有增強需要這個參數append gs_item to gt_item."so Schedule Linesgv_etenr = gv_etenr + 1.gs_sl-itm_number = gv_posnr.gs_sl-req_qty = gs_excel-REQ_QTY. "數量gs_sl-sched_line = gv_etenr.APPEND gs_sl TO gt_sl."bztxt 先存起來gs_bztxt-text = gs_excel-text.gs_bztxt-posnr = gv_posnr.APPEND gs_bztxt TO gt_bztxt." Step2.2. Characteristic - Reference * IF ls_ibp_prod-zmodel IS NOT INITIAL. " 如果是VC物料gv_charact_cfgid = gv_charact_cfgid + 1.gs_cfgref-posex = gv_posnr.gs_cfgref-config_id = gv_charact_cfgid.gs_cfgref-root_id = gv_charact_insid.APPEND gs_cfgref TO gt_cfgref." Step2.3. Characteristic - Instancegs_cfgins-config_id = gv_charact_cfgid.gs_cfgins-inst_id = gv_charact_insid.gs_cfgins-obj_type = 'MARA'.gs_cfgins-class_type = '300'.gs_cfgins-obj_key = gv_class.APPEND gs_cfgins TO gt_cfgins.gv_char50 = gs_excel-material." Step2.4. Characteristic - ValuesPERFORM _frm_charact_values USING gs_excel-ZMODEL gv_charact_cfgidgv_charact_insid gv_char50'ZDP_0001_MODEL'CHANGING gs_cfgval.APPEND gs_cfgval TO gt_cfgval.PERFORM _frm_charact_values USING gs_excel-ZCOLOR gv_charact_cfgidgv_charact_insid gv_char50'ZDP_0001_COLOR'CHANGING gs_cfgval.APPEND gs_cfgval TO gt_cfgval.PERFORM _frm_charact_values USING gs_excel-ZINTERIOR gv_charact_cfgidgv_charact_insid gv_char50'ZDP_0001_INTERI'CHANGING gs_cfgval.APPEND gs_cfgval TO gt_cfgval.SPLIT gs_excel-ZOPTPACK AT '_' INTO TABLE gt_cha.LOOP AT gt_cha INTO gs_cha.PERFORM _frm_charact_values USING gs_cha gv_charact_cfgidgv_charact_insid gv_char50'ZDP_0001_OPTPAC'CHANGING gs_cfgval.APPEND gs_cfgval TO gt_cfgval.ENDLOOP.gs_excel_temp = gs_excel. "后面AT END OF 會把工作區的字符變成*,這里要先緩存一下AT END OF PARTN_NUMB. "如果后面的數據有變化了,現在執行這些行項目產生SOCALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'EXPORTINGorder_header_in = gs_headerIMPORTINGsalesdocument = gv_vbelnTABLESreturn = gt_rcorder_items_in = gt_itemorder_partners = gt_partnerorder_schedules_in = gt_slorder_cfgs_ref = gt_cfgreforder_cfgs_inst = gt_cfginsorder_cfgs_value = gt_cfgval.LOOP AT gt_rc INTO gs_rc WHERE type CA 'EA'.gv_err_flag = abap_on.ENDLOOP.IF gv_err_flag IS INITIAL. " Successcall function 'BAPI_TRANSACTION_COMMIT'exportingwait = 'X'.commit work and wait .loop at gt_bztxt into gs_bztxt.ls_header-tdobject = 'VBBP'.ls_header-tdid = '0001'.ls_header-tdspras = 'E'. "英語!ls_header-tdname = gv_vbeln && gs_bztxt-posnr. "采購訂單號加行項目號,應該是后臺有配置wa_line-tdline = gs_bztxt-TEXT.wa_line-tdformat = '*'.append wa_line to gt_line."先刪除!CALL FUNCTION 'DELETE_TEXT'EXPORTINGid = ls_header-tdidlanguage = sy-languNAME = ls_header-tdnameOBJECT = ls_header-tdobjectEXCEPTIONSNOT_FOUND = 1OTHERS = 2.CALL FUNCTION 'DELETE_TEXT'EXPORTINGid = ls_header-tdidlanguage = 'E' "英語!NAME = ls_header-tdnameOBJECT = ls_header-tdobjectEXCEPTIONSNOT_FOUND = 1OTHERS = 2."再saveCALL FUNCTION 'SAVE_TEXT'EXPORTINGheader = ls_headersavemode_direct = 'X'TABLESlines = gt_lineEXCEPTIONSid = 1language = 2name = 3object = 4OTHERS = 5.clear gt_line[].endloop.data ss like bapiret2-message.data gv_long(200) type c.loop at gt_rc into gs_rc.call function 'MESSAGE_TEXT_BUILD'exportingmsgid = gs_rc-idmsgnr = gs_rc-numbermsgv1 = gs_rc-message_v1msgv2 = gs_rc-message_v2msgv3 = gs_rc-message_v3msgv4 = gs_rc-message_v4importingmessage_text_output = ss.gv_long = gv_long && '(' && sy-tabix && ')' && '[' && gs_rc-type && ']' && ss .endloop.write:/ gv_long."得到一個uuid為主鍵,保證每一條數據主鍵不同,可以從內表寫入到透明表gs_ztsd0026-uuid = cl_uuid_factory=>create_system_uuid( )->create_uuid_c32( ).gs_ztsd0026-ADNAM = sy-uname. "用戶名gs_ztsd0026-ADDAT = sy-datum. "日期gs_ztsd0026-ADTIM = sy-uzeit. "時間gs_ztsd0026-excelid = gs_excel_temp-excelid.gs_ztsd0026-DOC_TYPE = gs_excel_temp-DOC_TYPE.gs_ztsd0026-SALES_ORG = gs_excel_temp-SALES_ORG.gs_ztsd0026-DISTR_CHAN = gs_excel_temp-DISTR_CHAN.gs_ztsd0026-DIVISION = gs_excel_temp-DIVISION.gs_ztsd0026-REQ_DATE_H = gs_excel_temp-REQ_DATE_H.gs_ztsd0026-PARTN_NUMB = gs_excel_temp-PARTN_NUMB.gs_ztsd0026-NAME = gs_excel_temp-NAME.gs_ztsd0026-MATERIAL = gs_excel_temp-MATERIAL.gs_ztsd0026-MAKTX = gs_excel_temp-MAKTX.gs_ztsd0026-XMLX = gs_excel_temp-XMLX.gs_ztsd0026-PMNTTRMS = gs_excel_temp-PMNTTRMS.gs_ztsd0026-PLANT = gs_excel_temp-PLANT.gs_ztsd0026-SHIP_POINT = gs_excel_temp-SHIP_POINT.gs_ztsd0026-REQ_QTY = gs_excel_temp-REQ_QTY.gs_ztsd0026-ZMODEL = gs_excel_temp-ZMODEL.gs_ztsd0026-ZCOLOR = gs_excel_temp-ZCOLOR.gs_ztsd0026-ZINTERIOR = gs_excel_temp-ZINTERIOR.gs_ztsd0026-ZOPTPACK = gs_excel_temp-ZOPTPACK.gs_ztsd0026-TEXT = gs_excel_temp-TEXT.gs_ztsd0026-VBELN = gv_vbeln.gs_ztsd0026-STATUS = 'S'.gs_ztsd0026-message = gv_long.modify ztsd0026 from gs_ztsd0026.commit work and wait .CLEAR: gv_err_flag,gs_rc.clear: gv_long,gs_excel,gs_ztsd0026, gs_header,gv_vbeln,gt_rc[],gt_item[],gt_partner[],gt_sl[],gt_cfgref[],gt_cfgins[],gt_cfgval[],gt_line[],gt_bztxt[],gs_bztxt."行項目號初始化gv_posnr = '000000'.gv_etenr = '0000'.gv_charact_cfgid = '000000'.gv_charact_insid = '00000001'.ELSE. "Failloop at gt_rc into gs_rc.call function 'MESSAGE_TEXT_BUILD'exportingmsgid = gs_rc-idmsgnr = gs_rc-numbermsgv1 = gs_rc-message_v1msgv2 = gs_rc-message_v2msgv3 = gs_rc-message_v3msgv4 = gs_rc-message_v4importingmessage_text_output = ss.gv_long = gv_long && '(' && sy-tabix && ')' && '[' && gs_rc-type && ']' && ss .endloop.write:/ gv_long."得到一個uuid為主鍵,保證每一條數據主鍵不同,可以從內表寫入到透明表gs_ztsd0026-uuid = cl_uuid_factory=>create_system_uuid( )->create_uuid_c32( ).gs_ztsd0026-ADNAM = sy-uname. "用戶名gs_ztsd0026-ADDAT = sy-datum. "日期gs_ztsd0026-ADTIM = sy-uzeit. "時間gs_ztsd0026-excelid = gs_excel_temp-excelid.gs_ztsd0026-DOC_TYPE = gs_excel_temp-DOC_TYPE.gs_ztsd0026-SALES_ORG = gs_excel_temp-SALES_ORG.gs_ztsd0026-DISTR_CHAN = gs_excel_temp-DISTR_CHAN.gs_ztsd0026-DIVISION = gs_excel_temp-DIVISION.gs_ztsd0026-REQ_DATE_H = gs_excel_temp-REQ_DATE_H.gs_ztsd0026-PARTN_NUMB = gs_excel_temp-PARTN_NUMB.gs_ztsd0026-NAME = gs_excel_temp-NAME.gs_ztsd0026-MATERIAL = gs_excel_temp-MATERIAL.gs_ztsd0026-MAKTX = gs_excel_temp-MAKTX.gs_ztsd0026-XMLX = gs_excel_temp-XMLX.gs_ztsd0026-PMNTTRMS = gs_excel_temp-PMNTTRMS.gs_ztsd0026-PLANT = gs_excel_temp-PLANT.gs_ztsd0026-SHIP_POINT = gs_excel_temp-SHIP_POINT.gs_ztsd0026-REQ_QTY = gs_excel_temp-REQ_QTY.gs_ztsd0026-ZMODEL = gs_excel_temp-ZMODEL.gs_ztsd0026-ZCOLOR = gs_excel_temp-ZCOLOR.gs_ztsd0026-ZINTERIOR = gs_excel_temp-ZINTERIOR.gs_ztsd0026-ZOPTPACK = gs_excel_temp-ZOPTPACK.gs_ztsd0026-TEXT = gs_excel_temp-TEXT.gs_ztsd0026-VBELN = gv_vbeln.gs_ztsd0026-STATUS = 'E'.gs_ztsd0026-message = gv_long.modify ztsd0026 from gs_ztsd0026.commit work and wait .CLEAR: gv_err_flag,gs_rc.clear: gv_long,gs_excel,gs_ztsd0026, gs_header,gv_vbeln,gt_rc[],gt_item[],gt_partner[],gt_sl[],gt_cfgref[],gt_cfgins[],gt_cfgval[],gt_line[],gt_bztxt[],gs_bztxt."行項目號初始化gv_posnr = '000000'.gv_etenr = '0000'.gv_charact_cfgid = '000000'.gv_charact_insid = '00000001'.ENDIF.ENDAT.endloop.SUBMIT ZSDR0026 .ENDFORM.FORM _frm_charact_values USING iv_charact_value TYPE char70iv_charact_cfgid TYPE cux_cfg_idiv_charact_insid TYPE cu_inst_idiv_prodcut TYPE cuib_objkeyiv_zdp_00001 TYPE zz_config_keyCHANGING is_cfgval TYPE bapicuval.CLEAR is_cfgval.DATA iv_data TYPE char32.CALL METHOD zcl_ca_tools=>get_hc_singleEXPORTINGiv_config_key = iv_zdp_00001IMPORTINGev_single = iv_dataEXCEPTIONSdynamic_error = 1OTHERS = 2.IF sy-subrc <> 0." .......ENDIF.is_cfgval-config_id = iv_charact_cfgid.is_cfgval-inst_id = iv_charact_insid.is_cfgval-value = iv_charact_value.CONCATENATE iv_prodcut '_' iv_data INTO is_cfgval-charc.ENDFORM.總結
以上是生活随笔為你收集整理的销售订单创建BAPI实例(刘欣)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我在b站上推荐一个看小电影的网站,结果被
- 下一篇: Element-Ui 复选框动态改变绑定