22.01.2002, 15:29 | #1 |
Участник
|
Расчет физических остатков по складу
В аксапте расчет остатков (допустим финансовых) на конкретную дату производистся
следующим образом: 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 |
Administrator
|
Сразу оговорюсь, что могу ошибаться, поэтому дальнейшее прошу рассматривать только как идею.
В таблице 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 |
Участник
|
Привет!
Цитата:
Изначально опубликовано max
Таким образом, в первом случае Вы подсчитываете реальное (физическое) количество остатков, а во втором Вы учитываете только количество проведенное по бухгалтерии. Что же будет работать быстрее? Конечно же, второй подход - с вычитанием. Причем чем больше будет данных, тем больше будет разница в скорости. Разве нет?
__________________
С уважением, Андрей Беседин |
|
21.03.2002, 13:50 | #4 |
Участник
|
max, ты не прав.
inventTrans хранит проводки по складу. InventTransPosting хранит информацию о документах, которые инициировали появление и разноску записей в inventTrans. Теперь внимание. Проводки в inventTrans с одинаковым лотом (InventTransID) могут суммироваться и разбиваться. См. Управление запасами \ Запросы \ Проводки \ Функции \ Суммирование или разбиение. В этом случае информация о документах-оригиналах останется в inventTransPosting. В inventTransPosting можно найти ссылки на бух.документы. НО inventTransPosting это не только бухгалтреские документы. Андрей. Все зависит от того что тебе нужно. Насколько я понимаю, InventTransPosting проверяется всегда. Насколько я понимаю, это правильно. Разницу ты ощутишь когда проводки будут разделяться и/или суммироваться. Разница в суммах также проявится после закрытия склада (когда появятся коррекции по складу) Насколько я понимаю, если тебя интересует ТОЛЬКО количество, то можно выбирать только InventTrans. Если же тебя интересует и сумма, то надо проверять InventTrans вместе с InventTransPosting. |
|
21.03.2002, 15:36 | #5 |
Administrator
|
Цитата:
Изначально опубликовано max
Сразу оговорюсь, что могу ошибаться, поэтому дальнейшее прошу рассматривать только как идею.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Расчет ЕСН | 1 | |||
Оборотная ведомость по складу | 8 | |||
Как организовать среднюю себестоимость по разделенному складу | 27 | |||
Неправильный расчет отпускных листов | 1 | |||
Русская локализация Axapta 3 ? | 59 |
|