К статье
Практический материал

Отчеты и Аналитика · 13 мин

Реквизиты отчетов в 1С: зачем нужны и как их использовать

Что такое реквизиты отчетов в 1С, чем они отличаются от параметров и отборов СКД, как добавить свой реквизит в конфигураторе и типичные ошибки при работе.

Реквизиты отчета в 1С — это дополнительные поля, которые хранятся вместе с объектом «Отчет» и используются в его алгоритмах: в модуле объекта, в форме отчета и в схеме компоновки данных. В отличие от параметров и отборов, которые пользователь видит на форме и меняет перед формированием, реквизиты чаще всего работают «внутри» — как служебные настройки, значения по умолчанию или промежуточные данные для программной логики.

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

Важно понимать ограничение: реквизиты отчета не сохраняются между сеансами автоматически. Отчет в 1С — это не документ и не справочник, у него нет таблицы в базе данных, где хранились бы значения реквизитов. Если нужно постоянное хранение, используют хранилище общих настроек, константы или регистры сведений, а реквизит служит лишь «транспортом» значения внутри одного сеанса работы отчета.

Что такое реквизит отчета и где он живет в конфигураторе

Реквизит отчета создается в конфигураторе на закладке «Данные» объекта «Отчет» — там же, где у документов и справочников. Для реквизита задается имя, тип (число, строка, ссылка на справочник, булево и т.д.) и длина. После добавления реквизит становится доступен в модуле объекта отчета как свойство контекста: ЭтотОбъект.ОрганизацияПоУмолчанию.

Физически реквизит не создает колонку ни в одной таблице базы данных. Отчет — объект конфигурации без собственного хранилища данных. Поэтому при открытии отчета реквизит имеет значение по умолчанию для своего типа (пустая ссылка, ноль, пустая строка), если разработчик не заполнил его программно — например, в обработчике ПриКомпоновкеРезультата или при создании формы.

Для внешних отчетов (файлы .erf) механизм тот же: реквизиты описываются внутри файла отчета и работают в его модуле. Отличие в том, что внешний отчет нельзя изменить «на лету» в режиме предприятия — структура реквизитов фиксируется при разработке.

Чем реквизиты отличаются от параметров и отборов СКД

Главная путаница у начинающих разработчиков — различие трех механизмов: реквизитов отчета, параметров СКД и отборов. Они решают разные задачи, и подмена одного другим приводит к неудобным отчетам.

КритерийРеквизит отчетаПараметр СКДОтбор СКД
Кто задает значениеКод отчета или формаПользователь или кодПользователь или код
Видимость на формеТолько если вывести вручнуюВ настройках отчетаВ настройках отчета
Влияет на запрос СКДНет, только на логику кодаДа, подставляется в запросДа, фильтрует данные
Хранение между сеансамиНетЧерез пользовательские настройки вариантаЧерез пользовательские настройки варианта
Типичное применениеСлужебные флаги, значения по умолчаниюПериод, организация, складФильтрация по номенклатуре, контрагенту

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

Типовые сценарии использования реквизитов

Служебные настройки и значения по умолчанию

Самый частый сценарий — хранение значений, которые подставляются в параметры СКД при открытии отчета. Например, реквизит «ОсновнаяОрганизация» заполняется кодом из настроек пользователя и подставляется в параметр компоновки, чтобы отчет сразу сформировался по нужной организации.

Флаги режимов работы

Реквизиты типа «Булево» удобны для переключения режимов: формировать отчет в фоне или сразу, выводить техническую информацию, использовать кешированные данные. Такие флаги проверяются в обработчике ПриКомпоновкеРезультата и меняют поведение кода без изменения схемы.

Передача данных между формой и модулем объекта

Когда отчет имеет свою форму, реквизиты объекта служат мостом между элементами формы и алгоритмами модуля. Поле ввода на форме привязывается к реквизиту объекта, и при формировании код модуля читает актуальное значение напрямую, без обращения к элементам формы.

Промежуточные вычисления

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

Если одно и то же значение нужно и как параметр СКД, и в коде модуля, не дублируйте его реквизитом — читайте параметр из настроек компоновщика. Дублирование приводит к рассинхронизации: пользователь поменял параметр, а код работает со старым значением реквизита.
ПЗ
Практическое замечание

Как добавить реквизит отчета: пошаговый порядок

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

Порядок действий
  1. 1
    Откройте конфигуратор и найдите нужный отчет в ветке «Отчеты» дерева конфигурации (или откройте внешний отчет через «Файл — Открыть»).
  2. 2
    Перейдите на закладку «Данные» и в списке «Реквизиты» нажмите «Добавить».
  3. 3
    Задайте имя без пробелов (например, ОрганизацияПоУмолчанию), укажите тип и, при необходимости, длину строки или состав типа.
  4. 4
    Если реквизит должен видеть пользователь, откройте форму отчета и перетащите реквизит из панели реквизитов на форму.
  5. 5
    В модуле объекта добавьте заполнение значения: например, в обработчике ПриКомпоновкеРезультата или при создании формы.
  6. 6
    Обновите конфигурацию базы данных (F7) и проверьте работу отчета в режиме предприятия.

Пример обращения к реквизиту в модуле объекта отчета:

Если Не ЗначениеЗаполнено(ЭтотОбъект.ОрганизацияПоУмолчанию) Тогда

ЭтотОбъект.ОрганизацияПоУмолчанию = Справочники.Организации.НайтиПоНаименованию("Основная");

КонецЕсли;

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

Риски и ограничения, о которых нужно помнить

Главный риск — ожидание, что реквизит «запомнит» значение. Пользователь заполнил поле, сформировал отчет, закрыл его — и при следующем открытии поле пустое. Это нормальное поведение: объект отчета создается заново при каждом открытии. Для сохранения значений используйте хранилище общих настроек (ХранилищеОбщихНастроек.Сохранить / Загрузить) или механизм пользовательских настроек вариантов отчета.

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

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

Как проверить, что реквизит работает правильно

После добавления реквизита проверку удобно вести через отладчик: поставьте точку останова в обработчике ПриКомпоновкеРезультата и посмотрите значение ЭтотОбъект.ИмяРеквизита в табло. Если значение пустое там, где должно быть заполнено, — ищите, в каком обработчике должно происходить заполнение и вызывается ли он вообще.

Контрольные точки

Как проверить результат

Значение реквизита в отладчике при формировании
Норма

Реквизит заполнен ожидаемым значением до использования в коде

Тревожный признак

Пустое значение или значение по умолчанию типа

Повторное открытие отчета
Норма

Поле пустое или заполнено кодом — это ожидаемо для реквизита

Тревожный признак

Ожидалось сохранение введенного значения — нужна настройка хранения

Формирование у разных пользователей
Норма

Каждый сеанс работает со своим значением

Тревожный признак

Значения «перетекают» между пользователями — признак хранения в общем месте

Дополнительная проверка — сценарий с пустым значением. Убедитесь, что код корректно обрабатывает ситуацию, когда реквизит не заполнен: выводит понятное сообщение или подставляет значение по умолчанию, а не падает с ошибкой «Поле объекта не обнаружено» или не строит отчет по пустому отбору.

Типичные ошибки при работе с реквизитами отчетов

Типичные ошибки
01
Ожидание автосохранения: значение реквизита теряется при закрытии отчета — нужно хранилище настроек или регистр сведений.
02
Дублирование параметра СКД реквизитом: значения расходятся, отчет и код работают с разными данными.
03
Использование реквизита там, где нужен параметр: пользователь не может изменить значение и вынужден просить разработчика.
04
Изменение типового отчета без расширения и копии: доработка теряется при обновлении конфигурации.
05
Хранение в реквизите больших таблиц значений: растет потребление памяти сеанса при массовой работе.

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

Когда реквизит не нужен: альтернативы

Маршрут решения

Как выбрать действие

Пользователь должен менять значение перед формированием, и оно участвует в запросеИспользуйте параметр или отбор СКД, а не реквизит
Значение нужно только коду внутри одного сеанса формированияПодойдет реквизит отчета или локальная переменная модуля
Значение должно сохраняться между сеансами для пользователяИспользуйте хранилище общих настроек или пользовательские настройки варианта
Значение общее для всей базы и меняется редкоИспользуйте константу или регистр сведений, а в отчете читайте его кодом
Нужно доработать типовой отчетСоздайте расширение конфигурации или внешний отчет вместо прямого изменения

Если задача сводится к «дать пользователю еще одно поле на форме отчета», почти всегда правильный ответ — пользовательская настройка в варианте отчета, а не реквизит. Реквизит оправдан, когда значение обслуживает программную логику: флаги режимов, служебные ссылки, промежуточные данные обработки результата.

Итог

Что важно запомнить

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

Частые вопросы

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

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

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

Да, если у отчета есть своя управляемая форма: реквизит перетаскивается на форму в конфигураторе и связывается с полем ввода. Но если отчет работает на стандартной форме СКД, пользователю правильнее показывать значения через параметры и отборы — они автоматически попадают в настройки варианта.

Чем реквизит отчета отличается от реквизита формы отчета?

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

Можно ли добавить реквизит в типовой отчет без снятия с поддержки?

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

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

Чаще всего поле на форме связано с реквизитом формы или с параметром СКД, а не с реквизитом объекта. Проверьте свойство «ПутьКДанным» элемента формы и убедитесь, что оно указывает именно на реквизит объекта отчета, либо перенесите значение в реквизит кодом перед формированием.

Есть ли ограничения на типы реквизитов отчета?

Доступны примитивные типы, ссылки на объекты конфигурации и составные типы — аналогично реквизитам других объектов. Практическое ограничение — объем: тяжелые значения вроде больших таблиц значений держать в реквизитах не стоит из-за расхода памяти сеанса.