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