В практике разработчика 1С нередко возникает ситуация: у пользователя есть полные права, в свойствах метаданных и элементов формы флаги Доступность и Только просмотр настроены верно, программный код модулей закомментирован, но реквизит в табличной части всё равно остается недоступным для редактирования. Причем поведение может быть избирательным: в одних документах поле активно, в других — заблокировано.
Разберем по шагам все возможные уровни блокировки, от самых очевидных до скрытых механизмов платформы и конфигурации, чтобы понять, где именно "собака зарыта".
Это одна из самых частых "невидимых" причин. Механизм Условного оформления позволяет изменять свойства элементов формы (цвет, видимость, доступность) в зависимости от данных, находящихся в самой форме или объекте. Особенность в том, что эти настройки не видны в обычном коде модулей.
Проанализируем ситуацию: если блокировка зависит от конкретного документа, значит, срабатывает некое условие. Чтобы проверить это, выполним следующие действия:
ТолькоПросмотр = Истина, значит, причина найдена.Если в модуле формы нет прямого обращения к реквизиту через Элементы.ИмяРеквизита.ТолькоПросмотр, блокировка может происходить в момент интерактивного действия пользователя. Рассмотрим обработчики событий самой таблицы.
Выясним причину, изучив события ПриНачалеРедактирования (OnEditStart) или ПередНачаломИзменения. Если в коде этих процедур при определенных условиях параметру СтандартнаяОбработка присваивается значение Ложь, платформа просто не даст пользователю войти в режим правки ячейки.
Пример кода, который может блокировать редактирование:
&НаКлиенте
Процедура ТоварыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
ТекущиеДанные = Элемент.ТекущиеДанные;
// Если номенклатура является услугой, запрещаем редактирование количества
Если ТекущиеДанные.ЭтоУслуга Тогда
СтандартнаяОбработка = Ложь;
Сообщить("Для услуг редактирование количества запрещено!");
КонецЕсли;
КонецПроцедуры
Иногда мы ищем проблему в свойствах объекта (метаданных), забывая, что на форме отображается Элемент формы, который связан с данными, но имеет свои независимые настройки. Проверим иерархию элементов:
В 1С существует мощный механизм управления интерфейсом через функциональные опции. Если реквизит или колонка формы привязаны к ФО, которая в данный момент выключена в константах или зависит от параметров (например, от организации или склада), элемент может стать недоступным или вовсе исчезнуть.
Рассмотрим подробнее: в конфигураторе у реквизита объекта или элемента формы есть свойство Путь к данным функциональной опции. Если там указана ссылка, необходимо проверить значение этой опции в режиме "1С:Предприятие". Если опция выключена, никакие полные права не помогут сделать поле доступным.
В современных конфигурациях (особенно в CRM, ERP, УТ) логика часто выносится в расширения. Это "невидимый" слой кода, который может менять свойства формы на лету. Проанализируем ситуацию в этом ключе:
&Перед, &После или &Вместо для таких методов, как ПриСозданииНаСервере или ПриЧтенииНаСервере.Код в расширении может динамически менять доступность колонок:
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Динамическая блокировка колонки из расширения
Элементы.ТоварыЦена.ТолькоПросмотр = Истина;
КонецПроцедуры
В типовых решениях (CRM, ERP) часто внедрена подсистема управления доступом по состояниям. Это программный механизм, который блокирует поля документа, если он находится в определенном статусе (например, "Согласовано" или "К отгрузке").
Посмотрим на пример: существует справочник или регистр сведений, где администратор настраивает доступность полей. Программный код в общем модуле при открытии формы считывает эти настройки и применяет их. В этом случае даже при закомментированном коде в модуле формы, настройки могут применяться через общие модули или механизмы БСП (Библиотеки Стандартных Подсистем), которые вызываются неявно.
Несмотря на наличие роли "Полные права", стоит убедиться, что для данного конкретного реквизита не настроены ограничения прав доступа на уровне полей (Field-level security). Если в какой-то из ролей, назначенных пользователю, право Изменение на конкретный реквизит табличной части снято или ограничено условием RLS, поле будет доступно только для чтения.
Проверим права в конфигураторе: выберем объект, перейдем на закладку Права, выберем роль и найдем в списке реквизитов наш проблемный элемент. Убедимся, что галочка "Изменение" стоит и для нее не прописано ограничивающее условие.
Напоследок проверим самый простой вариант. Если документ открывается из какой-то обработки или отчета программно, разработчик мог передать параметр ТолькоПросмотр = Истина в структуру параметров формы. В таком случае вся форма переходит в режим чтения, и редактирование отдельных ячеек станет невозможным, даже если программно пытаться установить ТолькоПросмотр = Ложь для конкретной колонки.
Выясним это, проверив значение свойства ЭтаФорма.ТолькоПросмотр в отладчике в момент работы с документом.
Подведем итог: если реквизит не редактируется, а код модуля формы пуст, последовательно проверяем: