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(zcmINTO 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 .          
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.

单价(含税)
posted @ 2022-08-02 17:47  LikZ-WM  阅读(231)  评论(0编辑  收藏  举报