_order_cre_in~si_sales_order_cre_in.
*** **** INSERT IMPLEMENTATION HERE **** ***
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.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
*创建销售订单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.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
"修改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.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
"返回结构定义
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. "条件金额
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
TYPES: END OF ret_body.
DATA : gt_ret TYPE STANDARD TABLE OF ret_body,
wa_ret TYPE ret_body.
- 1
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. "统计内表条目数
- 1
- 2
- 3
" 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.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 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.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
-
IF l_tabix EQ num.
- 1
-
output-mt_pur_order_res-msgbd = output_body.
- 1
-
ENDIF. CLEAR: input_body_item,l_vbeln,output_body_item. CONTINUE. ENDIF.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
删除订单结束***************
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."装运类型
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
-
APPEND ls_create_header TO lt_create_header.
- 1
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. " 行项目
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
-
ls_create_item-HG_LV_ITEM = wa_hxm-posnr.
- 1
-
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."计划行,需要查询以前的计
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
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.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
"特性
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.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
-
"条件价格 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.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
-
"条件价格
- 1
-
ls_create_conditions_in-itm_number = wa_hxm-posnr.
- 1
-
ls_create_conditions_in-cond_value = wa_hxm-kbetr1."价格( 条件金额或百分数 )
- 1
-
ls_create_conditions_in-cond_type = 'ZPR5'."条件类型
- 1
-
ls_create_conditions_inx-itm_number = wa_hxm-posnr.
- 1
-
ls_create_conditions_inx-cond_value = 'X'."价格( 条件金额或百分数 )
- 1
-
ls_create_conditions_inx-cond_type = 'X'."条件类型
- 1
-
IF input_body_item-cancle_flg = 'U'.
- 1
-
ls_create_item_x-updateflag = wa_hxm-cancle_flg.
- 1
-
ls_create_schedules-sched_line = 0002.
- 1
-
ls_create_schedules_x-sched_line = 0002.
- 1
-
ls_create_schedules_x-updateflag = wa_hxm-cancle_flg.
- 1
-
ENDIF.
- 1
-
IF input_body_item-cancle_flg = 'U'.
- 1
-
ls_create_item_x-updateflag = 'U'.
- 1
-
ls_create_schedules-sched_line = l_index.
- 1
-
ls_create_schedules_x-sched_line = l_index.
- 1
-
ls_create_schedules_x-updateflag = 'U'.
- 1
-
ls_create_conditions_inx-updateflag = 'U'.
- 1
-
ls_create_conditions_inx-updateflag = 'U'.
- 1
-
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.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
-
ls_create_conditions_in TO lt_create_conditions_in,
- 1
-
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
-
SIMULATION =
- 1
-
BEHAVE_WHEN_ERROR = ' '
- 1
-
INT_NUMBER_ASSIGNMENT = ' '
- 1
-
LOGIC_SWITCH =
- 1
-
NO_STATUS_BUF_INIT = ' ' TABLES return = lt_create_return order_item_in = lt_create_item order_item_inx = lt_create_item_x
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
** partners = lt_create_partner
-
PARTNERCHANGES =
- 1
-
PARTNERADDRESSES = order_cfgs_ref = lt_create_stat order_cfgs_inst = lt_create_cfgsinst
- 1
- 2
- 3
- 4
- 5
-
ORDER_CFGS_PART_OF = order_cfgs_value = lt_create_character