Dynamics Ax 4.0 kernel 4.0.2501.116 Application version 4.0.2200.0
Уважаемые коллеги!
Происходит странная вещь - при разноске отборочной накладной иногда (не всегда!) InventDimId из строки отборочной накладной подменяется неким другим, взятым из строки с тем же ItemId из другой отборочной накладной, привязанной к данному производственному заказу. То есть мы имеем в строке prodJournalBOM InvenDimId_1, а в соответствующей ей строке InventTrans - совершенно другой InventDimId_2. Это приводит к путанице серийных номеров и другим неприятным последствиям. В чем может быть причина? Разноска накладной осуществляется стандартными средствами Аксапты, отборочная накладная генерится тоже стандартными средствами аксапты в автоматическом режиме.
X++:
InventDim serialNumber, inventDim, inventDimNew;
InventTrans inventTrans;
ProdJournalProd prepack, journalBOM;
ProdJournalBom content, newPickingListLines;
ProdJournalTable prodJournalTable, pickingList;
ProdJournalCheckPost journalCheckPost, pickingListPost;
JournalTableData journalTableData;
ProdJournalCreateBOM prodJournalCreateBOM;
;
journalTableData = JournalTableData::newTable(prodJournalTable);
journalTableData.initFromJournalName(ProdJournalName::find(ProdJournalName::standardJournalName(ProdJournalType::ReportFinished)));
ttsbegin;
prodJournalTable.JournalId = journalTableData.nextJournalId();
prodJournalTable.Description = journalTableData.journalTable().Description;
prodJournalTable.JournalNameId = journalTableData.journalTable().JournalNameId;
prodJournalTable.ProdId = prepack.ProdId;
prodJournalTable.Posted = NoYes::No;
prodJournalTable.PostedDate = SystemDateGet();
prodJournalTable.PostedUserId = '';
prodJournalTable.NumOfLines = 1;
prodJournalTable.ProdAutoPickList = NoYes::No;
prodJournalTable.JournalNameIdPickList = ProdJournalName::find(ProdJournalName::standardJournalName(ProdJournalType::Picklist)).JournalNameId;
prodJournalTable.insert();
journalBOM.initFromProdJournalTable(prodJournalTable);
journalBOM.TransDate = SystemDateGet();
journalBOM.InventDimId = inventTrans.InventDimId;
journalBOM.QtyGood = -1;
journalBOM.ProdFinished = NoYes::No;
journalBOM.ProdPickListJournalId = '';
journalBOM.insert();
prodJournalCreateBOM = ProdJournalCreateBOM::newProdJournalProd(journalBOM);
prodJournalCreateBOM.run();
pickingList = ProdJournalTable::find(prodJournalCreateBOM.usedProdJournalTable().JournalId);
if (pickingList)
{
journalBOM.ProdPickList = NoYes::Yes;
journalBOM.ProdPickListJournalId = pickingList.JournalId;
journalId = pickingList.JournalId;
journalBOM.doupdate();
}
else
throw error("@SYS71699");
while select content
where content.JournalId == prepack.ProdPickListJournalId
join inventDim
where content.InventDimId == inventDim.inventDimId
&& inventDim.inventSerialId
{
select forupdate newPickingListLines
where newPickingListLines.JournalId == pickingList.JournalId
&& newPickingListLines.ItemId == content.ItemId
join inventDimNew
where newPickingListLines.InventDimId == inventDimNew.inventDimId
&& ! inventDimNew.inventSerialId;
if (newPickingListLines)
{
newPickingListLines.InventDimId = content.InventDimId;
newPickingListLines.update();
}
}
ttscommit;
ТО есть при попытке вернуть некий компонент изделия на склад создается отборочная накладная с отрицательным количеством и в ее строках проставляется та же аналитика, что и в обычной отборочной накладной, созданной и разнесенной при сборке изделия. Но при разноске этой возвратной накладной иногда в InventTrans попадает совершенно другой серийный номер, чем тот, что указан в возвратной накладной. Подскажите, где может происходить такая подмена?