в статье так и говорилось
http://axapta.mazzy.ru/lib/inventsumdate/
Цитата:
Такой подход работает быстро и хорошо, если часто запрашиваются последние остатки – остатки на прошлую неделю, остатки на прошлый месяц, остатки на прошлый год. Такой подход работает плохо, если вы часто запрашиваете очень давние остатки.
поэтому вполне возможно, что анализ старых периодов лучше вести от начала времен.
===============
Цитата:
Сообщение от
pitersky
А вот если разница менее порядка (т.е. по каждому разрезу было лишь несколько движений) - то оказывается выгоднее именно считать сумму количества в проводках с начала времён. Как я понимаю, это результат специфики работы SQL, который занимается черновой работой по схлопыванию записей - когда складских проводок по разрезу мало, то перебор свёрнутых по аналитике InventTrans идёт быстрее, чем перебор InventSum с расчётом остатка по каждому из них.
Да, и это условие тоже есть.
Но соотношение между таблицами - это не все.
Дело в том, что InventSum содержит как закрытые, так и открытые записи.
закрытая запись - это запись по какой-то комбинации аналитик, с полностью нулевыми количествами-суммами. (см. метод InventSum.isAllFieldsZero(), а также поле InventSum.Closed и перекрестные ссылки по нему, где это поле записывается)
поле Closed используется в индексах
предполагается, что:
= при большом количестве комбинаций складских аналитик (серийные номера, партии, ячейки) большинство записей в InventSum будет закрыто
= следовательно в выборку попадет относительно небольшое число активных (ненулевых) записей.
Поэтому: надо анализировать не общий объем таблицы InventSum, а число открытых записей в InventSum.
ЕСЛИ же у вас комбинаций аналитик так много И большинство записей в InventSum незакрыты, то у вас где-то нарушена логика работы Аксапты.
в общем, о большом количестве комбинаций аналитик разработчики думали.
и предполагали некоторые условия использования, когда подход от конечных остатков оптимален.