Алгоритм расчета.
1. Количество дней на остатке - сумма наличия товара. По каждому дню проверяем наличие товара на остатке. Если позиция была на начало дня и на конец дня (остаток >0), то наличие = 1. Если позиция на начало дня > 0, но на конец дня = 0 или на начало дня = 0 и на конец дня > 0, то наличие в этот день равно 1/2. Если позиция отсутствовала на начало дня и на конец дня, то наличие = 0.
2. Средний остаток в периоде. Суммируется остатки товара на начало дня и конец дня по каждому дню из выбранного периода. Получившаяся сумма делится на (2*количество дней в периоде);
3. Скорость продаж = Продажи за период / Количество дней на остатке.
4. Средняя оборачиваемость = Средний остаток в периоде / (продажи за период / количество дней в периоде).
5. Оборачиваемость на конец периода = остаток на конец периода / (продажи за период / количество дней в периоде).
6. Если продаж за период нет, то оборачиваемость бесконечна, но подстановка числа типа 9999 засоряет отчет и дает большие значения для групп, поэтому в этом случае устанавливается в 0.
Решения для повышения производительности.
1. Количество дней на остатке и Средний остаток в периоде рассчитываются не за каждый день, а периодами с одинаковыми остатками.
2. Применяются временные таблицы. Конструкция ВЫБРАТЬ РАЗРЕШЕННЫЕ используется только в одном запросе к регистрам продаж и остатков. Временные таблицы удаляются по мере их использования.
Сравнение с другими решениями.
Из похожих решений был найден отчет "АнализОборачиваемости_УТ11.erf". Выражаю благодарность автору этого отчета за метод получения периодов с одинаковыми остатками и условное оформление (сортировка идет по убыванию скрости продаж, причем, если остаток на конец периода = 0, то строка выделяется красным). Настроенный в отчете вариант "Горизонтальная группировка" оформлен именно так. Однако этот отчет дает неверные значения по средним остаткам и совсем неправильные в случае отсутствия остатков на начало и / или конец периода.
Отличия:
1. Учитываются случаи отсутствия товара на границах периода.
2. Можно выводить все позиции и только проданные за период (параметр "Вывести позиции").
3. Существенно повышена скорость выполнения.
Прочее.
1. Отчет тестировался на УТ 11.1.5 и 11.1.9.
2. Для установки отборов/группировок по сериям, характеристикам и т.д. следует подключить регистры сведений АналитикаУчетаНоменклатуры, "НоменклатураСегмента" (см. любой товарный отчет УТ 11).
3. Имея средний остаток, можно вычислить коэффициент уходимости, время "жизни на полке" и прочие маркетингово-логистические показатели.