В современной разработке на платформе 1С:Предприятие отчеты перестали быть просто набором печатных форм. Сегодня пользователи требуют гибкости: возможность детализировать данные, менять группировки и фильтровать информацию на лету. Именно для этих целей была внедрена схема компоновки данных (СКД). Этот инструмент позволяет отделить логику получения данных от логики их отображения, делая создание отчетов значительно быстрее и прозрачнее.
Для начинающего разработчика или аналитика, который только погружается в мир 1С, само понятие СКД может показаться сложным. Однако, если разобраться в базовых принципах, станет ясно, что это конструктор, где вы собираете отчет из готовых блоков. Понимание того, как работает компоновка данных, является критически важным навыком для любого специалиста, планирующего развивать конфигурации.
В этой статье мы подробно разберем процесс создания схемы с нуля, рассмотрим структуру дерева настроек и поймем, как правильно связывать таблицы между собой. Вы узнаете, какие подводные камни встречаются при работе с виртуальными таблицами и как оптимизировать запросы для ускорения работы отчета.
Основы архитектуры схемы компоновки данных
Прежде чем открыть конфигуратор и начать рисовать поля, необходимо понять теоретическую базу. Схема компоновки данных — это объект метаданных, который описывает, откуда брать информацию и как ее структурировать. В отличие от старых отчетов на СКД, здесь главным элементом является набор данных. Именно он определяет источник информации, будь то запрос к базе данных, объектная модель или объединение нескольких источников.
Каждый набор данных может иметь свои параметры, которые передаются в запрос при формировании отчета. Это позволяет делать отчеты универсальными: один и тот же шаблон может работать для разных периодов, организаций или контрагентов без изменения кода. Важно отметить, что схема не хранит сами данные, она лишь описывает правила их выборки и обработки.
Взаимодействие между различными частями отчета происходит через систему связей. Если вы планируете строить отчет, объединяющий данные из регистра сведений и регистра накопления, вам придется настроить связи между наборами данных. Без этого система не поймет, как сопоставить строки из одной таблицы со строками из другой, что приведет к появлению декартова произведения или пустых строк в результате.
⚠️ Внимание: При создании сложных схем с множеством наборов данных внимательно проверяйте тип связи (внутреннее, левое или правое соединение). Ошибка в выборе типа соединения может привести к потере части записей или дублированию данных в итоговом отчете.
Архитектура СКД также предусматривает наличие ресурсов. Это вычисляемые поля, которые не выбираются напрямую из базы, а рассчитываются на клиенте или сервере в процессе формирования отчета. Например, процент выполнения плана или остаток на конец периода часто реализуются именно как ресурсы схемы, а не как поля запроса.
Отличие СКД от обычных запросов
В обычных запросах логика выборки и группировки жестко зашита в текст запроса. В СКД текст запроса отвечает только за получение "плоского" набора данных, а вся магия группировок, отборов и вычислений происходит на уровне движка компоновки, что дает пользователю свободу настройки вида отчета.
Пошаговое создание нового набора данных
Процесс разработки отчета начинается с добавления нового объекта метаданных или редактирования существующего. В дереве метаданных найдите ветку "Отчеты", создайте новый элемент и перейдите в редактор макета. Здесь вы увидите вкладку "Настройки", где и происходит вся основная работа. Первым шагом всегда идет определение набора данных.
Нажмите кнопку добавления набора данных и выберите тип "Запрос". Откроется редактор запроса, где вам необходимо написать текст выборки. На этом этапе важно соблюдать правило: выбирайте только те поля, которые действительно нужны для отчета. Лишние поля увеличивают объем передаваемой информации и могут замедлить работу системы, особенно при больших объемах данных в регистрах накопления.
После написания текста запроса система автоматически сгенерирует поля набора данных. Однако автоматическое определение типов не всегда корректно. Вам следует вручную проверить каждое поле. Убедитесь, что числовые поля имеют тип Число, даты — тип Дата, а ссылки на объекты — соответствующий тип ссылки. Неправильный тип может привести к ошибкам при сортировке или группировке.
☑️ Проверка набора данных
Если ваш отчет требует передачи значений из внешней формы (например, даты начала и конца периода), обязательно объявите параметры в свойствах набора данных. Имена параметров в схеме должны точно совпадать с именами параметров в тексте запроса, иначе система выдаст ошибку при выполнении. Для параметров можно задать значения по умолчанию, что упростит первичный запуск отчета пользователем.
Настройка связей и объединение источников
Часто одного запроса недостаточно для построения комплексного отчета. В таких случаях используется несколько наборов данных. Ключевым моментом здесь является настройка связей. Перейдите на вкладку "Связи наборов данных" и добавьте новую связь. Вам потребуется указать поля, по которым будет происходить соединение таблиц.
Система предложит вам выбрать поле из левого набора и поле из правого набора. Важно, чтобы типы этих полей были совместимы. Например, нельзя связать поле типа Строка с полем типа Ссылка без явного приведения типов, хотя движок 1С иногда пытается сделать это автоматически, что не всегда безопасно. Лучше явно контролировать типы данных.
Существует несколько типов связей, которые влияют на итоговый результат:
- 🔗 Внутреннее соединение: в результат попадут только те записи, которые есть в обоих наборах данных. Это самый частый вариант использования.
- 📝 Левое соединение: сохраняются все записи из левого набора, а из правого подтягиваются только совпадающие. Если совпадений нет, поля правого набора будут пустыми.
- 🔄 Полное соединение: в результат попадают все записи из обоих наборов, с заполнением соответствующих полей там, где есть совпадения.
При отладке связей используйте кнопку "Проверка связей" в редакторе схемы. Она покажет, какие именно записи не попали в результат из-за отсутствия совпадений, что помогает быстро найти ошибки в данных или логике соединения.
Помимо связей, в 1С существует механизм объединений наборов данных. Это полезно, когда нужно вертикально склеить две таблицы с одинаковой структурой колонок. Например, если вы хотите вывести в одном отчете данные за текущий год и данные за прошлый год, полученные разными запросами. В этом случае используется оператор ОБЪЕДИНИТЬ ВСЕ на уровне схемы компоновки.
Работа с полями и вычисляемыми ресурсами
После того как данные получены и связаны, необходимо настроить их отображение. Вкладка "Поля" позволяет управлять видимостью и свойствами каждого элемента. Здесь вы можете задать пользовательское имя поля, которое будет видеть конечный пользователь в настройках отчета. Это критически важно для удобства эксплуатации, так как технические имена вроде Ссылка.Наименование могут быть непонятны бухгалтеру.
Особое внимание стоит уделить ресурсам. Ресурсы — это поля, значения которых рассчитываются агрегатными функциями. В отличие от обычных полей, ресурсы не участвуют в группировках как измерения, а вычисляются для каждой группы. Типичные примеры ресурсов: Сумма, Количество, Среднее значение. Для настройки ресурса нужно указать поле, над которым производится вычисление, и функцию агрегации.
В современных версиях платформы 1С появилась возможность создавать вычисляемые поля прямо в схеме без изменения текста запроса. Это делается через выражения. Вы можете написать формулу, например, Цена * Количество, и система сама создаст новое поле. Однако для сложных вычислений, требующих обращения к другим регистрам, все же рекомендуется использовать язык запросов внутри набора данных.
| Тип поля | Назначение | Пример использования |
|---|---|---|
| Измерение | Группировка данных | Номенклатура, Контрагент |
| Ресурс | Агрегатные вычисления | СуммаПродаж, ОстатокТовара |
| Реквизит | Дополнительная информация | Артикул, Штрихкод |
| Параметр | Фильтрация на входе | ПериодОт, ПеридДо, Организация |
Не забывайте про форматирование полей. В свойствах поля можно задать формат строки, например, для отображения даты в виде ДФ='dd.MM.yyyy' или числа с двумя знаками после запятой. Это избавит пользователя от необходимости каждый раз настраивать вид отчета вручную. Правильно настроенные форматы делают отчет профессиональным и готовым к печати.
Дерево настроек и варианты оформления отчета
Сердцем любого отчета на СКД является дерево настроек. Именно здесь определяется структура итоговой таблицы или диаграммы. Вы можете добавлять элементы структуры: группировки, поля, отборы. Дерево настроек позволяет создавать несколько вариантов представления одних и тех же данных, переключаясь между ними через панель настроек пользователя.
Группировки в дереве настроек работают аналогично оператору GROUP BY в SQL, но с большей гибкостью. Вы можете вложить одну группировку в другую, создавая иерархическую структуру. Например, сначала группировка по Подразделениям, а внутри нее — по Сотрудникам. Для каждой группировки можно настроить итоговые значения, выводя суммы или количества в подвал группы.
Отчеты могут иметь разные варианты оформления. Стандартный вариант — это обычная таблица. Но вы можете добавить вариант "Диаграмма", выбрав тип макета Диаграмма. В этом случае система предложит настроить оси и серии данных. Также доступен вариант Табличный документ для сложной печатной формы, где можно расставить поля в произвольном порядке, добавить логотипы и подписи.
⚠️ Внимание: Если вы используете сложные условные оформления (например, подсветку строк красным при отрицательном остатке), проверяйте их работу на больших выборках. Избыток условий может существенно замедлить рендеринг отчета на клиентском месте.
Для управления видимостью элементов в зависимости от условий используется механизм условного оформления. Здесь можно задать критерий, например, Сумма < 0, и выбрать цвет шрифта или фона. Это мощный инструмент для визуального анализа данных, позволяющий мгновенно выявлять проблемные зоны в отчетности без изучения цифр.
Оптимизация и отладка схемы компоновки
Создание работающего отчета — это только половина дела. Вторая половина — сделать так, чтобы он работал быстро. Оптимизация схемы компоновки данных начинается с анализа текста запроса. Используйте консоль запросов или встроенный анализатор производительности, чтобы убедиться, что запрос использует индексы и не делает полных обходов больших таблиц.
Одной из частых ошибок является выборка лишних полей в наборе данных. Если поле не используется ни в группировках, ни в отборах, ни в ресурсах, ни в макете — удалите его из запроса. Каждое лишнее поле увеличивает объем передаваемых данных между сервером и клиентом, что критично в файловом варианте работы или при тонком клиенте через WAN.
Для отладки используйте режим "Предварительный просмотр" в конфигураторе. Он позволяет увидеть результат формирования отчета без запуска самой 1С в режиме предприятия. Также полезно включать логирование SQL-запросов на сервере, чтобы увидеть, какой именно текст отправляется в СУБД. Иногда движок СКД генерирует неоптимальный SQL, и тогда приходится хитрить с настройками схемы.
Главный принцип оптимизации: минимизируйте объем данных, передаваемых из базы данных в схему компоновки. Фильтруйте данные как можно раньше, желательно на уровне запроса, а не отборами в схеме.
Если отчет формируется долго, проверьте настройки виртуальных таблиц. Убедитесь, что вы используете правильные срезы (например, СрезПоследних вместо полного перебора регистра). Ошибки в параметрах виртуальных таблиц являются самой частой причиной падения производительности отчетов по регистрам накопления и сведений.
Частые ошибки и способы их решения
В процессе разработки вы неизбежно столкнетесь с ошибками. Одна из самых распространенных — "Не найдено поле". Обычно это возникает, когда имя поля в тексте запроса отличается от имени в настройках схемы, или когда поле было удалено из запроса, но осталось использоваться в дереве настроек или условном оформлении. Внимательно проверяйте дерево ошибок при сохранении схемы.
Другая проблема — некорректная работа отборов. Пользователь задает отбор, но данные не фильтруются. Часто причина кроется в том, что отбор настроен на поле, которое является ресурсом или вычисляемым полем, а не измерением. Отборы эффективно работают только по полям, участвующим в выборке на уровне базы данных.
Также стоит упомянуть проблему с правами доступа. Если отчет формируется от имени пользователя с ограниченными правами (РЛС), некоторые данные могут не отображаться. Схема компоновки данных уважает ограничения прав доступа, установленные в конфигурации. Если отчет пуст, проверьте, есть ли у тестируемого пользователя права на чтение используемых регистров и справочников.
Как добавить параметр, который не передается в запрос?
Иногда нужно, чтобы параметр использовался только в схеме (например, для условного оформления), но не передавался в текст запроса. Для этого объявите параметр в списке параметров схемы, но не используйте его в тексте запроса набора данных. Система не будет требовать его передачи извне.
Почему не работает сортировка по вычисляемому полю?
Сортировка по ресурсам или вычисляемым полям может работать некорректно, если эти поля не участвуют в группировке. В некоторых случаях движок СКД не может отсортировать данные постфактум. Попробуйте вынести вычисление на уровень запроса или изменить структуру группировок.
Можно ли использовать одну схему в нескольких отчетах?
Да, схема компоновки данных — это отдельный объект метаданных. Вы можете создать одну универсальную схему и использовать ее в качестве основной для нескольких разных отчетов, меняя только макеты или начальные настройки дерева вариантов.
Как скрыть технические поля от пользователя?
В свойствах поля в списке полей схемы снимите галочку "Доступно". Это скроет поле из пользовательских настроек отбора и группировки, но оставит его доступным для использования внутри самой схемы (например, для сортировки или вычислений).
Что делать, если отчет формируется, но данные неверные?
Включите отладку запросов. Сравните данные, которые приходят из запроса (вкладка "Наборы данных" -> "Просмотр"), с тем, что видно в итоге. Если в наборе данных все верно, а в отчете нет — проблема в дереве настроек, связях или отборах схемы.