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

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

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

В этой статье мы подробно разберем несколько эффективных архитектурных вариантов и UX-паттернов, которые позволяют обойтись без горизонтальной прокрутки, сохранив компактность, быстродействие и удобство работы с данными.

Вариант 1. Штатная группировка колонок и многострочный вывод

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

Разберем по шагам, как настроить многострочное отображение одной строки табличной части в конфигураторе:

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

Результат: Каждая физическая строка табличной части теперь занимает на экране две или три строки по высоте. Связанные данные (например, «Номенклатура» и под ней «Артикул», или «Цена» и под ней «Скидка») группируются в компактные блоки. Пользователь видит все 20 полей без горизонтальной прокрутки, при этом сохраняется стандартный функционал поиска, сортировки и ввода данных.

Вариант 2. Паттерн «Мастер-Деталь» (Связанные списки)

Проанализируем классический паттерн проектирования сложных интерфейсов — разделение рабочей области на список строк (Мастер) и карточку текущей строки (Деталь). Это стандартное решение, которое повсеместно применяется в типовых конфигурациях ERP-класса.

Суть метода заключается в разделении экрана на две логические зоны:

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


&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
    
    ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
    Если ТекущаяСтрока <> Неопределено Тогда
        // Автоматически синхронизируем реквизиты панели с текущей строкой
        КопироватьДанныеСтрокиНаПанель(ТекущаяСтрока);
    КонецЕсли;
    
КонецПроцедуры

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

Вариант 3. Интерактивный табличный документ (Поле табличного документа)

Если пользователи привыкли работать в Excel и требуют аналогичного уровня свободы в оформлении (объединение ячеек, сложные рамки, цветовые акценты под различные условия), отличным решением станет использование элемента формы Поле табличного документа.

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

Рассмотрим ключевые настройки для реализации этого механизма:

  1. Для ячеек, в которых планируется ввод данных, в свойствах области табличного документа необходимо установить свойство СодержитЗначение = Истина.
  2. Задать для этих ячеек конкретный тип данных (например, Число или СправочникСсылка.Номенклатура).
  3. Включить свойство Редактирование = Истина.

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


&НаКлиенте
Процедура ТабличныйДокументПриИзмененииСодержимого(Элемент, Область)
    
    // Определяем, какая ячейка была изменена
    // Находим соответствующую строку и реквизит нашей ТЧ
    // Записываем новое значение в объект документа
    ОбновитьДанныеОбъектаПоТабДоку(Область);
    
КонецПроцедуры

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

Вариант 4. Поле HTML-документа (Плиточный веб-интерфейс)

Современный подход, завоевывающий все большую популярность, — рендеринг табличной части с использованием HTML и CSS через элемент формы ПолеHTMLДокумента. Этот метод позволяет создать полноценный карточный (плиточный) интерфейс или канбан-доску.

Выделим основные этапы реализации данного метода:

Разберем пример обработки такого события в 1С:


&НаКлиенте
Процедура ПолеHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
    
    АдресПерехода = ДанныеСобытия.Href;
    Если Найти(АдресПерехода, "1c://") > 0 Тогда
        СтандартнаяОбработка = Ложь;
        // Парсим параметры строки запроса и вносим изменения в ТЧ документа
        ОбработатьКликИзHTML(АдресПерехода);
    КонецЕсли;
    
КонецПроцедуры

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

Вариант 5. Программное создание элементов формы и проблема лимитов (Предостережение)

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

Важно понимать: Управляемый интерфейс 1С устроен так, что описание структуры формы передается между сервером и клиентом в виде XML. Если в табличной части будет 50 строк, а в каждой строке по 20 реквизитов, то программно придется создать 1000 элементов формы (полей ввода, надписей, групп). Это приведет к огромным задержкам при открытии формы, изменении данных и серверных вызовах (интерфейс начнет ощутимо «зависать»).

Если вы все же решите использовать подход с генерацией программных панелей, необходимо реализовать **постраничный вывод (пейджинг)**:

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

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

Резюме и рекомендации

Выбор конкретного технического решения зависит от специфики ваших данных и требований пользователей:

← На главную