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

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

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

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

Суть проблемы и штатные возможности

Давайте сначала выясним, предоставляет ли платформа прямой инструмент для решения этой задачи. В обычных формах (толстый клиент) и в табличных документах механизм фиксации областей развит хорошо. Однако, когда мы работаем с управляемыми формами, основным элементом отображения списков и таблиц значений является ТаблицаФормы.

Если мы обратимся к свойствам элемента ТаблицаФормы в конфигураторе или попробуем найти соответствующие методы программно, мы обнаружим, что свойства, отвечающего за фиксацию строк (аналогичного ФиксацияСверху), для этого элемента не существует. Штатными средствами настройки самой Таблицы Значений на форме закрепить строки нельзя.

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

Решение №1: Использование Поля табличного документа

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

Давайте разберем по шагам, как это реализовать:

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

Код для фиксации строк в табличном документе выглядит предельно просто:


// Фиксируем 3 верхние строки
ТабличныйДокумент.ФиксацияСверху = 3;

Однако, выбирая этот путь, мы должны учитывать ряд нюансов:

Решение №2: Метод двух таблиц

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

Алгоритм реализации:

  1. Размещаем на форме две таблицы: ТаблицаВерх и ТаблицаНиз.
  2. ТаблицаВерх будет содержать фиксированные строки. Мы размещаем ее в верхней части формы.
  3. ТаблицаНиз будет содержать остальные данные и иметь полосу прокрутки.
  4. У нижней таблицы (или у верхней, в зависимости от дизайна) отключаем отображение шапки (свойство ОтображениеШапки), чтобы визуально они сливались в единое целое.

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

Сложности метода:

Главная проблема здесь — синхронизация ширины колонок. Если пользователь изменит ширину колонки в нижней таблице, верхняя таблица "поедет", и данные перестанут визуально соответствовать друг другу.

Чтобы решить это, обычно применяют следующие подходы:

Решение №3: Заголовки как данные

Еще одно нестандартное решение, которое подходит для специфических задач (например, когда нужно зафиксировать всего одну строку итогов сверху), заключается в манипуляции заголовками колонок.

Суть метода:

  1. Мы отключаем стандартные заголовки колонок или используем их не по назначению.
  2. Программно устанавливаем в свойство Заголовок колонки значение, которое должно быть зафиксировано (например, сумму по этой колонке).

// Пример установки заголовка
Элементы.ТоварыСумма.Заголовок = "Сумма (" + ИтоговаяСумма + ")";

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

Решение №4: HTML-поле (Продвинутый уровень)

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

Мы формируем HTML-код, который верстаем как таблицу. Современные стандарты CSS (каскадные таблицы стилей) позволяют легко зафиксировать любые строки.

Используем CSS-свойство position: sticky:


<style>
  thead th { position: sticky; top: 0; }
  .fixed-row { position: sticky; top: 30px; background-color: #fff; z-index: 10; }
</style>

Преимущества этого метода — безграничные возможности оформления. Вы можете зафиксировать 2, 3 или 10 строк, раскрасить их как угодно и добавить любую анимацию. Недостаток — высокая трудоемкость. Вам придется самостоятельно реализовывать передачу данных из 1С в HTML и обработку кликов (событий) из HTML обратно в 1С.

Выводы и рекомендации

Подводя итог нашему анализу, можно сказать следующее:

  1. Штатной галочки "Зафиксировать строки" у ТаблицыФормы в 1С 8.3 нет.
  2. Если вам нужна полноценная фиксация со сложной структурой — используйте Табличный документ (ТабДок) на форме. Это наиболее "платформенный" путь.
  3. Если важно сохранить поведение именно динамической таблицы (редактирование, типы данных) — попробуйте вариант с двумя таблицами, но будьте готовы бороться с шириной колонок.
  4. Если нужно просто выделить важные строки, но не обязательно фиксировать их "намертво" при скроллинге — рассмотрите использование Условного оформления и сортировки, чтобы эти строки всегда были первыми при открытии формы, пусть и уходили вверх при прокрутке.
← На главную