Почему при открытии документа управляемая форма блокируется и свойство ТолькоПросмотр становится Истина?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

При разработке и сопровождении конфигураций на платформе 1С:Предприятие 8.3 разработчики нередко сталкиваются с неявным поведением платформы: документ открывается в режиме только для чтения, хотя в явном виде в коде формы свойство ТолькоПросмотр никто не устанавливал. Более того, при пошаговой отладке выясняется, что в конце серверного обработчика ПриЧтенииНаСервере значение свойства ЭтаФорма.ТолькоПросмотр равно Ложь, однако в самом начале обработчика ПриСозданииНаСервере оно внезапно принимает значение Истина. При этом у администратора с полными правами форма открывается корректно и доступна для редактирования.

Разберем детально механизм платформы, выясним причину такого переключения и определим, как восстановить доступность редактирования формы для пользователя.

Механизм переключения режима формы платформой

Проанализируем последовательность событий при открытии управляемой формы существующего объекта. Между обработчиками ПриЧтенииНаСервере и ПриСозданииНаСервере управление передается внутренним механизмам платформы, недоступным для отладчика по клавише F11.

В момент выполнения ПриЧтенииНаСервере форма только считывает данные из информационной базы. Как только объект загружен в контекст формы, ядро платформы сопоставляет текущее состояние документа с правами текущего пользователя. Если по какому-либо системному критерию редактирование данного объекта текущему пользователю запрещено, платформа принудительно переводит форму в режим чтения, выставляя ЭтаФорма.ТолькоПросмотр = Истина непосредственно перед вызовом процедуры ПриСозданииНаСервере.

Основные причины автоматической установки режима «ТолькоПросмотр»

Рассмотрим конкретные факторы в правах доступа и параметрах объекта, которые вызывают автоматическую блокировку формы:

  1. Отсутствие интерактивных прав на проведение и отмену проведения. Если документ уже проведен в информационной базе, платформа проверяет не только базовое право Изменение, но и специальные интерактивные права: Интерактивное проведение, Интерактивная отмена проведения, а также Интерактивное изменение проведенных. Если у назначенных пользователю ролей нет права изменять или перепроводить уже проведенный документ, форма автоматически блокируется на редактирование.
  2. Отсутствие прав на работу с помеченными на удаление объектами. Если открывается помеченный на удаление документ, а у роли пользователя отсутствуют права Интерактивная пометка удаления или Интерактивное удаление, платформа откроет документ исключительно в режиме просмотра.
  3. Ограничение доступа на уровне записей (RLS). Если для документа настроены шаблоны RLS, условие на операцию Чтение может выполняться успешно (пользователь видит документ в списке и может открыть его), а на операцию Изменение для данной конкретной строки таблицы базы данных возвращается отрицательный результат. В такой ситуации форма блокируется без вывода явного сообщения об ошибке.
  4. Права доступа на уровне реквизитов (права на чтение и редактирование). Если у роли пользователя отключено право Редактирование на ключевые реквизиты или на основной реквизит формы Объект, документ теряет возможность изменения.
  5. Параметры открытия формы. Если форма вызывается программно из другого контекста (например, из связанной структуры подчиненности или отчета), в структуре параметров открытия может передаваться параметр ТолькоПросмотр = Истина.

Пошаговая диагностика и поиск причины

Разберем по шагам, как выявить конкретное право или ограничение, из-за которого форма переходит в режим только для чтения.

  1. Проверяем проведение документа. Обратим внимание на состояние документа. Если документ проведен, проверяем, открывается ли на редактирование непроведенный документ того же вида или новый (созданный через кнопку «Создать»). Если новый или непроведенный документ редактируется свободно, проблема однозначно заключается в правах на изменение проведенных документов.
  2. Анализируем состав ролей в конфигураторе. Откроем дерево метаданных, перейдем в ветку Роли, найдем роли, назначенные проблемному пользователю, и откроем права для требуемого документа. Убедимся, что установлены флаги:

    - Интерактивное проведение;

    - Интерактивная отмена проведения;

    - Интерактивное изменение проведенных.

  3. Проверяем права программно. Чтобы быстро подтвердить гипотезу в режиме отладки или через внешнюю обработку, выполним проверку доступности прав с помощью метода ПравоДоступа():
    
    // Проверка интерактивных прав на документ
    ИмяДокумента = "РеализацияТоваровУслуг";
    МетаданныеДокумента = Метаданные.Документы[ИмяДокумента];
    
    ИмеетПравоИзменения = ПравоДоступа("Изменение", МетаданныеДокумента);
    ИмеетПравоПроведения = ПравоДоступа("ИнтерактивноеПроведение", МетаданныеДокумента);
    ИмеетПравоИзмененияПроведенных = ПравоДоступа("ИнтерактивноеИзменениеПроведенных", МетаданныеДокумента);
    
    Сообщить("Право на изменение: " + ИмеетПравоИзменения);
    Сообщить("Право на проведение: " + ИмеетПравоПроведения);
    Сообщить("Право на изменение проведенных: " + ИмеетПравоИзмененияПроведенных);
    
  4. Проверяем ограничения RLS. Если интерактивные права назначены, проверим право изменения непосредственно для конкретного экземпляра документа с учетом ограничений доступа на уровне записей:
    
    // Проверка права на изменение конкретного объекта с учетом RLS
    Если Не ПравоДоступа("Изменение", ДокументСсылка) Тогда
        Сообщить("Для текущей ссылки ограничено право изменения по RLS!");
    КонецЕсли;
    

Особенности типовых конфигураций на базе БСП

В типовых конфигурациях (например, «Управление торговлей», «ERP Управление предприятием», «Комплексная автоматизация») помимо прав метаданных действуют прикладные механизмы блокировки:

  1. Даты запрета изменения данных. Если дата документа попадает в закрытый для пользователя период, подсистемы БСП программно блокируют форму документа.
  2. Статусы документов. Использование статусной модели (например, переведение документа в статус «Закрыт» или «К отгрузке») может делать документ недоступным для корректировки рядовым сотрудникам в соответствии с настройками бизнес-процесса.

Итог

Если свойство ЭтаФорма.ТолькоПросмотр принимает значение Истина в самом начале процедуры ПриСозданииНаСервере и поведение различается для администратора и обычного пользователя, причиной является проверка прав ядром платформы. Для устранения проблемы необходимо проверить права роли на операции Интерактивное проведение, Интерактивная отмена проведения и Интерактивное изменение проведенных, а также убедиться в отсутствии ограничений RLS на операцию изменения документа.

← На главную