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