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