登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

原来为了你

我的人生就是要一次次的超越

 
 
 

日志

 
 
 
 

[转]BAPI_SALESORDER_CHANGE (VA02)订单修改  

2011-05-21 17:32:52|  分类: BAPI |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  report.
*---(TCODE:VA02 ****订单修改)


form frm_change_salesorder  tables   tp_item    structure zrmxsds004
                                     tp_cond    structure zrmxsds005
                                     tp_message structure zifsret01
                            using    up_head    like zrmxsds003
                            changing cp_eind    type c.

  datals_item like zrmxsds004,
        ls_cond like zrmxsds005,
        ls_msg  like zifsret01,
        ls_vbep like vbep.

  datawa_header  type bapisdh1,  "表头
        wa_headerx type bapisdh1x"表头标志

        wa_partner  type bapiparnr,  "业务伙伴
        wa_partnerc type bapiparnrc,

        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,
        wa_sdls    type bapisdls,

        wa_text    type bapisdtext.  "文本

  datalt_partner  type standard table of bapiparnr,
        lt_partnerc type standard table of bapiparnrc,

        lt_item    type standard table of bapisditm,
        lt_itemx   type standard table of bapisditmx,

        lt_schdl    type standard table of bapischdl,
        lt_schdlx   type standard table of bapischdlx,

        lt_cond    type standard table of bapicond,
        lt_condx   type standard table of bapicondx,

        lt_return  type standard table of bapiret2,

        lt_text    like standard table of bapisdtext.

  datalt_sokey type standard table of zrmxsds015,
        ls_sokey type zrmxsds015.

* Header
  clearwa_header,wa_headerx.

  if up_head-updateflag   cns_update.
    wa_header-pmnttrms    up_head-zterm.  "付款条件
    wa_headerx-pmnttrms   cns_yes.
    wa_headerx-updateflag cns_update.     "Update

*   Header texts,表头文本,若传输空值,则清空该字段
    clearwa_text,lt_text[].
    wa_text-itm_number          space.
    wa_text-text_id             cns_textid.
    wa_text-langu               sy-langu.
    wa_text-format_col          "*".
    wa_text-text_line           up_head-tknum.  "运输合同号
    append wa_text to lt_text.
  endif.
* Partners
  if up_head-kunnr_re is not initial.
    "收票方
    clearwa_partnerc.
    wa_partnerc-document up_head-vbeln.
    wa_partnerc-itm_number "000000".
    wa_partnerc-updateflag cns_update.
    wa_partnerc-partn_role "RE".
    wa_partnerc-p_numb_new up_head-kunnr_re.
    append wa_partnerc to lt_partnerc.
  endif.

  if up_head-kunnr_rg is not initial.
    "付款方
    clearwa_partnerc.
    wa_partnerc-document up_head-vbeln.
    wa_partnerc-itm_number "000000".
    wa_partnerc-updateflag cns_update.
    wa_partnerc-partn_role "RG".
    wa_partnerc-p_numb_new up_head-kunnr_rg.
    append wa_partnerc to lt_partnerc.
  endif.

  if up_head-kunnr_we is not initial.
    "送达方
    clearwa_partnerc.
    wa_partnerc-document up_head-vbeln.
    wa_partnerc-itm_number "000000".
    wa_partnerc-updateflag cns_update.
    wa_partnerc-partn_role "WE".
    wa_partnerc-p_numb_new up_head-kunnr_we.
    append wa_partnerc to lt_partnerc.
  endif.

*---Items
  refreshlt_item,  lt_condlt_schdl,
           lt_itemxlt_condx,lt_schdl.

  loop at tp_item into ls_item.
    if ls_item-updateflag cns_new.
      "新增行项目
      clear wa_item.
      wa_item-itm_number ls_item-posnr.
      wa_item-material   ls_item-mabnr.   "物料
      wa_item-sales_unit ls_item-vrkme.   "计量单位
      wa_item-plant      ls_item-werks.   "工厂
      wa_item-store_loc  ls_item-lgort.   "库存地
      append wa_item to lt_item.
      "行状态
      wa_itemx-itm_number ls_item-posnr.
      wa_itemx-updateflag cns_new.
      wa_itemx-material   cns_yes.
      wa_itemx-sales_unit cns_yes.
      wa_itemx-plant      cns_yes.
      wa_itemx-store_loc  cns_yes.
      append wa_itemx to lt_itemx.
      "Schedule lines
      clearwa_schdl,wa_schdlx.
      wa_schdl-itm_number ls_item-posnr.
      wa_schdl-req_qty    ls_item-kwmeng.  "数量
      append wa_schdl to lt_schdl.

      wa_schdlx-itm_number ls_item-posnr.
      wa_schdlx-updateflag cns_new.
      wa_schdlx-req_qty    cns_yes.
      append wa_schdlx to lt_schdlx.

      "新增行,需要对自动生成的生产订单进行下达
      clear ls_sokey.
      ls_sokey-vbeln up_head-vbeln.
      ls_sokey-posnr ls_item-posnr.
      append ls_sokey to lt_sokey.

    elseif ls_item-updateflag cns_update.
      "更新行项目信息

*     Schedule line
*     仅行数量
      clearwa_schdl,wa_schdlx.
      wa_schdl-itm_number ls_item-posnr.
      wa_schdl-sched_line "0001".          "默认都是第一行
      wa_schdl-req_qty    ls_item-kwmeng.  "数量
      append wa_schdl to lt_schdl.

      wa_schdlx-itm_number ls_item-posnr.
      wa_schdlx-sched_line "0001".
      wa_schdlx-updateflag cns_update.
      wa_schdlx-req_qty    cns_yes.
      append wa_schdlx to lt_schdlx.
    endif.

  endloop.

* Item Conditions
* 价格条件,需要设置该参数,才能够修改价格条件
  wa_sdls-cond_handl cns_yes.

  loop at tp_cond into ls_cond.
    if ls_cond-updateflag cns_new.
      "新增价格条件记录
      clearwa_cond,wa_condx.
      wa_cond-itm_number ls_cond-posnr.
      wa_cond-cond_type  ls_cond-kschl.  "定价条件
      wa_cond-cond_value ls_cond-kbetr.  "价格
      wa_cond-currency   ls_cond-koein.  "货币或%
      wa_cond-cond_unit  ls_cond-kmein.  "条件单位
      wa_cond-cond_p_unt ls_cond-kpein.  "条件定价单位
      append wa_cond to lt_cond.

      wa_condx-itm_number ls_cond-posnr.
      wa_condx-cond_type  ls_cond-kschl.  "定价条件
      wa_condx-updateflag cns_new.
      wa_condx-cond_value cns_yes.  "价格
      wa_condx-currency   cns_yes.  "货币或%
      wa_condx-cond_unit  cns_yes.  "条件单位
      wa_condx-cond_p_unt cns_yes.  "条件定价单位
      append wa_condx to lt_condx.

    elseif ls_cond-updateflag cns_update.
      "更新价格条件记录
      clearwa_cond,wa_condx.
      "需要读取已经存在行的Key
      perform frm_get_cond_key using    up_head-vbeln
                                        ls_cond-posnr
                                        ls_cond-kschl
                               changing wa_cond-cond_st_no
                                        wa_cond-cond_count.

      wa_cond-itm_number ls_cond-posnr.
      wa_cond-cond_type  ls_cond-kschl.  "定价条件
      wa_cond-cond_value ls_cond-kbetr.  "价格
      wa_cond-currency   ls_cond-koein.  "货币或%
      wa_cond-cond_unit  ls_cond-kmein.  "条件单位
      wa_cond-cond_p_unt ls_cond-kpein.  "条件定价单位
      append wa_cond to lt_cond.

      wa_condx-itm_number ls_cond-posnr.
      wa_condx-cond_st_no wa_cond-cond_st_no.
      wa_condx-cond_count wa_cond-cond_count.
      wa_condx-cond_type  ls_cond-kschl.

      wa_condx-updateflag cns_update.
      wa_condx-cond_value cns_yes.
      wa_condx-currency   cns_yes.
      wa_condx-cond_unit  cns_yes.
      wa_condx-cond_p_unt cns_yes.
      append wa_condx to lt_condx.
    else.
      "报错
    endif.
  endloop.

*---Call BAPI
  call function 'BAPI_SALESORDER_CHANGE'
    exporting
      salesdocument               up_head-vbeln
      order_header_in             wa_header
      order_header_inx            wa_headerx
*     SIMULATION                  =
*     BEHAVE_WHEN_ERROR           = " "
*     INT_NUMBER_ASSIGNMENT       = " "
      logic_switch                wa_sdls
*     NO_STATUS_BUF_INIT          = " "
    tables
      return                      lt_return
      order_item_in               lt_item
      order_item_inx              lt_itemx
*      partners                    = lt_partner
      partnerchanges              lt_partnerc
*     PARTNERADDRESSES            =
*     ORDER_CFGS_REF              =
*     ORDER_CFGS_INST             =
*     ORDER_CFGS_PART_OF          =
*     ORDER_CFGS_VALUE            =
*     ORDER_CFGS_BLOB             =
*     ORDER_CFGS_VK               =
*     ORDER_CFGS_REFINST          =
      schedule_lines              lt_schdl
      schedule_linesx             lt_schdlx
      order_text                  lt_text
*     ORDER_KEYS                  =
      conditions_in               lt_cond
      conditions_inx              lt_condx
*   EXTENSIONIN                 =
            .

* 处理错误消息:通过判断消息的类型,来判断BAPI是否成功
  loop at lt_return into wa_return.
    clear ls_msg.
    ls_msg-class   "BUS".
    ls_msg-msgtyp  wa_return-type.
    ls_msg-msgno   wa_return-number.
    ls_msg-msgtxt  wa_return-message.
    append ls_msg to tp_message.

    if wa_return-type eq 'E' or
        wa_return-type 'A' or
        wa_return 'X'.
      cp_eind 'X'.  "失败
    endif.
  endloop.

  if cp_eind ne 'X'.
    call function 'BAPI_TRANSACTION_COMMIT'
      exporting
        wait 'X'.
  else.
    call function 'BAPI_TRANSACTION_ROLLBACK'.
  endif.

  check cp_eind ne 'X' and lt_sokey[] is not initial.
* 订单自动产生生产订单,对生产订单进行下达
  call function 'Z_RMXPP_PRDORD_RELEASE'
*   EXPORTING
*     I_WAIT                           = 3
    tables
      t_sokey                          lt_sokey
     exceptions
       no_saleorders                    1
       no_valid_saleorders              2
       cannot_find_product_orders       3
       others                           4
            .
endform.                    "frm_create_salesorder
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_COND_KEY
*&---------------------------------------------------------------------*
form frm_get_cond_key  using    up_vbeln like vbap-vbeln
                                up_posnr like vbap-posnr
                                up_kschl like konv-kschl
                       changing cp_st_no like konv-stunr
                                cp_count like konv-zaehk.
  datalv_knumv like vbak-knumv.
  "由于需要多次判断,预先读取聚集表,将订单的所有行读取出来
  if gt_konv[] is initial.
    select single knumv into lv_knumv
      from vbak
      where vbeln up_vbeln.

    select
      knumv kposn kschl stunr zaehk
      into corresponding fields of table gt_konv
      from konv
      where knumv lv_knumv.
*        AND kposn = up_posnr.
    sort gt_konv by kposn kschl.
  endif.

  clear gwa_konv.
  read table gt_konv into gwa_konv
                 with key kposn up_posnr
                          kschl up_kschl
                 binary search.
  if sy-subrc eq 0.
    cp_st_no gwa_konv-stunr.
    cp_count gwa_konv-zaehk.
  endif.
endform.                    " FRM_GET_COND_KEY
  评论这张
 
阅读(3260)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018