Как создать сложный отчет о продажах в 1С:УТ 11 по образцу Excel с помощью СКД

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

При разработке отчетов в 1С:Управление торговлей 11 часто возникает задача максимально точно повторить структуру и внешний вид файлов Excel, к которым привыкли пользователи. Основной инструмент для этого — Система компоновки данных (СКД). Многие считают, что сложные «шахматки» или отчеты с вертикальными отборами требуют долгого ручного программирования, однако возможности СКД позволяют решить большинство таких задач в конструкторе. В этой статье мы разберем, как реализовать подобный отчет, с какими трудностями придется столкнуться и как их обойти.

Анализ возможности реализации в СКД

Рассмотрим основной вопрос: можно ли создать отчет «один в один» как в Excel? Ответ — да, можно. Однако важно понимать, что СКД — это не просто конструктор запросов, а мощный движок, который сам управляет выводом данных. Чтобы получить результат, идентичный таблице Excel, нам потребуется не только грамотно составить запрос, но и поработать с вкладкой «Макеты», а также правильно настроить структуру отчета в пользовательском режиме или в конфигураторе.

Проанализируем основные сложности, которые возникают при переносе логики из Excel в 1С:

  1. Объединение данных из разных регистров (продажи и деньги).
  2. Сложная иерархия строк и динамические колонки.
  3. Специфическое визуальное оформление (цвета, границы, шрифты).
  4. Вертикальные группировки и отборы.

Связка данных «Продажи + Оплата»

Это самая трудоемкая часть задачи. В типовой архитектуре УТ 11 данные о продажах хранятся в регистре накопления ВыручкаИСебестоимостьПродаж, а данные об оплатах — в регистре РасчетыСКлиентами. Выясним причину, почему это сложно соединить: оплата в 1С обычно привязана к документу-объекту или заказу, но крайне редко — к конкретной позиции номенклатуры в этом документе.

Чтобы вывести оплату в разрезе товара (как часто требуют в Excel-моделях), нам придется использовать математическое распределение. Рассмотрим пример логики запроса:


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

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

Работа с макетами оформления

Если стандартный «серый» вид отчета СКД не устраивает заказчика, мы используем вкладку «Макеты». Посмотрим на алгоритм действий:

  1. В схеме СКД переходим на закладку «Макеты».
  2. Добавляем макет группировки или макет области заголовка.
  3. Рисуем область в табличном документе (аналогично Excel), задаем объединение ячеек, цвета и границы.
  4. В параметрах макета связываем конкретные ячейки с полями СКД, такими как Номенклатура, КоличествоОборот или СуммаВыручки.

Важно: использование макетов отключает автоматическое оформление, зато дает полный контроль над визуальной частью отчета.

Реализация вертикальных отборов и динамических колонок

В Excel часто встречаются сложные заголовки с несколькими уровнями группировок по горизонтали. В СКД это реализуется через структуру типа «Таблица». Проанализируем, как это настроить:

Оптимизация производительности

При создании сложных отчетов в УТ 11 легко «повесить» базу, если запросы написаны неоптимально. Рассмотрим основные правила высокопроизводительного отчета:

Индексация временных таблиц: Если мы собираем данные из нескольких источников, всегда индексируем поля связи в МенеджереВременныхТаблиц.


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

Параметры виртуальных таблиц: Никогда не накладывайте условия на дату или подразделение через ГДЕ. Всегда передавайте их в параметры виртуальной таблицы (&НачалоПериода, &КонецПериода, , Подразделение = &Подразделение). Это позволяет серверу СУБД отсечь лишние данные на этапе чтения, а не после него.

Использование внешних отчетов (.erf)

Для разработки таких сложных форм рекомендуем использовать именно формат внешнего отчета. Это дает возможность:

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

Итоги

Создание отчета в стиле Excel в 1С:УТ 11 — задача выполнимая «чисто в конструкторе», если под этим понимать работу со схемой СКД. Однако для связки оплат и продаж все же потребуется написание качественного запроса. Мы выяснили, что ключ к успеху лежит в использовании связей наборов данных, пользовательских макетов и структуры «Таблица». Помните, что избыточная сложность макета может замедлить отчет, поэтому всегда ищите баланс между красотой «как в Excel» и скоростью работы системы.

← На главную