Как составить рейтинг самых продаваемых товаров в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Задача по формированию рейтинга номенклатуры по продажам — одна из самых частых в управленческом учете. Необходимо понимать, какие товары приносят больше всего денег, какие чаще всего продаются, а какие — самые прибыльные. Начинающие разработчики часто допускают ошибку, пытаясь получить эти данные напрямую из документов, таких как ЗаказПокупателя или РеализацияТоваровУслуг. Давайте разберемся, почему это неверный подход и как правильно составить такой отчет с помощью запроса или стандартных инструментов 1С.

Почему нельзя строить отчеты напрямую по документам?

На первый взгляд, идея взять данные из документов кажется логичной. Например, автор исходной темы попытался получить данные из табличной части документа ЗаказПокупателя.Товары. Однако этот подход имеет несколько серьезных недостатков:

  1. Документ не всегда означает факт продажи. ЗаказПокупателя — это лишь намерение клиента купить товар. Заказ может быть отменен, изменен или выполнен не полностью. Даже документ РеализацияТоваровУслуг может быть не проведен или помечен на удаление, что не отражает реального движения товаров и финансов.
  2. Низкая производительность. Для получения данных за период (например, полгода) запросу придется "перелопатить" огромное количество документов, проанализировать их табличные части, проверить статусы и даты. Это очень медленно и ресурсозатратно, особенно на больших базах данных.
  3. Сложность получения итогов. Чтобы получить итоговую сумму или количество по каждой номенклатуре, пришлось бы писать сложный запрос с группировками по всем документам, что усложняет код и повышает вероятность ошибки.

Правильный и оптимизированный способ получения итоговых данных в 1С — это обращение к регистрам накопления.

Решение 1: Составляем правильный запрос к регистрам накопления

Регистры накопления специально созданы для хранения итоговой информации о движениях ресурсов (товаров, денег и т.д.). При проведении документов система делает записи в регистры, а для получения итогов за период используются специальные, высокопроизводительные механизмы — виртуальные таблицы.

Для анализа продаж нас интересуют следующие регистры (названия могут отличаться в зависимости от конфигурации):

Шаг 1. Определяемся с показателем для рейтинга

Прежде чем писать запрос, важно понять, по какому критерию мы будем строить рейтинг. От этого зависит, какие товары попадут в топ.

Рассмотрим пример. Компания продала 1 000 000 шурупов по 1 рублю (выручка 1 000 000 руб.) и 100 шуруповертов по 5000 рублей (выручка 500 000 руб.). По количеству и выручке лидируют шурупы. Но если прибыль с одного шурупа — 10 копеек (итого 100 000 руб.), а с шуруповерта — 2000 рублей (итого 200 000 руб.), то с точки зрения прибыльности шуруповерты оказываются вдвое выгоднее. Для такой оценки стоит использовать анализ валовой прибыли и рентабельности.

Шаг 2. Пишем универсальный запрос

Создадим запрос, который получит топ-50 товаров и рассчитает сразу все три показателя: количество, сумму выручки и валовую прибыль. Мы будем использовать виртуальную таблицу Обороты регистра ВыручкаИСебестоимостьПродаж.


ВЫБРАТЬ ПЕРВЫЕ 50
    ПродажиОбороты.Номенклатура КАК Номенклатура,
    СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество,
    СУММА(ПродажиОбороты.ВыручкаСНДСОборот) КАК СуммаПродаж,
    СУММА(ПродажиОбороты.ВыручкаСНДСОборот - ПродажиОбороты.СебестоимостьСНДСОборот) КАК ВаловаяПрибыль
ИЗ
    РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ПродажиОбороты
СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Номенклатура
УПОРЯДОЧИТЬ ПО
    СуммаПродаж УБЫВ

Давайте разберем этот запрос по частям:

  1. ВЫБРАТЬ ПЕРВЫЕ 50 — эта инструкция сразу ограничивает выборку первыми 50 записями после сортировки. Это именно то, что нам нужно для получения рейтинга.
  2. ПродажиОбороты.Номенклатура КАК Номенклатура — выбираем номенклатуру, по которой будем группировать данные.
  3. СУММА(...) КАК ... — используем агрегатные функции для получения итогов. Мы суммируем обороты по количеству (КоличествоОборот), выручке (ВыручкаСНДСОборот) и рассчитываем валовую прибыль как разницу между выручкой и себестоимостью.
  4. ИЗ РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(...) — здесь мы обращаемся к виртуальной таблице. В ее параметры передаем начало и конец периода (&НачалоПериода, &КонецПериода), за который нужно получить данные.
  5. СГРУППИРОВАТЬ ПО ПродажиОбороты.Номенклатура — эта ключевая инструкция "схлопывает" все записи по одной и той же номенклатуре в одну, позволяя посчитать по ней общие суммы.
  6. УПОРЯДОЧИТЬ ПО СуммаПродаж УБЫВ — сортируем итоговый результат по убыванию (УБЫВ) суммы продаж. Именно эта строка определяет, по какому показателю строится рейтинг. Вы легко можете изменить ее, например, на УПОРЯДОЧИТЬ ПО ВаловаяПрибыль УБЫВ, чтобы получить топ по прибыльности.

Этот запрос является мощной и гибкой основой для создания любого отчета по продажам.

Решение 2: Используем готовые отчеты — ABC/XYZ-анализ

Часто для решения бизнес-задачи не нужно "изобретать велосипед" и писать запросы вручную. В большинстве типовых конфигураций 1С уже есть мощнейшие инструменты анализа, и один из них — ABC/XYZ-анализ.

Что такое ABC-анализ?

ABC-анализ — это метод, позволяющий классифицировать ресурсы компании по степени их важности. В основе лежит принцип Парето: "20% усилий дают 80% результата". Применительно к товарам это означает, что небольшая часть ассортимента приносит основную часть дохода.

Стандартный отчет ABC-анализа в 1С позволяет легко получить список товаров класса А, что фактически и является рейтингом самых продаваемых позиций.

Что такое XYZ-анализ?

XYZ-анализ классифицирует товары по стабильности спроса и точности прогнозирования.

Совмещение ABC и XYZ анализа дает комплексную картину. Например, товары группы AX — это лидеры продаж со стабильным спросом (самые ценные и предсказуемые активы), а товары группы CZ — это неликвид со случайным спросом, который "замораживает" деньги на складе и от которого, возможно, стоит избавиться.

Вывод: прежде чем писать собственный запрос, всегда проверяйте наличие стандартных отчетов в вашей конфигурации 1С. Скорее всего, отчет "ABC/XYZ-анализ номенклатуры" уже решает вашу задачу, причем с гораздо большей гибкостью и аналитическими возможностями.

← На главную