К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как вывести таблицу в 1С: рабочие способы с примерами

Практические способы вывести таблицу в 1С: через табличный документ, запрос, таблицу значений и СКД. Примеры кода, ошибки и проверка результата.

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

Выбор способа зависит от цели. Если нужен печатный документ или файл Excel — используется табличный документ. Если требуется быстро посмотреть результат запроса — достаточно консоли запросов или метода Выбрать() с обходом в цикле. Если таблица должна быть интерактивной и редактируемой — выводится таблица значений на управляемую форму.

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

Как выбрать способ вывода таблицы

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

Сравнение вариантов

Табличный документ

Печатные формы, сохранение в Excel/PDF, простые отчёты. Ограничение: не редактируется пользователем как данные, только просмотр и печать.

Таблица значений на форме

Интерактивный просмотр и редактирование данных пользователем. Ограничение: требует создания реквизита формы и элементов интерфейса.

СКД (схема компоновки данных)

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

Консоль запросов

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

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

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

Табличный документ — основной объект для формирования печатных форм и простых табличных отчётов. Данные выводятся либо напрямую через свойство Текст области, либо через заранее подготовленный макет с областями и параметрами.

Простой вывод без макета

Минимальный пример — вывод списка номенклатуры напрямую в ячейки табличного документа:

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ ПЕРВЫЕ 100

| Номенклатура.Наименование КАК Наименование,

| Номенклатура.Код КАК Код

|ИЗ

| Справочник.Номенклатура КАК Номенклатура";

Выборка = Запрос.Выполнить().Выбрать();

Строка = 1;

Пока Выборка.Следующий() Цикл

ТабДок.Область("R" + Строка + "C1").Текст = Выборка.Код;

ТабДок.Область("R" + Строка + "C2").Текст = Выборка.Наименование;

Строка = Строка + 1;

КонецЦикла;

ТабДок.Показать("Список номенклатуры");

Метод Показать() открывает документ пользователю в отдельном окне. Если формирование выполняется на сервере, табличный документ нужно вернуть на клиент — например, через реквизит формы типа «ТабличныйДокумент».

Вывод через макет с областями

Для аккуратных печатных форм создайте макет типа «Табличный документ» в конфигураторе, разметьте области «Шапка», «Строка», «Подвал» и заполняйте их параметрами:

Макет = ПолучитьМакет("МакетОтчета");

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

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

ТабДок.Вывести(ОбластьШапка);

ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

Пока Выборка.Следующий() Цикл

ОбластьСтрока.Параметры.Наименование = Выборка.Наименование;

ОбластьСтрока.Параметры.Код = Выборка.Код;

ТабДок.Вывести(ОбластьСтрока);

КонецЦикла;

Преимущество макета — оформление (шрифты, границы, цвета) задаётся визуально в конфигураторе и не захламляет код. Изменение дизайна не требует правки алгоритма.

Как вывести результат запроса в таблицу

Запрос возвращает данные в виде объекта «РезультатЗапроса». Чтобы получить таблицу, примените метод Выгрузить() — он вернёт таблицу значений, которую можно передать на форму, в табличный документ или в СКД:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Товары.Ссылка КАК Товар,

| Товары.Наименование КАК Наименование

|ИЗ

| Справочник.Номенклатура КАК Товары";

ТаблицаРезультат = Запрос.Выполнить().Выгрузить();

Для разовой проверки данных писать код не обязательно. Откройте консоль запросов (в типовых конфигурациях — через «Инструменты разработчика» или встроенную консоль в режиме толстого клиента), вставьте текст запроса и выполните его — результат отобразится в табличном виде автоматически.

Если запрос возвращает иерархические данные или итоги по группам, используйте Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам) — тогда получится дерево значений вместо плоской таблицы.

Вывод таблицы значений на управляемую форму

Чтобы пользователь мог видеть и редактировать таблицу, её нужно разместить на форме. В конфигураторе добавьте реквизит формы типа «ТаблицаЗначений», опишите колонки и перетащите реквизит в дерево элементов формы — платформа создаст поле таблицы автоматически.

Программно заполнить такой реквизит можно прямым присваиванием:

// В модуле формы

ТаблицаНаФорме.Загрузить(Запрос.Выполнить().Выгрузить());

Если таблица создаётся полностью программно (динамически), потребуется добавить реквизиты через метод ИзменитьРеквизиты() и создать элементы формы кодом. Это более трудоёмкий путь, применяйте его только когда структура колонок заранее неизвестна.

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

Типичные ошибки
01
Обращение к параметру макета, которого нет в области — возникает ошибка «Параметр не найден», формирование прерывается.
02
Заполнение таблицы формы на клиенте данными, полученными в серверной процедуре, без передачи результата — таблица остаётся пустой без сообщений об ошибке.
03
Вывод миллионов строк в табличный документ без ограничения — сеанс зависает надолго, документ невозможно открыть.
04
Использование ТабДок.Показать() в серверном коде — метод недоступен на сервере, вызов падает с ошибкой.

Вывод таблицы через СКД

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

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки,

КомпоновщикНастроек.Настройки);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

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

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ПроцессорВывода.УстановитьДокумент(ТабДок);

ПроцессорВывода.Вывести(ПроцессорКомпоновки);

Результат СКД можно вывести не только в табличный документ, но и в таблицу значений — для этого используется ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений. Это удобно, когда дальше данные обрабатываются программно.

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

Сохранение выведенной таблицы в файл

Табличный документ сохраняется в популярные форматы одним методом Записать():

ТабДок.Записать("C:\Отчеты\Список.xlsx", ТипФайлаТабличногоДокумента.XLSX);

ТабДок.Записать("C:\Отчеты\Список.pdf", ТипФайлаТабличногоДокумента.PDF);

Таблицу значений напрямую в Excel записать нельзя — сначала выведите её в табличный документ или используйте построитель отчёта. Альтернатива для обмена данными — сериализация через ЗначениеВСтрокуВнутр() или выгрузка в CSV построчно.

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

Проверка результата и частые проблемы

Контрольные точки

Как проверить результат

Данные в документе
Норма

Все строки выборки присутствуют, значения соответствуют запросу

Тревожный признак

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

Производительность
Норма

Документ формируется за секунды

Тревожный признак

Формирование длится минутами — ограничьте выборку или перенесите в фоновое задание

Сохранение в файл
Норма

Файл открывается, структура таблицы сохранена

Тревожный признак

Файл не создаётся — проверьте права на каталог и корректность пути

Если табличный документ сформирован, но пользователь его не видит, чаще всего причина в контексте выполнения: метод Показать() не работает на сервере и в фоновых заданиях. Возвращайте документ на клиент через реквизит формы или временное хранилище.

Итог

Что важно запомнить

Печатные формы и файлы — табличный документ с макетом, интерактивная таблица — таблица значений на форме, гибкие отчёты — СКД. Всегда ограничивайте объём выборки и проверяйте результат визуально перед передачей пользователям.

Частые вопросы

Как вывести таблицу в 1С без написания кода?

Используйте консоль запросов или универсальный отчёт в типовых конфигурациях: выберите источник данных, настройте поля и отборы — результат отобразится в табличном виде. Для справочников и документов также работает стандартная команда «Вывести список» из меню «Ещё» в форме списка.

Почему табличный документ формируется, но не открывается у пользователя?

Чаще всего код выполняется на сервере, где метод Показать() недоступен. Поместите документ в реквизит формы типа «ТабличныйДокумент» и добавьте на форму поле с видом «Поле табличного документа» — тогда результат отобразится автоматически.

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

Напрямую — никак. Сначала перенесите данные в табличный документ (в цикле по строкам или через макет), затем вызовите метод Записать() с типом файла XLSX. Либо сформируйте отчёт через СКД и сохраните его результат.

Что быстрее: обход выборки запроса или выгрузка в таблицу значений?

Для простого вывода в табличный документ обход выборки через Выбрать() обычно экономнее по памяти, так как не создаёт промежуточную коллекцию. Выгрузка в таблицу значений оправдана, когда данные нужно сортировать, сворачивать или передавать между процедурами.

Как вывести в таблицу картинки или штрихкоды?

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