SAP ABAP 创建标准销售订单 BAPI_CUSTOMERRETURN_CREATE


FORM frm_call_bapi   USING   u_data TYPE zcmt0002.
  DATA:lv_salesdocument    TYPE bapivbeln-vbeln, "so
       ls_sales_header_in  TYPE bapisdhd1,
       ls_sales_header_inx TYPE bapisdhd1x.
  DATA:lt_return               TYPE STANDARD TABLE OF bapiret2,
       ls_return               TYPE bapiret2,
       ls_sales_schedules_in   TYPE bapischdl,
       lt_sales_schedules_in   TYPE STANDARD  TABLE OF bapischdl,
       ls_sales_schedules_inx  TYPE bapischdlx,
       lt_sales_schedules_inx  TYPE STANDARD  TABLE OF bapischdlx,
       lt_sales_conditions_in  TYPE STANDARD  TABLE OF bapicond,
       ls_sales_conditions_in  TYPE bapicond,
       ls_sales_conditions_inx TYPE bapicondx,
       lt_sales_conditions_inx TYPE STANDARD  TABLE OF  bapicondx,
       ls_sales_items_in       TYPE  bapisditm,
       lt_sales_items_in       TYPE STANDARD TABLE OF  bapisditm,
       ls_sales_items_inx      TYPE  bapisditmx,
       lt_sales_items_inx      TYPE STANDARD TABLE OF bapisditmx,
       ls_sales_partners       TYPE  bapiparnr,
       lt_sales_partners       TYPE STANDARD TABLE OF  bapiparnr,
       ls_extensionin          TYPE  bapiparex,
       lt_extensionin          TYPE STANDARD TABLE OF bapiparex,
       lt_textheaders_ex       TYPE TABLE OF bapisdtehd,
       ls_textheaders_ex       TYPE bapisdtehd,
       lt_textlines_ex         TYPE TABLE OF   bapitextli,
       ls_textlines_ex         TYPE bapitextli,
       lt_schedule_ex          TYPE TABLE OF bapisdhedu,
       ls_schedule_ex          TYPE  bapisdhedu,
       lt_items_ex             LIKE TABLE OF bapisdit,
       ls_items_ex             LIKE   bapisdit.
  DATA:lv_kunag    TYPE vbak-kunnr,
       lv_posnr    TYPE vbap-posnr,
       lv_str      TYPE string,
       lv_dwerk  TYPE mvke-dwerk,
       lv_matnr TYPE mvke-matnr,
       lv_spart TYPE mara-spart,
       lv_waers TYPE knvv-waers,
       lv_num TYPE i.
  DATA:lv_tdname   TYPE thead-tdname, "
       lt_tline    TYPE TABLE OF tline, "
       ls_tline    TYPE tline.

  READ TABLE gt_docs INTO  DATA(ls_docs)  WITH KEY bstkd = u_data-key_value01 .
    IF sy-subrc = 0.
      CLEAR:lv_salesdocument,ls_sales_header_in,ls_sales_header_inx,lt_item,
            lt_return,lt_sales_schedules_in,lt_sales_schedules_inx,lt_sales_conditions_in,
            lt_sales_conditions_inx,lt_sales_items_in ,lt_sales_items_inx,lt_sales_partners,
            lt_extensionin, lt_textheaders_ex,ls_textheaders_ex,lt_textlines_ex,ls_textlines_ex ,
            lt_schedule_ex ,ls_schedule_ex,lt_items_ex ,ls_items_ex,lv_kunag,lv_posnr,lv_str,
            lv_matnr,lv_spart,lv_waers,lv_num.

      ls_sales_header_in-doc_type    ="订单类型
      ls_sales_header_in-sales_org   ="销售组织
      ls_sales_header_in-distr_chan  ="销售渠道
      ls_sales_header_in-doc_date    ="提单有效期到
      ls_sales_header_in-created_by  ="创建人
      ls_sales_header_in-purch_no_c  ="提单号
      ls_sales_header_in-division   =" 产品组

      ls_sales_header_inx-updateflag = 'I'.
      ls_sales_header_inx-doc_type   = 'X'."订单类型
      ls_sales_header_inx-sales_org  = 'X'."销售组织
      ls_sales_header_inx-distr_chan = 'X'   ."销售渠道
      ls_sales_header_inx-doc_date   = 'X'."提单有效期到
      ls_sales_header_inx-s_proc_ind = 'X'."混规标识
      ls_sales_header_inx-purch_no_c = 'X'."提单号
      ls_sales_header_inx-division   = 'X' ." 产品组

      ls_sales_partners-partn_role = 'AG'.            
      ls_sales_partners-partn_numb = "售达方
      ls_sales_partners-country    = 'CN'.
      APPEND ls_sales_partners TO lt_sales_partners.
      CLEAR ls_sales_partners.

      ls_sales_partners-partn_role = 'WE'.           
      ls_sales_partners-partn_numb = "收货方

      SELECT SINGLE name1 pstlz regio anred ort01 FROM kna1
      INTO (ls_sales_partners-name,ls_sales_partners-postl_code,
            ls_sales_partners-region,ls_sales_partners-title,
            ls_sales_partners-city)
      WHERE kunnr ="售达方

      ls_sales_partners-country    = 'CN'.
      APPEND ls_sales_partners TO lt_sales_partners.
      CLEAR ls_sales_partners.
 

ls_sales_items_in-plant      = "工厂      

ls_sales_items_in-ship_point = "装运点      

ls_sales_items_in-itm_number = "销售凭证项目    

 ls_sales_items_in-material   ="物料     

 ls_sales_items_in-store_loc  = "发货仓库      

APPEND ls_sales_items_in TO lt_sales_items_in.      
CLEAR ls_sales_items_in.     

ls_sales_items_inx-plant      = 'X'."工厂      

ls_sales_items_inx-ship_point = 'X'."装运点      

ls_sales_items_inx-itm_number = lv_posnr.      

ls_sales_items_inx-material   = 'X'.      

ls_sales_items_inx-store_loc  = 'X'.      

APPEND ls_sales_items_inx TO lt_sales_items_inx.      
CLEAR ls_sales_items_inx.      

      

ls_sales_schedules_in-itm_number = lv_posnr.        

ls_sales_schedules_in-sched_line = 1.        

ls_sales_schedules_in-req_qty    = "订单数量        

APPEND ls_sales_schedules_in TO lt_sales_schedules_in.        
CLEAR ls_sales_schedules_in.        

ls_sales_schedules_inx-itm_number = lv_posnr.        

ls_sales_schedules_inx-sched_line = 1.       

ls_sales_schedules_inx-req_qty    = 'X'.        

APPEND ls_sales_schedules_inx TO lt_sales_schedules_inx.        
CLEAR :ls_sales_schedules_inx.      

 ls_items_ex-itm_number = lv_posnr.      

ls_items_ex-creat_date = "提单创建日期      

APPEND ls_items_ex TO lt_items_ex.      
CLEAR ls_items_ex.      

"录入价格相关数据      
SELECT SINGLE"通过销售组织 分销渠道获取到客户的定价过程 用于判断价格是用pr00 还是zpr1            

t~vkorg, t~vtweg, t~spart, t~kalsm, t~kartv, k~kalks,k~kunnr, t~kalvg        

FROM t683v AS t        INNER 
JOIN knvv  AS k  ON t~vkorg = k~vkorg                         
AND t~kalks = k~kalks        INNER 
JOIN tvkov AS v  ON v~vkorg = k~vkorg                         
AND v~vtwku = k~vtweg        INNER 
JOIN tvkos AS s  ON s~vkorg = k~vkorg                         
AND s~spaku = k~spart        INNER 
JOIN tvak  AS a  ON t~kalvg = a~kalvg        
INTO  @DATA(ls_t683v)        
WHERE t~vkorg = "销售组织       
AND   t~vtweg = "销售渠道       
AND   t~spart = "产品组        
AND   a~auart = "订单类型       
AND   t~kalsm IN ('Z00002','Z00007')        
AND   k~kunnr = "售达方.      

IF 单价 IS NOT INITIAL."单价(含税)       

 ls_sales_conditions_in-itm_number  = "销售凭证项目.     

ls_sales_conditions_in-cond_st_no  = '011'.           "步骤        

ls_sales_conditions_in-cond_type   = ls_t683v-kartv."'PR00'. "        "Condition type        

ls_sales_conditions_in-cond_value  = "单价."       

ls_sales_conditions_in-currency    = "币种."'CNY'.        

APPEND ls_sales_conditions_in TO lt_sales_conditions_in.        
CLEAR ls_sales_conditions_in.        

ls_sales_conditions_inx-itm_number  = "销售凭证项目.        "Condition item number        

ls_sales_conditions_inx-cond_st_no  = '011'.           "步骤        

ls_sales_conditions_inx-cond_type   = ls_t683v-kartv."'PR00'. "        "Condition type        

ls_sales_conditions_inx-cond_value  = 'X'."        

ls_sales_conditions_inx-updateflag  = 'I'.        

ls_sales_conditions_inx-currency    = 'X'.        

APPEND ls_sales_conditions_inx TO lt_sales_conditions_inx.        

CLEAR ls_sales_conditions_inx.      

ENDIF.      

"返回销售订单号给发起系统      
      
CALL FUNCTION 'BAPI_CUSTOMERRETURN_CREATE' "退货单创建          
EXPORTING            

return_header_in     = ls_sales_header_in            

return_header_inx    = ls_sales_header_inx          

IMPORTING            

salesdocument        = lv_salesdocument          

TABLES            
return               = lt_return           

 return_items_in      = lt_sales_items_in            

return_items_inx     = lt_sales_items_inx           

 return_partners      = lt_sales_partners            

return_schedules_in  = lt_sales_schedules_in            

return_schedules_inx = lt_sales_schedules_inx            

return_conditions_in = lt_sales_conditions_in.      

   
IF lv_salesdocument IS NOT INITIAL.        
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'          
EXPORTING            
wait = abap_true.        
LOOP AT gt_log ASSIGNING FIELD-SYMBOL(<fs_log>) WHERE key_value01 = ls_docs-bstkd.
*     更新日志          <fs_log>
-status       = cns_sucss.          <fs_log>
-fkey_value01 = lv_salesdocument.          
MESSAGE s028(zcm) INTO lv_str WITH lv_salesdocument.          <fs_log>
-message      = lv_str ."TEXT-t05 && lv_salesdocument && '已生成'.
*     更新返回表          gs_ret
-key_value01    = <fs_log>-key_value01.          gs_ret
-status         = cns_sucss.          gs_ret
-message        = <fs_log>-message.          gs_ret
-fkey_value01   = lv_salesdocument.          
APPEND gs_ret TO gt_rets.        
ENDLOOP.        
UPDATE vbak SET  XX = ls_docs-XX"更新抬头增强字段        
WHERE  vbeln = lv_salesdocument.        
IF sy-subrc = 0 .          
COMMIT WORK AND WAIT.        
ELSE.          
ROLLBACK WORK.        
ENDIF.        
"添加so抬头文本        lv_tdname         
= lv_salesdocument.        ls_tline
-tdformat = '01'.        ls_tline
-tdline   = ls_docs-zcommt.        
APPEND ls_tline TO lt_tline.        
CLEAR ls_tline.        

CALL FUNCTION 'CREATE_TEXT'          
EXPORTING            fid       
= '0001'            flanguage 
= '1'            fname     
= lv_tdname            fobject   
= 'VBBK'          
TABLES            flines    
= lt_tline          
EXCEPTIONS            no_init   
= 1            no_save   
= 2            
OTHERS    = 3.
****给行项目文本进行赋值        
CLEAR:lv_posnr.        
LOOP AT lt_item  INTO ls_item ." WHERE zrsv01 <> '' .          
CLEAR:lv_tdname,lt_tline.          
ADD 10 TO lv_posnr..          
IF ls_item-zrsv01 <> '' .            lv_tdname 
= lv_salesdocument && lv_posnr.            ls_tline
-tdformat = '01'.            ls_tline
-tdline = ls_item-zrsv01.            
APPEND ls_tline TO lt_tline.            
CLEAR ls_tline.            
CALL FUNCTION 'CREATE_TEXT'              
EXPORTING                fid       
= '0001'                flanguage 
= '1'                fname     
= lv_tdname                fobject   
= 'VBBP'              
TABLES                flines    
= lt_tline              
EXCEPTIONS                no_init   
= 1                no_save   
= 2                
OTHERS    = 3.          
ENDIF.            
CLEAR:ls_item,lt_return,lt_sales_items_in, lt_sales_items_inx,             lt_sales_partners
, lt_sales_schedules_in,lt_sales_schedules_inx              
, lt_sales_conditions_in.          
ENDLOOP.      
ELSE.        
CLEAR: lv_str.          
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.          
LOOP AT lt_return INTO ls_return.            
IF ls_return-type CA 'AEX'.              lv_str 
= lv_str && ls_return-message.              
LOOP AT gt_log ASSIGNING <fs_log> WHERE key_value01 = ls_docs-bstkd.
*       更新日志                <fs_log>
-status        = cns_error.                <fs_log>
-fkey_value01  = lv_salesdocument.                <fs_log>
-message       = lv_str.
*       更新返回表                gs_ret
-key_value01     = <fs_log>-key_value01.                gs_ret
-status          = <fs_log>-status.                gs_ret
-message         = <fs_log>-message.                gs_ret
-fkey_value01    = <fs_log>-key_value01.                
APPEND gs_ret TO gt_rets.              
ENDLOOP.            
ENDIF.          
ENDLOOP.          
CLEAR:ls_item,lt_return,lt_sales_items_in, lt_sales_items_inx,         lt_sales_partners
, lt_sales_schedules_in,lt_sales_schedules_inx          
, lt_sales_conditions_in..      
ENDIF.    

ENDLOOP.  

ENDIF.
ENDFORM.

单价(含税)

<think>嗯,用户问的是关于SAP中的BAPI_CUSTOMERRETURN_CHANGE如何删除销售订单。首先,我需要回忆一下这个BAPI的用途。这个BAPI通常用于修改客户退货相关的单据,比如退货申请、退货订单等等。那删除销售订单的话,可能需要通过这个BAPI来操作,但不确定具体步骤。 接下来,我需要确认这个BAPI是否支持删除操作。可能的话,需要传入订单号和一些控制参数。比如,在SAP中,通常删除操作可能需要设置某个标识,比如DELETE_FLAG或者类似字段。我需要查阅相关文档或者函数模块的参数结构。 然后,用户可能想知道具体的步骤,比如如何准备输入参数,调用BAPI,以及后续的提交动作。可能需要用到BAPI的扩展参数,比如EXTENSIONIN或者类似的,来传递删除的指示。同时,还需要注意权限问题,执行删除操作需要相应的权限,否则会报错。 另外,处理后的COMMIT WORK和错误检查也很重要。调用BAPI后,必须检查RETURN表是否有错误信息,如果有的话需要处理,否则事务不会被提交。用户可能在实际操作中遇到问题,比如参数设置不正确导致删除失败,或者权限不足。 可能用户在使用这个BAPI时遇到困难,或者不确定如何正确传递参数。需要详细说明每个步骤,并提醒注意事项,比如测试环境先验证,避免生产数据问题。同时,可能涉及到的表结构,比如ORDER_HEADER_IN或ORDER_ITEM_IN中的某些字段需要设置为删除状态。 最后,需要确认是否这个BAPI真的支持删除销售订单,或者是否有其他更合适的BAPI推荐。比如,有时候删除可能需要不同的函数模块,或者通过状态设置来标记删除。需要确保给出的信息准确,避免误导用户。</think>关于使用BAPI_CUSTOMERRETURN_CHANGE删除销售订单的步骤说明如下: 1. **功能定位** - 该BAPI主要用于客户退货单的创建/修改 - 销售订单删除属于逆向操作,需通过特定参数触发 2. **关键输入参数** ```abap DATA: lt_return TYPE TABLE OF bapiret2, ls_header TYPE bapi_alm_order_headers_i, lt_item TYPE TABLE OF bapi_alm_order_items_i. ls_header-objectnumber = '销售订单号'. "填入要删除的订单号 ls_header-change_mode = 'D'. "D表示删除操作 ``` 3. **执行调用** ```abap CALL FUNCTION 'BAPI_CUSTOMERRETURN_CHANGE' EXPORTING orderheader = ls_header TABLES orderitem = lt_item return = lt_return. ``` 4. **事务提交** ```abap IF NOT line_exists( lt_return[ type = 'E' ] ). CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF. ``` **注意事项**: 1. 权限要求:需分配事务代码VA02的删除权限 2. 前置条件:订单不能存在后续交货单或财务凭证 3. 数据残留:物理删除需配合归档程序,逻辑删除仅标记删除标识 4. 替代方案:可考虑通过状态管理(设置订单为"删除"状态) **建议测试流程**: 1. 先在测试系统验证 2. 使用测试订单号执行删除 3. 通过VA03查看删除标记 4. 检查返回消息表是否包含错误 完整操作建议参考SAP标准文档《销售订单生命周期管理》(事务代码SD_ORDER)中的删除策略说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值