首页 > 其他分享 >BAPI_SALESORDER_CREATEFROMDAT2创建销售订单(并修改价格)

BAPI_SALESORDER_CREATEFROMDAT2创建销售订单(并修改价格)

时间:2022-10-12 13:38:41浏览次数:92  
标签:partners BAPI inx item SALESORDER CREATEFROMDAT2 lt schedules conditions


只是做个简单记录,用的时候方便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





然后说几点问题:



一、首先是两个单位:



BAPI_SALESORDER_CREATEFROMDAT2创建销售订单(并修改价格)_python

​​
修改价格的时候,别把定价条件的单位给变了,



当然,具体根据需求来看
​​

BAPI_SALESORDER_CREATEFROMDAT2创建销售订单(并修改价格)_数据分析_02

​​



二、:



*    L_SWITH-PRICING  = 'G'.                                "定价类型 :G:复制不变定价因素且重定税款



这个B C G具体取哪个值或者使用默认值可以参考:



双击行项目,点更新 



BAPI_SALESORDER_CREATEFROMDAT2创建销售订单(并修改价格)_python_03



三、      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







有时候,计划行数量没更新过来



到时候再自己调试下哪儿的原因,或者最笨的方法,录个bdc确认计划行就行了







欢迎关注订阅号:SAP学习记录 (SAPlearning )

PO <wbr><wbr>text <wbr><wbr>copy <wbr><wbr>rules <wbr><wbr>:copy <wbr><wbr>PR <wbr><wbr>item <wbr><wbr>text <wbr><wbr>to <wbr><wbr>PO

标签:partners,BAPI,inx,item,SALESORDER,CREATEFROMDAT2,lt,schedules,conditions
From: https://blog.51cto.com/u_15680210/5749646

相关文章

  • BAPI_NETWORK_COMP_REMOVE 物料组件删除
     物料组件删除BAPI:BAPI_NETWORK_COMP_REMOVE首先调用BAPI_NETWORK_COMP_GETDETAIL获取明细,得到物料组件唯一编号:component​​​​​​只需要将物料组件......
  • 插件化编程之WebAPI统一返回模型
    WebApi返回数据我们一般包裹在一个公共的模型下面的,而不是直接返回最终数据,在返回参数中,显示出当前请求的时间戳,是否请求成功,如果错误那么错误的消息是什么,状态码(根据业务......
  • 插件化编程之WebAPI统一返回模型
      WebApi返回数据我们一般包裹在一个公共的模型下面的,而不是直接返回最终数据,在返回参数中,显示出当前请求的时间戳,是否请求成功,如果错误那么错误的消息是什么,状态码(根......
  • PaddleOCR在 Linux下的webAPI部署方案
    很多小伙伴在使用OCR时都希望能过采用API的方式调用,这样就可以跨端跨平台了。本文将介绍一种基于python的PaddleOCR识方案。喜欢的可以关注公众号,获取更多内容。   ......
  • .NetCore WebAPI 导入、导出Excel文件
    .NetCoreWebAPI导入、导出Excel文件导入思路:上传Excel文件,使用MemoryStream在内存中加载,使用NPOI读取内容到Model类中。///<summary>///导入Excel文件///</su......
  • .Net WebApi 中的 FromBody FromForm FromQuery FromHeader FromRoute
    在日常后端Api开发中,我们跟前端的沟通中,通常需要协商好入参的数据类型,和参数是通过什么方式存在于请求中的,是表单(form)、请求体(body)、地址栏参数(query)、还是说通过请求......
  • 520813 - FAQ: BAPIs for goods
    SymptomThisnotecontainsfrequentlyaskedquestions/answersregarding'BAPIsforgoodsmovements'.Questions1.WherecanIfindthedocumentationforcallingth......
  • DEMO:关闭采购订单 BAPI_PO_CHANGE(带增强字段)
    货铺QQ群号:834508274调用BAPI的时候注意DEMOREPORTZDEMO_CLOSE_PO.PARAMETERSP_POTYPEBAPIMEPOHEADER-PO_NUMBER..DATA:LT_RETURNLIKETABLEOFBAPIRET2,LS_RETURN......
  • DEMO:PR 添加新行项目 BAPI_PR_CHANGE
    货铺QQ群号:834508274REPORTZLM_PR_CHANGE.PARAMETERS:P_BANFNTYPEVBEP-BANFNOBLIGATORY.DATA:LS_PRHEADERLIKEBAPIMEREQHEADER,"LS_PRHEADERXLIKEBAPIMEREQ......
  • DEMO: ME51N 创建PR BAPI_REQUISITION_CREATE
    货铺QQ群号:834508274*&---------------------------------------------------------------------**&BAPI_REQUISITION_CREATE和BAPI_PR_CREATE相关问题查看NOTE*&49962......