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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.01.2002, 15:29   #1  
Алексей Контев is offline
Алексей Контев
Участник
 
118 / 31 (2) +++
Регистрация: 28.12.2001
Адрес: Барнаул
? Расчет физических остатков по складу
В аксапте расчет остатков (допустим финансовых) на конкретную дату производистся
следующим образом:
1. Получаем остатки и себестоимость по товару из InventSum на текущий момент
2. Отнимаем из полученных данных данные по документам, обработанным после даты, на которую надо получить остатки.

Данная процедура реализована в классе Class\InventSumFinancial\setValueQty

Для получения физических остатков на текущий момент, т.е. с учетом проведенных накладных, необходимо после получения финансовых остатков, скорректировать их на величину сумм по этим проведенным накладным (прибавить приход и отнять расход. )

Есть два пути:
1. собрать проводки напрямую из InventTrans:
select sum(costAmountPhysical), sum(qty) from inventTrans index hint TransIdIdx
where inventTrans.itemId == itemId &&
inventTrans.configId == configId &&
inventTrans.dateFinancial > perDate

2. Как это сделано Class\InventSumFinancial\setValueQty сначала идти по физическим проводкам из InventTransPosting и, затем по InventTrans

select tableId from inventTransPosting index hint ItemTypeDateIdx where inventTransPosting.itemId == itemId &&
inventTransPosting.configId == configId && inventTransPosting.inventTransPostingType == InventTransPostingType::Physical && inventTransPosting.transDate > perDate
join sum(costAmountPhysical),sum(qty) from inventTrans index hint TransIdIdx
where inventTrans.voucherPhysical == inventTransPosting.voucher &&
inventTrans.datePhysical == inventTransPosting.transDate &&
inventTrans.inventTransId == inventTransPosting.inventTransId &&
inventTrans.packingSlipReturned == NoYes::No

Только не ищите ошибки в select-ах, это для примера

Кто-нибудь может сказать принципиальную разницу в этих двух подходах?
Предположительно, какая форма должна быстрее работать?
Во втором варианте используется индекс ItemTypeDateIdx в InventTransPosting насколько это увеличивет скорость работы select при получении данных за период?
Старый 21.03.2002, 10:44   #2  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Сразу оговорюсь, что могу ошибаться, поэтому дальнейшее прошу рассматривать только как идею.

В таблице InventTransPosting хранится связь складских проводок с бухгалтерскими. В InventTrans храняться все проводки. Таким образом, в первом случае Вы подсчитываете реальное (физическое) количество остатков, а во втором Вы учитываете только количество проведенное по бухгалтерии. Посмотрите на таблицу InventSum обратите внимание на колонки Received (Получено) и Deducted (Отпущено). Именно на эти значения будут отличаться остатки, подсчитанные первым и вторым способом.

Во втором случае Вы выбираете некоторое подмножество записей, выбираемых в первом. Из этого, в принципе, можно заключить, что второй работает быстрее, но если учесть специфику индексированных запросов, то это может оказаться и не так. В принципе, проанализировать не сложно, а если не охота делать это теоритически, вставьте таймеры в код (кстати, такой метод оценки производительности использовался и разработчиками Axapta: посмотрите, например, комментарии в методе updateData класса ReqCalculation).
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 21.03.2002, 11:27   #3  
Andrew Besedin is offline
Andrew Besedin
Участник
 
121 / 15 (1) ++
Регистрация: 25.01.2002
Привет!
Цитата:
Изначально опубликовано max
Таким образом, в первом случае Вы подсчитываете реальное (физическое) количество остатков, а во втором Вы учитываете только количество проведенное по бухгалтерии.
Ну а для этого в InventTrans есть поля StatusIssue и StatusReceipt, чтобы выбирать только те проводки, которые нужны.
Что же будет работать быстрее? Конечно же, второй подход - с вычитанием. Причем чем больше будет данных, тем больше будет разница в скорости. Разве нет?
__________________
С уважением,
Андрей Беседин
Старый 21.03.2002, 13:50   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
max, ты не прав.

inventTrans хранит проводки по складу.
InventTransPosting хранит информацию о документах, которые инициировали появление и разноску записей в inventTrans.

Теперь внимание.
Проводки в inventTrans с одинаковым лотом (InventTransID) могут суммироваться и разбиваться. См. Управление запасами \ Запросы \ Проводки \ Функции \ Суммирование или разбиение.

В этом случае информация о документах-оригиналах останется в inventTransPosting. В inventTransPosting можно найти ссылки на бух.документы. НО inventTransPosting это не только бухгалтреские документы.

Андрей.
Все зависит от того что тебе нужно.
Насколько я понимаю, InventTransPosting проверяется всегда. Насколько я понимаю, это правильно. Разницу ты ощутишь когда проводки будут разделяться и/или суммироваться. Разница в суммах также проявится после закрытия склада (когда появятся коррекции по складу)

Насколько я понимаю, если тебя интересует ТОЛЬКО количество, то можно выбирать только InventTrans. Если же тебя интересует и сумма, то надо проверять InventTrans вместе с InventTransPosting.
__________________
полезное на axForum, github, vk, coub.
Старый 21.03.2002, 15:36   #5  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано max
Сразу оговорюсь, что могу ошибаться, поэтому дальнейшее прошу рассматривать только как идею.
В общем, я ошибался, с чем и соглашаюсь...
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Расчет ЕСН AB_ DAX: Функционал 1 26.07.2006 14:31
Оборотная ведомость по складу twilight DAX: Функционал 8 05.04.2005 12:47
Как организовать среднюю себестоимость по разделенному складу Елена Сысовская DAX: Функционал 27 29.08.2003 20:01
Неправильный расчет отпускных листов Artild DAX: Функционал 1 14.07.2003 11:02
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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