При разработке в среде «1С:Предприятие 8.3» программисты часто сталкиваются с ситуацией: в конфигураторе в форму объекта (например, справочника «Номенклатура») добавляются новые реквизиты и соответствующие им поля, выставляются все необходимые галочки (доступность, видимость), но в режиме «1С:Предприятие» эти поля остаются заблокированными для ввода или вовсе не отображаются. Рассмотрим детально, почему это происходит и как последовательно диагностировать и устранить эту проблему.
Прежде чем переходить к сложному анализу кода, проанализируем настройки самих элементов формы. Нам необходимо убедиться, что базовые параметры не ограничивают редактирование. Проверим следующие свойства в окне свойств элемента формы:
Важно помнить, что эти же свойства есть и у Групп формы, в которые вложено ваше поле. Проанализируем иерархию элементов: если родительская группа имеет свойство ТолькоПросмотр = Истина, то все дочерние элементы также будут недоступны, независимо от их собственных настроек.
Если в конфигураторе все настройки верны, но поле недоступно даже под учетной записью администратора, проверим права на уровне метаданных. Разберем этот момент подробнее:
В системе 1С права на «Чтение» и «Просмотр» позволяют видеть данные, но для изменения поля у роли должны быть права на «Изменение» и «Редактирование» (Edit). Выясним, добавлены ли новые реквизиты справочника в соответствующие роли. Если вы создали новый реквизит в расширении или основной конфигурации, он может не попасть в типовые роли автоматически.
Также стоит учитывать механизм RLS (Access Level Security). Если на уровне записей наложено ограничение, поле может вести себя непредсказуемо, хотя чаще это приводит к невозможности записи всего объекта, а не блокировке отдельного поля.
Проанализируем связь реквизита с функциональными опциями (ФО). Это одна из самых неочевидных причин. Если реквизит или элемент формы привязан к функциональной опции, которая в данный момент выключена в константах системы, платформа автоматически скроет это поле или заблокирует его. Проверим свойство «Функциональные опции» у реквизита объекта и элемента формы.
Как показывает практика и обсуждение на форумах, самой частой причиной является программное изменение свойств элементов. Разберем по шагам, где искать этот код:
В управляемых формах за это отвечают процедуры ПриСозданииНаСервере и ПриОткрытии. Часто разработчики используют циклы для массовой настройки интерфейса. Посмотрим на типичный пример кода, который может блокировать ваши поля:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Какой-то код инициализации...
Для Каждого ЭлементФормы Из Элементы Цикл
// Проверка условий, при которых форма переходит в режим чтения
Если Объект.Статус = Перечисления.СтатусыДокументов.Закрыт Тогда
ЭлементФормы.ТолькоПросмотр = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
В данном примере, если условие выполняется, цикл проходит по всем элементам, включая ваши новые поля, и принудительно устанавливает им режим «Только просмотр». Выясним, нет ли в модуле формы подобных конструкций, которые переопределяют настройки конфигуратора в момент запуска формы.
В современных типовых конфигурациях (УТ 11, ERP, БП 3.0), построенных на базе Библиотеки Стандартных Подсистем (БСП), работает специальный механизм защиты ключевых реквизитов. Рассмотрим, как он влияет на новые поля:
Если вы добавили поле в справочник «Номенклатура», оно может попадать под общую логику блокировки объекта. Проверьте, есть ли в правом верхнем углу формы кнопка «Еще» — «Разрешить редактирование реквизитов». До тех пор, пока эта команда не выполнена, многие поля будут заблокированы программно кодом БСП.
Чтобы ваше новое поле «слушалось» этого механизма или, наоборот, всегда было доступно, нужно внести изменения в модуль менеджера объекта в процедуру ПриОпределенииНастроекБлокировкиРеквизитов. Проанализируем пример:
// В модуле менеджера справочника
Процедура ПриОпределенииНастроекБлокировкиРеквизитов(Настройки) Экспорт
// Здесь определяется список реквизитов, которые блокируются
// Можно исключить ваше поле из списка блокировки
КонецПроцедуры
Если у одного пользователя поле доступно, а у другого — нет, или если вы точно знаете, что код не виноват, проанализируем «пользовательский фактор»:
/ClearCache или удалить базу из списка и добавить её снова.Подводя итог, если вы добавили поле, но оно недоступно, придерживайтесь следующего алгоритма действий:
Во-первых, убедитесь, что родительские группы на форме не имеют признака ТолькоПросмотр. Во-вторых, тщательно изучите модуль формы на предмет циклов Для Каждого Элемент Из Элементы, которые могут менять свойства Доступность или ТолькоПросмотр в процедурах ПриСозданииНаСервере или ПриЧтенииНаСервере. В-третьих, если конфигурация типовая, проверьте влияние механизмов БСП и функциональных опций. Сочетание этих методов анализа позволит вам быстро найти причину и восстановить работоспособность интерфейса.