Hi,
I’ve a customized form that will reduce onhand quantity by posting a pickinglist journal and when i enter a negative quantity it will create a quarantine order for that item though web service
I need to end that quarantine order through code
This is my class that i’m passing values from webpage to ax:
public void insertcreatetool(str location,str itemid,str prodid,str wrkctr,str wrkctrname,str empid,real qty,real onhand)
{
ProdJournalTable prodJournalTable;
ProdJournalBOM prodJournalBOM;
toolitemlocationmaster tilm;
inventdim invdim;
ProdTable prodTable;
ToolConsumption tcm;
ProdJournalCheckPostBOM prodJournalCheckPostbom;
str message;
Inventquarantinemultiend iqe=new Inventquarantinemultiend();
SysFormRun_doRe sysFormRun_doRe;
InventQuarantineOrder inq;
Args args;
;
breakpoint;
select tcm;
tcm.Location=location;
tcm.ToolID=itemid;
tcm.ProdID=prodid;
tcm.wrkCtrId=wrkctr;
tcm.wrkCtrName=wrkctrname;
tcm.EmplId=empid;
tcm.Qty=qty;
tcm.OnHandWhenPicked=onhand;
tcm.insert();
message="Inserted and Journal Created in Tool Consumption";
prodJournalTable.clear();
prodJournalTable.initValue();
prodJournalTable.JournalType = ProdJournalType::Picklist;
prodJournalTable.JournalNameId = 'pickJrnl';
prodJournalTable.Description = " Prod pick list journal";
prodJournalTable.ProdId = tcm.ProdID;
prodJournalTable.VoucherDraw = JournalVoucherDraw::Post;
prodJournalTable.NumOfLines = 1;
prodJournalTable.VoucherSeqId = NumberSequenceTable::find(ProdParameters::numRefProdJournalVoucherId().NumberSequence).NumberSequence;
prodJournalTable.insert();
prodJournalBOM.clear();
prodJournalBOM.initValue();
prodJournalBOM.JournalId = prodJournalTable.JournalId;
prodJournalBOM.initFromInventTable(InventTable::find(tcm.ToolID));
prodJournalBom.ProdId = tcm.ProdID;
prodJournalBom.LineNum = 1;
select tilm where tilm.InventLocationId == tcm.Location && tilm.ItemId == tcm.ToolID;
select inventdimid from invdim where invdim.wMSLocationId == tilm.InventLocationId && invdim.InventSiteId == tilm.InventSiteId && invdim.InventLocationId == tilm.InventWarehouse;
prodJournalBom.InventDimId = invdim.inventDimId;//"00014332_069";
// prodJournalBom.TransDate = systemDateGet();
prodJournalBom.BOMUnitId = "Pcs";
prodJournalBom.BOMConsump = tcm.Qty;
prodJournalBom.InventConsump = tcm.Qty;
prodJournalBom.Comments = "Workcenter ID: "+tcm.wrkCtrId;
prodJournalBom.insert();
ttsBegin;
tcm.selectForUpdate(true);
tcm.JournalId = prodJournalTable.JournalId;
tcm.update();
ttsCommit;
try
{
ttsbegin;
prodJournalCheckPostbom = prodJournalCheckPostbom::newPostJournal(tcm.JournalId,true);
prodJournalCheckPostbom.run();
ttscommit;
}
catch(Exception::Error)
{
continue;
}
iqe.run();
ttsbegin;
inq.selectForUpdate(true);
inq.Status=InventQuarantineStatus::Ended;
inq.update();
ttscommit;
}
i need to end this quarantine order for this tool consumption with neegative quantity
kranthi
September 11, 2018, 7:18am
2
Use InventQuarantineUpdEnd class,
inventQuarantineUpdEnd = InventQuarantineUpdEnd::newQuarantineOrder(inventQuarantineOrder, inventQuarantineOrder.Qty);
inventQuarantineUpdEnd.run();
this is my job
toolinsertcreatejournal tcj=new toolinsertcreatejournal();
tcj.insertcreatetool("A0116","TT00062","CS004538","APS","APS Coating","Al fitch",-8,2);
This is my class coding
static str webtoolinsertcreateposttool(str location,str itemid,str prodid,str wrkctr,str wrkctrname,str empid,real qty,real onhand)
{
ProdJournalTable prodJournalTable;
ProdJournalBOM prodJournalBOM;
toolitemlocationmaster tilm;
inventdim invdim;
ProdTable prodTable;
ToolConsumption tcm;
ProdJournalCheckPostBOM prodJournalCheckPostbom;
str message;
;
//breakpoint;
select tcm;
tcm.Location=location;
tcm.ToolID=itemid;
tcm.ProdID=prodid;
tcm.wrkCtrId=wrkctr;
tcm.wrkCtrName=wrkctrname;
tcm.EmplId=empid;
tcm.Qty=qty;
tcm.OnHandWhenPicked=onhand;
tcm.insert();
//Picking List Journal Creation
prodJournalTable.clear();
prodJournalTable.initValue();
prodJournalTable.JournalType = ProdJournalType::Picklist;
prodJournalTable.JournalNameId = 'pickJrnl';
prodJournalTable.Description = " Prod pick list journal";
prodJournalTable.ProdId = tcm.ProdID;
prodJournalTable.VoucherDraw = JournalVoucherDraw::Post;
prodJournalTable.NumOfLines = 1;
prodJournalTable.VoucherSeqId = NumberSequenceTable::find(ProdParameters::numRefProdJournalVoucherId().NumberSequence).NumberSequence;
prodJournalTable.insert();
prodJournalBOM.clear();
prodJournalBOM.initValue();
prodJournalBOM.JournalId = prodJournalTable.JournalId;
prodJournalBOM.initFromInventTable(InventTable::find(tcm.ToolID));
prodJournalBom.ProdId = tcm.ProdID;
prodJournalBom.LineNum = 1;
select tilm where tilm.InventLocationId == tcm.Location && tilm.ItemId == tcm.ToolID;
select inventdimid from invdim where invdim.wMSLocationId == tilm.InventLocationId && invdim.InventSiteId == tilm.InventSiteId && invdim.InventLocationId == tilm.InventWarehouse;
prodJournalBom.InventDimId = invdim.inventDimId;//"00014332_069";
// prodJournalBom.TransDate = systemDateGet();
prodJournalBom.BOMUnitId = "Pcs";
prodJournalBom.BOMConsump = tcm.Qty;
prodJournalBom.InventConsump = tcm.Qty;
prodJournalBom.Comments = "Workcenter ID: "+tcm.wrkCtrId;
prodJournalBom.insert();
ttsBegin;
tcm.selectForUpdate(true);
tcm.JournalId = prodJournalTable.JournalId;
tcm.update();
ttsCommit;
//posting pickinglist journal
try
{
ttsbegin;
prodJournalCheckPostbom = prodJournalCheckPostbom::newPostJournal(tcm.JournalId,true);
prodJournalCheckPostbom.run();
ttscommit;
}
catch(Exception::Error)
{
continue;
}
message="Journal Created and Posted in Tool Consumption and Journal Id is "+ tcm.JournalId;
return message;
}
When I run this quarantine order with started status is getting created
but not getting ended…
how to select that created quarantine order for this tool id
Getting error when i add this code:
inventQuarantineUpdEnd = InventQuarantineUpdEnd::newQuarantineOrder(inventQuarantineOrder, inventQuarantineOrder.Qty);
inventQuarantineUpdEnd.run();
kranthi
September 11, 2018, 8:08am
6
Are you selecting this correctly? At what point the quarantine order is created?
when we enter negative quantity, at that time a new quarantine order is creating automatically
if that item’s inventory model group have quarantine management
kranthi
September 11, 2018, 9:26am
9
Does the quarantine order created for item selected on the picking list?
They must have the relation. Try using ProdJournalBOM.InventTransId to select the inventQuarantineOrder
inventQuarantineOrder.InventTransIdRef == ProdJournalBOM.InventTransId
Yes, Kranthi if we gave negative qty for that item picking list journal as well as quarantine order is creating for that item
select inventQuarantineOrder where inventQuarantineOrder.InventTransIdRef == prodJournalBom.InventTransId && inventQuarantineOrder.ItemId== prodJournalBom.ItemId;
inventQuarantineUpdEnd = InventQuarantineUpdEnd::newQuarantineOrder(inventQuarantineOrder, inventQuarantineOrder.Qty);
inventQuarantineUpdEnd.run();
I tried its ending the quarantine order, Thanks Kranthi
inventQuarantineUpdEnd = InventQuarantineUpdEnd::newQuarantineOrder(inventQuarantineOrder, inventQuarantineOrder.Qty);
inventQuarantineUpdEnd.run();
Is it creating a new quarantine order or ending the existing order for that item?
kranthi
September 11, 2018, 10:38am
13
It will update the existing quarantine order. Look at \Classes\InventQuarantineUpdEnd\updateQuarantineOrder
Is it possible to do Report as finished and end the quarantine order?
kranthi
September 11, 2018, 11:50am
15
Yes, you can post the RAF. See the below code example,
InventQuarantineUpdReportFinished inventQuarantineUpdReportFinished;
InventParmQuarantineOrder inventParmQuarantineOrder;
inventParmQuarantineOrder.initParmDefault();
inventParmQuarantineOrder.LineNum = 1;
inventParmQuarantineOrder.QuarantineId = inventQuarantineOrder.QuarantineId;
inventParmQuarantineOrder.Qty = inventQuarantineOrder.RemainQty;
inventParmQuarantineOrder.Type = InventQuarantineStatus::ReportedFinished;
inventQuarantineUpdReportFinished = InventQuarantineUpdReportFinished::newParmBuffer(inventParmQuarantineOrder);
inventQuarantineUpdReportFinished.run();
select inventQuarantineOrder where inventQuarantineOrder.InventTransIdRef == prodJournalBom.InventTransId && inventQuarantineOrder.ItemId== prodJournalBom.ItemId;
inventQuarantineMultiReportFinished = InventQuarantineMultiReportFinished::construct();
parmBuffer = inventQuarantineMultiReportFinished.defaultParmBuffer();
parmUpdate = inventQuarantineMultiReportFinished.defaultParmUpdate();
RunBaseMultiParm::initParm(inventQuarantineMultiReportFinished);
//init and insert update parameters that goes for all updates.
InventQuarantineMultiReportFinished.insertParmUpdate(parmUpdate);
parmBuffer.Linenum++;
InventQuarantineMultiReportFinished.insert(inventQuarantineOrder,parmBuffer);
InventQuarantineMultiReportFinished.run();
inventQuarantineMultiEnd = InventQuarantineMultiEnd::construct();
parmBuffer = inventQuarantineMultiEnd.defaultParmBuffer();
parmUpdate = inventQuarantineMultiEnd.defaultParmUpdate();
RunBaseMultiParm::initParm(inventQuarantineMultiEnd);
//init and insert update parameters that goes for all updates.
inventQuarantineMultiEnd.insertParmUpdate(parmUpdate);
parmBuffer.Linenum++;
inventQuarantineMultiEnd.insert(inventQuarantineOrder,parmBuffer);
inventQuarantineMultiEnd.run();
does this will work?
kranthi
September 13, 2018, 10:59am
17
You can test it.
Have you tried the code i suggested?