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

Создание нового отчета может показаться сложным процессом только на первый взгляд. На самом деле, если разбить задачу на логические этапы — от выбора набора данных до настройки макета — процедура становится интуитивно понятной. Вам не нужно быть гуру SQL, чтобы начать работать с этим инструментом, хотя базовое понимание структуры таблиц базы данных значительно ускорит процесс разработки.

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

Подготовка объекта метаданных и выбор типа

Первым шагом в процессе разработки является создание самого объекта метаданных в конфигураторе. Вам необходимо открыть дерево конфигурации, найти ветку "Отчеты" и добавить новый элемент. Важно сразу дать объекту осмысленное имя, используя префикс вашей конфигурации, чтобы избежать конфликтов имен в будущем. После создания объекта откроется окно редактирования свойств, где нужно обратить внимание на модуль объекта и форму.

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

Для начала работы с логикой отчета перейдите на вкладку "Макеты". Здесь вы увидите предопределенный макет с именем Макет. Открыв его, вы попадете в конструктор СКД. Именно здесь происходит вся магия настройки визуальной части и логики выборки. Не пытайтесь писать код выборки вручную в модуле, если ваша цель — стандартный отчет на СКД, так как это лишит вас преимуществ автоматической настройки пользователем.

☑️ Готовность к созданию отчета

Выполнено: 0 / 4

Настройка набора данных и запроса

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

После выбора типа откроется редактор текста запроса. Здесь вам необходимо написать логику выборки. Допустим, мы хотим получить список номенклатуры и ее остатки. Запрос должен содержать ключевое слово ВЫБРАТЬ и перечисление необходимых полей. Помните, что каждое поле в запросе должно иметь уникальный псевдоним, так как именно по этим именам вы будете обращаться к данным на следующих этапах настройки.

ВЫБРАТЬ

Номенклатура.Ссылка КАК Номенклатура,

Номенклатура.Наименование КАК Наименование,

СУММА(ОстаткиТоваровНаСкладах.КоличествоОстаток) КАК Количество

ИЗ

Справочник.Номенклатура КАК Номенклатура

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваровНаСкладах КАК ОстаткиТоваровНаСкладах

ПО Номенклатура.Ссылка = ОстаткиТоваровНаСкладах.Номенклатура

СГРУППИРОВАТЬ ПО

Номенклатура.Ссылка,

Номенклатура.Наименование

Обратите внимание на использование агрегатных функций, таких как СУММА или КОЛИЧЕСТВО. Если вы используете их в запросе, все остальные поля, не участвующие в агрегации, должны быть обязательно указаны в блоке СГРУППИРОВАТЬ ПО. Иначе система выдаст ошибку компиляции запроса. Это частая ошибка начинающих разработчиков, которая легко исправляется внимательным чтением текста запроса.

Оптимизация запросов

Если ваш запрос выполняется слишком долго, проверьте использование индексов. Поля, по которым идет соединение (ПО) или отбор (ГДЕ), должны быть индексированы в структуре базы данных для ускорения выборки миллионов записей.

Использование параметров и отборов

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

После создания параметра его необходимо связать с запросом. Вернитесь на вкладку "Наборы данных" и в тексте запроса добавьте условие в блок ГДЕ. Синтаксис подключения параметра выглядит как &ИмяПараметра. Например, если нужно отбирать данные только за выбранный период, условие будет выглядеть так: ГДЕ ОстаткиТоваровНаСкладах.Период МЕЖДУ &НачалоПериода И &КонецПериода.

  • 📅 Период — стандартный параметр типа "Период", автоматически создающий два поля ввода (с и по).
  • 🏢 Организация — параметр типа "СправочникСсылка.Организации" для фильтрации по юридическому лицу.
  • 📦 Склад — параметр типа "СправочникСсылка.Склады" для ограничения выборки конкретным местом хранения.

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

⚠️ Внимание: Если вы используете параметр типа "Период", убедитесь, что в запросе вы сравниваете даты корректно. Часто возникает ошибка, когда поле в базе имеет тип "ДатаВремя", а параметр обрезается до начала дня, из-за чего записи за последний день могут не попасть в выборку.

Настройка полей и группировок

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

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

Уровень группировки Поле группировки Отображаемые поля
1 Номенклатура.ВидНоменклатуры Наименование вида
2 Номенклатура.Ссылка Наименование, Артикул
Детальные записи Нет (список) Количество, Сумма, Ед.Измерения

Настройка сортировки также играет важную роль для восприятия информации. В свойствах каждой группировки можно задать направление сортировки: по возрастанию или по убыванию. Часто требуется сортировать итоговые суммы, чтобы самые ходовые товары или крупнейшие суммы были видны сразу, без прокрутки списка.

💡

Используйте свойство "Автопорядок" в настройках группировки, если хотите, чтобы пользователь мог самостоятельно менять порядок колонок и группировок прямо в режиме 1С без вмешательства программиста.

Оформление условного выделения и итогов

Визуальное оформление отчета делает его удобным для анализа. Механизм условного выделения позволяет подсвечивать ячейки цветом в зависимости от их значения. Например, можно выделить красным цветом отрицательные остатки или товары, количество которых ниже минимального уровня запаса. Это настраивается на вкладке "Условное оформление".

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

Не менее важны итоги. Вкладка "Итоги" позволяет включить вывод сумм по группировкам. Вы можете выбрать, какие поля суммировать (обычно это количества и суммы денег), а какие выводить как первое значение или просто отображать заголовок группы. Правильно настроенные итоги экономят время бухгалтера на подсчетах в Excel.

  • 🎨 Цвет фона — используйте для выделения строк с проблемами или важными событиями.
  • 🔢 Формат числа — настройте количество знаков после запятой для денежных и количественных полей.
  • 📊 Диаграммы — СКД позволяет автоматически строить графики на основе данных отчета.
📊 Что для вас самое сложное в СКД?
Написание запроса
Настройка группировок
Условное оформление
Вывод итогов
Работа с параметрами

Расширенные возможности и работа с виртуальными таблицами

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

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

ВЫБРАТЬ

Остатки.Номенклатура,

Остатки.Количество

ИЗ

РегистрНакопления.ТоварыНаСкладах.Остатки(

,

(Вид = ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.ГотоваяПродукция))

) КАК Остатки

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

⚠️ Внимание: При использовании виртуальных таблиц убедитесь, что параметры периода передаются корректно. Ошибка в передаче даты (например, передача NULL вместо даты) может привести к выборке всех данных за всю историю существования базы.

💡

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

Часто задаваемые вопросы (FAQ)

Как добавить вычисляемое поле, которого нет в запросе?

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

Почему отчет не видит параметр, созданный в форме?

Убедитесь, что имя параметра в тексте запроса совпадает с именем параметра в схеме компоновки данных. В запросе параметры всегда указываются со знаком амперсанда (например, &МойПараметр), а в схеме СКД имя указывается без него. Также проверьте тип данных параметра.

Можно ли использовать СКД для печати печатных форм документов?

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

Как скрыть техническое поле "Ссылка" от пользователя?

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

Что делать, если отчет работает медленно?

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