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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.05.2012, 12:39   #1  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
! Изменения остатков в строке заказа на перемещение
Вот вчера наткнулся на такую особенность:

Если в строке заказа на продажу изменить в коде количество в полях остатков (RemainInventPhysical / RemainSalesPhysical) а потом просто вызвать
X++:
salesLine.update()
то проводки будут соотвественно откорректированы.

Если жи такую же операцию произвести со строкой заказа на перемещение, при этом поправив оба количества: Отгрузить остаток и Получить остаток, а потом вызвать обновления буффера, то проводки будут неправильно откорректированы, если количество остатка обнулить

X++:
inventTransferLine.QtyRemainShip       -= qty;
inventTransferLine.QtyRemainReceive -= qty; 
/*или так inventTransferLine.synchronizeQtyRemainReceive();*/
invnetTransferLine.update();
дело в том, что строка заказа на перемещение имеет 4 складские проводки: ИЗ СКЛАДА-> Транзит ИЗ / Транзит НА -> НА СКАЛАД.
При этом, как известно, проводки Транзита смаркированы между собой.
Так вот, при удалении проводки Транзит НА будет удалена маркировка и вызван метод
X++:
invnetTransferLine.doUpdate()
, что в последствии приводит к тому, что количества preEstimated и transEstimated в классе InventUpd_Estimated оба равны нулю и тогда проводки Транзит ИЗ и НА СКАЛАД не удаляются!!!

К счастью есть чудесный метод, который используется из функции на форме:

X++:
inventTransferLine.updateDeliverRemainder()
Приведу часть его кода, чтобы наглядно показать, где разработчики перехватывают и предотвращают вышеописанное поведение:

X++:
   movementFrom = InventMovement::construct(this);

    estimatedFrom = InventUpd_Estimated::newInventMovement(movementFrom);
    estimatedFrom.updateNow();

    estimatedTransitTo = InventUpd_Estimated::newInventMovement(InventMovement::construct(this,InventMovSubType::TransferOrderTransitTo));
    estimatedTransitTo.updateNow();

    this.QtyRemainReceive  = qtyRemainReceive; /*здесь происходит принудительное восстановление остатка*/
    movementTransitFrom = InventMovement::construct(this,InventMovSubType::TransferOrderTransitFrom);

    estimatedTransitFrom = InventUpd_Estimated::newInventMovement(movementTransitFrom);
    estimatedTransitFrom.updateNow();

    estimatedTo = InventUpd_Estimated::newInventMovement(InventMovement::construct(this,InventMovSubType::TransferOrderTo));
    estimatedTo.updateNow();
Код совпадает и в AX 4.0 и в AX 2012.

Удачи в разработке!
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!
Теги
inventtransferline, заказ на перемещение, остатки

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Маркировка заказа на перемещение plumbum DAX: Программирование 9 06.03.2012 17:56
Ошибка при крэше Ax4.0 при разноске Заказа на перемещение Xander DAX: Программирование 3 08.12.2011 15:32
Цены в строке заказа меняются при изменении шапки заказа s.alex DAX: Функционал 8 14.04.2009 11:27
Как программно изменить к-во в строке заказа в форме SalesTable BorDark DAX: Программирование 2 13.01.2005 17:02
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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