AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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;
                               } 
Старый 20.09.2004, 08:54   #2  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
А нельзя ли использовать более правильный алгоритм:
считать количество по строке складского журнала;
найти нужную номенклатуру в InventSum и получить значение аналитики и количества;
если требуемое количество > количества по аналитике
создать новую строку с полученными данными;
уменьшить количество в строке на количество по строке;
перейти к шагу 1;
если требуемое количество < количество по аналитике
обновить только значение аналитики
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
При повторном вызове linkActive проваливается в validateWrite(Строки общего журнала ГК) Lemming DAX: Программирование 6 25.10.2007 13:50
Как создать строки журнала зарплаты? dreamer DAX: Программирование 1 20.03.2007 12:01
Строки журнала другого типа DreamCreator DAX: Программирование 0 16.03.2005 12:36
Удаление строки журнала ATimTim DAX: Программирование 7 05.08.2004 13:49
Функция "Удалить строки" Oks DAX: Функционал 1 03.07.2002 18:09

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:07.