只是做个简单记录,用的时候方便copy修改
FORM frm_create_so .
DATA:lw_show LIKE LINE OF gt_show.
FIELD-SYMBOLS LIKE LINE OF gt_show.
DATA: l_header_in TYPE bapisdhd1,
l_header_inx TYPE bapisdhd1x,
lt_item_in TYPE TABLE OF bapisditm WITH HEADER LINE,
lt_item_inx TYPE TABLE OF bapisditmx WITH HEADER LINE,
lt_partners TYPE TABLE OF bapiparnr WITH HEADER LINE,
lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE,
lt_business_ex TYPE TABLE OF bapisdbusi WITH HEADER LINE,
lt_conditions TYPE TABLE OF bapicond WITH HEADER LINE,
lt_conditions_inx TYPE bapicondx OCCURS 0 WITH HEADER LINE,
lt_schedules_in TYPE TABLE OF bapischdl WITH HEADER LINE,
lt_schedules_inx TYPE TABLE OF bapischdlx WITH HEADER LINE.
DATA: l_swith TYPE bapisdls .
DATA: l_vbeln LIKE vbak-vbeln.
DATA: l_po LIKE bapisdhd1-purch_no_c.
DATA: l_vrkme LIKE t006a-mseh3.
DATA: l_msg TYPE string.
DATA: l_vbeln1 TYPE bapivbeln-vbeln.
LOOP AT gt_show ASSIGNING WHERE err IS INITIAL.
* L_SWITH-PRICING = 'G'. "定价类型 :G:复制不变定价因素且重定税款
* L_SWITH-COND_HANDL = 'X'. "定价类型 :G:复制不变定价因素且重定税款
* L_HEADER_IN-SD_DOC_CAT = 'C'. "SD 凭证类别 C 订单
l_header_in-doc_type = -auart. "销售凭证类型
l_header_in-sales_org = -vkorg. "销售组织
l_header_in-distr_chan = -vtweg. "分销渠道
l_header_in-division = -spart. "产品组
* L_HEADER_IN-SALES_GRP = -VKGRP. "销售组
l_header_in-sales_off = -vkbur. "销售部门
l_header_in-doc_date = -audat. "凭证日期 (接收/发送日期)
* L_HEADER_IN-WAR_DATE = SY-DATUM. "担保日期
PERFORM frm_matnr_input CHANGING -matnr.
lt_item_in-itm_number = 10. "行项目
lt_item_in-material = -matnr. "物料号
lt_item_in-plant = -werks. "工厂
lt_item_in-store_loc = -lgort. "库存地点
lt_item_in-sales_unit = -vrkme. "销售单位
lt_item_in-ship_point = -vstel. "装运点/接收点
lt_item_in-val_type = -bwtar. "评估类型
lt_item_in-target_qty = -wmeng. "目标数量
APPEND lt_item_in.
*
IF -netpr IS NOT INITIAL.
lt_conditions-itm_number = 10.
lt_conditions-cond_type = 'ZR06'. "条件类型
lt_conditions-currency = 'RMB'.
* lt_conditions-cond_unit = -kmein. "条件单位
lt_conditions-cond_value = -netpr. "定价比率 单价
IF -kpein IS INITIAL.
-kpein = 1.
ENDIF.
lt_conditions-cond_p_unt = -kpein. "条件定价单位 "定价基数
lt_conditions-cond_updat = 'X'.
lt_conditions-cond_st_no = 10.
lt_conditions-cond_count = 1.
lt_conditions-condchaman = 'X'.
APPEND lt_conditions.
CLEAR lt_conditions.
CLEAR lt_conditions_inx[].
lt_conditions_inx-itm_number = 10.
lt_conditions_inx-cond_st_no = 10.
lt_conditions_inx-cond_count = 1.
lt_conditions_inx-cond_type = 'ZR06'.
lt_conditions_inx-cond_value = 'X'.
lt_conditions_inx-currency = 'X'.
* lt_conditions_inx-cond_unit = 'X'. "条件单位 delete at 20141014
lt_conditions_inx-cond_p_unt = 'X'.
lt_conditions_inx-updateflag = 'U'.
APPEND lt_conditions_inx.
ENDIF.
CLEAR lt_schedules_in.
lt_schedules_in-itm_number = 10.
lt_schedules_in-sched_line = 10.
lt_schedules_in-req_qty = -wmeng. "以销售单位计的订单数量
lt_schedules_in-req_date = sy-datum. "以销售单位计的订单数量
lt_schedules_in-date_type = 1. "以销售单位计的订单数量
APPEND lt_schedules_in.
CLEAR lt_schedules_inx.
lt_schedules_inx-itm_number = 10.
lt_schedules_inx-sched_line = 10.
lt_schedules_inx-req_qty = 'X'.
lt_schedules_inx-updateflag = 'X'. "以销售单位计的订单数量
APPEND lt_schedules_inx.
lt_item_inx-itm_number = 10.
lt_item_inx-material = 'X'.
lt_item_inx-plant = 'X'.
lt_item_inx-store_loc = 'X'.
lt_item_inx-target_qty = 'X'.
lt_item_inx-target_qu = 'X'.
lt_item_inx-val_type = 'X'.
lt_item_inx-updateflag = 'I'..
lt_item_inx-sales_unit = 'X'.
lt_item_inx-ship_point = 'X'.
APPEND lt_item_inx.
*
PERFORM frm_kunnr_input CHANGING -kunnr.
lt_partners-partn_role = 'WE'. "合作伙伴功能 RE 收票方 WE 送达方
lt_partners-partn_numb = -kunnr.
APPEND lt_partners.
lt_partners-partn_role = 'RE'. "合作伙伴功能 RE 收票方 WE 送达方
lt_partners-partn_numb = -kunnr.
APPEND lt_partners.
lt_partners-partn_role = 'AG'. "合作伙伴功能 RE 收票方 WE 送达方
lt_partners-partn_numb = -kunnr.
APPEND lt_partners.
lt_partners-partn_role = 'RG'. "合作伙伴功能 RE 收票方 WE 送达方
lt_partners-partn_numb = -kunnr.
APPEND lt_partners.
* LT_BUSINESS_EX-ITM_NUMBER = 10.
* LT_BUSINESS_EX-TRANS_CAT = 'Z005'. "运输方式类型 Z005 公路运输
* APPEND LT_BUSINESS_EX.
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
EXPORTING
order_header_in = l_header_in
logic_switch = l_swith
IMPORTING
salesdocument = l_vbeln1
TABLES
return = lt_return
order_items_in = lt_item_in
order_items_inx = lt_item_inx
order_partners = lt_partners
order_schedules_in = lt_schedules_in
order_schedules_inx = lt_schedules_inx
order_conditions_in = lt_conditions
order_conditions_inx = lt_conditions_inx.
-vbeln_va = l_vbeln1.
l_vbeln = l_vbeln1.
READ TABLE lt_return WITH KEY type = 'E'.
"异常处理
CLEAR l_vbeln.
CLEAR lt_return[].
CLEAR lt_item_in[].
CLEAR lt_item_inx[].
CLEAR lt_partners[].
CLEAR lt_schedules_in[].
CLEAR lt_conditions[].
CLEAR lt_conditions_inx[].
CLEAR lt_schedules_inx[].
ENDLOOP.
ENDFORM. " FRM_CREATE_SO
然后说几点问题:
一、首先是两个单位:
二、:
* L_SWITH-PRICING = 'G'. "定价类型 :G:复制不变定价因素且重定税款
这个B C G具体取哪个值或者使用默认值可以参考:
双击行项目,点更新
三、 lt_conditions_inx
-updateflag
=
'U'
.
这里更新标志是用U还是用I,
一般而言,U是修改原来数据,I是插入一条新数据
当然,有时候是修改不了价格的,
比如后台配置不允许手动修改价格等
当然,可以在创建的时候直接修改审批状态:
FORM frm_change_status
USING pv_vbeln
.
.
DATA : l_objnr TYPE vbak -objnr .
DO 20 TIMES .
SELECT SINGLE objnr
INTO l_objnr
FROM vbak
WHERE vbeln = pv_vbeln .
IF sy -subrc = 0 .
EXIT .
ELSE .
WAIT UP TO 1 SECONDS .
ENDIF .
ENDDO .
CHECK l_objnr IS NOT INITIAL .
* USER_STATUS = 'E0004'.
CALL FUNCTION 'STATUS_CHANGE_EXTERN'
EXPORTING
objnr = l_objnr
user_status = 'E0004' “审批通过
EXCEPTIONS
object_not_found = 1
status_inconsistent = 2
status_not_allowed = 3
OTHERS = 4 .
ENDFORM . " FRM_CHAN
DATA : l_objnr TYPE vbak -objnr .
DO 20 TIMES .
SELECT SINGLE objnr
INTO l_objnr
FROM vbak
WHERE vbeln = pv_vbeln .
IF sy -subrc = 0 .
EXIT .
ELSE .
WAIT UP TO 1 SECONDS .
ENDIF .
ENDDO .
CHECK l_objnr IS NOT INITIAL .
* USER_STATUS = 'E0004'.
CALL FUNCTION 'STATUS_CHANGE_EXTERN'
EXPORTING
objnr = l_objnr
user_status = 'E0004' “审批通过
EXCEPTIONS
object_not_found = 1
status_inconsistent = 2
status_not_allowed = 3
OTHERS = 4 .
ENDFORM . " FRM_CHAN
有时候,计划行数量没更新过来
到时候再自己调试下哪儿的原因,或者最笨的方法,录个bdc确认计划行就行了
本文提供了一个SAP销售订单创建的ABAP代码示例,包括数据结构定义及调用BAPI_SALESORDER_CREATEFROMDAT2的过程。讨论了定价条件、伙伴角色设置等问题,并附带介绍了订单状态变更的方法。




1461

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



