Как программно отключить или ограничить прокрутку в табличном документе 1С

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

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

Различие между объектом и элементом формы

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

Свойства, отвечающие за отображение полос прокрутки, относятся именно к элементу формы. Если вы создаете табличный документ программно, вы не найдете этих свойств у самого объекта. Чтобы управлять прокруткой, нам необходимо обратиться к элементу формы через коллекцию Элементы. Для быстрой отладки и изменения параметров элементов прямо в пользовательском режиме можно использовать редактор свойств открытых форм.

Рассмотрим пример правильного обращения в управляемом приложении:


// Правильное обращение к элементу формы
ЭлементПросмотра = Элементы.Результат; // Где "Результат" — имя поля на форме
ЭлементПросмотра.ВертикальнаяПолосаПрокрутки = ИспользованиеПолосыПрокрутки.НеИспользовать;
ЭлементПросмотра.ГоризонтальнаяПолосаПрокрутки = ИспользованиеПолосыПрокрутки.НеИспользовать;

Отключение полос прокрутки в управляемых формах

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


&НаСервере
Процедура ОтключитьСкроллНаСервере()
    // Устанавливаем режим отображения полос
    Элементы.ПолеТабДок.ВертикальнаяПолосаПрокрутки = ИспользованиеПолосыПрокрутки.НеИспользовать;
    Элементы.ПолеТабДок.ГоризонтальнаяПолосаПрокрутки = ИспользованиеПолосыПрокрутки.НеИспользовать;
КонецПроцедуры

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

Метод полной фиксации через закрепление областей

Если нам нужно, чтобы таблица вообще не двигалась, проанализируем метод фиксации строк и колонок. Если зафиксировать все строки, которые содержат данные, прокрутка станет невозможной, так как системе будет «нечего» прокручивать. Посмотрим, как это реализовать программно:


// Фиксируем все строки и колонки по размеру данных
ТабДок.ФиксацияСверху = ТабДок.ВысотаТаблицы;
ТабДок.ФиксацияСлева = ТабДок.ШиринаТаблицы;

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

Ограничение рабочей области документа

Чтобы пользователь не мог прокрутить документ в «пустоту», мы можем скрыть все неиспользуемые строки и колонки. Это создаст эффект ограниченного пространства. Выясним, как это сделать:

  1. Определяем границы заполненной области через ТабДок.ВысотаТаблицы и ТабДок.ШиринаТаблицы.
  2. Выделяем область справа и снизу от данных.
  3. Устанавливаем свойство Видимость = Ложь для этих областей.

Пример программного скрытия лишних колонок:


// Скрываем колонки с 11-й до максимальной
ОбластьЛишнего = ТабДок.Область(, 11, , 255); 
ОбластьЛишнего.Видимость = Ложь;

Дополнительно рекомендуется использовать свойство Защита. Если установить ТабДок.ТолькоПросмотр = Истина и ТабДок.Защита = Истина, а в свойствах элемента формы снять флаг «Разрешить выделение пустых областей», навигация пользователя будет сильно ограничена только заполненными ячейками.

Принудительный возврат фокуса через метод Показать()

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

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


&НаКлиенте
Процедура ПолеТабДокПриАктивизацииОбласти(Элемент)
    // Принудительно позиционируем видимую часть на первой ячейке
    Элемент.Показать(Объект.ТабДок.Область("R1C1"));
КонецПроцедуры

Этот метод позволяет имитировать отсутствие прокрутки: даже если пользователь «уедет» вниз, первый же клик или попытка ввода вернут экран в исходное положение.

Динамическая подстройка высоты контейнера

Самый эстетичный способ избежать прокрутки — сделать так, чтобы высота элемента формы точно соответствовала высоте самого ТабличногоДокумента. Проанализируем, как это реализовать:

Если контейнер (элемент формы) имеет высоту 500 пикселей, а сам документ занимает 450 пикселей, полосы прокрутки не активируются. Мы можем измерять высоту строк в пунктах и программно менять высоту элемента формы. Однако стоит учитывать, что прямое управление высотой элементов в пикселях в управляемых формах ограничено (используется свойство Высота в строках).

Альтернатива: Использование Поля HTML документа

Если стандартные средства ТабличногоДокумента не позволяют добиться желаемого поведения (например, нужно на 100% заблокировать скролл, сохранив сложную кликабельность), рассмотрим альтернативный путь. Вывод данных через Поле HTML документа.

В HTML/CSS прокрутка отключается одной строкой: body { overflow: hidden; }. При этом все события нажатия на кнопки или ссылки внутри HTML будут передаваться в 1С через процедуру ПриНажатии. Это радикальный, но крайне эффективный метод для создания сложных, полностью статичных интерфейсов. Для удобной подготовки разметки в управляемом приложении подойдет редактор HTML для управляемого интерфейса.

Итоги и рекомендации

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

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

← На главную