在ACT的方案中没有使用传统的转仓功能,而是在原基础上增加了两个操作,
- 发送
- 接收
每一次转仓都是先发送到中转仓,然后在接收时将中转仓的物料再次过账到目标仓。
下面代码摘自 类ACT_CreateMovementJournal 方法initFrom2StepTransSend_NJ()
public void initFrom2StepTransSend_NJ(Nj_2StepTransTable _transTable)
{
InventJournalTable currJournalTable;
InventJournalTrans currJournalTrans;
NJ_2StepTransLines currTransLine;
InventDim currFromInventDim;
InventDim currToInventDim;
InventLocation inventLocation;
InventDim currInventDim;
int i;
;
ttsbegin;
inventJournalTable.clear();
inventJournalTable.initFromInventJournalName(InventJournalName::find(_transTable.JournalNameId));
inventJournalTable.InventLocationId = _transTable.FromInventLocationId;
inventJournalTable.WMSLocationId = _transTable.FromWMSLocationId;
inventJournalTable.ToLocationId = _transTable.MidInventLocationId;
inventJournalTable.ToWmsLocationId = _transTable.MidWMSLocationId;
inventJournalTable.Description = _transTable.TransferId;
inventJournalTable.ACT_CombineRefId = "@SYS50570";
inventJournalTable.insert();
if(inventJournalTable)
{
while select currTransLine
index hint LinesIdx
where currTransLine.TransferId == _transTable.TransferId
{
i++;
currInventDim = InventDim::find(currTransLine.InventDimId);
currFromInventDim.configId = currInventDim.configId;
currFromInventDim.InventSizeId = currInventDim.InventSizeId;
currFromInventDim.InventColorId = currInventDim.InventColorId;
currFromInventDim.inventBatchId = currInventDim.InventBatchId;
currFromInventDim.InventLocationId = inventJournalTable.InventLocationId;
currFromInventDim.wMSLocationId = inventJournalTable.WMSLocationId;
currFromInventDim = InventDim::findOrCreate(currFromInventDim);
currToInventDim.configId = currInventDim.ConfigId;
currToInventDim.InventSizeId = currInventDim.InventSizeId;
currToInventDim.InventColorId = currInventDim.InventColorId;
currToInventDim.inventBatchId = currInventDim.InventBatchId;
currToInventDim.InventLocationId = inventJournalTable.ToLocationId;
currToInventDim.wMSLocationId = inventJournalTable.ToWmsLocationId;
currToInventDim = InventDim::findOrCreate(currToInventDim);
inventJournalTrans.clear();
inventJournalTrans.initFromInventJournalTable(inventJournalTable);
inventJournalTrans.initFromInventTable(InventTable::find(currTransLine.ItemId));
inventJournalTrans.InventDimId = currFromInventDim.inventDimId;
inventJournalTrans.ToInventDimId = currToInventDim.inventDimId;
inventJournalTrans.Qty = currTransLine.DeliverNow;
inventJournalTrans.ACT_QtySec = currTransLine.DeliverNowSec;
inventJournalTrans.LineNum = i;
inventJournalTrans.TransDate = systemDateGet();
inventJournalTrans.setCostPrice(currinventDim.inventDimId,currInventDim);
inventJournalTrans.calcCostAmount();
inventJournalTrans.EmplId = EmplTable::userId2EmplId(curUserId());
inventJournalTrans.ACT_ReferenceNo = _transTable.TransferId;
inventJournalTrans.insert();
}
}
currJournalTable = InventJournalTable::find(inventJournalTable.JournalId,true);
currJournalTable.NumOfLines = i; //记录总行数
currJournalTable.update();
ttscommit;
上述代码用初始化InventJournalTable表与InventJournalTrans表行,在InventJournalTable中插入了一条日志
2.接下来就是将这条日志过账,过账使用InventJournalCheckPost类完成。
Public JournalId postingMovementJournal()
{
InventJournalTable currJournalTable;
;
if(inventJournalTable)
{
try
{
inventJournalPost = InventJournalCheckPost::newPostJournal(inventJournalTable);
inventJournalPost.run();
}
catch(Exception::Error)
{
if(inventJournalTable.ACT_ReferenceType == ACT_ReferenceType::Melt ||
inventJournalTable.ACT_ReferenceType == ACT_ReferenceType::MultiSmelt)
{
ACT_MouldSmeltTable::updateTransLineJournal(inventJournalTable.ACT_MouldId,inventJournalTable.JournalId);
}
if(inventJournalTable.ACT_ReferenceType == ACT_ReferenceType::SprueClean)
ACT_SprueCleanTable::updateTransLineJournal(inventJournalTable.ACT_MouldId,inventJournalTable.JournalId);
if(boolMould)
{
ACT_MouldTable::updateMouldLines(inventJournalTable.ACT_MouldId,inventJournalTable.JournalId);
}
delete_from currJournalTable
where currJournalTable.JournalId == inventJournalTable.JournalId;
throw error("未过账");
}
return inventJournalTable.JournalId;
}
return '';
}