При разработке сложных отчетов или печатных форм в системе 1С часто возникает потребность сгруппировать данные так, чтобы пользователь мог переключаться между ними с помощью привычных вкладок, как это реализовано в листах Microsoft Excel. Стандартный объект ТабличныйДокумент сам по себе не поддерживает внутреннюю структуру вкладок. Однако платформа предоставляет мощные альтернативные инструменты для решения этой задачи. Разберем подробно, как реализовать этот функционал несколькими способами.
Проанализируем наиболее технологичный и "нативный" способ для платформы 1С:Предприятие 8 — использование специального объекта ПакетОтображаемыхДокументов. Этот объект предназначен именно для того, чтобы объединять несколько табличных документов в одну визуальную и логическую сущность.
Рассмотрим по шагам, как настроить отображение вкладок:
ОтображатьЗакладки в значение Истина.ТабличныйДокумент, заполняем их данными и добавляем в коллекцию Состав нашего пакета. Каждому элементу состава можно присвоить Имя или Представление, которое и станет текстом на вкладке.Посмотрим на пример кода, который реализует данную логику:
Пакет = Новый ПакетОтображаемыхДокументов;
Пакет.ОтображатьЗакладки = Истина;
// Формируем первый лист
ТабДок1 = Новый ТабличныйДокумент;
ТабДок1.Область("R1C1").Текст = "Данные первого листа";
ЭлементПакета1 = Пакет.Состав.Добавить();
ЭлементПакета1.Данные = ПоместитьВоВременноеХранилище(ТабДок1);
ЭлементПакета1.Представление = "Лист 1 (Основные данные)";
// Формируем второй лист
ТабДок2 = Новый ТабличныйДокумент;
ТабДок2.Область("R1C1").Текст = "Данные второго листа";
ЭлементПакета2 = Пакет.Состав.Добавить();
ЭлементПакета2.Данные = ПоместитьВоВременноеХранилище(ТабДок2);
ЭлементПакета2.Представление = "Лист 2 (Детализация)";
// Вывод на печать или отображение
Пакет.Напечатать(РежимИспользованияПринтера.ПоказатьПередПечатью);
Важно отметить, что начиная с версии платформы 8.3.10, ПакетОтображаемыхДокументов поддерживает метод Записать(). Если при сохранении указать тип файла ТипФайлаПакетаОтображаемыхДокументов.XLSX, 1С автоматически сформирует файл Excel, в котором каждый табличный документ станет отдельным листом. Это полностью снимает проблему "изголяться с сохранением", упомянутую в обсуждениях.
Если нам требуется более гибкое управление интерфейсом или дополнительные кнопки управления на каждой вкладке, рассмотрим вариант с программным созданием страниц на управляемой форме. Выясним, как это работает программно:
Мы можем создать на форме группу с видом Страницы. При формировании отчета мы будем программно добавлять в эту группу новые страницы, а внутрь каждой страницы помещать поле формы с типом ПолеТабличногоДокумента.
Проанализируем алгоритм реализации:
ТабличныйДокумент и соответствующее ему поле на форме.Этот метод удобен тем, что мы можем добавить флаги "Печатать этот лист" на каждую вкладку, реализуя логику, предложенную в Сообщении 10. При нажатии на общую кнопку "Печать" мы просто пройдемся циклом по всем табличным документам на форме и отправим на принтер только те, где стоит отметка.
В современных конфигурациях (таких как ERP, УТ 11, БП 3.0) задача вывода нескольких документов уже решена в рамках подсистемы "Печать". Рассмотрим механизм "Печать комплектов".
При использовании стандартной общей формы ПечатьДокументов, БСП выводит список доступных печатных форм в левой части окна (или сверху в виде закладок в зависимости от версии и настроек). Это реализовано через таблицу значений, где каждая строка связана с объектом ТабличныйДокумент. Когда пользователь переключается между строками таблицы, в основной области формы отображается соответствующий документ.
Выясним преимущества этого подхода: Во-первых, это стандартный интерфейс, привычный пользователям 1С. Во-вторых, там уже реализованы функции предварительного просмотра, настройки параметров страницы для каждого листа отдельно и возможность пакетной отправки на принтер. В-третьих, разработчику достаточно подготовить массив структур, содержащих табличные документы, и передать их в стандартную процедуру БСП.
Разберем, какой метод выбрать в зависимости от ситуации:
ПакетОтображаемыхДокументов.ПечатьДокументов, чтобы сохранить единство интерфейса.Проанализируем также вопрос производительности. При формировании огромных пакетов документов (сотни листов) память сервера может расходоваться значительно быстрее, чем при работе с одним документом. В таких случаях рекомендуем использовать временные хранилища для передачи данных между сервером и клиентом.
Таким образом, хотя прямой функции "Вкладки" у объекта ТабличныйДокумент не существует, платформа предоставляет все необходимые инструменты для полной имитации поведения Excel. Наиболее мощным и современным инструментом является ПакетОтображаемыхДокументов, который закрывает задачи и визуализации, и печати, и выгрузки данных.