Почему при установке Форма.ТолькоПросмотр = Истина элементы формы остаются доступными для редактирования?

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

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

Причины выборочной блокировки элементов формы

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

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

Способ 1. Программная блокировка всех элементов формы обходом коллекции

Если требуется полностью исключить возможность редактирования всех полей, переключателей и таблиц на форме независимо от их связи с основным объектом, разберем программный обход коллекции Элементы. Данный код можно вызывать в обработчике на сервере или клиенте:


Для Каждого Элемент Из Элементы Цикл
    Если ТипЗнч(Элемент) = Тип("ПолеФормы") Или ТипЗнч(Элемент) = Тип("ТаблицаФормы") Тогда
        Элемент.ТолькоПросмотр = Истина;
    ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы") Тогда
        Элемент.Доступность = Ложь;
    КонецЕсли;
КонецЦикла;

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

Способ 2. Использование свойства формы «Доступность»

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

ЭтаФорма.Доступность = Ложь;

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

Способ 3. Управление свойствами групп элементов

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

Достаточно установить свойство ТолькоПросмотр = Истина или Доступность = Ложь для родительской группы. Платформа 1С каскадно применит указанное ограничение ко всем дочерним полям и кнопкам внутри этой группы.

Способ 4. Проверка признака «Основной реквизит»

Разберем по шагам, как проверить структуру формы в конфигураторе:

  1. Откроем форму в редакторе конфигуратора.
  2. Перейдем на вкладку Реквизиты в правой верхней части окна.
  3. Убедимся, что реквизит Объект (или реквизит документа/справочника) выделен жирным шрифтом и имеет признак Основной реквизит.
  4. Если данные формы разбиты на независимые реквизиты, привяжем критически важные поля к основному объекту либо программно управляем их свойством ТолькоПросмотр.
← На главную