Как заблокировать поля на форме 1С, не отключая переключение закладок?

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

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

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

В чем разница между свойствами «Доступность» и «ТолькоПросмотр»?

Проанализируем поведение платформы 1С при управлении интерактивными свойствами элементов:

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

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

Причина ошибки «Поле объекта не обнаружено (ТолькоПросмотр)»

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

Поле объекта не обнаружено (ТолькоПросмотр)

Это происходит потому, что свойством ТолькоПросмотр обладают только элементы редактирования и отображения данных (например, ПолеФормы или ТаблицаФормы). У декораций, групп элементов (страниц, панелей), кнопок и командных панелей данного свойства в объектной модели 1С нет.

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

Разберем по шагам правильный подход. Форма в целом и группы закладок должны оставаться доступными (свойства Доступность = Истина и ТолькоПросмотр = Ложь). Ограничение редактирования накладывается точечно путем программного обхода элементов с проверкой их типов.

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


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

КонецПроцедуры

Важные нюансы при работе с элементами

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

  1. Проверка типов полей: Для полей ввода управляемой формы (тип ПолеФормы) безопаснее проверять их вид через Элемент.Вид. Полям с видом ВидПоляФормы.Надпись или ВидПоляФормы.Картинка не требуется устанавливать режим чтения.
  2. Работа с таблицами: У объекта ТаблицаФормы помимо свойства ТолькоПросмотр можно тонко настраивать отдельные действия через свойства РазрешитьДобавление, РазрешитьУдаление и ИзменятьСоставСтрок.
  3. Безопасность данных: Помните, что визуальная блокировка элементов на форме не защищает данные от изменения программным путем или через внешние обработки. Для гарантированной защиты данных дублируйте проверки прав в модуле объекта в обработчике ПередЗаписью.
← На главную