При проектировании интерфейсов в системе 1С:Предприятие 8.3 разработчики часто сталкиваются с задачей размещения табличных частей, содержащих большое количество реквизитов (20 и более колонок). Стандартное отображение такой таблицы превращает форму в огромную горизонтальную «портянку». Пользователям приходится постоянно использовать горизонтальный скроллинг, что существенно замедляет их работу, снижает наглядность и вызывает быструю утомляемость.
В этой статье мы подробно разберем несколько эффективных архитектурных вариантов и UX-паттернов, которые позволяют обойтись без горизонтальной прокрутки, сохранив компактность, быстродействие и удобство работы с данными.
Прежде чем приступать к программной генерации интерфейса, рассмотрим самый простой и быстрый в реализации штатный механизм платформы — группировку колонок внутри таблицы формы. Этот способ не требует написания сложного кода и отлично поддерживается платформой.
Разберем по шагам, как настроить многострочное отображение одной строки табличной части в конфигураторе:
Номенклатура и Характеристика, мы можем расположить их друг под другом в одной визуальной ячейке таблицы.Новая колонка выберем На следующей строке или В той же колонке.Результат: Каждая физическая строка табличной части теперь занимает на экране две или три строки по высоте. Связанные данные (например, «Номенклатура» и под ней «Артикул», или «Цена» и под ней «Скидка») группируются в компактные блоки. Пользователь видит все 20 полей без горизонтальной прокрутки, при этом сохраняется стандартный функционал поиска, сортировки и ввода данных.
Проанализируем классический паттерн проектирования сложных интерфейсов — разделение рабочей области на список строк (Мастер) и карточку текущей строки (Деталь). Это стандартное решение, которое повсеместно применяется в типовых конфигурациях ERP-класса.
Суть метода заключается в разделении экрана на две логические зоны:
НомерСтроки, Номенклатура, Количество, Сумма). Это позволяет пользователю видеть сразу много строк и быстро ориентироваться в документе.Для реализации этого подхода нам потребуется связать элементы управления на панели с текущей строкой таблицы. Разберем, как это сделать программно в обработчике события таблицы:
&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
Если ТекущаяСтрока <> Неопределено Тогда
// Автоматически синхронизируем реквизиты панели с текущей строкой
КопироватьДанныеСтрокиНаПанель(ТекущаяСтрока);
КонецЕсли;
КонецПроцедуры
При перемещении курсора по компактной таблице с помощью стрелок «Вверх» и «Вниз» данные на детальной панели мгновенно обновляются. Пользователь может редактировать значения прямо на панели, и они сразу же запишутся в активизированную строку табличной части.
Если пользователи привыкли работать в Excel и требуют аналогичного уровня свободы в оформлении (объединение ячеек, сложные рамки, цветовые акценты под различные условия), отличным решением станет использование элемента формы Поле табличного документа.
Этот подход позволяет нам полностью контролировать сетку отображения данных. Мы можем выводить строки табличной части в виде сложно структурированных блоков ячеек. При этом платформа 1С позволяет организовать полноценный ввод данных прямо в ячейки табличного документа.
Рассмотрим ключевые настройки для реализации этого механизма:
СодержитЗначение = Истина.Число или СправочникСсылка.Номенклатура).Редактирование = Истина.Для синхронизации изменений, внесенных пользователем в табличный документ, с реальной табличной частью документа, мы используем обработчик события поля табличного документа ПриИзмененииСодержимого:
&НаКлиенте
Процедура ТабличныйДокументПриИзмененииСодержимого(Элемент, Область)
// Определяем, какая ячейка была изменена
// Находим соответствующую строку и реквизит нашей ТЧ
// Записываем новое значение в объект документа
ОбновитьДанныеОбъектаПоТабДоку(Область);
КонецПроцедуры
Этот вариант сложнее в разработке, так как требует ручной обработки вывода данных, перехвата изменений и позиционирования, но он предоставляет абсолютную свободу в дизайне интерфейса.
Современный подход, завоевывающий все большую популярность, — рендеринг табличной части с использованием HTML и CSS через элемент формы ПолеHTMLДокумента. Этот метод позволяет создать полноценный карточный (плиточный) интерфейс или канбан-доску.
Выделим основные этапы реализации данного метода:
1c://click?row=3&field=Quantity&val=10.Разберем пример обработки такого события в 1С:
&НаКлиенте
Процедура ПолеHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
АдресПерехода = ДанныеСобытия.Href;
Если Найти(АдресПерехода, "1c://") > 0 Тогда
СтандартнаяОбработка = Ложь;
// Парсим параметры строки запроса и вносим изменения в ТЧ документа
ОбработатьКликИзHTML(АдресПерехода);
КонецЕсли;
КонецПроцедуры
Преимущества: Потрясающий внешний вид, высокая скорость отрисовки на клиенте за счет встроенного движка веб-браузера, неограниченные возможности кастомизации под любые требования пользователей.
Вернемся к идее динамического создания элементов формы под каждую строку таблицы (например, создание группы-панели для каждой строки ТЧ). Несмотря на кажущуюся привлекательность, этот подход имеет **критическое ограничение производительности**.
Важно понимать: Управляемый интерфейс 1С устроен так, что описание структуры формы передается между сервером и клиентом в виде XML. Если в табличной части будет 50 строк, а в каждой строке по 20 реквизитов, то программно придется создать 1000 элементов формы (полей ввода, надписей, групп). Это приведет к огромным задержкам при открытии формы, изменении данных и серверных вызовах (интерфейс начнет ощутимо «зависать»).
Если вы все же решите использовать подход с генерацией программных панелей, необходимо реализовать **постраничный вывод (пейджинг)**:
Это позволит сохранить высокую скорость работы интерфейса и решит проблему нехватки экранного пространства. Для практического изучения базовых механизмов создания и очистки контролов в рантайме можно использовать пример динамического добавления и удаления элементов формы.
Выбор конкретного технического решения зависит от специфики ваших данных и требований пользователей: