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