ABAP 创建及修改采购订单

创建:BAPI_PO_CREATE1

修改:BAPI_PO_CHANGE

审批:BAPI_PO_RELEASE

取消审批:BAPI_PO_RESET_RELEASE(整单)

创建采购订单示例代码:

  DATA: LT_SELECT  TYPE STANDARD TABLE OF TY_EBAN.DATA: LT_BSART   TYPE STANDARD TABLE OF TY_EBAN.DATA: LS_BSART   TYPE TY_EBAN.DATA: LS_SELECT  TYPE TY_EBAN.DATA: LV_MESSAGE TYPE STRING.DATA: LV_EBELP   TYPE EBELP.DATA: LS_EBKN    TYPE TY_EBKN.DATA: LV_SERIAL_NO TYPE DZEKKN.DATA:LS_POHEADER               TYPE  BAPIMEPOHEADER,LS_POHEADERX              TYPE  BAPIMEPOHEADERX,LV_EXPPURCHASEORDER       TYPE  BAPIMEPOHEADER-PO_NUMBER,LS_EXPHEADER              TYPE  BAPIMEPOHEADER,LS_EXPPOEXPIMPHEADER      TYPE  BAPIEIKP,LS_RETURN                 TYPE  BAPIRET2,LS_POITEM                 TYPE  BAPIMEPOITEM,LS_POITEMX                TYPE  BAPIMEPOITEMX,LS_POSCHEDULE             TYPE  BAPIMEPOSCHEDULE,LS_POSCHEDULEX            TYPE  BAPIMEPOSCHEDULX,LS_POACCOUNT              TYPE  BAPIMEPOACCOUNT,LS_POACCOUNTPROFITSEGMENT TYPE  BAPIMEPOACCOUNTPROFITSEGMENT,LS_POACCOUNTX             TYPE  BAPIMEPOACCOUNTX,LT_RETURN                 TYPE STANDARD TABLE OF BAPIRET2,LT_POITEM                 TYPE STANDARD TABLE OF   BAPIMEPOITEM,LT_POITEMX                TYPE STANDARD TABLE OF   BAPIMEPOITEMX,LT_POSCHEDULE             TYPE STANDARD TABLE OF   BAPIMEPOSCHEDULE,LT_POSCHEDULEX            TYPE STANDARD TABLE OF   BAPIMEPOSCHEDULX,LT_POACCOUNT              TYPE STANDARD TABLE OF   BAPIMEPOACCOUNT,LT_POACCOUNTPROFITSEGMENT TYPE STANDARD TABLE OF   BAPIMEPOACCOUNTPROFITSEGMENT,LT_POACCOUNTX             TYPE STANDARD TABLE OF   BAPIMEPOACCOUNTX.LOOP AT LT_SELECT INTO LS_SELECT .CLEAR LS_POHEADER.CLEAR LS_POHEADERX.CLEAR LT_RETURN.CLEAR LT_POITEM.CLEAR LT_POITEMX.CLEAR LT_POSCHEDULE.CLEAR LT_POSCHEDULEX.CLEAR LT_POACCOUNT.CLEAR LT_POACCOUNTX.READ TABLE GT_PRICE INTO GS_PRICE INDEX 1.LS_POHEADER-DOC_DATE   = SY-DATUM.                                       "采购凭证日期'20161001'.LS_POHEADER-DOC_TYPE   = LS_SELECT-BSART.                                       "采购凭证类型'Z001'.LS_POHEADER-LANGU      = SY-LANGU.                                           "采购凭证类别'F'.LS_POHEADER-PUR_GROUP  = LS_SELECT-EKGRP.                                      "采购组'EA1'.LS_POHEADER-PURCH_ORG  = '2490'.                                      "采购组织'2110'.LS_POHEADER-COMP_CODE  = '2490'.                                      "公司代码'2110'."LS_POHEADER-SALES_PERS = LS_SELECT-VERKF.LS_POHEADER-CURRENCY   = 'CNY'.                                      "货币码'CNY'.IF LS_SELECT-BSART = 'Z001' OR LS_SELECT-BSART = 'Z003'.LS_POHEADER-VENDOR     = GS_PRICE-LIFNR.ELSEIF  LS_SELECT-BSART = 'Z002' OR LS_SELECT-BSART = 'Z004'.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGINPUT  = GV_LIFNRIMPORTINGOUTPUT = LS_POHEADER-VENDOR.ENDIF.LS_POHEADER-ITEM_INTVL = SPACE. "指定行项目编号LS_POHEADERX-DOC_DATE   = 'X'.LS_POHEADERX-DOC_TYPE   = 'X'.LS_POHEADERX-LANGU      = 'X'.LS_POHEADERX-PUR_GROUP  = 'X'.LS_POHEADERX-PURCH_ORG  = 'X'.LS_POHEADERX-COMP_CODE  = 'X'."LS_POHEADERX-SALES_PERS = 'X'.LS_POHEADERX-CURRENCY   = 'X'.LS_POHEADERX-VENDOR     = 'X'."供应商账户号.LS_POHEADERX-ITEM_INTVL = 'X'.CLEAR:LV_EBELP.LOOP AT GT_EBAN INTO GS_EBAN WHERE BANFN = LS_SELECT-BANFN AND BOX IS NOT INITIAL.CLEAR LS_POITEM.LV_EBELP = LV_EBELP + 10.LS_POITEM-PO_ITEM    = LV_EBELP.                           "采购凭证项目编号'10'.LS_POITEM-MATERIAL   = GS_EBAN-MATNR.                           "物料号'000000001300000001'.LS_POITEM-QUANTITY   = GS_EBAN-MENGE."数量LS_POITEM-SHORT_TEXT = GS_EBAN-TXZ01.                            "短文本.LS_POITEM-PREQ_NAME  = GS_EBAN-AFNAM.                            "需求者/请求者姓名.LS_POITEM-PLANT      = GS_EBAN-WERKS.                 "工厂'2110'.LS_POITEM-PO_PRICE   = '1'.                                      "标识符:采用价格-不使用信息结构"LS_POITEM-STGE_LOC   = GS_EBAN-LGORT.                              "库存地点LS_POITEM-TRACKINGNO = GS_EBAN-BEDNR.                            "跟踪号LS_POITEM-MATL_GROUP = GS_EBAN-MATKL.                                  "物料组LS_POITEM-PO_UNIT    = GS_EBAN-MEINS.                                        "订单单位'EA'.LS_POITEM-ORDERPR_UN = GS_EBAN-MEINS.                           "订单价格单位"LS_POITEM-CONV_NUM1  = GS_EBAN-BPUMZ .                            "分子"LS_POITEM-CONV_DEN1  = GS_EBAN-BPUMN.                             "分母LS_POITEM-TAX_CODE   = 'J2'.                               "税码IF LS_SELECT-BSART = 'Z001' OR LS_SELECT-BSART = 'Z003'.READ TABLE GT_PRICE INTO GS_PRICEWITH KEY MATNR = GS_EBAN-MATNR .IF SY-SUBRC = 0.LS_POITEM-NET_PRICE  = GS_PRICE-NETPR.                           "净价LS_POITEM-AGREEMENT  = GS_PRICE-EBELN.LS_POITEM-AGMT_ITEM  = GS_PRICE-EBELP.ENDIF.ELSEIF  LS_SELECT-BSART = 'Z002' OR LS_SELECT-BSART = 'Z004'..READ TABLE GT_PRICE INTO GS_PRICEWITH KEY TXZ01 = GS_EBAN-TXZ01 .IF SY-SUBRC = 0.LS_POITEM-NET_PRICE  = GS_PRICE-NETPR.                           "净价ENDIF.ENDIF.LS_POITEM-PRICE_UNIT = '1'   .                                  "价格单位1LS_POITEM-ACCTASSCAT = GS_EBAN-KNTTP.                           "科目分配类别LS_POITEM-ITEM_CAT   = GS_EBAN-PSTYP.                           "项目类别LS_POITEM-PREQ_NO    = GS_EBAN-BANFN.LS_POITEM-PREQ_ITEM  = GS_EBAN-BNFPO.APPEND LS_POITEM TO LT_POITEM .CLEAR LS_POITEMX.LS_POITEMX-PO_ITEM    =   LV_EBELP. "采购凭证项目编号.IF GS_EBAN-MATNR IS NOT INITIAL.LS_POITEMX-MATERIAL   = 'X'."物料号ENDIF.LS_POITEMX-QUANTITY   = 'X'."数量IF GS_EBAN-TXZ01 IS NOT INITIAL.LS_POITEMX-SHORT_TEXT  = 'X'."短文本.ENDIF.LS_POITEMX-PREQ_NAME   = 'X'.LS_POITEMX-PLANT       = 'X'."工厂LS_POITEMX-PO_PRICE   = 'X'."标识符:采用价格-不使用信息结构"LS_POITEMX-STGE_LOC   = 'X'."库存地点LS_POITEMX-TRACKINGNO = 'X'. "跟踪号LS_POITEMX-MATL_GROUP = 'X'."物料组LS_POITEMX-PO_UNIT    = 'X'."订单单位'EA'.LS_POITEMX-ORDERPR_UN = 'X'."订单价格单位"LS_POITEMX-CONV_NUM1  = 'X'."分子"LS_POITEMX-CONV_DEN1  = 'X'."分母LS_POITEMX-TAX_CODE   = 'X'."税码LS_POITEMX-NET_PRICE  = 'X'."净价IF LS_SELECT-BSART = 'Z001' OR  LS_SELECT-BSART = 'Z003'.LS_POITEMX-AGREEMENT  = 'X'.LS_POITEMX-AGMT_ITEM  = 'X'.ENDIF.LS_POITEMX-PRICE_UNIT = 'X'."价格单位LS_POITEMX-ACCTASSCAT = 'X'."科目分配类别LS_POITEMX-ITEM_CAT   = 'X'."项目类别IF GS_EBAN-SAKTO IS NOT INITIAL.LS_POITEMX-PO_ITEMX    = 'X'."ENDIF.LS_POITEMX-PREQ_NO    = 'X'.LS_POITEMX-PREQ_ITEM  = 'X'.APPEND LS_POITEMX TO LT_POITEMX .IF LS_SELECT-BSART = 'Z002'.CLEAR LS_POACCOUNT.LS_POACCOUNT-PO_ITEM     = LV_EBELP.LS_POACCOUNT-SERIAL_NO   = '01'.LS_POACCOUNT-QUANTITY    = GS_EBAN-MENGE.                     "采购订单数量LS_POACCOUNT-COSTCENTER  = GS_EBAN-KOSTL."成本中心LS_POACCOUNT-CO_AREA     = GS_EBAN-KOKRS."总账科目LS_POACCOUNT-GL_ACCOUNT  = GS_EBAN-SAKTO."控制范围APPEND LS_POACCOUNT TO LT_POACCOUNT.CLEAR:LS_POACCOUNTX.LS_POACCOUNTX-PO_ITEM      =  LV_EBELP. "采购订单行项目LS_POACCOUNTX-SERIAL_NO    = '01'.LS_POACCOUNTX-QUANTITY     = 'X'.       "申请数量LS_POACCOUNTX-COSTCENTER   = 'X'.LS_POACCOUNTX-CO_AREA      = 'X'.LS_POACCOUNTX-GL_ACCOUNT   = 'X'.APPEND LS_POACCOUNTX TO LT_POACCOUNTX.ENDIF.CLEAR:LV_SERIAL_NO.IF LS_SELECT-BSART = 'Z004'.LOOP AT GS_EBAN-EBKN INTO LS_EBKN.LV_SERIAL_NO = LV_SERIAL_NO + 1.CLEAR LS_POACCOUNT.LS_POACCOUNT-PO_ITEM     = LV_EBELP.LS_POACCOUNT-SERIAL_NO   = LV_SERIAL_NO.LS_POACCOUNT-QUANTITY    = LS_EBKN-MENGE.                     "采购订单数量LS_POACCOUNT-COSTCENTER  = GS_EBAN-KOSTL."成本中心LS_POACCOUNT-CO_AREA     = GS_EBAN-KOKRS."总账科目LS_POACCOUNT-GL_ACCOUNT  = LS_EBKN-SAKTO."控制范围LS_POACCOUNT-ORDERID     = LS_EBKN-AUFNR."控制范围LS_POACCOUNT-ASSET_NO    = LS_EBKN-ANLN1 .APPEND LS_POACCOUNT TO LT_POACCOUNT.CLEAR:LS_POACCOUNTX.LS_POACCOUNTX-PO_ITEM      =  LV_EBELP. "采购订单行项目LS_POACCOUNTX-SERIAL_NO    =  LV_SERIAL_NO.LS_POACCOUNTX-QUANTITY     = 'X'.       "申请数量LS_POACCOUNTX-COSTCENTER   = 'X'.LS_POACCOUNTX-CO_AREA      = 'X'.LS_POACCOUNTX-GL_ACCOUNT   = 'X'.LS_POACCOUNTX-ORDERID      = 'X'.LS_POACCOUNTX-ASSET_NO     = 'X'.APPEND LS_POACCOUNTX TO LT_POACCOUNTX.ENDLOOP.ENDIF.CLEAR LS_POSCHEDULE.LS_POSCHEDULE-PO_ITEM        = LV_EBELP.                            "行项目号LS_POSCHEDULE-QUANTITY       = GS_EBAN-MENGE.                       "采购订单数量LS_POSCHEDULE-SCHED_LINE     = '0001'.                             "交货计划行计数器'0001'.LS_POSCHEDULE-DELIVERY_DATE  = GS_EBAN-LFDAT.                      "项目交货日期'20161010'.LS_POSCHEDULE-PREQ_NO        = GS_EBAN-BANFN.LS_POSCHEDULE-PREQ_ITEM      = GS_EBAN-BNFPO.APPEND LS_POSCHEDULE TO LT_POSCHEDULE.CLEAR LS_POSCHEDULEX.LS_POSCHEDULEX-PO_ITEM       = LV_EBELP."行项目号LS_POSCHEDULEX-QUANTITY      = 'X'."采购订单数量LS_POSCHEDULEX-SCHED_LINE    = '0001'."交货计划行计数器.LS_POSCHEDULEX-DELIVERY_DATE = 'X'."项目交货日期.LS_POSCHEDULEX-PREQ_NO        = 'X'.LS_POSCHEDULEX-PREQ_ITEM      = 'X'.IF GS_EKPO-SAKTO IS NOT INITIAL.LS_POSCHEDULEX-PO_ITEMX      = 'X'.".ENDIF.APPEND LS_POSCHEDULEX TO LT_POSCHEDULEX.ENDLOOP.CALL FUNCTION 'BAPI_PO_CREATE1'EXPORTINGPOHEADER          = LS_POHEADERPOHEADERX         = LS_POHEADERX
*       NO_PRICE_FROM_PO  = 'X'IMPORTINGEXPPURCHASEORDER  = LV_EXPPURCHASEORDEREXPHEADER         = LS_EXPHEADEREXPPOEXPIMPHEADER = LS_EXPPOEXPIMPHEADERTABLESRETURN            = LT_RETURNPOITEM            = LT_POITEMPOITEMX           = LT_POITEMXPOSCHEDULE        = LT_POSCHEDULEPOSCHEDULEX       = LT_POSCHEDULEXPOACCOUNT         = LT_POACCOUNTPOACCOUNTX        = LT_POACCOUNTX.LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE CA 'AEX'.LV_MESSAGE = LV_MESSAGE  && LS_RETURN-MESSAGE.ENDLOOP.IF LV_MESSAGE IS NOT INITIAL .CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.LOOP AT GT_EBAN INTO GS_EBAN WHERE BOX IS NOT INITIAL   .GS_EBAN-MSG   = LV_MESSAGE.GS_EBAN-ICON  = ICON_LED_RED.MODIFY GT_EBAN FROM GS_EBAN.ENDLOOP.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGWAIT = 'X'.LOOP AT GT_EBAN INTO GS_EBAN WHERE BOX IS NOT INITIAL   ."GS_EBAN-BANFN = LV_EXPPURCHASEORDER.GS_EBAN-ICON  = ICON_LED_GREEN.MODIFY GT_EBAN FROM GS_EBAN.ENDLOOP.PERFORM FRM_GET_SINGLE_PO USING LV_EXPPURCHASEORDER.PERFORM FRM_RELEASE_PO USING LV_EXPPURCHASEORDER .ENDIF.ENDLOOP.

修改采购订单代码类似

主要是修改采购价格有点不太一样

  DATA:LS_POHEADER               TYPE  BAPIMEPOHEADER,LS_POHEADERX              TYPE  BAPIMEPOHEADERX,LV_EXPPURCHASEORDER       TYPE  BAPIMEPOHEADER-PO_NUMBER,LS_EXPHEADER              TYPE  BAPIMEPOHEADER,LS_EXPPOEXPIMPHEADER      TYPE  BAPIEIKP,LS_RETURN                 TYPE  BAPIRET2,LS_POITEM                 TYPE  BAPIMEPOITEM,LS_POITEMX                TYPE  BAPIMEPOITEMX,LS_POSCHEDULE             TYPE  BAPIMEPOSCHEDULE,LS_POSCHEDULEX            TYPE  BAPIMEPOSCHEDULX,LS_POACCOUNT              TYPE  BAPIMEPOACCOUNT,LS_POACCOUNTPROFITSEGMENT TYPE  BAPIMEPOACCOUNTPROFITSEGMENT,LS_POACCOUNTX             TYPE  BAPIMEPOACCOUNTX,LS_POCOND                 TYPE  BAPIMEPOCOND,LS_POCONDX                TYPE  BAPIMEPOCONDX,LT_RETURN                 TYPE STANDARD TABLE OF BAPIRET2,LT_POITEM                 TYPE STANDARD TABLE OF   BAPIMEPOITEM,LT_POITEMX                TYPE STANDARD TABLE OF   BAPIMEPOITEMX,LT_POSCHEDULE             TYPE STANDARD TABLE OF   BAPIMEPOSCHEDULE,LT_POSCHEDULEX            TYPE STANDARD TABLE OF   BAPIMEPOSCHEDULX,LT_POACCOUNT              TYPE STANDARD TABLE OF   BAPIMEPOACCOUNT,LT_POACCOUNTPROFITSEGMENT TYPE STANDARD TABLE OF   BAPIMEPOACCOUNTPROFITSEGMENT,LT_POACCOUNTX             TYPE STANDARD TABLE OF   BAPIMEPOACCOUNTX,LT_POCOND                 TYPE STANDARD TABLE OF   BAPIMEPOCOND,LT_POCONDX                TYPE STANDARD TABLE OF   BAPIMEPOCONDX.CLEAR: LS_POCOND,LS_POCONDX .LS_POCOND-ITM_NUMBER = GS_EKPO-EBELP ..LS_POCOND-COND_TYPE  = 'PBXX' .LS_POCOND-COND_VALUE = GS_EKPO-NETPR.LS_POCOND-CURRENCY   = LS_TEMP-WAERS .LS_POCOND-CHANGE_ID  = 'U' ." (I -> insert), changed (U -> update), or deleted (D -> delete)APPEND LS_POCOND TO LT_POCOND .LS_POCONDX-ITM_NUMBER = GS_EKPO-EBELP .LS_POCONDX-COND_TYPE  = 'X' .LS_POCONDX-COND_VALUE = 'X' .LS_POCONDX-CURRENCY   = 'X'.LS_POCONDX-CHANGE_ID  = 'X' ." (I -> insert), changed (U -> update), or deleted (D -> delete)APPEND LS_POCONDX TO LT_POCONDX .CALL FUNCTION 'BAPI_PO_CHANGE'EXPORTINGPURCHASEORDER = LS_TEMP-EBELNPOHEADER      = LS_POHEADERPOHEADERX     = LS_POHEADERXTABLESRETURN        = LT_RETURNPOITEM        = LT_POITEMPOITEMX       = LT_POITEMXPOSCHEDULE    = LT_POSCHEDULEPOSCHEDULEX   = LT_POSCHEDULEXPOACCOUNT     = LT_POACCOUNTPOACCOUNTX    = LT_POACCOUNTXPOCOND        = LT_POCONDPOCONDX       = LT_POCONDX.


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部