При разработке интерфейсов в платформе 1С разработчики часто сталкиваются с ситуацией: свойство формы ТолькоПросмотр устанавливается в значение Истина, однако пользователь по-прежнему может изменять значения в некоторых полях, нажимать кнопки или редактировать строки таблиц. Рассмотрим, как устроен данный механизм платформы, почему возникает такое поведение и какими способами можно гарантированно заблокировать форму от изменений.
Поведение платформы 1С при установке режима ТолькоПросмотр = Истина на уровне формы подчиняется строгим правилам привязки данных и настроек элементов:
Объект). Если элемент формы связан с дополнительным реквизитом самой формы (вспомогательные флажки, фильтры, строковые поля), платформа не считает его частью данных объекта и оставляет доступным для редактирования.ТолькоПросмотр имеют локальный приоритет. Если для конкретной колонки в свойствах или программно установлено значение Ложь, она может оставаться доступной для редактирования.ПриОткрытии, ПриЧтенииНаСервере), где явно вызываются методы установки доступности и видимости, переопределяющие состояние элементов.Если требуется полностью исключить возможность редактирования всех полей, переключателей и таблиц на форме независимо от их связи с основным объектом, разберем программный обход коллекции Элементы. Данный код можно вызывать в обработчике на сервере или клиенте:
Для Каждого Элемент Из Элементы Цикл
Если ТипЗнч(Элемент) = Тип("ПолеФормы") Или ТипЗнч(Элемент) = Тип("ТаблицаФормы") Тогда
Элемент.ТолькоПросмотр = Истина;
ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы") Тогда
Элемент.Доступность = Ложь;
КонецЕсли;
КонецЦикла;
Посмотрим на особенности этого подхода: поля ввода и таблицы переводятся в режим просмотра, что сохраняет возможность копирования текста и удобного скроллинга, а командные кнопки становятся неактивными.
Проанализируем альтернативный вариант, когда необходимо моментально заблокировать любые действия пользователя с формой целиком:
ЭтаФорма.Доступность = Ложь;
Важный момент: установка свойства Доступность = Ложь для всей формы делает все элементы управления неактивными (серыми). При этом пользователь не сможет выделять текст в полях для копирования, поэтому данный метод подходит только для сценариев жесткого запрета работы с формой.
Выясним, как упростить управление элементами через иерархию формы. Если элементы логически сгруппированы в обычные группы, страницы панели или панели вкладок, нет необходимости настраивать каждый элемент отдельно.
Достаточно установить свойство ТолькоПросмотр = Истина или Доступность = Ложь для родительской группы. Платформа 1С каскадно применит указанное ограничение ко всем дочерним полям и кнопкам внутри этой группы.
Разберем по шагам, как проверить структуру формы в конфигураторе:
Объект (или реквизит документа/справочника) выделен жирным шрифтом и имеет признак Основной реквизит.ТолькоПросмотр.