Как создать отчет СКД в 1С:УТ 11.4 с данными о продажах, остатках и группировкой товаров по количеству?

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

В этом руководстве мы подробно рассмотрим, как разработать отчет на Системе Компоновки Данных (СКД) в конфигурации 1С:Управление торговлей 11.4. Наша задача — вывести информацию о количестве продаж за определенный период, сумме продаж в рублях, текущих остатках на складах и классифицировать товары по группам в зависимости от объема продаж. Мы разберем каждый шаг, от формирования запроса к данным до настройки структуры отчета, чтобы вы смогли эффективно реализовать подобные задачи.

Основные шаги по созданию отчета СКД

Для создания отчета, соответствующего поставленным требованиям, нам предстоит выполнить следующие ключевые шаги в конструкторе СКД:

  1. Формирование запроса к данным. Это основа любого отчета. Мы должны правильно выбрать источники данных (регистры) и агрегировать их.

  2. Настройка ресурсов. Определим поля, по которым необходимо выводить итоговые значения (суммы, количества).

  3. Создание вычисляемого поля для группировки. Используем логику ВЫБОР КОГДА для классификации товаров по заданным диапазонам количества проданного товара.

  4. Настройка структуры отчета. Определим, как будут располагаться поля и группировки в финальном отчете.

  5. Дополнительные возможности. Рассмотрим, как можно использовать ABC-классификацию для расширенного анализа, хотя это и не является частью исходной задачи, но может быть полезно.

Шаг 1: Формирование запроса к данным

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

Наш запрос будет состоять из нескольких частей, использующих временные таблицы для последовательной обработки данных. Такой подход делает запрос более читаемым и управляемым, позволяет нам шаг за шагом подготавливать данные перед их окончательным объединением и анализом.

1.1. Получение данных о продажах за период

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


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

Здесь:

1.2. Группировка продаж по номенклатуре

После того как мы получили все детальные записи о продажах за период, нам нужно агрегировать их, чтобы получить общую сумму и количество продаж для каждой уникальной номенклатурной позиции. Для этого мы создадим вторую временную таблицу, в которой сгруппируем данные по полю Номенклатура и просуммируем количество и выручку. Это позволит нам получить итоговые показатели по каждому товару.


////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_ПродажиЗаПериод.Номенклатура КАК Номенклатура,
    СУММА(ВТ_ПродажиЗаПериод.СуммаВыручкиСНДСРегл) КАК СуммаВыручкиСНДСРегл,
    СУММА(ВТ_ПродажиЗаПериод.Количество) КАК Количество
ПОМЕСТИТЬ ВТ_СгруппированныеПродажи
ИЗ
    ВТ_ПродажиЗаПериод КАК ВТ_ПродажиЗаПериод
СГРУППИРОВАТЬ ПО
    ВТ_ПродажиЗаПериод.Номенклатура
;

В этой части запроса:

1.3. Получение текущих остатков на складах

Далее нам необходимо получить информацию о текущих остатках товаров на складах на конец отчетного периода. Для этого мы используем виртуальную таблицу Остатки регистра накопления ТоварыНаСкладах. Виртуальная таблица Остатки позволяет получить срез последних остатков на определенную дату.


////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток
ПОМЕСТИТЬ ВТ_ОстаткиНаСкладах
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(КОНЕЦПЕРИОДА(&КонДата, ДЕНЬ), ) КАК ТоварыНаСкладахОстатки
;

Здесь:

1.4. Объединение данных и формирование поля "Группа"

Наконец, мы объединим все полученные временные таблицы в один результирующий набор данных. Здесь же мы сформируем поле Группа, используя условную логику ВЫБОР КОГДА на основе суммарного количества проданного товара, что является ключевым требованием отчета.


////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_СгруппированныеПродажи.Номенклатура КАК Товар,
    ВТ_СгруппированныеПродажи.Количество КАК ПроданоЗаПериодКоличество,
    ВТ_СгруппированныеПродажи.СуммаВыручкиСНДСРегл КАК ПроданоЗаПериодВРублях,
    ВТ_ОстаткиНаСкладах.ВНаличииОстаток КАК ТекущиеОстаткиНаСкладах,
    ВЫБОР
        КОГДА ВТ_СгруппированныеПродажи.Количество >= 0 И ВТ_СгруппированныеПродажи.Количество <= 9
            ТОГДА "Группа 1 (0-9 шт.)"
        КОГДА ВТ_СгруппированныеПродажи.Количество > 9 И ВТ_СгруппированныеПродажи.Количество <= 99
            ТОГДА "Группа 2 (10-99 шт.)"
        ИНАЧЕ "Группа 3 (от 100 шт.)"
    КОНЕЦ КАК Группа
ИЗ
    ВТ_СгруппированныеПродажи КАК ВТ_СгруппированныеПродажи
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиНаСкладах КАК ВТ_ОстаткиНаСкладах
        ПО ВТ_СгруппированныеПродажи.Номенклатура = ВТ_ОстаткиНаСкладах.Номенклатура

Разберем этот заключительный запрос более детально:

Таким образом, мы получили все необходимые поля для отчета: Товар, ПроданоЗаПериодКоличество, ПроданоЗаПериодВРублях, ТекущиеОстаткиНаСкладах и расчетное поле Группа.

Шаг 2: Настройка ресурсов в СКД

После того как запрос к данным сформирован и возвращает необходимые поля, нам необходимо указать Системе Компоновки Данных, какие из этих полей являются числовыми и должны быть просуммированы или по которым должны быть выведены итоговые значения. Для этого перейдем на закладку "Ресурсы" в конструкторе СКД.

Мы должны определить следующие поля как ресурсы:

Правильная настройка ресурсов позволяет СКД автоматически рассчитывать итоги по этим полям для всех уровней группировки и для отчета в целом, что делает отчет более информативным и удобным для анализа.

Шаг 3: Создание вычисляемого поля для группировки (дополнительный способ)

Хотя мы уже определили поле Группа непосредственно в запросе, иногда бывает удобнее выносить логику группировки в вычисляемые поля СКД. Этот подход полезен, если логика сложная, требует обращения к дополнительным функциям СКД, или если вы хотите, чтобы пользователи могли изменять эту логику (например, границы групп) через настройки СКД без изменения основного текста запроса. В нашем случае, поле Группа уже присутствует в конечном наборе данных запроса, и этот шаг является альтернативным или дополнительным.

Если бы мы создавали поле Группа как вычисляемое поле в СКД, то на закладке "Вычисляемые поля" в конструкторе СКД мы бы добавили новое поле, например, ГруппаПродаж, и прописали бы для него следующее выражение. Мы бы использовали уже готовые поля из набора данных, например, ПроданоЗаПериодКоличество.


ВЫБОР
    КОГДА ПроданоЗаПериодКоличество >= 0 И ПроданоЗаПериодКоличество <= 9
        ТОГДА "Группа 1 (0-9 шт.)"
    КОГДА ПроданоЗаПериодКоличество > 9 И ПроданоЗаПериодКоличество <= 99
        ТОГДА "Группа 2 (10-99 шт.)"
    ИНАЧЕ "Группа 3 (от 100 шт.)"
КОНЕЦ

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

Шаг 4: Настройка структуры отчета

Теперь, когда данные готовы и ресурсы определены, нам нужно настроить внешний вид отчета. Переходим на закладку "Настройки" в конструкторе СКД. Здесь мы определим, как будут выводиться данные, какие группировки будут использоваться и в каком порядке.

  1. Выбор типа структуры: Начнем с выбора общего типа структуры отчета. Для нашего случая, где мы выводим данные по товарам с группировкой, хорошо подойдет "Таблица". Это позволит нам иметь столбцы для каждого показателя и строки для товаров и групп.

  2. Выбор полей: На закладке "Выбранные поля" добавляем все поля, которые хотим видеть в отчете. Перетащите их из списка доступных полей в список выбранных. В нашем случае это будут:

    • Товар
    • ПроданоЗаПериодВРублях
    • ПроданоЗаПериодКоличество
    • ТекущиеОстаткиНаСкладах
    • Группа

    Убедитесь, что порядок полей соответствует желаемой форме отчета.

  3. Настройка группировок:

    Для того чтобы отчет соответствовал требованию ранжирования по группам, нам необходимо настроить группировку по полю Группа. Это позволит сначала выводить итоги по каждой группе, а затем детализацию по товарам внутри этой группы. Для этого:

    1. В структуре отчета добавьте новую группировку. Обычно это делается нажатием кнопки "Добавить группировку".
    2. В качестве поля группировки выберите наше созданное поле Группа.
    3. Внутри этой группировки (как подчиненную группировку) вы можете добавить еще одну группировку по Товар для детализации. Это обеспечит вывод списка товаров под каждой группой.
    4. Убедитесь, что для группировок и детальных записей включены необходимые ресурсы (суммы по количеству и рублям).

    Это позволит вам получить отчет в следующем виде, что значительно упростит анализ данных:

    
    ----------------------------------------------------------------------------------------------------
    Группа 1 (0-9 шт.) | Продано (руб.) Итог | Продано (ед.) Итог | Остаток Итог
    ----------------------------------------------------------------------------------------------------
        Товар 1        | Продано (руб) | Продано (ед.) | Остаток | Группа 1
        Товар 2        | Продано (руб) | Продано (ед.) | Остаток | Группа 1
    ----------------------------------------------------------------------------------------------------
    Группа 2 (10-99 шт.) | Продано (руб.) Итог | Продано (ед.) Итог | Остаток Итог
    ----------------------------------------------------------------------------------------------------
        Товар 3        | Продано (руб) | Продано (ед.) | Остаток | Группа 2
    ... (и так далее для остальных групп и товаров)
    
  4. Настройка порядка: Вы можете задать порядок сортировки для группировок и детальных записей. Например, можно отсортировать группировки по Группа (по возрастанию), а затем товары внутри каждой группы по ПроданоЗаПериодКоличество (по убыванию), чтобы самые продаваемые товары внутри группы отображались первыми. Это делается на закладке "Порядок" в свойствах соответствующей группировки или детальных записей.

Правильная настройка структуры отчета является залогом его читаемости и соответствия бизнес-требованиям. СКД предоставляет очень гибкие инструменты для этого.

Дополнительные возможности: ABC-классификация

Помимо жестко заданных групп по количеству, СКД предоставляет мощный и очень полезный инструмент для анализа данных — ABC-классификацию. Это методика, позволяющая распределить объекты (в нашем случае, товары) по их значимости, используя принцип Парето (например, 20% товаров приносят 80% выручки, следующие 30% товаров приносят 15% выручки, а остальные 50% товаров — лишь 5% выручки). Для этого в СКД существует специальная агрегатная функция КлассификацияABC.

Хотя в вашем первоначальном запросе была другая логика группировки, понимание ABC-классификации может быть очень полезно для будущих задач анализа ассортимента. Чтобы применить ABC-классификацию, вы можете добавить новое вычисляемое поле в конструкторе СКД, например, КлассABC.

Пример выражения для поля КлассABC, которое классифицирует товары по сумме выручки:

КлассификацияABC("Сумма(ПроданоЗаПериодВРублях)", 3, "80, 95", "Товар")

Разберем параметры этой функции:

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

Полезные советы и рекомендации

При работе с отчетами СКД, особенно в сложных конфигурациях вроде 1С:УТ 11.4, всегда полезно учитывать следующие моменты:

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

← На главную