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

Разработка и Конфигурация · 12 мин

Как добавить реквизит в обработку 1С

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

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

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

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

Определите, где находится обработка

Перед редактированием важно понять, с каким объектом вы работаете, потому что инструменты различаются. Внешняя обработка — это отдельный файл с расширением .epf, который открывается через «Файл → Открыть» в Конфигураторе или запускается в режиме предприятия. Встроенная обработка — объект конфигурации в ветке «Обработки» дерева метаданных. Третий вариант — обработка, заимствованная в расширение конфигурации, когда менять основную конфигурацию нельзя или нежелательно.

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

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

Как выбрать способ

Обработка — отдельный файл .epfОткройте её в Конфигураторе через Файл → Открыть и редактируйте напрямую
Обработка внутри конфигурации и она на поддержке без измененийИспользуйте расширение конфигурации или снимите объект с поддержки, понимая последствия для обновлений
Нужно только добавить поле на форму типовой обработкиСоздайте расширение, заимствуйте форму и добавьте реквизит формы в расширении

Добавьте реквизит в дерево объекта

Откройте обработку в Конфигураторе. В окне структуры объекта (дерево метаданных обработки) найдите ветку «Реквизиты». Кликните по ней правой кнопкой мыши и выберите «Добавить», либо нажмите кнопку добавления на панели инструментов окна редактирования объекта. Появится палитра свойств нового реквизита.

Минимально нужно заполнить два свойства. «Имя» — идентификатор без пробелов и спецсимволов, по нему вы будете обращаться к реквизиту из кода, например ПериодОтчета или Организация. «Тип» — тип данных реквизита: примитивный (Строка, Число, Дата, Булево), ссылочный (СправочникСсылка.Номенклатура, ДокументСсылка.РеализацияТоваровУслуг) или составной. Для строки имеет смысл сразу задать длину в квалификаторе типа, иначе будет использоваться неограниченная строка, что не всегда удобно.

После заполнения свойств сохраните объект: Ctrl+S для внешней обработки или обновление конфигурации базы данных (F7) для встроенной. До сохранения реквизит существует только в памяти редактора.

Порядок добавления реквизита
  1. 1
    Откройте обработку в Конфигураторе (файл .epf или объект конфигурации)
  2. 2
    В дереве объекта раскройте ветку «Реквизиты» и нажмите «Добавить»
  3. 3
    Задайте имя реквизита латиницей или кириллицей без пробелов
  4. 4
    Выберите тип данных и при необходимости уточните квалификаторы (длина строки, точность числа)
  5. 5
    Сохраните обработку: Ctrl+S для файла или обновление конфигурации БД
  6. 6
    Проверьте доступность реквизита из модуля объекта через ЭтотОбъект.ИмяРеквизита

Выберите правильный тип данных

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

Для коллекций данных (список строк, таблица результатов) реквизит объекта не подходит — вместо него используйте табличную часть обработки (ветка «Табличные части» рядом с «Реквизитами») или реквизит формы типа «ТаблицаЗначений». Смешение этих механизмов приводит к тому, что данные теряются при серверных вызовах.

ЗадачаПодходящий тип / механизмКомментарий
Хранить одну ссылку на документДокументСсылка.<вид документа>Конкретный тип, не составной
Хранить дату или периодДата или СтандартныйПериод (на форме)СтандартныйПериод удобнее для отчётных обработок
Хранить список строкТабличная часть обработкиСохраняется вместе с объектом
Промежуточные данные на формеРеквизит формыНе является частью объекта обработки
Флаг «да/нет»БулевоНе используйте строку «Да»/«Нет»

Выведите реквизит на управляемую форму

Добавленный в объект реквизит сам по себе на форме не появится. Откройте основную форму обработки двойным кликом по ветке «Формы». В редакторе формы в правой верхней панели находится список реквизитов формы — реквизиты объекта там отображаются автоматически (обычно под узлом «Объект» или «РеквизитФормыВЗначение»-подобной структурой, в зависимости от типа формы). Перетащите нужный реквизит мышью в дерево элементов формы в левой панели — платформа создаст поле ввода с подходящим видом.

Если формы у обработки нет, создайте её: правый клик по ветке «Формы» → «Добавить» → выберите тип «Форма обработки». После создания формы перетаскивание реквизитов работает так же. Для поля можно настроить свойства: заголовок, подсказку, кнопку выбора, связь параметров выбора с другими полями.

Обратитесь к реквизиту из программного кода

Из модуля объекта обработки реквизит доступен напрямую по имени или через ЭтотОбъект.ИмяРеквизита. Из модуля формы обращение зависит от типа формы: для обычной формы — просто по имени, для управляемой формы с основным реквизитом «Объект» — через Объект.ИмяРеквизита.

bsl
// Модуль объекта обработки
Процедура ЗаполнитьПоУмолчанию() Экспорт
    ЭтотОбъект.Организация = Справочники.Организации.ПустаяСсылка();
    ЭтотОбъект.Комментарий = "Создано автоматически";
КонецПроцедуры

// Модуль управляемой формы
&НаКлиенте
Процедура ПоказатьОрганизацию(Команда)
    Сообщить(Объект.Организация);
КонецПроцедуры

Помните про контекст серверных вызовов. В управляемой форме данные объекта при вызове серверной процедуры пересоздаются: если вы изменили реквизит на сервере в процедуре с директивой &НаСервере, изменения вернутся на клиент вместе с данными формы. Но если процедура объявлена как &НаСервереБезКонтекста, доступа к реквизитам объекта у неё нет — данные нужно передавать параметрами или через РеквизитФормыВЗначение("Объект").

Добавление реквизита через расширение конфигурации

Когда обработка типовая и конфигурация находится на полной поддержке, прямое изменение объекта усложнит будущие обновления. В этом случае создайте расширение: «Конфигурация → Расширения конфигурации → Создать». Затем в основной конфигурации найдите нужную обработку, через контекстное меню добавьте её форму в расширение.

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

Проверьте результат и типичные ошибки

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

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

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

Поле на форме
Норма

Поле отображается, тип ввода соответствует заданному (выбор ссылки, дата и т.п.)

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

Поля нет на форме или оно не даёт выбрать нужный тип значения

Доступ из кода
Норма

Контекстная подсказка показывает реквизит, код выполняется без ошибок

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

Ошибка «Поле объекта не обнаружено» при обращении

Сохранность значения
Норма

Значение переживает серверные вызовы и переключения между элементами формы

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

Значение обнуляется после выполнения серверной процедуры

Типичные ошибки
01
Обращение к реквизиту как Объект.Имя в модуле объекта — там нужен ЭтотОбъект или просто имя; итог — ошибка «Переменная не определена»
02
Добавление реквизита формы вместо реквизита объекта и попытка увидеть его из модуля объекта — он там недоступен по определению
03
Использование &НаСервереБезКонтекста для процедуры, которая читает реквизиты объекта — данные формы в таком контексте отсутствуют
04
Забыли обновить конфигурацию базы данных (F7) после добавления реквизита во встроенную обработку — в режиме предприятия реквизита нет
05
Внешняя обработка отредактирована, но в базе используется старая копия из справочника дополнительных отчётов и обработок — файл нужно перезагрузить

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

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

Можно ли добавить реквизит в обработку без Конфигуратора?

Нет. Состав реквизитов объекта — это метаданные, они изменяются только в Конфигураторе. В режиме 1С:Предприятие можно лишь заполнять значения существующих реквизитов. Альтернатива без изменения метаданных — хранить дополнительные значения в хранилище общих настроек или в дополнительных сведениях, если речь идёт о данных, а не о структуре.

Чем реквизит обработки отличается от табличной части?

Реквизит хранит одно значение заданного типа. Табличная часть — это набор строк с колонками, по сути встроенная таблица объекта. Если нужно хранить список (например, перечень документов для групповой обработки), добавляйте табличную часть через ветку «Табличные части» и определяйте её колонки как реквизиты табличной части.

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

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

Как задать значение реквизита по умолчанию?

В модуле формы в обработчике ПриСозданииНаСервере присвойте реквизиту нужное значение, например Объект.ДатаНачала = ТекущаяДатаСеанса();. В палитре свойств реквизита объекта отдельного свойства «значение по умолчанию» нет, поэтому инициализация делается кодом — при создании формы или в модуле объекта.

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

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

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

Обычно причина не в самом реквизите, а в коде, который к нему обращается с ошибкой, или в повреждении файла при сохранении. Откройте обработку в Конфигураторе и выполните проверку модуля (кнопка с синтаксической проверкой). Если внешний .epf-файл не открывается вообще, восстановите его из резервной копии и повторите изменение пошагово, сохраняясь после каждого этапа.

Итог

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

Реквизит добавляется в ветку «Реквизиты» объекта обработки в Конфигураторе: имя, тип, сохранение. На форму он попадает перетаскиванием в дерево элементов, а из кода доступен через ЭтотОбъект (модуль объекта) или Объект.Имя (управляемая форма). Для типовых конфигураций на поддержке используйте расширение с реквизитами формы, а после изменения внешнего .epf не забудьте обновить обработку в базе.