Разбиваю имеющиеся строки журнала по комбинациям складских аналитик. Т.е. старые строки удаляю - новые создаю. При создании новых строк Аксапта ругается, что "количество не может быть уменьшено, т.к. не хватает проводк в статусе "Заказано". Ругается она на проверку в классе InventUpd_Estimated. Предполагаю, что происходит это из-за того, что delete и insert находятся внутри одной транзакции. Но никак не могу придумать, как разбить ее на две.
Хелп! Код следующий:
PHP код:
currecord = args.record();
ttsbegin;
while select forupdate inventjournaltrans
where inventjournaltrans.journalid == currecord.journalid
{
inventjournaltrans.delete();
InventLocation = InventDim::find(Inventjournaltrans.InventDimId).InventLocationId;
InventLocationTo = InventDim::find(Inventjournaltrans.ToInventDimId).InventLocationId;
qty = -currecord.Qty;
while select InventSum
where InventSum.ItemId == inventjournaltrans.ItemId &&
InventSum.AvailPhysical > 0
join InventDim
where InventDim.inventDimId == InventSum.InventDimId &&
InventDim.InventLocationId == InventLocation
{
if (qty <= 0) break;
if (qty <= inventsum.AvailPhysical)
{
InventDimTo.inventBatchId = InventDim.inventBatchId;
InventDimTo.InventLocationId = InventLocationTo;
InventDimTo = InventDim::findOrCreate(InventDimTo);
InventJournalTransCopy.JournalId = currecord.JournalId;
InventJournalTransCopy.JournalType = currecord.JournalType;
InventJournalTransCopy.TransDate = systemdateget();
InventJournalTransCopy.ItemId = currecord.itemId;
InventJournalTransCopy.InventDimId = inventDim.inventDimId;
InventJournalTransCopy.ToInventDimId = inventDimTo.inventDimId;
InventJournalTransCopy.Qty = -qty;
InventJournalTrans.initFromInventJournalTrans(InventJournalTransCopy);
InventJournalTrans.insert();
break;
}
else
{
InventDimTo.inventBatchId = InventDim.inventBatchId;
InventDimTo.InventLocationId = InventLocationTo;
InventDimTo = InventDim::findOrCreate(InventDimTo);
InventJournalTransCopy.JournalId = currecord.JournalId;
InventJournalTransCopy.JournalType = currecord.JournalType;
InventJournalTransCopy.TransDate = systemdateget();
InventJournalTransCopy.ItemId = currecord.itemId;
InventJournalTransCopy.InventDimId = inventDim.inventDimId;
InventJournalTransCopy.ToInventDimId = inventDimTo.inventDimId;
InventJournalTransCopy.Qty = -inventsum.AvailPhysical;
InventJournalTrans.initFromInventJournalTrans(InventJournalTransCopy);
InventJournalTrans.insert();
qty -= inventsum.AvailPhysical;
}