При разработке и сопровождении сложных отчетов, печатных форм и регламентированных документов разработчикам нередко приходится иметь дело с массивными табличными документами. Когда макет насчитывает десятки, сотни или даже тысячи секций, визуальный поиск конкретной строки, ячейки или колонки вручную превращается в трудоемкую задачу. Разберем штатные механизмы конфигуратора для просмотра списка областей и навигации по ним, а также альтернативные способы работы с перегруженными макетами.
В конфигураторе платформы «1С:Предприятие» предусмотрен специальный инструмент для работы со структурой табличного документа. Выясним, как им воспользоваться:
Помимо диалогового окна со списком, разработчик может включить постоянную подсветку именованных секций на самом макете. Для этого в подменю Таблица — Имена предусмотрены следующие режимы:
Если с макетами приходится работать постоянно, вызов окна со списком областей можно ускорить. Для этого перейдем в меню Сервис — Параметры — Клавиатура, найдем команду редактора табличного документа «Имена…» и назначим для нее удобную комбинацию горячих клавиш.
Проанализируем ситуацию, когда в макете действительно содержатся тысячи именованных секций. Стандартный диалог «Имена…» имеет ряд архитектурных ограничений:
Когда требуется выполнять мгновенный отбор и фильтрацию по сложным именам в огромном документе, эффективным решением выступает небольшая внешняя обработка, работающая в режиме «1С:Предприятие». Доступ ко всем секциям макета программно реализуется через коллекцию ТабличныйДокумент.Области.
Посмотрим на пример заполнения таблицы областей макета и механизм позиционирования:
// Заполняем таблицу областей для быстрого поиска на форме
Для Каждого ОбластьМакета Из ИсходныйМакет.Области Цикл
НоваяСтрока = ТаблицаИмен.Добавить();
НоваяСтрока.ИмяОбласти = ОбластьМакета.Имя;
НоваяСтрока.Верх = ОбластьМакета.Верх;
НоваяСтрока.Низ = ОбластьМакета.Низ;
НоваяСтрока.Лево = ОбластьМакета.Лево;
НоваяСтрока.Право = ОбластьМакета.Право;
КонецЦикла;
Для мгновенного перехода к выбранной секции в элементе управления Поле табличного документа достаточно привязать обработчик выбора строки из таблицы или дерева:
// Переход к выбранной области в поле табличного документа
ОбластьДляПерехода = Элементы.ПолеТабличногоДокумента.Область(ВыбранноеИмя);
Элементы.ПолеТабличногоДокумента.ТекущаяОбласть = ОбластьДляПерехода;
Такой подход позволяет использовать стандартные механизмы динамической фильтрации и поиска платформы, существенно экономя время разработчика.
Если макет разрастается до тысяч областей, рассмотрим меры по оздоровлению архитектуры решения: