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

Программист 1С v8.3 (Обычные формы)
← На главную

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

В этой статье мы подробно разберем, что происходит «за кулисами» платформы «1С:Предприятие 8» в промежутке между этими событиями, и составим пошаговый план поиска «виновника» блокировки формы.

Механизм неявной проверки прав платформой

Важно понимать, что между вызовами обработчиков ПередОткрытием и ПриОткрытии платформа выполняет целый ряд системных проверок. Даже если вы программно попытаетесь принудительно разрешить редактирование, платформа может переопределить это решение, основываясь на метаданных и правах доступа.

Рассмотрим основные причины такого поведения:

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

Анализ прав доступа и ролей

Разберем ситуацию на примере из практики. Вы обнаружили, что форма блокируется для роли «Менеджер по продажам». Для решения проблемы нам необходимо проанализировать состав ролей пользователя. Выясним причину, проверив настройки в Конфигураторе:

Откройте роль пользователя, перейдите к нужному документу и проверьте состояние флагов в колонке прав. Обратите особое внимание на «Интерактивные» права:

Если хотя бы одно из этих условий не выполняется для текущего состояния объекта (например, документ проведен), платформа проигнорирует ваш код ЭтаФорма.ТолькоПросмотр = Ложь; и установит режим чтения. Для проверки прав конкретных пользователей на чтение и изменение объектов конфигурации можно использовать отчет по анализу прав пользователей с детализацией по объектам.

Влияние RLS (Access Control List)

Проанализируем ситуацию, когда права на уровне метаданных есть, но форма все равно недоступна. Здесь в игру вступает RLS (Ограничение доступа на уровне записей).

В 1С проверка RLS на «Изменение» может срабатывать не одновременно с проверкой на «Чтение». Пользователь может видеть документ в списке, так как условие для чтения выполняется, но при попытке открытия формы платформа обнаруживает, что текущая запись не удовлетворяет условиям ограничения для изменения. В результате форма открывается только для ознакомления.

Для диагностики этого случая попробуйте временно запустить систему под пользователем с полными правами. Если проблема исчезнет — дело определенно в настройках RLS или ролях. Для комплексного анализа ролей, профилей и ограничений RLS подойдёт обработка для анализа и настройки прав доступа.

Дата запрета изменения данных

В типовых конфигурациях, таких как Управление производственным предприятием (УПП), активно используется механизм дат запрета редактирования. Несмотря на то что проверка часто прописывается в коде (например, в процедуре НастройкаПравДоступа.ОпределитьДоступностьВозможностьИзмененияДокументаПоДатеЗапрета), в некоторых «допиленных» конфигурациях этот механизм может быть вынесен в подписки на события или глобальные модули.

Если дата документа меньше установленной даты запрета для пользователя или организации, система заблокирует форму. Проверьте регистр сведений «Даты запрета изменения данных».

Параметры открытия формы и программные прерывания

Иногда причина кроется не в правах, а в том, как именно вызывается форма. Рассмотрим пример программного вызова:


ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ТолькоПросмотр", Истина);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыФормы);

Если форма открывается с ключом ТолькоПросмотр = Истина, то даже ручная корректировка этого свойства в ПередОткрытием может быть сброшена платформой. Платформа «помнит», с какими намерениями вызывалась форма.

Также не стоит забывать про подписки на события. В УПП и других крупных системах часто встречаются подписки с видом события ОбработкаЗаполнения или специфические проверки в модуле объекта. Выясним причину, пройдя отладчиком не только код формы, но и Модуль объекта, а именно процедуры ПередЗаписью и ПриУстановкеНовогоНомера, так как там могут устанавливаться параметры сеанса, влияющие на доступность.

Как эффективно использовать отладчик в этой ситуации

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

  1. Установите точку останова в самом конце процедуры ПередОткрытием.
  2. Установите точку останова в самом начале процедуры ПриОткрытии.
  3. Если в первой точке значение Ложь, а во второй Истина — значит, вмешалась платформа (права, RLS, заблокированные периоды).
  4. Если вы используете УПП, проверьте также наличие Расширений (хотя для УПП это редкость, в современных версиях платформы они могут присутствовать). Код в расширении с методом &После или &Вместо может перехватывать управление.

Свойства формы в Конфигураторе

Проанализируем еще один тривиальный, но часто забываемый момент. Проверьте палитру свойств самой формы в дизайнере. Если в конфигураторе у формы жестко установлено свойство «Только просмотр» (стоит галочка), то программное изменение этого свойства в коде может работать нестабильно, так как платформа всегда будет стремиться вернуть форму к ее «дизайнерскому» состоянию при инициализации графического интерфейса.

Заключение

Мы разобрали, что режим «Только просмотр» в 1С — это не всегда результат работы кода программиста. Чаще всего это комплексная реакция платформы на совокупность прав доступа, настроек RLS и бизнес-логики (проведенность документа, даты запрета). При возникновении подобной проблемы всегда начинайте с проверки права «Интерактивное изменение проведенных» — в 90% случаев в УПП причина кроется именно в нем.

← На главную