废话没有,直接源码。
DATA:
input_hd TYPE zmmi005_dt_mesg_hd,
input_body TYPE zsd_dt_sales_order_req_msg_tab,
input_body_item TYPE zsd_dt_sales_order_req_msgbd,
gt_hxm TYPE STANDARD TABLE OF zsd_dt_sales_order_req_ite_tab,
wa_hxm TYPE zsd_dt_sales_order_req_items,
gt_tx TYPE STANDARD TABLE OF zsd_dt_sales_order_req_cha_tab,
wa_tx TYPE zsd_dt_sales_order_req_charact,
gt_jg TYPE STANDARD TABLE OF zsd_dt_sales_order_req_pri_tab,
wa_jg TYPE zsd_dt_sales_order_req_pri_dat.
"response结构
DATA:
output_hd TYPE zmmi005_dt_mesg_hd,
output_body TYPE zsd_dt_sales_order_res_msg_tab,
output_body_item TYPE zsd_dt_sales_order_res_msgbd,
ogt_data TYPE zsd_dt_sales_order_res_dat_tab,
owa_data TYPE zsd_dt_sales_order_res_data,
ogt_item TYPE zsd_dt_sales_order_res_ite_tab,
owa_item TYPE zsd_dt_sales_order_res_item.
*创建销售订单bapi定义
-
data for bapi use
DATA: ls_create_header TYPE bapisdhd1, "抬头数据
lt_create_header TYPE TABLE OF bapisdhd1, ls_create_header_x TYPE bapisdhd1x, lt_create_header_x TYPE TABLE OF bapisdhd1x, ls_bapiflag_x TYPE bapiflag, ls_create_item TYPE bapisditm, "项目数据 lt_create_item TYPE TABLE OF bapisditm, ls_create_schedules TYPE bapischdl, lt_create_schedules TYPE TABLE OF bapischdl, ls_create_item_x TYPE bapisditmx, lt_create_item_x TYPE TABLE OF bapisditmx, ls_create_schedules_x TYPE bapischdlx, lt_create_schedules_x TYPE TABLE OF bapischdlx, ls_create_character TYPE bapicuval, "特性值 lt_create_character TYPE TABLE OF bapicuval, ls_create_conditions_in TYPE bapicond, "定价类型 ls_create_conditions_in2 TYPE bapicond, lt_create_conditions_in TYPE TABLE OF bapicond, ls_create_conditions_inx TYPE bapicondx, lt_create_conditions_inx TYPE TABLE OF bapicondx, ls_create_partner TYPE bapiparnr, "合作伙伴 lt_create_partner TYPE TABLE OF bapiparnr, ls_create_text TYPE bapisdtext, "文本 lt_create_text TYPE TABLE OF bapisdtext, ls_create_return TYPE bapiret2, lt_create_return TYPE TABLE OF bapiret2, ls_create_stat TYPE bapicucfg, lt_create_stat TYPE TABLE OF bapicucfg, ls_create_cfgsinst TYPE bapicuins, lt_create_cfgsinst TYPE TABLE OF bapicuins, ls_create_part_of TYPE bapicuprt, lt_create_part_of TYPE TABLE OF bapicuprt, ls_create_cfgsrefinst TYPE bapicuref, lt_create_cfgsrefinst TYPE TABLE OF bapicuref, l_create_vbeln TYPE bapivbeln-vbeln, "销售凭证号 ls_logic_switch TYPE bapisdls."修改bapi
DATA:ls_change_header TYPE bapisdh1, "抬头数据
lt_change_header TYPE TABLE OF bapisdh1, ls_change_header_x TYPE bapisdh1x, lt_change_header_x TYPE TABLE OF bapisdh1x."返回结构定义
TYPES: BEGIN OF ret_body,
vbeln TYPE vbeln, " 订单 posnr TYPE posnr, "行项目 netwr TYPE netwr, "净价值 mwsbp TYPE mwsbp, "税额 kschl TYPE kschl, "条件类型 vtext TYPE vtext, "描述 kbetr TYPE kbetr. "条件金额TYPES: END OF ret_body.
DATA : gt_ret TYPE STANDARD TABLE OF ret_body,
wa_ret TYPE ret_body.DATA : wa_ret_copy TYPE ret_body.
DATA: l_index TYPE etenr. "记录修改订单行号
DATA l_vbeln TYPE vbeln. "记录删除订单号
DATA: ret_msg TYPE string, "记录错误信息
l_tabix TYPE sy-tabix, num TYPE i. "统计内表条目数" header和body
input_hd = input-mt_sales_order_req-msghd.
input_body = input-mt_sales_order_req-msgbd.
"反馈头信息
output_hd-msgid = input_hd-msgid.
output_hd-tlgid = input_hd-tlgid.
output_hd-tlgname = input_hd-tlgname.
output_hd-dtsend = sy-datum && sy-uzeit.
output_hd-sender = 'ERP'.
output_hd-receiver = input_hd-sender.
output-mt_sales_order_res-msghd = output_hd.
- DESCRIBE TABLE input_body LINES num.
LOOP AT input_body INTO input_body_item.
l_tabix = sy-tabix.
IF input_body_item-cancle_flg = 'D'.
ls_change_header_x-updateflag = 'D'.
l_vbeln = input_body_item-vbeln.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = l_vbeln
order_header_inx = ls_change_header_x
TABLES
return = lt_create_return.
LOOP AT lt_create_return INTO ls_create_return WHERE type = 'E' OR type = 'A'.
CONCATENATE ret_msg ls_create_return-message INTO ret_msg SEPARATED BY '/'.
ENDLOOP.
IF ret_msg IS INITIAL .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
output_body_item-code = 'S'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
output_body_item-code = 'E'.
output_body_item-msg = ret_msg.
ENDIF.
"反馈体
output_body_item-contract_no = input_body_item-contract_no.
output_body_item-vbeln = input_body_item-vbeln.
APPEND output_body_item TO output_body.
-
IF l_tabix EQ num. -
output-mt_pur_order_res-msgbd = output_body. -
ENDIF. CLEAR: input_body_item,l_vbeln,output_body_item. CONTINUE. ENDIF.
删除订单结束***************
ls_create_header-doc_type = input_body_item-auart."销售凭证类型
ls_create_header-sales_org = input_body_item-vkorg."销售组织
ls_create_header-division = input_body_item-spart."产品组
ls_create_header-distr_chan = input_body_item-vtweg."分销渠道
ls_create_header-sales_off = input_body_item-vkbur."销售办公室
ls_create_header-sales_grp = input_body_item-vkgrp."销售组
ls_create_header-rec_point = input_body_item-empst."收货点
ls_create_header-doc_date = input_body_item-audat. "凭证日期
ls_create_header-price_date = input_body_item-prsdt."定价日期
ls_create_header-req_date_h = input_body_item-edatu."交货期
ls_create_header-created_by = input_body_item-ernam."创建人
ls_create_header-purch_no_c = input_body_item-bstkd."参考号
ls_create_header-ship_type = input_body_item-vsart."装运类型
-
APPEND ls_create_header TO lt_create_header.
IF input_body_item-kunnr1 IS NOT INITIAL. "售达方
ls_create_partner-partn_role = 'AG'.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = input_body_item-kunnr1
IMPORTING
output = ls_create_partner-partn_numb.
ls_create_partner-itm_number = '000000'.
APPEND ls_create_partner TO lt_create_partner.
CLEAR ls_create_partner.
ENDIF.
IF input_body_item-kunnr2 IS NOT INITIAL. "送达方
ls_create_partner-partn_role = 'WE'.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = input_body_item-kunnr2
IMPORTING
output = ls_create_partner-partn_numb.
ls_create_partner-unload_pt = input_body_item-ablad. "卸货点
ls_create_partner-itm_number = '000000'.
APPEND ls_create_partner TO lt_create_partner.
CLEAR ls_create_partner.
ENDIF.
"修改销售订单头信息
IF input_body_item-cancle_flg = 'U'.
MOVE-CORRESPONDING ls_create_header TO ls_change_header.
ls_change_header_x-updateflag = 'U'.
ls_change_header_x-sales_org = 'X'."销售组织
ls_change_header_x-division = 'X'."产品组
ls_change_header_x-distr_chan = 'X'."分销渠道
ls_change_header_x-sales_off = 'X'."销售办公室
ls_change_header_x-sales_grp = 'X'."销售组
ls_change_header_x-rec_point = 'X'."收货点
ls_change_header_x-doc_date = 'X'. "凭证日期
ls_change_header_x-price_date = 'X'."定价日期
ls_change_header_x-req_date_h = 'X'."交货期
ls_change_header_x-purch_no_c = 'X'."参考号
ls_change_header_x-ship_type = 'X'."装运类型
ENDIF.
CLEAR:ls_create_item.
"行项目
SORT input_body_item-items BY posnr.
LOOP AT input_body_item-items INTO wa_hxm.
l_index = sy-tabix.
"行项目bapi
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = wa_hxm-matnr
IMPORTING
output = wa_hxm-matnr.
ls_create_item-itm_number = wa_hxm-posnr. " 行项目
-
ls_create_item-HG_LV_ITEM = wa_hxm-posnr. -
ls_create_item_x-HG_LV_ITEM = 'X'. ls_create_item-material = wa_hxm-matnr. "物料号 ls_create_item-batch = wa_hxm-charg. "批号 ls_create_item-reason_rej = wa_hxm-abgru. "报价和销售订单的拒绝原因 ls_create_item_x-itm_number = wa_hxm-posnr. " 行项目 ls_create_item_x-material = 'X'. "物料号 ls_create_item_x-batch = 'X'. ls_create_item_x-reason_rej = 'X'. "报价和销售订单的拒绝原因 ls_create_item_x-updateflag = wa_hxm-cancle_flg. "交货计划行 ls_create_schedules-itm_number = wa_hxm-posnr. ls_create_schedules-req_date = wa_hxm-edatu . "计划行日期 ls_create_schedules-req_qty = wa_hxm-kwmeng. "订单数量 一会看下 ls_create_schedules-sched_line = 0001."计划行,需要查询以前的计 ls_create_schedules_x-itm_number = wa_hxm-posnr. ls_create_schedules_x-req_qty = 'X'. ls_create_schedules_x-updateflag = wa_hxm-cancle_flg. ls_create_schedules_x-sched_line = 0001."计划行,需要查询以前的计
ls_create_stat-posex = ls_create_item-itm_number.
ls_create_stat-config_id = ls_create_item-itm_number.
ls_create_stat-root_id = ls_create_item-itm_number.
APPEND ls_create_stat TO lt_create_stat.
ls_create_cfgsinst-config_id = ls_create_item-itm_number.
ls_create_cfgsinst-inst_id = ls_create_item-itm_number.
ls_create_cfgsinst-obj_type = 'MARA'.
ls_create_cfgsinst-class_type = '300'.
APPEND ls_create_cfgsinst TO lt_create_cfgsinst.
"特性
LOOP AT wa_hxm-character INTO wa_tx.
ls_create_character-config_id = ls_create_item-itm_number.
ls_create_character-inst_id = ls_create_item-itm_number.
ls_create_character-charc = wa_tx-atnam.
ls_create_character-value = wa_tx-atwrt.
ls_create_character-value_to = wa_tx-atflv.
APPEND ls_create_character TO lt_create_character.
CLEAR ls_create_character.
ENDLOOP.
LOOP AT wa_hxm-pri_data INTO wa_jg.
-
"条件价格 ls_create_conditions_in-itm_number = wa_hxm-posnr. ls_create_conditions_in-cond_value = wa_jg-kbetr1. "价格( 条件金额或百分数 ) ls_create_conditions_in-cond_type = wa_jg-kschl. "条件类型 ls_create_conditions_in-currency = 'RMB'. ls_create_conditions_inx-itm_number = wa_hxm-posnr. ls_create_conditions_inx-cond_value = 'X'. "价格( 条件金额或百分数 ) ls_create_conditions_inx-cond_type = wa_jg-kschl. "条件类型 ls_create_conditions_inx-currency = 'X'. ls_create_conditions_inx-updateflag = wa_hxm-cancle_flg. APPEND:ls_create_conditions_in TO lt_create_conditions_in, ls_create_conditions_inx TO lt_create_conditions_inx. CLEAR: ls_create_conditions_in, ls_create_conditions_inx. ENDLOOP. -
"条件价格 -
ls_create_conditions_in-itm_number = wa_hxm-posnr. -
ls_create_conditions_in-cond_value = wa_hxm-kbetr1."价格( 条件金额或百分数 ) -
ls_create_conditions_in-cond_type = 'ZPR5'."条件类型 -
ls_create_conditions_inx-itm_number = wa_hxm-posnr. -
ls_create_conditions_inx-cond_value = 'X'."价格( 条件金额或百分数 ) -
ls_create_conditions_inx-cond_type = 'X'."条件类型 -
IF input_body_item-cancle_flg = 'U'. -
ls_create_item_x-updateflag = wa_hxm-cancle_flg. -
ls_create_schedules-sched_line = 0002. -
ls_create_schedules_x-sched_line = 0002. -
ls_create_schedules_x-updateflag = wa_hxm-cancle_flg. -
ENDIF. -
IF input_body_item-cancle_flg = 'U'. -
ls_create_item_x-updateflag = 'U'. -
ls_create_schedules-sched_line = l_index. -
ls_create_schedules_x-sched_line = l_index. -
ls_create_schedules_x-updateflag = 'U'. -
ls_create_conditions_inx-updateflag = 'U'. -
ls_create_conditions_inx-updateflag = 'U'. -
ENDIF. APPEND: ls_create_item_x TO lt_create_item_x, ls_create_item TO lt_create_item, ls_create_schedules TO lt_create_schedules, ls_create_schedules_x TO lt_create_schedules_x. -
ls_create_conditions_in TO lt_create_conditions_in, -
ls_create_conditions_inx TO lt_create_conditions_inx. CLEAR: ls_create_schedules, ls_create_schedules_x, ls_create_conditions_in, ls_create_conditions_inx, l_index. ENDLOOP. "新增 IF input_body_item-cancle_flg = 'I'. CALL FUNCTION 'SD_SALESDOCUMENT_CREATE' EXPORTING sales_header_in = ls_create_header sales_header_inx = ls_create_header_x logic_switch = ls_logic_switch IMPORTING salesdocument_ex = l_create_vbeln TABLES return = lt_create_return sales_items_in = lt_create_item sales_items_inx = lt_create_item_x sales_partners = lt_create_partner sales_schedules_in = lt_create_schedules sales_schedules_inx = lt_create_schedules_x sales_conditions_in = lt_create_conditions_in sales_conditions_inx = lt_create_conditions_inx sales_cfgs_value = lt_create_character sales_cfgs_ref = lt_create_stat sales_cfgs_inst = lt_create_cfgsinst. ENDIF. "修改 IF input_body_item-cancle_flg = 'U'. l_vbeln = input_body_item-vbeln. CALL FUNCTION 'BAPI_SALESORDER_CHANGE' EXPORTING salesdocument = l_vbeln order_header_in = ls_change_header order_header_inx = ls_change_header_x -
SIMULATION = -
BEHAVE_WHEN_ERROR = ' ' -
INT_NUMBER_ASSIGNMENT = ' ' -
LOGIC_SWITCH = -
NO_STATUS_BUF_INIT = ' ' TABLES return = lt_create_return order_item_in = lt_create_item order_item_inx = lt_create_item_x
** partners = lt_create_partner
-
PARTNERCHANGES = -
PARTNERADDRESSES = order_cfgs_ref = lt_create_stat order_cfgs_inst = lt_create_cfgsinst -
ORDER_CFGS_PART_OF = order_cfgs_value = lt_create_character -
ORDER_CFGS_BLOB = -
ORDER_CFGS_VK = -
ORDER_CFGS_REFINST = schedule_lines = lt_create_schedules schedule_linesx = lt_create_schedules_x -
ORDER_TEXT = -
ORDER_KEYS = conditions_in = lt_create_conditions_in conditions_inx = lt_create_conditions_inx -
EXTENSIONIN = -
EXTENSIONEX = -
NFMETALLITMS = . ENDIF. LOOP AT lt_create_return INTO ls_create_return WHERE type = 'E' OR type = 'A'. CONCATENATE ret_msg ls_create_return-message INTO ret_msg SEPARATED BY '/'. ENDLOOP. IF ret_msg IS INITIAL . CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. "查询反馈信息 SELECT a~vbeln a~netwr b~posnr b~mwsbp c~kschl -
c~vtext c~kbetr INTO CORRESPONDING FIELDS OF TABLE gt_ret FROM vbak AS a INNER JOIN vbap AS b ON a~vbeln = b~vbeln INNER JOIN konv AS c ON a~knumv = c~knumv WHERE ( a~vbeln = l_create_vbeln OR a~vbeln = l_vbeln ) AND b~posnr = c~kposn. SORT gt_ret BY vbeln posnr. "组装反馈结构 LOOP AT gt_ret INTO wa_ret. owa_item-kschl = wa_ret-kschl. "条件类型 owa_item-kbetr = wa_ret-kbetr. "金额 SELECT SINGLE vtext INTO owa_item-vtext FROM t685t WHERE spras = '1' AND kschl = owa_item-kschl. APPEND owa_item TO ogt_item. CLEAR: owa_item. wa_ret_copy = wa_ret. "at end of 把数据变* 需要复制 AT END OF posnr. owa_data-posnr = wa_ret_copy-posnr. owa_data-netwr = wa_ret_copy-netwr. owa_data-mwsbp = wa_ret_copy-mwsbp. owa_data-item = ogt_item. APPEND owa_data TO ogt_data. CLEAR: owa_data,ogt_item . ENDAT. CLEAR: wa_ret,wa_ret_copy. ENDLOOP. "成功反馈体 IF input_body_item-cancle_flg = 'U'. output_body_item-vbeln = input_body_item-vbeln. ELSE. output_body_item-vbeln = l_create_vbeln. ENDIF. output_body_item-code = 'S'. output_body_item-data = ogt_data. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. output_body_item-vbeln = input_body_item-vbeln. output_body_item-code = 'E'. ENDIF. "反馈体 output_body_item-contract_no = input_body_item-contract_no. output_body_item-msg = ret_msg. APPEND output_body_item TO output_body. -
IF l_create_vbeln IS NOT INITIAL. -
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' -
EXPORTING -
wait = 'X'. -
"查询反馈信息 -
SELECT a~vbeln -
a~netwr -
b~posnr -
b~mwsbp -
c~kschl
** c~vtext
-
c~kbetr -
INTO CORRESPONDING FIELDS OF TABLE gt_ret -
FROM vbak AS a -
INNER JOIN vbap AS b -
ON a~vbeln = b~vbeln -
INNER JOIN konv AS c -
ON a~knumv = c~knumv -
WHERE a~vbeln = l_create_vbeln -
AND b~posnr = c~kposn. -
SORT gt_ret BY vbeln posnr. -
"组装反馈结构 -
LOOP AT gt_ret INTO wa_ret. -
owa_item-kschl = wa_ret-kschl. -
owa_item-kbetr = wa_ret-kbetr. -
APPEND owa_item TO ogt_item. -
CLEAR: owa_item. -
wa_ret_copy = wa_ret. "at end of 把数据变* 需要复制 -
AT END OF posnr. -
owa_data-posnr = wa_ret_copy-posnr. -
owa_data-netwr = wa_ret_copy-netwr. -
owa_data-mwsbp = wa_ret_copy-mwsbp. -
owa_data-item = ogt_item. -
APPEND owa_data TO ogt_data. -
CLEAR: owa_data,ogt_item . -
ENDAT. -
CLEAR: wa_ret,wa_ret_copy. -
ENDLOOP. -
"反馈体 -
output_body_item-contract_no = l_create_vbeln. -
output_body_item-vbeln = l_create_vbeln. -
output_body_item-data = ogt_data. -
APPEND output_body_item TO output_body. -
output-mt_pur_order_res-msgbd = output_body. -
ELSE.
** CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
-
"失败的反馈????? -
ENDIF. CLEAR: ls_create_header, ls_create_header_x,ls_logic_switch,l_create_vbeln,lt_create_return,lt_create_item,lt_create_item_x,lt_create_partner, lt_create_schedules,lt_create_schedules_x,lt_create_conditions_in,lt_create_conditions_inx,lt_create_stat,lt_create_cfgsinst,lt_create_character,lt_create_text, ls_change_header,ls_change_header_x.ENDLOOP.
output-mt_sales_order_res-msgbd = output_body.
ENDMETHOD.
转载请注明 @年少不知学习好,错把游戏当成宝
这是一个ABAP程序,用于处理销售订单的创建和修改操作。程序首先定义了输入和输出的数据结构,然后调用BAPI_SALESORDER_CHANGE和BAPI_SALESORDER_CREATE函数来创建或更新销售订单。在处理过程中,涉及了抬头数据、项目数据、交货计划、定价条件、合作伙伴等信息,并进行了事务处理以确保数据一致性。程序还处理了错误信息,提供了反馈结果。
2057

被折叠的 条评论
为什么被折叠?



