子曰花开2015

导航

自动创建销售订单

 

 

 

需求文档:

通过SE37接口自动创建直接销售订单【Z100】:

 

  1. 事务代码:VA01初始界面:

销售订单类型:Z100   --字段名:VBAK- AUART

销售组织:    待定值 --字段名:VBAK-VKORG

分销渠道:    待定值 --字段名:VBAK-VTWEG

产品组:      待定值 --字段名:VBAK-SPART

2. 拍回车进入界面:

售达方:     待定值      --字段名:VBAK-KUNNR

物料:       待定值      --字段名:VBAP- MATNR

订单数量:   待定值      --字段名:VBAP- KWMENG

3. 双击行项目进入条件界面:

类型    ZR10 

金额    待定

货币    待定

单位    待定

UOM    待定

4. 保存

5. 事务代码:VA02更改界面,将价格清单从30变成10以供OA审批:

价格清单   10  --字段名:VBKD-PLTYP

注:

如果注明了值的,请写死,注明待定的,请写成OA动态传递的。

 

程序可参考:ZSDR04(SE38此程序为系统自动创建标准销售订单)

接口可参考:ZFM_MM_MAT_MASTER(SE37此接口为物料主数据创建和修改OA接口)

 

需求文档:

通过SE37接口自动创建借/贷项订单【Z008/Z009】:

 

1. 事务代码:VA01初始界面:

销售订单类型:待定值 --字段名:VBAK- AUART

销售组织:    待定值 --字段名:VBAK-VKORG

分销渠道:    待定值 --字段名:VBAK-VTWEG

产品组:      待定值 --字段名:VBAK-SPART

2. 拍回车进入界面:

售达方:     待定值      --字段名:VBAK-KUNNR

采购订单编号 待定值      --字段名:VBKD-BSTKD

物料:       待定值      --字段名:VBAP- MATNR

目标数量:   待定值      --字段名:VBAP- ZMENG

描述:       待定值      --字段名:VBAP- ARKTX

客户物料:   待定值      --字段名:VBAP-KDMAT

3. 转入表头数据:

订单原因 待定值 --字段名:VBAK- AUGRU

4. 双击行项目进入条件界面:

类型    ZR02 (系统自动带出) 

金额    待定

货币    待定

单位    待定

UOM    待定

5. 保存

注:

如果注明了值的,请写死,注明待定的,请写成OA动态传递的。

 

程序可参考:ZSDR04(SE38此程序为系统自动创建标准销售订单)

接口可参考:ZFM_MM_MAT_MASTER(SE37此接口为物料主数据创建和修改OA接口)

程序示例结果:

程序实现:

1. 创建销售订单表头结构:

 

2. 创建销售订单行项目结构:

3. 接口实现:ZXHN_CREATE_SO:

源代码实现:

 

FUNCTION ZXHN_CREATE_SO.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_ZCREATESO) LIKE  ZXHN_CREATE_SO STRUCTURE
*"        ZXHN_CREATE_SO OPTIONAL
*"  EXPORTING
*"     VALUE(O_RETURN) TYPE  CHAR100
*"     VALUE(O_MSGTYPE) TYPE  CHAR1
*"  TABLES
*"      LT_ZCREATESO STRUCTURE  ZXHN_CREATE_SO_ITEM
*"----------------------------------------------------------------------

TYPES:BEGIN OF zsds_so_return,
        vbeln   TYPE bapisdhd1-purch_no_c,
        type    TYPE bapi_mtype,
        message TYPE bapi_msg,
      END OF zsds_so_return.

DATA  ls_zcreateso TYPE zxhn_create_so_item .
DATA: flag     TYPE VALUE ,
      l_posnr  TYPE vbap-posnr .
DATA : lw_header               TYPE bapisdhd1 ,   "抬头
       lw_headerx              TYPE bapisdhd1x ,
       lw_order_items_in       TYPE bapisditm,  "销售
       lw_order_items_inx      TYPE bapisditmx,
       lw_order_partners2      TYPE bapiparnr,
       lw_salesdocument        TYPE bapivbeln-vbeln,
       lw_bapischdl            TYPE bapischdl,
       lw_bapischdlx           TYPE bapischdlx,
       wa_return               TYPE zsds_so_return,
       lw_return               TYPE bapiret2,
       lw_order_conditions_in  TYPE bapicond,
       lw_order_conditions_inx TYPE  bapicondx "合作伙伴.

DATA: lt_order_items_in       TYPE TABLE OF bapisditm"SD销售相关
      lt_order_items_inx      TYPE TABLE OF bapisditmx,
      lt_extensionin          TYPE TABLE OF bapiparex WITH HEADER LINE"extend
      lt_bapischdl            TYPE TABLE OF bapischdl"计划行
      lt_bapischdlx           TYPE TABLE OF bapischdlx,
      lt_order_partners       TYPE TABLE OF bapiparnr,
      lt_order_conditions_in  TYPE TABLE OF bapicond,
      lt_return               TYPE TABLE OF bapiret2"返回参数
      lt_return1              TYPE TABLE OF bapiret2,
      lw_return1              TYPE bapiret2"行文本条件
      lt_order_conditions_inx TYPE TABLE OF bapicondx"合作伙伴

LOOP AT lt_zcreateso INTO ls_zcreateso .

    DATA ls_bape_vbak TYPE bape_vbak.
    DATA ls_bape_vbakx TYPE bape_vbakx.

    lt_extensionin-structure 'BAPE_VBAK'.
    lt_extensionin-valuepart1 = ls_bape_vbak.
    APPEND  lt_extensionin.

    lt_extensionin-structure 'BAPE_VBAKX'.
    lt_extensionin-valuepart1 = ls_bape_vbak.
    APPEND  lt_extensionin.

*销售订单抬头创建
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = i_zcreateso-kunnr
      IMPORTING
        output = i_zcreateso-kunnr.

    lw_header-doc_type   = i_zcreateso-auart.  "订单类型
    lw_header-sales_org  = i_zcreateso-vkorg.  "销售组织
    lw_header-distr_chan = i_zcreateso-vtweg.  "分销渠道
    lw_header-division   = i_zcreateso-spart.  "产品组
    lw_header-price_list = i_zcreateso-pltyp.  "价格清单

    IF i_zcreateso-auart 'Z008' OR i_zcreateso-auart 'Z009' .

      lw_header-purch_no_c = i_zcreateso-bstkd."采购订单编号
      lw_header-ord_reason = i_zcreateso-augru ."订单原因
      lw_headerx-purch_no_c 'X'.
      lw_headerx-ord_reason 'X'.

    ENDIF .

    lw_headerx-doc_type 'X'.
    lw_headerx-sales_org 'X'.
    lw_headerx-distr_chan 'X'.
    lw_headerx-division 'X'.
    lw_headerx-price_list 'X'.

    lw_order_partners2-partn_role ='AG'.
    lw_order_partners2-partn_numb = i_zcreateso-kunnr."售达方
    APPEND lw_order_partners2 TO lt_order_partners.
    CLEAR lw_order_partners2.

    flag = flag + 10.
    l_posnr = flag.
    lw_order_items_in-itm_number = l_posnr."项目号


    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = ls_zcreateso-matnr
      IMPORTING
        output = ls_zcreateso-matnr.

    lw_order_items_in-material = ls_zcreateso-matnr."物料号
    lw_order_items_in-target_qty = ls_zcreateso-kwmeng."数量

     IF i_zcreateso-auart 'Z008' OR i_zcreateso-auart 'Z009' .
       lw_order_items_in-short_text = ls_zcreateso-arktx."描述
       lw_order_items_in-cust_mat35 = ls_zcreateso-kdmat."客户物料
       lw_order_items_inx-short_text 'X'.
       lw_order_items_inx-cust_mat35 'X'.

     ENDIF .

    lw_order_items_inx-material 'X'.
    lw_order_items_inx-target_qty 'X'.

    APPEND lw_order_items_in TO lt_order_items_in.
    APPEND lw_order_items_inx TO lt_order_items_inx.
    CLEAR :lw_order_items_in,lw_order_items_inx.

    lw_bapischdl-itm_number = l_posnr.

    lw_bapischdl-req_qty = ls_zcreateso-kwmeng."数量
    lw_bapischdl-req_date = ls_zcreateso-etdat."计划交货日期
    lw_bapischdlx-itm_number = l_posnr.
    lw_bapischdlx-req_qty 'X'.
    lw_bapischdlx-req_date 'X'.
    APPEND lw_bapischdlx TO lt_bapischdlx.
    APPEND lw_bapischdl TO lt_bapischdl.
    CLEAR :lw_bapischdl,lw_bapischdlx.



     IF ls_zcreateso-kbetr IS NOT INITIAL.
      lw_order_conditions_in-itm_number = l_posnr.

      IF i_zcreateso-auart 'Z008' OR i_zcreateso-auart 'Z009' .
        lw_order_conditions_in-cond_type  'ZR02'.
       ELSEIF i_zcreateso-auart 'Z100'.
        lw_order_conditions_in-cond_type  'ZR10'.
       ENDIF .


      lw_order_conditions_in-cond_value = ls_zcreateso-kbetr.
      lw_order_conditions_in-currency   = ls_zcreateso-koein.
      lw_order_conditions_in-cond_p_unt  = ls_zcreateso-kpein.
      APPEND lw_order_conditions_in TO lt_order_conditions_in.
      CLEAR :lw_order_conditions_in.
      lw_order_conditions_inx-itm_number = l_posnr.
      lw_order_conditions_inx-cond_type 'X'.
      lw_order_conditions_inx-cond_value 'X'.
      lw_order_conditions_inx-currency  'X'.
      lw_order_conditions_inx-cond_p_unt 'X'.
      APPEND lw_order_conditions_inx TO lt_order_conditions_inx.
      CLEAR :lw_order_conditions_inx.
    ENDIF.

ENDLOOP .

     CALL FUNCTION 'SD_SALESDOCUMENT_CREATE'
          EXPORTING
*           SALESDOCUMENT        =
            sales_header_in      = lw_header
            sales_header_inx     = lw_headerx
*           SENDER               =
*           BINARY_RELATIONSHIPTYPE       = ' '
*           INT_NUMBER_ASSIGNMENT         = ' '
*           BEHAVE_WHEN_ERROR    = ' '
*           LOGIC_SWITCH         = ' '
*           BUSINESS_OBJECT      = ' '
*            testrun              = p_check
*           CONVERT_PARVW_AUART  = ' '
*           STATUS_BUFFER_REFRESH         = 'X'
*           CALL_ACTIVE          = ' '
*           I_WITHOUT_INIT       = ' '
          IMPORTING
            salesdocument_ex     = lw_salesdocument
*           SALES_HEADER_OUT     =
*           SALES_HEADER_STATUS  =
          TABLES
            return               = lt_return1
            sales_items_in       = lt_order_items_in
            sales_items_inx      = lt_order_items_inx
            sales_partners       = lt_order_partners
            sales_schedules_in   = lt_bapischdl
            sales_schedules_inx  = lt_bapischdlx
            sales_conditions_in  = lt_order_conditions_in
            sales_conditions_inx = lt_order_conditions_inx
*           SALES_CFGS_REF       =
*           SALES_CFGS_INST      =
*           SALES_CFGS_PART_OF   =
*           SALES_CFGS_VALUE     =
*           SALES_CFGS_BLOB      =
*           SALES_CFGS_VK        =
*           SALES_CFGS_REFINST   =
*           SALES_CCARD          =
*            sales_text           = lt_bapisdtext
*           SALES_KEYS           =
*           SALES_CONTRACT_IN    =
*           SALES_CONTRACT_INX   =
            extensionin          = lt_extensionin
*           PARTNERADDRESSES     =
*           SALES_SCHED_CONF_IN  =
*           ITEMS_EX             =
*           SCHEDULE_EX          =
*           BUSINESS_EX          =
*           INCOMPLETE_LOG       =
*           EXTENSIONEX          =
*           CONDITIONS_EX        =
*           PARTNERS_EX          =
*           TEXTHEADERS_EX       =
*           TEXTLINES_EX         =
*           BATCH_CHARC          =
*           CAMPAIGN_ASGN        =
*           CONDITIONS_KONV_EX   =
          .     

IF lw_salesdocument IS  INITIAL.           
LOOP AT lt_return1 INTO lw_return1.             
IF lw_return1-type 'E' OR lw_return1-type 'A'.               
APPEND lw_return1 TO lt_return.               
CLEAR lw_return1.             
ENDIF.           
ENDLOOP.         
ENDIF.         

IF lt_return IS NOT INITIAL.           

LOOP AT lt_return1 INTO lw_return1.             
IF lw_return1-type 'E' OR lw_return1-type 'A'.               
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .               

CALL FUNCTION 'MESSAGE_TEXT_BUILD'                 
EXPORTING                   msgid               
= lw_return1-id                   msgnr               
= lw_return1-number                   msgv1               
= lw_return1-message_v1                   msgv2               
= lw_return1-message_v2                   msgv3               
= lw_return1-message_v3                   msgv4               
= lw_return1-message_v4                 
IMPORTING                   message_text_output 
= wa_return-message.               o_msgtype 

'E'.               o_return 
= wa_return-message.               

EXIT.             

ENDIF.           
ENDLOOP.         

ELSE.           
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'             
EXPORTING               
wait 'X'.           o_msgtype 

'S'.           
CONCATENATE '销售订单:' lw_salesdocument '已创建成功' INTO o_return SEPARATED BY space.         

ENDIF.

ENDFUNCTION.

posted on 2019-05-31 11:12  子曰花开2015  阅读(139)  评论(0编辑  收藏  举报