benter
17th January 2007, 03:51
Hi, Dear all,
I made a session to realize the auto maintain receipt function, I test the program, I found the session can work in Baan4c4(SP9), but if I migrate this program to Baan4c4(SP16), the session could not work.
My source code as following:
| Creating a receipt always use 0 for the tdpur045.reno field.
purchase.order=101935
stpapi.handle.subproc("tdpur4120m000","tdpur4224s000","add")
stpapi.put.field("tdpur4120m000","tdpur045.reno",str$(0))
stpapi.change.view("tdpur4120m000")
if not isspace(msg) then
stpapi.end.session("tdpur4120m000")
message(receipt.number)
endif
| Always use tdpur4224s000 to create receipt for all lines.
stpapi.put.field("tdpur4224s000","form.orno",str$(purchase.order))
stpapi.continue.process("tdpur4224s000",msg)
stpapi.end.session("tdpur4224s000")
|Currently tdpur4224s000 continue returns Process is gone
if not isspace(msg) and strip$(msg)<> "Process is gone" then
stpapi.end.session("tdpur4120m000")
message(receipt.number)
endif
msg = ""
suspend(3000)
stpapi.get.field("tdpur4120m000","tdpur045.reno",dummy)
receipt.number = dummy
receipt.number1=val(dummy)
select tdpur045.*
from tdpur045
where tdpur045.reno=:receipt.number1 and tdpur045.dqua=0
selectdo
purchase.order=tdpur045.orno
purchase.line =tdpur045.pono
stpapi.put.field("tdpur4120m000","tdpur045.reno",receipt.number)
stpapi.put.field("tdpur4120m000","tdpur045.orno",str$(purchase.order))
stpapi.put.field("tdpur4120m000","tdpur045.pono",str$(purchase.line))
stpapi.find("tdpur4120m000")
get.quan.and.lot()
received.date=date.num()
purchaselot.date=date.num()
conv.factor =1
modify_receipt(lval(receipt.number),
purchase.order,
purchase.line,
packingslip.qty,
received.qty,
received.date,
purchase.lot,
purchaselot.date,
conv.factor,
purchase.unit,
purchase.item,
msg)
suspend(3000)
endselect
stpapi.end.session("tdpur4120m000")
}
function get.quan.and.lot()
{
select *
from tdpur041
where tdpur041.orno=:purchase.order and tdpur041.pono=:purchase.line
selectdo
purchase.lot = tdpur041.clot
packingslip.qty =tdpur041.oqua
received.qty = tdpur041.oqua
purchase.item=tdpur041.item
purchase.unit=tdpur041.cuqp
endselect
}
|******************************************************************************
|* API Code for modifying an existing receipt.
|******************************************************************************
function extern modify_receipt( domain tcrcno receipt.number,
domain tcorno purchase.order,
domain tcpono purchase.line,
domain tcqiv1 packingslip.qty,
domain tcqiv1 received.qty,
domain tcdate received.date,
domain tdltc.clot purchase.lot,
domain tcdate purchaselot.date,
domain tcconv conv.factor,
domain tccuni purchase.unit,
domain tcitem purchase.item,
ref string msg())
{
long rc, cnt
string dummy(6), error_code(16)
domain tcorno get.orno
domain tcpono get.pono
conv.factor =1
select tiitm001.stgu, tiitm001.kitm
from tiitm001
where tiitm001._index1 = {:purchase.item}
as set with 1 rows
selectdo
endselect
msg = ""
| boi.call = "tdboidll0011.Create"
| Prepare to handle lot controlled items.
if ((not isspace(purchase.lot) or conv.factor>1 )
and (tiitm001.kitm=tckitm.purchase or tiitm001.kitm = tckitm.manufacture)) then
stpapi.handle.subproc("tdpur4120m000","tdilc4113s000","add")
endif
stpapi.put.field("tdpur4120m000","tdpur045.diqu",str$(packingslip.qty))
stpapi.put.field("tdpur4120m000","tdpur045.date",str$(received.date))
stpapi.put.field("tdpur4120m000","tdpur045.dqua",str$(received.qty))
stpapi.update("tdpur4120m000",1,msg)
if not isspace(msg) then
if not isspace(purchase.lot) or conv.factor>1 then
stpapi.end.session("tdilc4113s000")
endif
stpapi.end.session("tdpur4120m000")
abort()
endif
| Need to handle the conversion factor.
if ((not isspace(purchase.lot) or conv.factor>1 or purchase.unit <> tiitm001.stgu)
and (tiitm001.kitm=tckitm.purchase or tiitm001.kitm = tckitm.manufacture)) then
stpapi.put.field("tdilc4113s000", "tdilc402.clot",purchase.lot)
stpapi.put.field("tdilc4113s000", "tdilc402.date",str$(purchaselot.date))
stpapi.put.field("tdilc4113s000", "tdilc402.qstr",str$(received.qty*conv.factor))
stpapi.put.field("tdilc4113s000", "tdilc402.qstc",str$(received.qty*conv.factor))
stpapi.insert("tdilc4113s000",1,msg)
error_code = stpapi.get.mess.code("tdilc4113s000")
if strip$(error_code) = "tdilc40062" then
msg = ""
endif
stpapi.end.session("tdilc4113s000")
endif
| stpapi.end.session("tdpur4120m000")
}
In SP16 enviroment, the program was hold in the script ' stpapi.update("tdpur4120m000",1,msg)' , How can do for this case?
Help me! Thanks a lot!
I made a session to realize the auto maintain receipt function, I test the program, I found the session can work in Baan4c4(SP9), but if I migrate this program to Baan4c4(SP16), the session could not work.
My source code as following:
| Creating a receipt always use 0 for the tdpur045.reno field.
purchase.order=101935
stpapi.handle.subproc("tdpur4120m000","tdpur4224s000","add")
stpapi.put.field("tdpur4120m000","tdpur045.reno",str$(0))
stpapi.change.view("tdpur4120m000")
if not isspace(msg) then
stpapi.end.session("tdpur4120m000")
message(receipt.number)
endif
| Always use tdpur4224s000 to create receipt for all lines.
stpapi.put.field("tdpur4224s000","form.orno",str$(purchase.order))
stpapi.continue.process("tdpur4224s000",msg)
stpapi.end.session("tdpur4224s000")
|Currently tdpur4224s000 continue returns Process is gone
if not isspace(msg) and strip$(msg)<> "Process is gone" then
stpapi.end.session("tdpur4120m000")
message(receipt.number)
endif
msg = ""
suspend(3000)
stpapi.get.field("tdpur4120m000","tdpur045.reno",dummy)
receipt.number = dummy
receipt.number1=val(dummy)
select tdpur045.*
from tdpur045
where tdpur045.reno=:receipt.number1 and tdpur045.dqua=0
selectdo
purchase.order=tdpur045.orno
purchase.line =tdpur045.pono
stpapi.put.field("tdpur4120m000","tdpur045.reno",receipt.number)
stpapi.put.field("tdpur4120m000","tdpur045.orno",str$(purchase.order))
stpapi.put.field("tdpur4120m000","tdpur045.pono",str$(purchase.line))
stpapi.find("tdpur4120m000")
get.quan.and.lot()
received.date=date.num()
purchaselot.date=date.num()
conv.factor =1
modify_receipt(lval(receipt.number),
purchase.order,
purchase.line,
packingslip.qty,
received.qty,
received.date,
purchase.lot,
purchaselot.date,
conv.factor,
purchase.unit,
purchase.item,
msg)
suspend(3000)
endselect
stpapi.end.session("tdpur4120m000")
}
function get.quan.and.lot()
{
select *
from tdpur041
where tdpur041.orno=:purchase.order and tdpur041.pono=:purchase.line
selectdo
purchase.lot = tdpur041.clot
packingslip.qty =tdpur041.oqua
received.qty = tdpur041.oqua
purchase.item=tdpur041.item
purchase.unit=tdpur041.cuqp
endselect
}
|******************************************************************************
|* API Code for modifying an existing receipt.
|******************************************************************************
function extern modify_receipt( domain tcrcno receipt.number,
domain tcorno purchase.order,
domain tcpono purchase.line,
domain tcqiv1 packingslip.qty,
domain tcqiv1 received.qty,
domain tcdate received.date,
domain tdltc.clot purchase.lot,
domain tcdate purchaselot.date,
domain tcconv conv.factor,
domain tccuni purchase.unit,
domain tcitem purchase.item,
ref string msg())
{
long rc, cnt
string dummy(6), error_code(16)
domain tcorno get.orno
domain tcpono get.pono
conv.factor =1
select tiitm001.stgu, tiitm001.kitm
from tiitm001
where tiitm001._index1 = {:purchase.item}
as set with 1 rows
selectdo
endselect
msg = ""
| boi.call = "tdboidll0011.Create"
| Prepare to handle lot controlled items.
if ((not isspace(purchase.lot) or conv.factor>1 )
and (tiitm001.kitm=tckitm.purchase or tiitm001.kitm = tckitm.manufacture)) then
stpapi.handle.subproc("tdpur4120m000","tdilc4113s000","add")
endif
stpapi.put.field("tdpur4120m000","tdpur045.diqu",str$(packingslip.qty))
stpapi.put.field("tdpur4120m000","tdpur045.date",str$(received.date))
stpapi.put.field("tdpur4120m000","tdpur045.dqua",str$(received.qty))
stpapi.update("tdpur4120m000",1,msg)
if not isspace(msg) then
if not isspace(purchase.lot) or conv.factor>1 then
stpapi.end.session("tdilc4113s000")
endif
stpapi.end.session("tdpur4120m000")
abort()
endif
| Need to handle the conversion factor.
if ((not isspace(purchase.lot) or conv.factor>1 or purchase.unit <> tiitm001.stgu)
and (tiitm001.kitm=tckitm.purchase or tiitm001.kitm = tckitm.manufacture)) then
stpapi.put.field("tdilc4113s000", "tdilc402.clot",purchase.lot)
stpapi.put.field("tdilc4113s000", "tdilc402.date",str$(purchaselot.date))
stpapi.put.field("tdilc4113s000", "tdilc402.qstr",str$(received.qty*conv.factor))
stpapi.put.field("tdilc4113s000", "tdilc402.qstc",str$(received.qty*conv.factor))
stpapi.insert("tdilc4113s000",1,msg)
error_code = stpapi.get.mess.code("tdilc4113s000")
if strip$(error_code) = "tdilc40062" then
msg = ""
endif
stpapi.end.session("tdilc4113s000")
endif
| stpapi.end.session("tdpur4120m000")
}
In SP16 enviroment, the program was hold in the script ' stpapi.update("tdpur4120m000",1,msg)' , How can do for this case?
Help me! Thanks a lot!