The code example below shows how code can be used to register a picking list and process only partial quantities.
My approach is to create a separate line in the WMSOrderTrans table for the required quantity (using the Split function) and to cancel the currently not needed quantity.
static void pickingListRegistrationPartly(Args _args)
{
WMSPickingRouteID pickingRouteID = "00066"; // Route id to be picked
Map inventTransMap = new Map(Types::String, Types::Real);
MapEnumerator me;
InventTransId inventTransId;
Qty pickQty;
List list = new List(Types::String);
WmsOrderTrans wmsOrderTrans;
WmsOrderTrans wmsOrderTransNew;
list.addEnd(pickingRouteID);
// Build map containing the lot-ids and quantity to pick
inventTransMap.insert("014023", 7);
inventTransMap.insert("014026", 3);
// Change quantity
me = inventTransMap.getEnumerator();
while (me.moveNext())
{
inventTransId = me.currentKey();
pickQty = me.currentValue();
ttsBegin;
select forupdate wmsOrderTrans
where wmsOrderTrans.RouteId == pickingRouteID &&
wmsOrderTrans.inventTransId == inventTransId &&
wmsOrderTrans.FullPallet == NoYes::No &&
(wmsOrderTrans.ExpeditionStatus == WMSExpeditionStatus::Registered ||
wmsOrderTrans.ExpeditionStatus == WMSExpeditionStatus::Activated ||
wmsOrderTrans.ExpeditionStatus == WMSExpeditionStatus::Started);
// Split line
wmsOrderTransNew = wmsOrderTrans.split(pickQty);
ttsCommit;
ttsBegin;
// Cancel remaining line
wmsOrderTrans.cancel();
ttsCommit;
}
// Update
WMSPickingRoute::finishMulti(list.pack());
wmsDeliverPickedItems::checkDeliverPickedItems(pickingRouteID, list.pack());
}
The code example below shows how code can be used to register a picking list and process only partial quantities.
My approach is to create a separate line in the WMSOrderTrans table for the required quantity (using the Split function) and to cancel the currently not needed quantity.