Как в 1С на управляемой форме сделать доступной для редактирования только одну колонку таблицы?

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

При разработке интерфейсов на управляемых формах нередко возникает типовая задача: вывести пользователю таблицу с данными, но разрешить менять значения только в одном определенном поле (например, вводить количество или комментарий), защитив остальные колонки от случайной правки. Разберем, как правильно реализовать такое поведение в 1С:Предприятии 8.3.

Понимание разницы между «Доступность» и «Только просмотр»

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

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

Для большинства пользовательских интерфейсов предпочтительнее использовать вариант Только просмотр, так как он оставляет возможность копировать информацию и не ухудшает читаемость интерфейса.

Способ 1. Интерактивная настройка в конфигураторе

Если таблица и ее колонки созданы статически в дереве элементов формы, разберем по шагам порядок настройки через палитру свойств:

  1. Откроем нужную управляемую форму в конфигураторе.
  2. Перейдем к дереву элементов формы и развернем ветку элемента-таблицы.
  3. Выделим поочередно каждую колонку, которую требуется закрыть от редактирования.
  4. В окне Свойства найдем категорию Поведение.
  5. Установим флаг Только просмотр (либо снимем флаг Доступность, если ячейки должны быть полностью неактивными).
  6. У той единственной колонки, которую нужно оставить редактируемой, убедимся, что флаг Доступность установлен, а флаг Только просмотр снят.

Способ 2. Программный обход колонок формы

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


// Выполняется на клиенте или на сервере при создании формы
Для Каждого Колонка Из Элементы.ИмяТаблицы.ПодчиненныеЭлементы Цикл
    Если Колонка <> Элементы.ИмяТаблицыНужнаяКолонка Тогда
        Колонка.ТолькоПросмотр = Истина;
    КонецЕсли;
КонецЦикла;

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

Ограничение платформы: иерархия свойств таблицы и ее колонок

Выясним частую причину ошибки, когда колонка остается недоступной, несмотря на установленное свойство ТолькоПросмотр = Ложь. На платформе 1С действует строгое правило наследования свойств:

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

Защита структуры строк таблицы

Когда мы оставляем у самой таблицы свойство ТолькоПросмотр = Ложь, пользователю по умолчанию становятся доступны команды добавления, копирования и удаления строк. Если по бизнес-логике требуется запретить изменение структуры списка, а разрешить только ввод в ячейку разрешенной колонки, настроим саму таблицу:

  1. В свойствах таблицы снимем флаг Изменение состава строк (в коде: Элементы.ИмяТаблицы.ИзменениеСоставаСтрок = Ложь).
  2. Либо точечно отключим свойства РазрешитьВводСтрок и РазрешитьУдалениеСтрок.

Динамическое управление редактированием по условию

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

  1. Условное оформление формы: позволяет через свойство ТолькоПросмотр заблокировать колонку для строк, удовлетворяющих определенному условию. Свойство Доступность через механизм условного оформления переопределить нельзя.
  2. Событие таблицы «ПередНачаломИзменения»: на клиенте проверяется контекст редактирования. Если строка или текущая колонка не соответствуют условию, устанавливается параметр Отказ = Истина, что предотвращает вход ячейки в режим редактирования.
← На главную