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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.07.2005, 14:25   #1  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Пересчет inventSum
День добрый!

1. Можно ли стандартным образом функционалом пересчитать inventSum (интересует поле 'В наличии') на основании проводок?

2. Чем мне аукнется если я руками изменю поле 'В наличии'?
Старый 18.09.2014, 13:30   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Я почему-то решил что у вас оракл.
Видимо из-за баннеров

Вот и спросил.
Скрипт просматривал только по диагонали.

Чем вас не устроил InventSumReCalcItem о котором raz написал ?
Старый 21.09.2014, 21:56   #3  
Kasper is offline
Kasper
Участник
 
34 / 19 (1) ++
Регистрация: 30.11.2005
Доработал пост в блоге, учёл все комментарии.
Годится ?

Цитата:
Сообщение от Logger Посмотреть сообщение
Чем вас не устроил InventSumReCalcItem о котором raz написал ?
По правде говоря, я об этом классе не знал. Класс выполняет ту-же работу. Но скрипт, перед тем, как что-то сделать -- предоставляет лог. Скрипт можно использовать для экспресс-диагностики

Цитата:
Сообщение от Logger Посмотреть сообщение
А вы явные противопоказания к удалению закрытых записей знаете ?
Квалифицированный ответ можно получить только от вендора, но можно порассуждать.
Допустим есть чистая настроенная база. Пока ещё ни одной складской проводки.
В складской картотеке есть одна номенклатура -- "Ведро"
И вот вы купили одно ведро и сразу же его продали. Нажимаем кнопку "Запасы". Видим - Ведро, количество - 0.
А если закрытую строку из InventSum удалить, то в форме "Запасы" будет пусто. Так не должно быть.

Так ?
Старый 22.09.2014, 06:51   #4  
Perc is offline
Perc
Участник
 
194 / 57 (2) ++++
Регистрация: 05.03.2005
Цитата:
Сообщение от Kasper Посмотреть сообщение
А если закрытую строку из InventSum удалить, то в форме "Запасы" будет пусто. Так не должно быть.
Почему это так не должно быть. Ведь до того как ведро купили так было! И ничего страшного не произошло. В перечне есть на остатках нет.
Старый 22.09.2014, 10:10   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Kasper Посмотреть сообщение
А если закрытую строку из InventSum удалить, то в форме "Запасы" будет пусто. Так не должно быть.

Так ?
Строго говоря - не должно так быть.
Но я думаю ради производительности с этим можно смириться.

Или доработать форму "Запасы", чтобы все равно показывала записи.
Старый 22.09.2014, 07:59   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
А разве закрытой строка становится не после сопоставления закрытием склада? По-моему алгоритм закрытия как-то использует информацию из InventSum? Или я ошибаюсь? И точно ли не понадобятся такие закрытые строки в InventSum в случае открытия (отмены закрытия) склада?
Старый 22.09.2014, 10:57   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
А разве закрытой строка становится не после сопоставления закрытием склада? По-моему алгоритм закрытия как-то использует информацию из InventSum? Или я ошибаюсь? И точно ли не понадобятся такие закрытые строки в InventSum в случае открытия (отмены закрытия) склада?
На Inventsum.Insert() и Inventsum.update()
есть такой код :
X++:
    this.closedQty = this.isAllQtyFieldsZero();
    this.closed    = this.isAllValueFieldsZero() && this.closedQty;
(еще есть аналогичный код в хранимке, которая обновляет остаток в InvnetSum)

А в методах тупо идет сравнение количественных и суммовых полей с нулем.
На закрытие склад ей пофигу. Просто как правило суммовые поля выравниваются после закрытия что приводит к их обнулению и взведению галки closed. Но такое может быть и без закрытия склада.

Закрытие склада, насколько я помню не использует InventSum.
Табличка InventSum упоминается в методах
\Classes\InventCostClosingCancel_WorkInvent\checkAndDeleteVirtualTransfer
\Classes\InventCostClosingCancel_WorkInvent\deleteVirtualTransfers

но не для выборки из базы или фильтрации, а как накопительная переменная в памяти.


Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
И точно ли не понадобятся такие закрытые строки в InventSum в случае открытия (отмены закрытия) склада?
По идее, они просто создадутся вновь если Аксапте потребуется остаток сделать отличным от нуля. Но я сам не проверял.
Старый 22.09.2014, 11:01   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Я бы еще подправил метод
\Classes\InventSumDateEngine\selectInventOnHand
вот это место
X++:
    insert_recordset inventSumDateTrans (ItemId, PostedQty, ReceivedQty, DeductedQty, PickedQty, RegisteredQty, PostedValue,
                                         #InventDimFields, ParmId, TransType)
        select ItemId, sum(PostedQty), sum(Received), sum(Deducted), sum(Picked), sum(Registered), sum(PostedValue)
        from inventSum
        group by ItemId
        where inventSum.Closed == NoYes::Yes
        join #InventDimFields, parmId /*scalar*/, inventSumDateType /*scalar*/
            from inventDim
            group by #InventDimFields
            where inventDim.InventDimId == inventSum.InventDimId
        exists join inventTrans
            where inventTrans.ItemId      == inventSum.ItemId
               && inventTrans.InventDimId == inventSum.InventDimId
               && inventTrans.DateStatus  >= perDate;
здесь код явно закладывается на наличие закрытых записей. Легко исправляется.

Насколько я помню используется только в одном отчете по остаткам.
Старый 22.09.2014, 14:34   #9  
Ярослав Щекин is offline
Ярослав Щекин
Участник
 
78 / 174 (6) ++++++
Регистрация: 16.03.2009
Цитата:
Сообщение от Logger Посмотреть сообщение
здесь код явно закладывается на наличие закрытых записей. Легко исправляется.
Насколько я помню используется только в одном отчете по остаткам.
А я бы не стал так спешить.

Т.к. есть такой код в InventOnHand, похоже, что в стандарте на это могут закладываться, и придётся проверять весь код при обновлениях системы.

У нас, например (Ax 3.0), в доработках внедренцев (и наших) во многих местах код рассчитан на существование этой связки.

Кроме того, я посмотрел метод InventTrans.update из стандарта, и там тоже ожидается, что соответствующий InventSum существует, т.е. если проводки с удалённым InventSum когда-то будут использоваться (отмена закрытия склада, например), нужно проверить, как поведёт себя и этот код.

Последний раз редактировалось Ярослав Щекин; 22.09.2014 в 14:37.
Старый 23.09.2014, 10:44   #10  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Так я и хотел в этой теме обсудить, какие места в стандартной Аксапте могут сломаться из-за такой кастомизации и как это лечить.

А свои доработки каждый сам будет допиливать.
Старый 13.11.2014, 11:11   #11  
AraraT® is offline
AraraT®
Участник
1C
 
158 / 106 (4) +++++
Регистрация: 13.01.2006
Адрес: Республика Татарстан, г. Казань
Наткнулся на статью:
http://technet.microsoft.com/en-us/l.../dn505749.aspx

Думаю, что код можно портировать и на более ранние версии.
__________________
Айрат Вильданов.
skype: vildanov.a
За это сообщение автора поблагодарили: Logger (5), S.Kuskov (2).
Старый 15.11.2014, 16:48   #12  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
Цитата:
Сообщение от AraraT® Посмотреть сообщение
Наткнулся на статью:
http://technet.microsoft.com/en-us/l.../dn505749.aspx

Думаю, что код можно портировать и на более ранние версии.
Может быть, но если нет 2012 под рукой? Может кто-то показать, выложить эту процедуру?
Теги
inventsum, остатки, остатки на дату

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
RecordSet у inventSum CasperSKY DAX: Программирование 3 21.03.2008 15:52
Ошибка при разноске складских движений Starling DAX: Администрирование 9 12.10.2007 14:21
Можно ли чистить InventSum? DreamCreator DAX: Программирование 19 05.12.2006 15:38
Проверка уникальности ItemDimIdx в InventSum DreamCreator DAX: Программирование 15 06.12.2005 17:23
Форма InventOnhandItem, Почему RecID у InventSum в этой форме всегда 0? Кирилл DAX: Программирование 2 25.05.2004 18:15

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

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

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