Показать сообщение отдельно
Старый 17.09.2004, 13:00   #1  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
Создать/Удалить строки журнала
Разбиваю имеющиеся строки журнала по комбинациям складских аналитик. Т.е. старые строки удаляю - новые создаю. При создании новых строк Аксапта ругается, что "количество не может быть уменьшено, т.к. не хватает проводк в статусе "Заказано". Ругается она на проверку в классе 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;
                               }