Работа с таблицами значений и табличными документами в 1С:Предприятие — одна из самых востребованных задач среди разработчиков. Нередко требуется визуализировать данные из программной таблицы в удобном для печати или просмотра формате. Например, когда нужно сформировать отчёт с динамически собранными данными или вывести промежуточные результаты обработки для анализа.

В этой статье разберём три основных способа вывода таблицы значений в табличный документ: от простейшего копирования структуры до гибкого форматирования с условиями. Особое внимание уделим автоматическому подбору ширины колонок и обработке больших объёмов данных без зависаний. Материал будет полезен как новичкам, так и опытным программистам, которые хотят оптимизировать свой код.

1. Базовый метод: прямой вывод таблицы значений

Самый простой способ — использовать встроенный метод ВывестиТаблицуЗначений(). Он подходит для быстрого отображения данных без сложного форматирования. Достаточно передать табличный документ и саму таблицу значений:

ТабличныйДокумент.ВывестиТаблицуЗначений(ТаблицаЗначений);

Этот метод автоматически создаёт колонки по структуре таблицы и заполняет их данными. Однако у него есть ограничения:

  • 🔹 Не поддерживает пользовательское форматирование ячеек
  • 🔹 Ширина колонок фиксированная (может обрезать длинные значения)
  • 🔹 Нет возможности добавить заголовок или нижний колонтитул

Пример полного кода для вывода в новую форму:

Процедура ВывестиТаблицуНаПечать()

ТабличныйДокумент = Новый ТабличныйДокумент;

ТаблицаЗначений = Новый ТаблицаЗначений;

// Заполняем таблицу данными

ТаблицаЗначений.Колонки.Добавить("Товар");

ТаблицаЗначений.Колонки.Добавить("Количество");

ТаблицаЗначений.Колонки.Добавить("Цена");

НоваяСтрока = ТаблицаЗначений.Добавить();

НоваяСтрока.Товар = "Монитор";

НоваяСтрока.Количество = 5;

НоваяСтрока.Цена = 25000;

// Выводим в табличный документ

ТабличныйДокумент.ВывестиТаблицуЗначений(ТаблицаЗначений);

// Показываем пользователю

ТабличныйДокумент.Показать("Печать таблицы товаров");

КонецПроцедуры

⚠️ Внимание: При выводе таблиц с более чем 1000 строк этот метод может значительно замедлить работу системы. Для больших объёмов данных используйте постраничный вывод.
📊 Какой способ вывода таблиц вы используете чаще?
Встроенный метод ВывестиТаблицуЗначений
Ручное формирование через ОбластьЯчеек
Шаблоны табличных документов
Свой вариант

2. Ручное формирование через ОбластьЯчеек

Когда требуется полный контроль над внешним видом таблицы, лучше использовать метод ОбластьЯчеек. Этот подход позволяет:

  • 🎨 Настраивать шрифты, цвета и границы ячеек
  • 📏 Динамически изменять ширину колонок
  • 🔄 Добавлять промежуточные итоги и группировки

Основные этапы работы:

  1. Создать область ячеек нужного размера
  2. Заполнить заголовки колонок
  3. Циклом перенести данные из таблицы значений
  4. Применить автоподбор ширины колонок

Пример кода с форматированием:

Процедура ВывестиТаблицуСФорматированием()

ТабличныйДокумент = Новый ТабличныйДокумент;

ТаблицаЗначений = ПолучитьДанныеДляВывода(); // Ваша функция получения данных

// Создаём область для заголовков

ОбластьЗаголовков = ТабличныйДокумент.ОбластьЯчеек(1, 1, 1, ТаблицаЗначений.Колонки.Количество());

ОбластьЗаголовков.Текст = "Отчёт по продажам за " + ТекущаяДата();

ОбластьЗаголовков.Объединить();

ОбластьЗаголовков.ПараметрыСтраницы.Шрифт = Новый Шрифт("Arial", 14, True);

// Заголовки колонок

Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл

ТабличныйДокумент.ОбластьЯчеек(2, Колонка.Индекс+1).Текст = Колонка.Заголовок;

ТабличныйДокумент.ОбластьЯчеек(2, Колонка.Индекс+1).ГоризонтальноеПоложение = ГоризонтальноеПоложениеТекста.Центр;

КонецЦикла;

// Данные таблицы

Для НомерСтроки = 0 По ТаблицаЗначений.Количество()-1 Цикл

Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл

Значение = ТаблицаЗначений[НомерСтроки][Колонка.Имя];

ТабличныйДокумент.ОбластьЯчеек(НомерСтроки+3, Колонка.Индекс+1).Текст = Значение;

// Форматируем числовые значения

Если ТипЗнч(Значение) = Тип("Число") Тогда

ТабличныйДокумент.ОбластьЯчеек(НомерСтроки+3, Колонка.Индекс+1).ЧисловойФормат = "ЧДЦ=2; ЧРЗ= ";

КонецЕсли;

КонецЦикла;

КонецЦикла;

// Автоподбор ширины колонок

ТабличныйДокумент.АвтоПодборШириныКолонок();

ТабличныйДокумент.Показать();

КонецПроцедуры

Создать объект ТабличныйДокумент

Получить данные в ТаблицуЗначений

Определить область для заголовка отчёта

Создать область для заголовков колонок

Подготовить цикл для заполнения данных

Настроить автоподбор ширины колонок-->

3. Использование шаблонов табличных документов

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

  • 📑 Сохранять сложное оформление (логотипы, верхние/нижние колонтитулы)
  • 🔄 Быстро обновлять структуру без изменения кода
  • 🎭 Использовать разные стили для разных типов данных

Алгоритм работы с шаблоном:

1. Создайте макет табличного документа в конфигураторе (Файл → Новый → Табличный документ)

2. Оформите заголовки и структуру будущей таблицы

3. В коде загрузите шаблон и заполните его данными:

Процедура ВывестиПоШаблону()

ТабличныйДокумент = Новый ТабличныйДокумент;

ТаблицаЗначений = ПолучитьДанныеДляОтчёта();

// Загружаем шаблон из макета

Шаблон = Документы.ОтчётПоПродажам.ПолучитьМакет("ОсновнойШаблон");

ТабличныйДокумент.Прочитать(Шаблон);

// Находим область для вывода данных

ОбластьДанных = ТабличныйДокумент.Область("Данные");

// Заполняем область данными из таблицы значений

Для Каждого Строка Из ТаблицаЗначений Цикл

НоваяСтрока = ОбластьДанных.Строки.Добавить();

НоваяСтрока.Ячейки.Товар.Текст = Строка.Товар;

НоваяСтрока.Ячейки.Количество.Текст = Строка.Количество;

НоваяСтрока.Ячейки.Сумма.Текст = Строка.Сумма;

НоваяСтрока.Ячейки.Сумма.ЧисловойФормат = "ЧДЦ=2; ЧРЗ= ";

КонецЦикла;

ТабличныйДокумент.Показать("Отчёт по продажам (шаблон)");

КонецПроцедуры

⚠️ Внимание: При изменении структуры таблицы значений не забудьте обновить соответствующие области в шаблоне. Расхождение колонок приведёт к ошибкам при выводе.
Способ вывода Скорость Гибкость Сложность Когда использовать
ВывестиТаблицуЗначений() ⭐⭐⭐⭐⭐ Быстрый просмотр данных, отладка
ОбластьЯчеек ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐ Отчёты со сложным форматированием
Шаблоны ⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ Регулярные отчёты с фиксированной структурой

4. Оптимизация вывода больших таблиц

При работе с таблицами более 5000 строк стандартные методы могут приводить к зависаниям интерфейса. Для оптимизации:

  • 🔄 Используйте постраничный вывод (по 1000 строк)
  • ⏱️ Отключайте автоматическое обновление экрана
  • 🗑️ Освобождайте память после вывода

Пример оптимизированного кода:

Процедура ВывестиБольшуюТаблицу()

ТабличныйДокумент = Новый ТабличныйДокумент;

ТаблицаЗначений = ПолучитьБольшойНаборДанных(); // 10000+ строк

// Отключаем обновление экрана для ускорения

ТабличныйДокумент.НачатьИзменение();

Попытка

РазмерСтраницы = 1000;

КоличествоСтраниц = Цел(ТаблицаЗначений.Количество() / РазмерСтраницы) + 1;

Для НомерСтраницы = 1 По КоличествоСтраниц Цикл

Начало = (НомерСтраница - 1) * РазмерСтраницы;

Конец = Мин(Начало + РазмерСтраницы - 1, ТаблицаЗначений.Количество() - 1);

// Выводим текущую страницу

ЧастьТаблицы = ТаблицаЗначений.ПолучитьСтроки(Начало, Конец);

ТабличныйДокумент.ВывестиТаблицуЗначений(ЧастьТаблицы);

// Добавляем разделитель страниц

Если НомерСтраница < КоличествоСтраниц Тогда

ТабличныйДокумент.ОбластьЯчеек(ТабличныйДокумент.ВысотаТаблицы+1, 1).Текст = "--- Страница " + НомерСтраница + " ---";

КонецЕсли;

КонецЦикла;

Исключение

ТабличныйДокумент.ОтменитьИзменение();

ВызватьИсключение;

КонецПопытки;

ТабличныйДокумент.ЗакончитьИзменение();

ТабличныйДокумент.АвтоПодборШириныКолонок();

ТабличныйДокумент.Показать("Большой отчёт");

// Освобождаем память

ТаблицаЗначений.Очистить();

КонецПроцедуры

💡

Для ускорения вывода очень больших таблиц (50000+ строк) рассмотрите возможность генерации отчёта в фоновом задании с последующим уведомлением пользователя о готовности.

5. Распространённые ошибки и их решения

Даже опытные разработчики сталкиваются с типичными проблемами при выводе таблиц. Вот наиболее частые из них:

  • 🔴 Пустые ячейки — возникают когда не совпадают имена колонок в таблице значений и шаблоне
  • 🔴 Обрезанный текст — забыли вызвать АвтоПодборШириныКолонок()
  • 🔴 Медленная работа — вывод большого объёма данных без постраничной обработки
  • 🔴 Ошибки формата — попытка вывести несовместимые типы данных (например, картинку как текст)

Решения для каждой проблемы:

Ошибка Причина Решение
Таблица не отображается Не вызван метод Показать() Добавьте ТабличныйДокумент.Показать() в конце процедуры
Данные не попадают в ячейки Неверные координаты области Проверьте индексы строк и колонок (начинаются с 1)
Искажённое форматирование Конфликт стилей в шаблоне Используйте Область.Очистить() перед применением новых стилей
Зависание при выводе Слишком много строк Реализуйте постраничный вывод или фоновую обработку
Как диагностировать проблемы с выводом

1. Проверьте фактическое количество строк в таблице значений перед выводом:

Сообщить("Строк для вывода: " + ТаблицаЗначений.Количество());

2. Убедитесь, что все колонки имеют корректные имена без спецсимволов

3. Для шаблонов проверьте соответствие имён областей в макете и коде

4. Включите отладку и посмотрите, на каком именно этапе происходит ошибка

6. Дополнительные возможности форматирования

Для профессионального оформления отчётов используйте эти приёмы:

  • 🎨 Условное форматирование — изменяйте цвет ячеек в зависимости от значений
  • 📊 Группировка данных — создавайте иерархические структуры с отступами
  • 🖼️ Вставка изображений — добавляйте логотипы или графики в отчёт
  • 📌 Закрепление областей — фиксируйте заголовки при прокрутке

Пример условного форматирования:

// Применяем форматирование к колонке с остатками

Для НомерСтроки = 0 По ТаблицаЗначений.Количество()-1 Цикл

Остаток = ТаблицаЗначений[НомерСтроки].Остаток;

Ячейка = ТабличныйДокумент.ОбластьЯчеек(НомерСтроки+3, 4); // Колонка с остатками

Если Остаток < 0 Тогда

Ячейка.ЦветФона = ВебЦвета.СветлоКрасный;

Ячейка.ЦветТекста = ВебЦвета.Белый;

ИначеЕсли Остаток < 10 Тогда

Ячейка.ЦветФона = ВебЦвета.Жёлтый;

КонецЕсли;

КонецЦикла;

Для добавления логотипа компании:

// Вставляем картинку в верхний левый угол

Картинка = Новый Картинка(ПутьКФайлуЛоготипа);

ТабличныйДокумент.Картинка(1, 1, 2, 2, Картинка); // Координаты и размер области

💡

Для сложных отчётов комбинируйте несколько подходов: используйте шаблон для статической части (заголовки, логотипы) и программное формирование через ОбластьЯчеек для динамических данных.

FAQ: Частые вопросы по выводу таблиц в 1С

Как вывести таблицу значений в Excel вместо табличного документа?

Используйте объект ЗаписьXML или компоненту 1C:Enterprise Development Tools для экспорта в Excel. Пример:

ТаблицаЗначений.Записать(Новый ЗаписьXML, "UTF-8");

ЗаписьXML.Закрыть();

Или проще через метод ТаблицаЗначений.Записать(ПутьКФайлу, ТипФайла.XLSX) в новых версиях платформы.

Можно ли вывести таблицу значений в PDF напрямую?

Платформа 1С не поддерживает прямой вывод в PDF. Используйте обходные пути:

  1. Выведите в табличный документ и сохраните как PDF через ТабличныйДокумент.Сохранить(ПутьКФайлу, ТипФайла.PDF)
  2. Используйте внешние компоненты вроде PDF41C или FastReport
Как сделать перенос текста в ячейках табличного документа?

Настройте параметры области ячеек:

Область.ПереносТекста = Истина;

Область.ГоризонтальноеПоложение = ГоризонтальноеПоложениеТекста.ПоЛевомуКраю;

И обязательно вызовите АвтоПодборВысотыСтрок() после заполнения данных.

Почему при выводе даты отображаются как числа?

Это происходит потому что даты хранятся как числовые значения. Установите правильный формат:

Область.Формат = "ДФ=dd.MM.yyyy; ЧРЗ= ";

Или используйте функцию Формат(Дата, "ДФ=д ММММ йййй") при заполнении ячейки.

Как вывести таблицу значений в HTML-формате?

Используйте метод ТаблицаЗначений.ЗаписатьHTML():

ТекстHTML = Новый ЗаписьHTML;

ТаблицаЗначений.ЗаписатьHTML(ТекстHTML);

Результат = ТекстHTML.Закрыть();

Для более гибкого управления разметкой создавайте HTML-шаблон и подставляйте данные через СтрЗам.