В аналитических отчетах по продажам часто требуется не просто вывести сумму выручки по клиентам за выбранный период, но и категоризировать клиентскую базу по активности. Рассмотрим практическую задачу: как с помощью схемы компоновки данных (СКД) разделить контрагентов на три категории:
Прежде чем приступать к написанию запроса, проанализируем особенности учета данных в типовых конфигурациях 1С, которые могут исказить итоговую статистику:
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Регистратор), документы ВозвратТоваровОтКлиента или корректировки реализаций добавят лишние документы в выборку. Если клиент купил товар, а затем оформил возврат, без отбора по положительной сумме выручки он ошибочно будет признан покупателем.ОтчетОРозничныхПродажах, документ-регистратор является общим для сотен покупателей. В розничной торговле корректный подсчет возможен только при наличии чеков ККМ или заказов с привязкой к карте лояльности.Разберем по шагам построение запроса для классификации. Нам необходимо решить две задачи: посчитать количество уникальных продаж за текущий год и выяснить сам факт наличия покупок до начала текущего года.
Нет необходимости вычислять точное число продаж за все исторические периоды — для отнесения к «нулевым» достаточно простого флага наличия хотя бы одной продажи до границы текущего года.
Посмотрим на пример структуры запроса:
ВЫБРАТЬ
ВыручкаИСебестоимость.Клиент КАК Клиент,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР
КОГДА ВыручкаИСебестоимость.Период >= &НачалоТекущегоГода
ТОГДА ВыручкаИСебестоимость.Регистратор
КОНЕЦ) КАК ПродажВТекущемГоду,
МАКСИМУМ(ВЫБОР
КОГДА ВыручкаИСебестоимость.Период < &НачалоТекущегоГода
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ) КАК БылиПродажиВПрошлом
ПОМЕСТИТЬ ВТ_СтатистикаКлиентов
ИЗ
РегистрНакопления.ВыручкаИСебестоимостьПродаж КАК ВыручкаИСебестоимость
ГДЕ
ВыручкаИСебестоимость.СуммаВыручки > 0
СГРУППИРОВАТЬ ПО
ВыручкаИСебестоимость.Клиент
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Статистика.Клиент КАК Клиент,
Статистика.ПродажВТекущемГоду КАК ПродажВТекущемГоду,
ВЫБОР
КОГДА Статистика.ПродажВТекущемГоду > 1
ТОГДА "Повторный"
КОГДА Статистика.ПродажВТекущемГоду = 1 И НЕ Статистика.БылиПродажиВПрошлом
ТОГДА "Нулевой"
КОГДА Статистика.ПродажВТекущемГоду = 1 И Статистика.БылиПродажиВПрошлом
ТОГДА "Первичный"
ИНАЧЕ "Без покупок в текущем году"
КОНЕЦ КАК КатегорияКлиента
ИЗ
ВТ_СтатистикаКлиентов КАК Статистика
Рассмотрим подробнее вопрос быстродействия. Если база данных существует много лет и содержит миллионы записей, прямое сканирование таблицы движений регистра без ограничения периода снизу может вызвать существенные задержки.
Чтобы избежать блокировок и ускорить выполнение отчета, применим разделение наборов данных в СКД:
Клиент. СКД автоматически ограничит выборку второго набора только теми клиентами, которые попали в основной результат отчета.Выясним, как настроить автоматическое определение границ текущего года без необходимости ручного ввода дат пользователем:
НачалоТекущегоГода.НачалоПериода(ТекущаяДата(), "Год").Такой подход обеспечивает полностью автоматический расчет категорий контрагентов и корректно интегрируется в любой существующий отчет по продажам.