powerbuilder 调用BAPI_PO_CREATE创建po订单

powerbuilder 调用BAPI_PO_CREATE创建po订单

oleobject  saprfc,connection2,funct
oleobject  poheader,poitems,poitemschedule,it_RETURN
oleobject  ItemsRow,SchedulesRow

ANY        PO_NO
long        ll_status





saprfc = create oleobject
ll_status = saprfc.connecttonewobject("sap.functions")               //sap.functions

/********************************************************/
//连接到SAP
/********************************************************/
connection2 = saprfc.connection
connection2.applicationserver = "192.168.0.71"                          //服务器IP
connection2.system = 'DEV'                                           //系统标识
connection2.systemnumber = '00'
connection2.client = '110'
connection2.user = ''
connection2.password = ''
connection2.language = 'EN'

if connection2.logon(0,true) = false then                             //登录
   messagebox('连接到sap','连接失败')
   return
end if

SETPOINTER( HourGlass! )


/********************************************************/
//指定要呼叫SAP的哪个函数,并取得该函数的各对象
/********************************************************/
funct = saprfc.add("BAPI_PO_CREATE")

poheader                        = funct.exports.Item("PO_HEADER")

poitems                        = funct.tables.Item("PO_ITEMS")
poitemschedule = funct.tables.Item("PO_ITEM_SCHEDULES")
//it_RETURN                = funct.tables.Item("RETURN")


/********************************************************/
//给wa对象赋值
/********************************************************/
poheader.Value[2] = 'NB' //采购凭证类型
poheader.Value[3] = 'F' //采购凭证类别
poheader.Value[5] = '1001' //采购组织
poheader.Value[6] = 'A01' //采购组
poheader.Value[8] = '0000100024' //供应商帐户号

/********************************************************/
//给itab对象赋值
/********************************************************/
//00010
ItemsRow = poitems.Rows.Add()
ItemsRow.Value[2] = '00010'//采购凭证的项目编号
ItemsRow.Value[5] = '000000001101010006'//物料号
ItemsRow.Value[11] = '1000'//库存地点
ItemsRow.Value[17] ='1001'//工厂
ItemsRow.Value[21] ='5'//采购凭证中的净价格(以凭证货币计)

SchedulesRow = poitemschedule.rows.add( )
SchedulesRow.Value[1] = '00010'//采购凭证的项目编号
SchedulesRow.Value[3] = '1'//日期类型 (日,周,月,间隔)
SchedulesRow.Value[4] = '20100531'//项目交货日期
SchedulesRow.Value[6] = '100'//已计划数量

//00020
ItemsRow = poitems.Rows.Add()
ItemsRow.Value[2] = '00020'//采购凭证的项目编号
ItemsRow.Value[5] = '000000001101010007'//物料号
ItemsRow.Value[11] = '1000'//库存地点
ItemsRow.Value[17] ='1001'//工厂
ItemsRow.Value[21] ='6'//采购凭证中的净价格(以凭证货币计)

SchedulesRow = poitemschedule.rows.add( )
SchedulesRow.Value[1] = '00020'//采购凭证的项目编号
SchedulesRow.Value[3] = '1'//日期类型 (日,周,月,间隔)
SchedulesRow.Value[4] = '20100531'//项目交货日期
SchedulesRow.Value[6] = '99'//已计划数量



/********************************************************/
//开始呼叫SAP的函数
/********************************************************/
BOOLEAN lb_call

lb_call = funct.call()


/********************************************************/
//取返回wa值
/********************************************************/
PO_NO = funct.imports.ITEM('PURCHASEORDER')
//MESSAGEBOX('新订单号',STRING(PO_NO))

/********************************************************/
//取返回itab值
/********************************************************/
it_return = funct.tables("RETURN")
string ls_aa,ls_bb
Long ll_r,i
ll_r = it_return.rowcount()

mle_1.text = ''

if ll_r > 0 then
        for i = 1 to ll_r
                 ls_aa = it_return.value(i,'TYPE')
                 ls_bb = it_return.value(i,'MESSAGE')
                 mle_1.text += '符号:' + ls_aa +space(32) + ' 描述: ('+ ls_bb + ')~r~n'
        next
end if

//MESSAGEBOX('新订单号',STRING(PO_NO))



//commit
funct = saprfc.add("BAPI_TRANSACTION_COMMIT")
lb_call = funct.call()


/********************************************************/
//释放对象,
/********************************************************/
connection2.LogOff()
destroy connection2
saprfc.disconnectobject()
destroy saprfc

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/139677/viewspace-664851/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/139677/viewspace-664851/

在使用BAPI_PO_CREATE1创建采购订单后出现两个PBXX(通常指采购凭证的行项目类别相关标识)的情况,可能有以下原因及对应的解决办法: ### 原因 - **数据重复传递**:在调用BAPI_PO_CREATE1时,传递的采购订单数据中可能存在重复的行项目信息。例如,在传入的内表中,有两行数据的关键信息(如物料、数量、供应商等)几乎完全相同,导致系统将其识别为两个独立的行项目,从而出现两个PBXX [^1]。 - **BAPI逻辑问题**:BAPI内部的逻辑可能在某些特定条件下对传入的数据进行了异常处理,导致重复生成行项目。比如,BAPI在处理某些自定义增强逻辑、条件判断或者数据转换时,出现了错误,使得原本应该合并的行项目被拆分成了两个 [^1]。 - **系统配置问题**:系统的配置可能影响了BAPI的处理结果。例如,采购订单的行项目类别配置、物料主数据的设置或者供应商主数据的相关配置存在问题,导致BAPI创建采购订单时无法正确识别和合并行项目 [^1]。 ### 解决办法 - **检查传入数据**:仔细检查调用BAPI_PO_CREATE1时传入的内表数据,确保没有重复的行项目信息。可以通过编写代码对传入的内表进行去重处理,只保留唯一的行项目。以下是一个简单的ABAP代码示例用于去重: ```abap DATA: lt_po_items TYPE STANDARD TABLE OF bapimepoitem. DATA: lt_unique_items TYPE STANDARD TABLE OF bapimepoitem. " 假设lt_po_items是传入的采购订单行项目内表 SORT lt_po_items BY matnr menge lieferant. DELETE ADJACENT DUPLICATES FROM lt_po_items COMPARING matnr menge lieferant. lt_unique_items = lt_po_items. ``` - **调试BAPI逻辑**:使用ABAP调试工具对BAPI_PO_CREATE1进行调试,检查其内部的处理逻辑。可以设置断点,逐步执行代码,观察数据的处理过程,找出可能出现问题的代码段。如果发现是自定义增强逻辑导致的问题,可以对增强逻辑进行修改或者禁用 [^1]。 - **检查系统配置**:检查采购订单的行项目类别配置、物料主数据和供应商主数据的相关设置。确保这些配置没有冲突或者错误。可以通过系统的配置界面(如SPRO)进行检查和修改 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值