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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.03.2007, 19:41   #1  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
? inventUpd_reservation использование inventDim
Возник вопрос у меня (может я чего не понимаю)
есть Класс inventUpd_reservation, он делает физ.резервирование товара. В начале строится квери по InventSum в связке с InventDim, далее в цикле по квери идет работа. В фрагменте, табличным переменным присваивается значение из квери и дальше идет с ними работа:
X++:
protected void updateReserveMore()
{
..................
        while (doNext)
        {
            inventSum = queryRun.get(TableNum(InventSum));
            inventDim = queryRun.get(TableNum(InventDim));

            if (doSelect)
            select firstOnly firstfast forupdate inventTrans
                index TransIdIdx
                where inventTrans.inventTransId         == movement.transId()          &&
                      inventTrans.transChildType        == movement.transChildType()   &&
                      inventTrans.transChildRefId       == movement.transChildRefId()  &&
                      inventTrans.statusReceipt         == StatusReceipt::None         &&
                      inventTrans.statusIssue           == StatusIssue::OnOrder;

            if (! inventTrans)
                break;

            if (inventTrans.qty > aDDReserv)
                addQty   = inventTrans.qty;
            else
                addQty   = aDDReserv;

            reserveMax = -(inventSum.availReservation(loopReserveType) - tmpReserved);

            if (addQty <= reserveMax)
            {
                addQty      = reserveMax;
                doNext      = true;
                tmpReserved = 0;
            }
            else
                doNext      = false;

            if (addQty < 0)             {
                if (addQty   > inventTrans.qty) 
                    inventTrans.updateSplit(addQty);

                inventTrans.inventDimId         = InventDim::findOrCreate(inventDim).inventDimId;
                inventTrans.inventDimFixed      = inventDimFixed;

                inventDim.inventDimId           = inventTrans.inventDimId;
                movement.updateTransDimTransferReceipt(this,inventTrans,inventDim);

                movement.transIdSum().setInventTransStatus(inventTrans,StatusReceipt::None,(loopReserveType ? StatusIssue::ReservOrdered : StatusIssue::ReservPhysical));

                inventTrans.update();
                inventTrans.updateSumUp();

                aDDReserv           -= addQty;

                if (loopReserveType)
.........
собственно интересует зачем происходит такая вот работа с inventDim:
X++:
inventTrans.inventDimId         = InventDim::findOrCreate(inventDim).inventDimId;
inventTrans.inventDimFixed      = inventDimFixed;
inventDim.inventDimId           = inventTrans.inventDimId;
конкретно непонятно: зачем делать InventDim::findOrCreate, если и так известно что в inventDim находится реально существующая аналитика???? А потом еще и переприсвоение inventDimId - или я туплю или двое из ларца
__________________
--- SHiSHok
Старый 31.03.2007, 20:01   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от SHiSHok Посмотреть сообщение
конкретно непонятно: зачем делать InventDim::findOrCreate, если и так известно что в inventDim находится реально существующая аналитика????
Почему?
В query по inventdim могли произоти группировки.
Не факт, что была группировка по inventdimid (даже наоборот, скорее всего такой группировки нет).
Это значит, что поля со значениями есть, а inventdimid отсутствует.

Цитата:
Сообщение от SHiSHok Посмотреть сообщение
А потом еще и переприсвоение inventDimId - или я туплю или двое из ларца
Из-за группировок в query часть полей со значениями могла потеряться.
В результате, в этом месте мы можем получить новый, еще не существующий InventDimId.
__________________
полезное на axForum, github, vk, coub.
Старый 31.03.2007, 21:32   #3  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
Цитата:
Сообщение от mazzy Посмотреть сообщение
В query по inventdim могли произоти группировки.
Не факт, что была группировка по inventdimid (даже наоборот, скорее всего такой группировки нет).
Это значит, что поля со значениями есть, а inventdimid отсутствует.
точно, спасибо.
жужужу на этот раз я.
__________________
--- SHiSHok
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Использование семейства InventDimCtrl_Frm_* - 2 DS InventDim на одной форме Pavlo AKA Panok DAX: База знаний и проекты 5 22.12.2008 17:15
Можно ли вообще сделать JOIN временной таблицы и InventDim??? Maxim Gorbunov DAX: Программирование 9 05.03.2005 10:39
InventDim.findOrCreateBlank - простое сложно? Pavlo AKA Panok DAX: Программирование 5 25.10.2004 16:50
Работа с InventDim... NJD DAX: Программирование 11 17.06.2004 14:42
Как правильно установить связь между двумя записями в InventDim Sirius DAX: Программирование 0 25.05.2004 16:50

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

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

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