Как правильно добавить новый реквизит в расширение 1С, чтобы он сохранялся и был доступен для редактирования?

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

При работе с расширениями в 1С:Предприятие 8.3 начинающие разработчики часто сталкиваются с ситуацией, когда добавленное на форму поле либо не сохраняет свое значение после закрытия карточки, либо вовсе оказывается недоступным для редактирования (в режиме "Только просмотр"). В рамках данной статьи мы подробно разберем механизм добавления реквизитов через расширение, выясним причины блокировки полей и научимся правильно настраивать права доступа.

Различие между реквизитом формы и реквизитом объекта

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

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

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

При таком подходе свойство поля ПутьКДанным будет иметь вид Объект.ИмяВашегоРеквизита. Платформа 1С автоматически включит это поле в стандартный механизм записи объекта, и никакие дополнительные команды в событии ПриИзменении или ПриЗаписи писать не потребуется.

Почему поле остается в режиме «Только просмотр»?

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

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

Для решения этой проблемы выполним следующие действия:

2. Безопасный режим расширения. Проанализируем настройки подключения расширения. Если в списке расширений (в режиме "1С:Предприятие") для вашего расширения установлен флажок Безопасный режим, это может накладывать ограничения на работу с данными и программные методы записи. Для проверки попробуйте временно снять этот флажок.

3. Свойства элемента на форме. Проверим стандартные свойства в палитре свойств элемента формы:

Особенности работы с регистрами сведений (Менеджер записи)

Иногда задача усложняется тем, что данные нужно выводить не в карточке справочника, а в форме записи регистра сведений (например, "Воинский учет"). Если вы добавили реквизит в справочник ФизическиеЛица, но пытаетесь увидеть его в форме регистра ВоинскийУчет, то автоматической магии не произойдет.

В этом случае у нас есть два пути:

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

Пример программного считывания данных в форме (если мы решили идти сложным путем):


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

Проверка через "Функции для технического специалиста"

Выясним причину, если форма все равно ведет себя странно. Самый быстрый способ проверить, создался ли реквизит в базе — открыть объект через стандартный интерфейс (ранее "Все функции").

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

Резюме

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

← На главную