Почему в 1С при открытии формы документа параметр ТолькоПросмотр меняется на Истина и как это исправить

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

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

Выясним причины такого поведения платформы и разберем способы решения этой проблемы.

Причины автоматического переключения формы в режим «Только просмотр»

Проанализируем, почему платформа 1С или механизмы типовой конфигурации меняют доступность формы в промежутке между событиями ПередОткрытием и ПриОткрытии:

  1. Проверка интерактивных прав на объект: В обычных формах платформа выполняет встроенную интерактивную проверку прав между вызовами процедур. Если у роли пользователя есть право Чтение, но отсутствуют специфические интерактивные права (Интерактивное изменение, Интерактивное изменение проведенных, Интерактивная отмена проведения), платформа принудительно переводит форму в режим просмотра.
  2. Ограничение прав на связанные регистры движения: Если документ формирует движения по регистрам накопления или сведений, а у роли пользователя нет прав на запись или изменение этих регистров, система может заблокировать редактирование формы документа целиком.
  3. Проверка состояния документа и дат запрета: В конфигурациях на базе БСП и УТ 10.3 при открытии формы могут отрабатывать встроенные проверки дат запрета изменения данных или статусов проведения документа.

Способы диагностики и решения проблемы

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

Шаг 1. Диагностика с помощью замера производительности

Чтобы понять, где именно происходит изменение свойства формы, воспользуемся инструментом отладки:

  1. В конфигураторе откроем модуль формы документа и установим точку останова в самом конце процедуры ПередОткрытием.
  2. Запустим отладку и включим замер через меню Отладка — Замер производительности.
  3. Нажмем F11 для перехода к процедуре ПриОткрытии и остановим замер.
  4. Проанализируем собранный стек вызовов: это позволит увидеть, какие сервисные процедуры вызываются платформой или модулями конфигурации между событиями.

Шаг 2. Проверка прав роли в Конфигураторе

Убедимся, что у роли пользователя настроены все необходимые права для работы с документом и связанными объектами:

  1. Откроем нужную роль в дереве конфигурации.
  2. Перейдем к объекту метаданных (документу) и убедимся в наличии флагов:
    • Изменение
    • Интерактивное изменение
    • Интерактивное изменение проведенных (если требуется редактировать проведенные документы)
  3. Проверим права роли на все регистры накопления и сведений, по которым данный документ делает движения. При отсутствии права Изменение на регистры платформа блокирует редактирование документа.

Шаг 3. Программная установка свойства в событии ПриОткрытии

Если права роли настроены корректно, но форма продолжает открываться в режиме просмотра, сбросить флаг можно программно непосредственно в обработчике ПриОткрытии:


Процедура ПриОткрытии()
    
    // Принудительно снимаем режим «Только просмотр»
    ЭтаФорма.ТолькоПросмотр = Ложь;
    
КонецПроцедуры

Важное замечание: программный сброс ЭтаФорма.ТолькоПросмотр = Ложь делает элементы формы визуально доступными для ввода данных. Однако если у пользователя в роли физически нет права Изменение или Запись на сам объект базы данных или его движения, при попытке сохранить или провести документ платформа вызовет ошибку недостаточности прав доступа.

Шаг 4. Настройка выборочной доступности элементов

Если пользователю не требуется полное право на изменение всего документа, но необходимо разрешить редактирование отдельных полей, оставим форму в режиме просмотра, а нужным элементам переопределим доступность в ПриОткрытии:


Процедура ПриОткрытии()
    
    // Разрешаем изменение конкретного элемента формы
    ЭлементыФормы.Комментарий.ТолькоПросмотр = Ложь;
    
КонецПроцедуры
← На главную