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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.07.2008, 11:03   #1  
altap is offline
altap
MCTS
MCBMSS
 
26 / 18 (1) ++
Регистрация: 28.09.2005
Маркировка
Ax 4.0 Application version: 4.0.2501.121
Есть заказ и закупка. Выполнена маркировка строк, соответственно промаркированы и проводки. Статус проводок в заказе - "Зарезервировано в заказанных", в закупке - "Заказано"
2 ситуации:
1. Уменьшаем количество в заказе, затем увеличиваем количество выше изначального . Результат - одна проводка на изначальное количество в статусе "Зарезервировано в заказанных", другая - на разницу между вновь введенным количеством и изначальным в статусе "Заказано". Но обе они промаркированы с проводкой в закупке. То есть маркировка выполнена на количество, превышающее допустимое. Если после этого удалить закупку, то разница между вновь введенным количеством и изначальным останется в статусе "Зарезервировано в заказанных".
2. Увеличиваем количество в заказе, а затем увеличиваем количество в закупке, но на бОльшую величину. Результат - и в заказе и в закупке все количество в проводках оказывается промаркированным. То есть опять маркировка выполнена на количество, превышающее допустимое.

Возможно ситуации высосаны из пальца, в какой-то степени, но у меня вполне реально могут возникнуть.
Связано это с тем, что в
X++:
InventUpd_Estimated\createEstimatedInventTrans
при разбиении проводки в строке
X++:
inventTrans.updateSplit(inventTrans.Qty > 0 ? abs(markNow) : - abs(markNow));
в курсоре inventTrans остается вновь созданная проводка на количество markNow (то есть на которое маркируем), а проводка на оставшееся количество, которая не должна быть маркирована (так как введенное количество в строке закупки превышает допустимое для маркировки количество) оказывается оставленной как есть и вообще не фигурирует в данном методе (она маркирована, так как инициализируется из изначальной проводки, которая имеет маркировку).
В конце метода выполняется проверка:
X++:
 if (!markNow && inventTrans.InventRefTransId && !markForce) // reset InventRefTransId if no marking could be made
            {
                inventTrans.InventRefTransId = '';
                inventTrans.update();
            }
Она призвана как раз очищать ссылку. Но в данном случае она не пройдет, да и не должна пройти.

Собственно для себя придумал решение - получать из метода updateSplit проводку и очищать в ней InventRefTransId при условии, что знак marknow и InventTrans.Qty одинаковы (увеличиваем маркированное количество).
Если я что-то не так понял, или у кого-то есть другое, более соответствующее концепции решение, или это пофиксено в поздних версиях - подскажите, пожалуйста.
Ну или сойдет, как подсказка тем, кто наступит на эти-же грабли.

Последний раз редактировалось altap; 29.07.2008 в 11:24.
Теги
ax4.0, маркировка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Маркировка - достала! Maximin DAX: Программирование 2 29.01.2007 11:51
Маркировка платежа Himan DAX: Программирование 11 13.11.2006 16:23
Маркировка авансового платежа с несколькими заказами BlueRose DAX: Прочие вопросы 2 20.09.2006 14:14
Маркировка или учет по партиям? Starling DAX: Функционал 5 10.05.2006 10:49
Маркировка строк в гриде DreamCreator DAX: Программирование 8 09.06.2005 14:10

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

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

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