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