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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.05.2007, 11:02   #1  
gefr is offline
gefr
Участник
Аватар для gefr
MCBMSS
 
147 / 17 (1) ++
Регистрация: 01.11.2004
Адрес: МО, Котельники
Не срабатывает процедура снятия резерва
Преамбула:
В таблицу InventTrans добавили поле "истечение срока резерва". Выставляем из параметров, и т.д. Соответствено написали запрос строк с истекшим сроком резервирования с суммированием по количеству. соответственно на эту форму прикручена кнопка снятия резерва. Есть идентичных механизм в виде периодической операции, но не суть важно.
Амбула:
Прописанный алгоритм не работает... Сверился с тем, что есть здесь: http://axapta.mazzy.ru/lib/reserve_from_code/ - у нас идентично. Может, кто чего подскажет?
X++:
void clicked()
{
   InventMovement inventMovement;
   InventUpd_Reservation inventUpdReservation;
   InventTrans tIT;
   ;
    super();
  while select tIT where tIT.InventTransId==InventTrans.InventTransId {
    inventMovement = InventMovement::construct (tIT);
    inventUpdReservation = InventUpd_Reservation::newMovement(inventMovement,
                                     -tIT.Qty,
                                     false );
    inventUpdReservation.updateNow();
    }
   InventTrans_DS.executequery();
}
Старый 24.05.2007, 11:22   #2  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Посмотрите на складские аналитки. Они у вас в строке заказа (ну или какого другого Movement) совпадают или в проводках есть значения аналитик, которых нет в строке заказа, например в строке заказа нет партий, а резерв по партиям?
Дело в том, что newMovement инициализирует критерий по строке Movement и, соответственно, пропускает проводки с другими аналитиками.
Старый 24.05.2007, 11:31   #3  
gefr is offline
gefr
Участник
Аватар для gefr
MCBMSS
 
147 / 17 (1) ++
Регистрация: 01.11.2004
Адрес: МО, Котельники
Проверил - он на основани моего InventMovement в конце концов подтягивает аналитики непосредственно из заказа. Соответственно, аналитики совпадают. Заодно сверил, убедился - действительно ве ок.
Может, я не туда смотрю, проверяя резерв? Если есть строка складских проводок со статусом "Физ. зарезервировано", привязанная к InventTransId строки заказа - это необходимый и достаточный фактор того, что строка зарезервирована? Или может, у меня просто запрос неправильный?
Старый 24.05.2007, 11:55   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Вобщем, достаточный (правда проводка может быть не одна). Кстати, если есть подчиненный буфер, то резерв снять с поводки не получится (например, есть заказ на отгрузку - без его удаления резерв не снять).
Я понимаю, что аналитики берутся из заказа. Я имел ввиду следующее:
В заказе указан только склад. Кроме склада для номенклатуры активна аналитика Серийный номер или Партия, естественно резерв идет с учетом партий. Вот в таком случае просто вызвав InventUpd_Reservation::newMovement для создания объекта резерв не снимешь, так как фильтрация будет осуществляться для пустой партии, а в проводке она есть.
Старый 24.05.2007, 12:02   #5  
gefr is offline
gefr
Участник
Аватар для gefr
MCBMSS
 
147 / 17 (1) ++
Регистрация: 01.11.2004
Адрес: МО, Котельники
в периодической операции movement создается из строки заказа. тоже не срабатывает....
Старый 24.05.2007, 12:03   #6  
gefr is offline
gefr
Участник
Аватар для gefr
MCBMSS
 
147 / 17 (1) ++
Регистрация: 01.11.2004
Адрес: МО, Котельники
да, у нас так и есть, как Вы пишете - только у нас аналитик штук 6-7
и как тогда снимать?
Старый 24.05.2007, 12:13   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Если нужно снять все резервы, независимо от значений аналитик, то просто нужно дополнительно передать параметры фильтрации. Пишу по памяти, может что укажу не так:
i
X++:
nventDimBlank    = InventDim::findOrCreateBlank(false);
inventDimParm.initFromInventDim(inventDimReg);
InventUpd_Reservation::updateReserveFromForm(_inventJTrans, inventDimBlank, inventDimParm, -qtyNow);
Что-то вроде этого. Вобщем-то можно и newMovement использовать, и перед UpdateNow передать параметры parmInventDimCriteria, parmInventDimParm, parmInventDimFixed, но через updateReserveFromForm, на мой взгляд, проще
Старый 24.05.2007, 12:58   #8  
gefr is offline
gefr
Участник
Аватар для gefr
MCBMSS
 
147 / 17 (1) ++
Регистрация: 01.11.2004
Адрес: МО, Котельники
к сожалеию, есть обязательные аналитики, поэтому вариант с пустым inventdim не прошел. сделал вот так:
X++:
salesLine=SalesLine::findInventTransId(tIT.InventTransId);
inventDim    = InventDim::findOrCreateBlank(false);
inventDimParm.initFromInventDim(salesLine.inventDim());
InventUpd_Reservation::updateReserveFromForm(salesLine, salesLine.inventDim(), inventDimParm, - tIT.Qty);
с идентичным эффектом, т.е. его отсутствием.
Старый 24.05.2007, 13:07   #9  
axaLearner is offline
axaLearner
Участник
 
88 / 17 (1) ++
Регистрация: 24.06.2004
Адрес: God knows
X++:
while select inventTrans
    where inventTrans.InventTransId == salesLine.InventTransId
        && (inventTrans.StatusIssue == StatusIssue::ReservOrdered
              || inventTrans.StatusIssue == StatusIssue::ReservPhysical)
{
        inventDim = inventTrans.inventDim();
        inventDimParm.initFromInventDim(inventDim);
        InventUpd_Reservation::updateReserveFromForm(salesLine, inventDim, inventDimParm, inventTrans.Qty);
    }
Старый 24.05.2007, 13:08   #10  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Так этот вариант ничем не отличается от newMovement - фильтры по аналитикам так же инициируешь из строки заказа, только, в отличии от newMovement нарушаешь "путь Аксапта"
А что имеется ввиду под "обязательные аналитики" по отношению к снятию резерва? Если что-о важное, то инициируй inventDimParm как деаешь сейчас, а затем сбрось ненужные флаги.
Старый 24.05.2007, 13:43   #11  
gefr is offline
gefr
Участник
Аватар для gefr
MCBMSS
 
147 / 17 (1) ++
Регистрация: 01.11.2004
Адрес: МО, Котельники
Есть 6 аналитик, кот-е указываеются и в заказе, и есть одна - ерийный номер, которая, раз-ся, определяется только потом. соответственно, в резервировании присутствует только эта "лишняя" аналитика
Старый 24.05.2007, 13:54   #12  
axaLearner is offline
axaLearner
Участник
 
88 / 17 (1) ++
Регистрация: 24.06.2004
Адрес: God knows
george040875

А мой вариант у вас не работает?
Старый 24.05.2007, 14:27   #13  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
А почему не использовать выборку строки заказа и передачу ее в качестве параметра в класс InventUpd_reservation::updateReserveBuffer так, чтобы резерв очистился?
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.
Старый 25.05.2007, 10:27   #14  
gefr is offline
gefr
Участник
Аватар для gefr
MCBMSS
 
147 / 17 (1) ++
Регистрация: 01.11.2004
Адрес: МО, Котельники
после ряда экспериментов сработал вот такой вариант:
X++:
void clrRS(InventTransId _InventTransId){
   InventMovement inventMovement;
   InventUpd_Reservation inventUpdReservation;
   InventTrans tIT;
   InventOnHand            inventOnHand;
   InventUpd_Picked        inventUpd_Picked;
   InventDimParm           inventDimParm;
   InventDim               InventDim;
   SalesLine               salesLine;
   Common                  bf;
   ;
  while select tIT where tIT.InventTransId==_InventTransId {
    inventMovement = InventMovement::construct (tIT);
    switch (tIT.StatusIssue){
    case StatusIssue::ReservOrdered:
    case StatusIssue::ReservPhysical:
     InventDim=tIT.inventDim();
     inventDimParm.initFromInventDim(InventDim);
     if(inventMovement.childBuffer().RecId) bf=InventMovement.childBuffer(); else bf=inventMovement.buffer();
     InventUpd_Reservation::updateReserveFromForm(bf, InventDim, inventDimParm,  tIT.Qty);
     break;
    case StatusIssue::Picked:
     inventOnHand = inventOnHand::newItemDim(tIT.ItemId,tIT.inventDim(),inventDimParm,false);
     inventDimParm.initPhysicalUpdate(inventMovement.dimGroupId());
     inventUpd_Picked = InventUpd_Picked::newParameters(inventMovement,tIT.inventDim(),inventDimParm,tIT.inventDim(),inventDimParm,
                                                               - tIT.Qty);

     inventUpd_Picked.updateNow();
     break;
    }
   }

}
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Не срабатывает метод clicked у WebCheckBox (а надо сделать чтобы в заисимости от значения WebCheckBoxa другой компонент был enabled или disabled) rkorchagin DAX: Программирование 8 11.07.2008 10:37
Формирование резерва ElenaNAT DAX: Функционал 0 01.04.2008 11:44
Расчет выручки при формировании резерва дебеторской задолженности inetov DAX: Функционал 0 07.07.2006 14:37
Снятие резерва с проводок со статусом Физ. зарезервировано malex DAX: Программирование 6 24.01.2006 11:12
Зарплата. Общая процедура расчета. rus_stas DAX: Функционал 2 27.10.2005 13:35

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

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

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