Как запретить изменение реквизитов табличной части в 1С с сохранением скроллинга

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

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

В чем причина блокировки скроллинга

Выясним причину проблемы. Распространенная ошибка разработчиков — установка свойства Доступность = Ложь для самого табличного поля или его колонок. При установке свойства Доступность в значение Ложь элемент управления полностью отключает обработку пользовательского ввода и событий интерфейса. Табличное поле переходит в полностью заблокированное состояние, из-за чего полосы горизонтальной и вертикальной прокрутки перестают реагировать на нажатия и колесо мыши.

Для сохранения возможности прокрутки необходимо использовать свойство ТолькоПросмотр вместо Доступность.

Решение 1: Установка свойства ТолькоПросмотр для колонок табличной части

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

Для обычных форм обход колонок табличного поля выполняется следующим образом:


Для каждого Колонка Из ЭлементыФормы.Товары.Колонки Цикл
    Колонка.ТолькоПросмотр = Истина;
КонецЦикла;

Для управляемых форм обход подчиненных элементов группы или таблицы выглядит так:


Для каждого Элемент Из ЭтаФорма.Элементы.Товары.ПодчиненныеЭлементы Цикл
    Элемент.ТолькоПросмотр = Истина;
КонецЦикла;

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

ЭлементыФормы.Товары.ТолькоПросмотр = Истина;

Решение 2: Использование события ПриНачалеРедактирования

Еще один надежный способ запретить редактирование данных в табличной части с сохранением навигации и скроллинга — использование обработчика события ПриНачалеРедактирования табличного поля.

Разберем по шагам реализацию этого способа:

  1. Откроем форму и перейдем к свойствам табличного поля.
  2. Создадим обработчик события ПриНачалеРедактирования.
  3. Установим значение параметра Отказ = Истина.

Посмотрим на пример кода обработчика события:


Процедура ТоварыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
    Отказ = Истина;
КонецПроцедуры

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

Решение 3: Ограничение состава и порядка строк

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


ЭлементыФормы.Товары.ИзменятьСоставСтрок = Ложь;
ЭлементыФормы.Товары.ИзменятьПорядокСтрок = Ложь;

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

← На главную