您的位置:首页 > 其它

Sap 创建销售订单

2018-01-02 11:47 281 查看
FUNCTION z_zsbeo001.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  EXPORTING
*"     VALUE(E_STATUS) TYPE  BAPI_MTYPE
*"  TABLES
*"      T_SO_HEADER STRUCTURE  ZSO_HEAD
*"      T_SO_ITEM STRUCTURE  ZSO_ITEM
*"      T_RETURN STRUCTURE  BAPIRET2
*"----------------------------------------------------------------------
*& 描  述: 创建销售订单
*&---------------------------------------------------------------------*
*& 作  者: ***
*& 日  期: 2017.12.19
*"----------------------------------------------------------------------
* 全局变量
DATA: return_flag(1) TYPE c,
posnr_g TYPE i VALUE 10 ,"项目号
partn_numb(20) TYPE c.   "客户端送达方

*  定义工作区
DATA: wa_so_header LIKE  t_so_header,
wa_so_item  LIKE  t_so_item,
wa_t_return LIKE  t_return,
wa_header TYPE bapisdhd1, "表头
wa_headerx TYPE bapisdhd1x, "表头标志
wa_partner TYPE bapiparnr,  "业务伙伴
wa_item    TYPE bapisditm,  "行项目
wa_itemx   TYPE bapisditmx, "行项目标志
wa_cond    TYPE bapicond,   "价格条件
wa_condx   TYPE bapicondx,  "价格条件标志
wa_schdl   TYPE bapischdl,  "交付计划
wa_schdlx  TYPE bapischdlx,  "交付计划标志
wa_return  TYPE bapiret2.  "返回错误信息
DATA: cond_value LIKE  wa_so_item-cond_valur.  "价格
*  定义内表
DATA:
lt_item    TYPE STANDARD TABLE OF bapisditm,
lt_itemx   TYPE STANDARD TABLE OF bapisditmx,
lt_partner TYPE STANDARD TABLE OF bapiparnr,
lt_cond    TYPE STANDARD TABLE OF bapicond,
lt_condx   TYPE STANDARD TABLE OF bapicondx,
lt_schdl    TYPE STANDARD TABLE OF bapischdl,
lt_schdlx   TYPE STANDARD TABLE OF bapischdlx,
lt_return  TYPE STANDARD TABLE OF bapiret2.
* 给head 赋值
CLEAR wa_header.
READ TABLE   t_so_header  INTO wa_so_header INDEX 1.
wa_header-doc_type   = wa_so_header-auart.  "销售凭证类型
wa_header-sales_org  = wa_so_header-vkorg.  "销售组织
wa_header-distr_chan = wa_so_header-vtweg.  "分销渠道
wa_header-division   = wa_so_header-spart.  "产品组
wa_header-sales_grp  = wa_so_header-vkgrp. "销售组
wa_header-sales_off  = wa_so_header-vkbur. "销售办事处
wa_header-req_date_h = wa_so_header-edatu_vbak."请求交货日期
wa_header-purch_no_c = wa_so_header-bstkd. "采购订单编号-PC号
wa_header-pp_search  = wa_so_header-ktext_v. "采购订单描述
wa_header-pmnttrms   = wa_so_header-dzterm."付款条件
wa_header-ship_cond  = wa_so_header-dzterm. "装运条件
wa_header-purch_no_s = wa_so_header-bstkd_e. "装运条件

CLEAR wa_headerx.
wa_headerx-doc_type   = 'X'.  "销售凭证类型X
wa_headerx-sales_org  = 'X'.  "销售组织
wa_headerx-distr_chan = 'X'.  "分销渠道
wa_headerx-division   = 'X'.  "产品组
wa_headerx-sales_grp  = 'X'. "销售组
wa_headerx-sales_off  = 'X'. "销售办事处
wa_headerx-req_date_h = 'X'."请求交货日期
wa_headerx-purch_no_c = 'X'. "采购订单编号-PC号
wa_headerx-pp_search  = 'X'. "采购订单描述
wa_headerx-pmnttrms   = 'X'."付款条件
wa_headerx-ship_cond  = 'X'. "装运条件
wa_headerx-purch_no_s = 'X'. "装运条件

* 客户 赋值客户号 客户端送达方

partn_numb =  wa_so_header-kunnr .
*  售达方
CLEAR: wa_partner, lt_partner[].
wa_partner-partn_role = 'AG'.   "售达方
wa_partner-partn_numb = partn_numb.
APPEND wa_partner TO lt_partner.
*  收票方
CLEAR wa_partner.
wa_partner-partn_role = 'RE'. "收票方
wa_partner-partn_numb = partn_numb.
APPEND wa_partner TO lt_partner.
*  RG 付款方
CLEAR wa_partner.
wa_partner-partn_role = 'RG'."RG 付款方
wa_partner-partn_numb = partn_numb.
APPEND wa_partner TO lt_partner.
*  WE 送达方
CLEAR wa_partner.
wa_partner-partn_role = 'WE'. "WE 送达方
wa_partner-partn_numb = partn_numb.
* wa_partner-name     = '宋大房名称'.
APPEND wa_partner TO lt_partner.

*行项目处理
REFRESH: lt_item,lt_cond,lt_schdl.
*  循环给lt_item 赋值

LOOP AT t_so_item INTO  wa_so_item.
CLEAR  wa_item.
wa_item-itm_number = posnr_g. "项目号
wa_item-material   = wa_so_item-matnr. "物料号
wa_item-sales_unit = wa_so_item-dzteme.   "计量单位
wa_item-target_qty = wa_so_item-dzmeng. "数量
IF wa_so_item-waers EQ ''.
wa_item-currency = wa_so_item-waers. "货币代码
ELSE.
wa_item-currency = 'CNY'.
ENDIF.
cond_value = wa_so_item-cond_valur.
APPEND wa_item TO lt_item.

CLEAR  wa_itemx.
wa_itemx-itm_number = posnr_g. "项目号
wa_itemx-material   = 'X'. "物料号
wa_itemx-sales_unit = 'X'.   "计量单位
wa_itemx-target_qty = 'X'. "数量
*    wa_itemx-currency   = 'X'. "凭证货币不存在此字段
APPEND wa_itemx TO lt_itemx.

CLEAR wa_schdl. "计划行
wa_schdl-itm_number =  posnr_g.
wa_schdl-req_qty    =  wa_so_item-dzmeng.  "数量
APPEND wa_schdl TO lt_schdl.
CLEAR wa_schdlx.
wa_schdlx-itm_number =  posnr_g.
wa_schdlx-req_qty    =  'X'.  "数量
APPEND wa_schdlx TO lt_schdlx.

CLEAR: wa_cond.   "Item Conditions
wa_cond-itm_number = posnr_g.
wa_cond-cond_type  = 'zp99'.  "定价条件
wa_cond-cond_value = cond_value.  "价格
APPEND wa_cond TO lt_cond.

CLEAR: wa_condx.
wa_condx-itm_number = posnr_g.
wa_condx-cond_type  = 'X'.  "定价条件
wa_condx-cond_value = 'X'.  "价格
APPEND wa_condx TO lt_condx.

posnr_g =   posnr_g + 10 .                               "项目号*2

ENDLOOP.

* 调用bapi 接口创建订单
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
EXPORTING
order_header_in     = wa_header
TABLES
return              = lt_return "返回记录
order_items_in      = lt_item "行记录项
order_partners      = lt_partner "客户
order_schedules_in  = lt_schdl "计划行
order_conditions_in = lt_cond.  "添加

* 处理错误消息:通过判断消息的类型,来判断BAPI是否成功

LOOP AT lt_return INTO wa_return.
IF wa_return-type EQ 'E' OR
wa_return-type = 'A' OR
wa_return = 'X'.
return_flag = 'X'.  "失败
ENDIF.
MOVE-CORRESPONDING wa_return TO wa_t_return. "根据字段名称copy 信息
APPEND wa_t_return TO t_return.
ENDLOOP.

IF return_flag NE 'X'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
COMMIT WORK AND WAIT.
e_status = 'S'. "返回状态
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
e_status = 'E'. "返回状态

ENDIF.
ENDFUNCTION.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: