Отчеты и Аналитика · 13 мин
Реквизиты отчетов в 1С: зачем нужны и как их использовать
Что такое реквизиты отчетов в 1С, чем они отличаются от параметров и отборов СКД, как добавить свой реквизит в конфигураторе и типичные ошибки при работе.
Реквизиты отчета в 1С — это дополнительные поля, которые хранятся вместе с объектом «Отчет» и используются в его алгоритмах: в модуле объекта, в форме отчета и в схеме компоновки данных. В отличие от параметров и отборов, которые пользователь видит на форме и меняет перед формированием, реквизиты чаще всего работают «внутри» — как служебные настройки, значения по умолчанию или промежуточные данные для программной логики.
Типичная ситуация: разработчик создает внешний отчет, и ему нужно где-то хранить организацию по умолчанию, признак вывода детализации или ссылку на настройку обмена. Хардкодить эти значения в коде нельзя — они меняются от базы к базе. Выносить их в параметры СКД неудобно — пользователь будет видеть лишние поля, которые ему не нужны. Реквизит отчета решает именно эту задачу: значение доступно из кода через ЭтотОбъект.ИмяРеквизита, но не засоряет пользовательский интерфейс.
Важно понимать ограничение: реквизиты отчета не сохраняются между сеансами автоматически. Отчет в 1С — это не документ и не справочник, у него нет таблицы в базе данных, где хранились бы значения реквизитов. Если нужно постоянное хранение, используют хранилище общих настроек, константы или регистры сведений, а реквизит служит лишь «транспортом» значения внутри одного сеанса работы отчета.
Что такое реквизит отчета и где он живет в конфигураторе
Реквизит отчета создается в конфигураторе на закладке «Данные» объекта «Отчет» — там же, где у документов и справочников. Для реквизита задается имя, тип (число, строка, ссылка на справочник, булево и т.д.) и длина. После добавления реквизит становится доступен в модуле объекта отчета как свойство контекста: ЭтотОбъект.ОрганизацияПоУмолчанию.
Физически реквизит не создает колонку ни в одной таблице базы данных. Отчет — объект конфигурации без собственного хранилища данных. Поэтому при открытии отчета реквизит имеет значение по умолчанию для своего типа (пустая ссылка, ноль, пустая строка), если разработчик не заполнил его программно — например, в обработчике ПриКомпоновкеРезультата или при создании формы.
Для внешних отчетов (файлы .erf) механизм тот же: реквизиты описываются внутри файла отчета и работают в его модуле. Отличие в том, что внешний отчет нельзя изменить «на лету» в режиме предприятия — структура реквизитов фиксируется при разработке.
Чем реквизиты отличаются от параметров и отборов СКД
Главная путаница у начинающих разработчиков — различие трех механизмов: реквизитов отчета, параметров СКД и отборов. Они решают разные задачи, и подмена одного другим приводит к неудобным отчетам.
| Критерий | Реквизит отчета | Параметр СКД | Отбор СКД |
|---|---|---|---|
| Кто задает значение | Код отчета или форма | Пользователь или код | Пользователь или код |
| Видимость на форме | Только если вывести вручную | В настройках отчета | В настройках отчета |
| Влияет на запрос СКД | Нет, только на логику кода | Да, подставляется в запрос | Да, фильтрует данные |
| Хранение между сеансами | Нет | Через пользовательские настройки варианта | Через пользовательские настройки варианта |
| Типичное применение | Служебные флаги, значения по умолчанию | Период, организация, склад | Фильтрация по номенклатуре, контрагенту |
Практическое правило: если значение должен менять пользователь перед формированием отчета — это параметр или отбор. Если значение нужно только коду и пользователь о нем знать не обязан — это реквизит. Если значение должен менять пользователь, но оно не участвует в запросе СКД (например, «разворачивать ли итоги» при программном выводе в табличный документ) — реквизит, выведенный на управляемую форму, тоже подходит.
Типовые сценарии использования реквизитов
Служебные настройки и значения по умолчанию
Самый частый сценарий — хранение значений, которые подставляются в параметры СКД при открытии отчета. Например, реквизит «ОсновнаяОрганизация» заполняется кодом из настроек пользователя и подставляется в параметр компоновки, чтобы отчет сразу сформировался по нужной организации.
Флаги режимов работы
Реквизиты типа «Булево» удобны для переключения режимов: формировать отчет в фоне или сразу, выводить техническую информацию, использовать кешированные данные. Такие флаги проверяются в обработчике ПриКомпоновкеРезультата и меняют поведение кода без изменения схемы.
Передача данных между формой и модулем объекта
Когда отчет имеет свою форму, реквизиты объекта служат мостом между элементами формы и алгоритмами модуля. Поле ввода на форме привязывается к реквизиту объекта, и при формировании код модуля читает актуальное значение напрямую, без обращения к элементам формы.
Промежуточные вычисления
В сложных отчетах с собственной обработкой результата реквизиты используются как переменные сеанса формирования: накопленные итоги, счетчики строк, ссылки на временные таблицы значений. Это чище, чем объявлять экспортные переменные модуля, потому что реквизит виден и в отладчике, и в структуре объекта.
Если одно и то же значение нужно и как параметр СКД, и в коде модуля, не дублируйте его реквизитом — читайте параметр из настроек компоновщика. Дублирование приводит к рассинхронизации: пользователь поменял параметр, а код работает со старым значением реквизита.
Как добавить реквизит отчета: пошаговый порядок
Добавление реквизита занимает пару минут, но важно сразу определиться с типом и тем, где значение будет заполняться. Работа ведется в конфигураторе, для изменения типовых конфигураций потребуется режим поддержки с возможностью изменения или расширение.
- 1Откройте конфигуратор и найдите нужный отчет в ветке «Отчеты» дерева конфигурации (или откройте внешний отчет через «Файл — Открыть»).
- 2Перейдите на закладку «Данные» и в списке «Реквизиты» нажмите «Добавить».
- 3Задайте имя без пробелов (например, ОрганизацияПоУмолчанию), укажите тип и, при необходимости, длину строки или состав типа.
- 4Если реквизит должен видеть пользователь, откройте форму отчета и перетащите реквизит из панели реквизитов на форму.
- 5В модуле объекта добавьте заполнение значения: например, в обработчике ПриКомпоновкеРезультата или при создании формы.
- 6Обновите конфигурацию базы данных (F7) и проверьте работу отчета в режиме предприятия.
Пример обращения к реквизиту в модуле объекта отчета:
Если Не ЗначениеЗаполнено(ЭтотОбъект.ОрганизацияПоУмолчанию) Тогда
ЭтотОбъект.ОрганизацияПоУмолчанию = Справочники.Организации.НайтиПоНаименованию("Основная");
КонецЕсли;
Для типовых конфигураций предпочтительнее расширение: реквизит добавляется в расширении, типовой отчет остается на поддержке, и обновления не затрут доработку. Ограничение — не все объекты и не во всех версиях платформы одинаково хорошо расширяются, поэтому перед работой проверьте, что нужный отчет доступен для заимствования.
Риски и ограничения, о которых нужно помнить
Главный риск — ожидание, что реквизит «запомнит» значение. Пользователь заполнил поле, сформировал отчет, закрыл его — и при следующем открытии поле пустое. Это нормальное поведение: объект отчета создается заново при каждом открытии. Для сохранения значений используйте хранилище общих настроек (ХранилищеОбщихНастроек.Сохранить / Загрузить) или механизм пользовательских настроек вариантов отчета.
Второй риск — изменение типового отчета напрямую в конфигурации. При обновлении конфигурации доработанные объекты создают конфликты, и доработку можно потерять. Всегда делайте резервную копию информационной базы перед изменением конфигурации и обновлением, а для типовых решений используйте расширения.
Третье ограничение касается производительности: не храните в реквизитах большие объемы данных (таблицы значений с сотнями тысяч строк, двоичные данные файлов). Реквизит живет в памяти сеанса, и тяжелые значения увеличивают расход памяти сервера при массовой работе пользователей.
Как проверить, что реквизит работает правильно
После добавления реквизита проверку удобно вести через отладчик: поставьте точку останова в обработчике ПриКомпоновкеРезультата и посмотрите значение ЭтотОбъект.ИмяРеквизита в табло. Если значение пустое там, где должно быть заполнено, — ищите, в каком обработчике должно происходить заполнение и вызывается ли он вообще.
Как проверить результат
Реквизит заполнен ожидаемым значением до использования в коде
Пустое значение или значение по умолчанию типа
Поле пустое или заполнено кодом — это ожидаемо для реквизита
Ожидалось сохранение введенного значения — нужна настройка хранения
Каждый сеанс работает со своим значением
Значения «перетекают» между пользователями — признак хранения в общем месте
Дополнительная проверка — сценарий с пустым значением. Убедитесь, что код корректно обрабатывает ситуацию, когда реквизит не заполнен: выводит понятное сообщение или подставляет значение по умолчанию, а не падает с ошибкой «Поле объекта не обнаружено» или не строит отчет по пустому отбору.
Типичные ошибки при работе с реквизитами отчетов
Отдельно стоит упомянуть ошибку с именованием: реквизит называют так же, как параметр СКД или переменную модуля. В лучшем случае это путает при чтении кода, в худшем — приводит к неявным ошибкам, когда код обращается не к тому значению. Давайте реквизитам говорящие имена с указанием роли: «РежимФормирования», «ОрганизацияПоУмолчанию», а не просто «Организация», если такой параметр уже есть в схеме.
Когда реквизит не нужен: альтернативы
Как выбрать действие
Если задача сводится к «дать пользователю еще одно поле на форме отчета», почти всегда правильный ответ — пользовательская настройка в варианте отчета, а не реквизит. Реквизит оправдан, когда значение обслуживает программную логику: флаги режимов, служебные ссылки, промежуточные данные обработки результата.
Что важно запомнить
Реквизит отчета — служебное поле для кода, а не для пользователя: он не участвует в запросе СКД и не сохраняется между сеансами. Используйте реквизиты для флагов, значений по умолчанию и промежуточных данных; для ввода пользователя — параметры и отборы, для постоянного хранения — настройки, константы и регистры. Типовые отчеты дорабатывайте через расширения и только после резервного копирования.
Частые вопросы
Сохраняются ли значения реквизитов отчета после закрытия?
Нет. Объект отчета создается заново при каждом открытии, и реквизиты получают значения по умолчанию. Для сохранения используйте хранилище общих настроек, пользовательские настройки варианта отчета или собственный регистр сведений, а в реквизит загружайте значение кодом при открытии.
Можно ли вывести реквизит отчета на форму для пользователя?
Да, если у отчета есть своя управляемая форма: реквизит перетаскивается на форму в конфигураторе и связывается с полем ввода. Но если отчет работает на стандартной форме СКД, пользователю правильнее показывать значения через параметры и отборы — они автоматически попадают в настройки варианта.
Чем реквизит отчета отличается от реквизита формы отчета?
Реквизит отчета принадлежит объекту и доступен в модуле объекта, в том числе при фоновом формировании без формы. Реквизит формы существует только в контексте формы и недоступен, когда отчет формируется программно. Для логики, которая должна работать и в фоне, используйте реквизиты объекта.
Можно ли добавить реквизит в типовой отчет без снятия с поддержки?
Да, через расширение конфигурации: отчет заимствуется в расширение, и реквизит добавляется там. Типовой объект остается неизменным, обновления проходят без конфликтов. Проверьте, что используемая версия платформы поддерживает расширение нужных свойств отчета.
Почему в отладчике реквизит пустой, хотя на форме поле заполнено?
Чаще всего поле на форме связано с реквизитом формы или с параметром СКД, а не с реквизитом объекта. Проверьте свойство «ПутьКДанным» элемента формы и убедитесь, что оно указывает именно на реквизит объекта отчета, либо перенесите значение в реквизит кодом перед формированием.
Есть ли ограничения на типы реквизитов отчета?
Доступны примитивные типы, ссылки на объекты конфигурации и составные типы — аналогично реквизитам других объектов. Практическое ограничение — объем: тяжелые значения вроде больших таблиц значений держать в реквизитах не стоит из-за расхода памяти сеанса.