You can use this class called InventTransferParmLineCreate. This is the class that is called when you do a shipped or a received quantity. Also, when you need to ship a transfer order. There is a method called createShipLines. Based on this, you can modify your code for creating Transfer Journal Lines.
From your code it looks like you are trying to create Transfer order Shipment lines. A few points:
1. For Exploded Transfer Order Lines:
If you are trying to ship quantity of a product from the transfer order without exploding the transfer order lines then use the method called createShippedExplodedReceiveLines.
2. For Non-Exploded Transfer Order Lines:
If you are trying to ship quantity of a product from the transfer order without exploding the transfer order lines then use the method called createShipLineWithoutExplodeLines.
You need to modify your code to fetch InventTransferParmLine and pass the InventDim value in there. Attached a piece of code that you need to add to your run() method from the createShipLines() method. Used the below mentioned code for a development in the past.
//variable declaration here.
ttsbegin;
InventTransferTable inventTransferTable = InventTransferTable::find(inventTransferParmTable.TransferId,true);
if (! inventTransferTable.RecId)
{
throw error(strFmt(InventTransferTable::txtNotExist(),inventTransferParmTable.TransferId));
}
InventTransferParmLine inventTransferParmLine;
InventTransferLine inventTransferLine;
InventTrans inventTrans;
InventDim inventDim;
InventQty qtyUpdate;
LineNum lineNum;
// <GEERU>
InventTransferJourLine inventTransferJourLine;
// </GEERU>
PdsCWInventQty cwQtyUpdate;
// <GEERU>
if (!countryRegion_RU
||!((inventTransferParmTable.ShipUpdateQty == InventTransferShipUpdateQty::DocumentReturn_RU)
&& inventTransferParmTable.ExplodeLines))
{
// </GEERU>
Query query = this.buildCreateShipLinesQuery(inventTransferTable);
QueryRun queryRun = new QueryRun(query);
while (queryRun.next())
{
inventTransferLine = queryRun.get(tableNum(InventTransferLine));
if (this.mustSkipInventTransferLine(inventTransferLine))
{
if (inventTransferParmTable.isShipmentCancellation())
{
throw error(strFmt("@SCM:TransferOrderCancellationWHSLoadLineExistsException"));
}
continue;
}
boolean isTransferOrderShipmentCancellation = inventTransferParmTable.CanceledShipmentJournalRecId != 0;
// <GEERU>
if (countryRegion_RU || isTransferOrderShipmentCancellation)
{
if (inventTransferParmTable.ShipUpdateQty == InventTransferShipUpdateQty::DocumentReturn_RU
|| isTransferOrderShipmentCancellation)
{
select firstonly inventTransferJourLine
where
inventTransferJourLine.TransferId == inventTransferLine.TransferId &&
inventTransferJourLine.VoucherId == inventTransferParmTable.VoucherShipmentId &&
inventTransferJourLine.LineNum == inventTransferLine.LineNum;
if (!inventTransferJourLine.RecId)
continue;
}
qtyUpdate = isTransferOrderShipmentCancellation ?
inventTransferLine.calcCancelQty(inventTransferParmTable.ShipUpdateQty, inventTransferParmTable.VoucherShipmentId) :
inventTransferLine.calcShipQty(inventTransferParmTable.ShipUpdateQty, inventTransferParmTable.VoucherShipmentId);
if (PdsGlobal::pdsIsCWItem(inventTransferLine.ItemId))
{
cwQtyUpdate = isTransferOrderShipmentCancellation ?
inventTransferLine.pdsCWCalcCancelQty(inventTransferParmTable.ShipUpdateQty, inventTransferParmTable.VoucherShipmentId) :
inventTransferLine.pdsCWCalcShipQty(inventTransferParmTable.ShipUpdateQty, inventTransferParmTable.VoucherShipmentId);
}
else
{
cwQtyUpdate = 0;
}
}
else
{
// </GEERU>
qtyUpdate = inventTransferLine.calcShipQty(inventTransferParmTable.ShipUpdateQty);
if (PdsGlobal::pdsIsCWItem(inventTransferLine.ItemId))
{
cwQtyUpdate = inventTransferLine.pdsCWCalcShipQty(inventTransferParmTable.ShipUpdateQty);
}
else
{
cwQtyUpdate = 0;
}
// <GEERU>
}
// </GEERU>
// <GEERU>
if (((countryRegion_RU || isTransferOrderShipmentCancellation)
&& qtyUpdate < 0)
|| qtyUpdate > 0)
// </GEERU>
{
if (inventTransferParmTable.ExplodeLines)
{
while select forceplaceholders sum(Qty), sum(PdsCWQty)
from inventTrans
group by InventTransOrigin,StatusIssue,StatusReceipt
where inventTrans.InventTransOrigin == InventTransOriginTransferShip::findInventTransOriginId(inventTransferLine.DataAreaId, inventTransferLine.TransferId, inventTransferLine.LineNum)
&& inventTrans.StatusReceipt == StatusReceipt::None
// <GEERU>
&& ((countryRegion_RU
&& ((qtyUpdate > 0
&& inventTrans.StatusIssue >= StatusIssue::Picked)
|| (qtyUpdate < 0
&& inventTrans.StatusIssue == StatusIssue::Sold
&& inventTrans.InvoiceReturned == NoYes::No)))
|| (!countryRegion_RU
&& inventTrans.StatusIssue >= StatusIssue::Picked))
// </GEERU>
join TableId from inventDim
group by InventSerialId,InventBatchId,InventDimId
where inventDim.InventDimId == inventTrans.InventDimId
{
lineNum++;
inventTransferParmLine.clear();
this.initInventTransferParmLineFromInventTransferParmTable(inventTransferParmLine);
inventTransferParmLine.initFromInventTransferLine(inventTransferLine);
inventTransferParmLine.InventDimId = inventDim.InventDimId;
this.initInventTransferParmLineFromInventTrans(inventTransferParmLine, inventTrans);
inventTransferParmLine.InventTransId = inventTransferLine.InventTransId;
inventTransferParmLine.InventTransIdTransit = inventTransferLine.InventTransIdTransitTo;
// <GEERU>
if (countryRegion_RU)
{
inventTransferParmLine.QtyShipNow = abs(qtyUpdate) > -inventTrans.Qty ? -inventTrans.Qty * sign(qtyUpdate): qtyUpdate;
}
else
{
// </GEERU>
inventTransferParmLine.QtyShipNow = qtyUpdate > -inventTrans.Qty ? -inventTrans.Qty : qtyUpdate;
// <GEERU>
}
// </GEERU>
inventTransferParmLine.PdsCWQtyShipNow =
cwQtyUpdate > -inventTrans.PdsCWQty
? -inventTrans.PdsCWQty
: cwQtyUpdate;
inventTransferParmLine.LineNum = lineNum;
inventTransferParmLine.insert();
qtyUpdate -= inventTransferParmLine.QtyShipNow;
// <GEERU>
if (qtyUpdate == 0
|| (!countryRegion_RU
&& qtyUpdate < 0)
|| (PdsGlobal::pdsIsCWItem(inventTransferLine.ItemId) && (cwQtyUpdate <= 0)))
// </GEERU>
{
break;
}
}
}
else
{
lineNum++;
inventTransferParmLine = this.createShipLineWithoutExplodeLines(inventTransferTable, inventTransferLine, lineNum, qtyUpdate, cwQtyUpdate);
}
}
}
// <GEERU>
}
else
{
while select TransferId, LineNum, InventDimId, QtyShipped from inventTransferJourLine // lines are always exploded
where inventTransferJourLine.TransferId == inventTransferParmTable.TransferId &&
inventTransferJourLine.VoucherId == inventTransferParmTable.VoucherShipmentId
{
inventTransferLine = InventTransferLine::find(inventTransferJourLine.TransferId,inventTransferJourLine.LineNum);
if (this.mustSkipInventTransferLine(InventTransferLine))
{
continue;
}
lineNum++;
inventTransferParmLine.clear();
this.initInventTransferParmLineFromInventTransferParmTable(inventTransferParmLine);
inventTransferParmLine.initFromInventTransferLine(inventTransferLine);
inventTransferParmLine.InventDimId = inventTransferJourLine.InventDimId;
inventTransferParmLine.InventTransId = inventTransferLine.InventTransId;
inventTransferParmLine.InventTransIdTransit = inventTransferLine.InventTransIdTransitTo;
inventTransferParmLine.QtyShipNow = - inventTransferJourLine.QtyShipped;
inventTransferParmLine.LineNum = lineNum;
inventTransferParmLine.insert();
}
}
// </GEERU>
ttscommit;
Hope this helps. Happy to answer questions, if any.