Как добавить реквизит в управляемую форму 1С, чтобы обращаться к нему через Объект.ИмяРеквизита?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Разберем причину: разница между реквизитами формы и объекта

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

Существует два принципиально разных способа создания реквизитов, и обращение к ним в коде происходит по-разному:

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

Пошаговая инструкция: как добавить реквизит объекту (на примере внешней обработки)

Рассмотрим ситуацию, когда нам необходимо добавить реквизит ФайлЛога во внешнюю обработку и обратиться к нему через Объект.ФайлЛога. Пройдем по шагам весь процесс настройки:

  1. Откроем окно редактирования нашей внешней обработки в Конфигураторе.
  2. В дереве метаданных обработки найдем ветку «Реквизиты» (она находится на одном уровне с формами и макетами, а не внутри редактора конкретной формы).
  3. Нажмем кнопку «Добавить» (зеленый плюс) и создадим новый реквизит с именем ФайлЛога. Зададим ему необходимый тип данных (например, Строка).
  4. Теперь откроем управляемую форму нашей обработки.
  5. В правой верхней части редактора формы развернем ветку основного реквизита Объект. Мы увидим, что наш новый реквизит ФайлЛога автоматически появился внутри этой структуры.
  6. Чтобы пользователь мог видеть это поле на экране, перетащим мышкой реквизит ФайлЛога из правого окна реквизитов в левое окно элементов формы. Платформа сама создаст элемент управления (поле ввода).

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


&НаКлиенте
Процедура КаталогПереносаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь; // Отменяем стандартное поведение системы
    
    Режим = РежимДиалогаВыбораФайла.ВыборКаталога; 
    ДиалогСохранения = Новый ДиалогВыбораФайла(Режим);
    ДиалогСохранения.МножественныйВыбор = Ложь; 
    ДиалогСохранения.Заголовок = "Выберите каталог для сохранения логирования"; 
    
    Если ДиалогСохранения.Выбрать() Тогда 
        // Теперь обращение работает корректно, так как реквизит добавлен в объект
        Объект.ФайлЛога = ДиалогСохранения.Каталог;    
    КонецЕсли; 
    
КонецПроцедуры

Почему свойства реквизитов не всегда открываются по двойному клику?

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

Интерфейс Конфигуратора контекстно-зависим:

Решение: Чтобы гарантированно открыть свойства любого элемента или реквизита в 1С, используйте универсальные способы: нажмите клавишу F4, комбинацию клавиш Alt + Enter или нажмите правую кнопку мыши и выберите пункт «Свойства» в контекстном меню.

Проблема обновления и кэширования внешних обработок

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

Причина кроется в механизме кэширования внешних файлов (форматов .epf и .erf). Платформа 1С оптимизирует работу и при первом открытии файла кэширует его структуру в оперативной памяти сеанса. При повторном открытии системы или простом переоткрытии формы изменения могут не примениться, так как программа обращается к старой версии из кэша.

Чтобы избежать этой проблемы и гарантированно применить изменения метаданных, выполним следующие шаги:

  1. Внесем все изменения в Конфигураторе и сохраним файл внешней обработки.
  2. В режиме «1С:Предприятие» обязательно закроем все окна разрабатываемой обработки.
  3. Для надежности рекомендуется полностью перезапустить сеанс «1С:Предприятие» (особенно если обработка зарегистрирована в базе как дополнительная в справочнике «Дополнительные отчеты и обработки»).
  4. Откроем файл обработки заново через стандартное меню Файл -> Открыть.

Соблюдение этих простых правил убережет вас от ложных ошибок компиляции и сэкономит время при отладке программного кода управляемых форм 1С.

← На главную