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