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

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

Как сформировать таблицу в 1С: пошаговое руководство

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

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

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

Материал ориентирован на платформу 1С:Предприятие 8.3 — актуальную линейку, на которой работают типовые конфигурации «Бухгалтерия», «Управление торговлей», «Зарплата и управление персоналом» и другие. Синтаксис примеров одинаково работает в тонком и толстом клиенте.

Какие бывают таблицы в 1С и как выбрать нужный тип

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

Маршрут решения

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

Данные должны сохраняться вместе с документом или справочникомСоздавайте табличную часть в конфигураторе
Нужна печатная форма, отчёт или наглядная таблица для пользователяИспользуйте табличный документ с макетом
Нужно временно обработать набор строк в коде: отсортировать, сгруппировать, свернутьСоздайте таблицу значений программно
Таблица нужна только для просмотра результата запросаРассмотрите СКД или динамический список вместо ручного формирования

Частая ошибка — пытаться сохранить табличный документ «как данные». Табличный документ сохраняется только как файл (MXL, Excel, PDF), но не как структура базы. Если данные нужны для дальнейшего учёта, они должны лежать в табличной части или регистре, а табличный документ — лишь их визуальное представление.

Создание табличной части документа в конфигураторе

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

Порядок создания табличной части
  1. 1
    Откройте конфигуратор и найдите нужный документ в дереве конфигурации
  2. 2
    Правой кнопкой — Добавить — Табличная часть, задайте имя, например «Товары»
  3. 3
    Добавьте реквизиты табличной части: Номенклатура, Количество, Цена, Сумма
  4. 4
    Откройте форму документа и перетащите табличную часть из дерева реквизитов на форму
  5. 5
    Обновите конфигурацию базы данных (F7) и проверьте документ в режиме предприятия

После добавления реквизитов продумайте автоматические расчёты. Классический сценарий — пересчёт суммы при изменении количества или цены. Он делается в модуле формы в обработчиках событий ПриИзменении полей «Количество» и «Цена»: сумма строки вычисляется как произведение, а затем пересчитывается итог документа. Без этих обработчиков пользователю придётся считать вручную, что неизбежно приведёт к ошибкам.

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

Формирование табличного документа для печати и отчётов

Табличный документ — основной инструмент печатных форм в 1С. Логика такая: в конфигураторе создаётся макет с именованными областями (шапка, строка, подвал), а код последовательно выводит эти области в итоговый документ, подставляя параметры. Результат пользователь видит на экране и может распечатать или сохранить в файл.

Макет создаётся в конфигураторе: у объекта или в разделе «Общие макеты» добавьте макет типа «Табличный документ». Выделите ячейки шапки, задайте имя области через свойства (например, «Шапка»), в ячейках, куда подставляются данные, укажите тип заполнения «Параметр» и имя параметра. Аналогично создайте области «Строка» и «Подвал».

bsl
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетНакладной");

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = НомерДок;
ТабДок.Вывести(ОбластьШапка);

Для Каждого СтрокаТовара Из Товары Цикл
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьСтрока.Параметры.Заполнить(СтрокаТовара);
    ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;

ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьПодвал.Параметры.ИтогоСумма = Товары.Итог("Сумма");
ТабДок.Вывести(ОбластьПодвал);

Метод Вывести добавляет область ниже предыдущей, а Присоединить — справа от текущей, что удобно для горизонтальных отчётов. Параметры заполняются либо по одному (Область.Параметры.НомерДокумента = ...), либо массово через Параметры.Заполнить(), если имена параметров совпадают с именами полей источника.

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

Как проверить табличный документ

Отображение данных
Норма

Все параметры заполнены, нет пустых ячеек там, где должны быть значения

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

Пустые ячейки или текст имени параметра — параметр не заполнен или имя не совпадает

Разрыв страниц
Норма

Строки не разрезаются посередине при печати

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

Часть строки на одной странице, часть на другой — включите проверку Вывести/ПроверитьВывод или настройте автомасштаб

Итоги
Норма

Итоговая сумма совпадает с суммой по строкам

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

Итог расходится — проверьте, какие строки попали в цикл вывода

Программное создание таблицы значений

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

bsl
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(15, 3)));
ТЗ.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));

НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Номенклатура = ТекТовар;
НоваяСтрока.Количество = 5;
НоваяСтрока.Сумма = 1250;

ТЗ.Сортировать("Сумма Убыв");
ТЗ.Свернуть("Номенклатура", "Количество,Сумма");

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

На практике таблицу значений чаще получают не вручную, а выгрузкой запроса: ТЗ = Запрос.Выполнить().Выгрузить(). Это быстрее и надёжнее ручного заполнения. Методы Свернуть, Найти, НайтиСтроки, Итог покрывают большинство задач обработки без дополнительных циклов.

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

Сформированную таблицу часто нужно передать дальше — бухгалтеру, в другую программу, контрагенту. Табличный документ сохраняется методом Записать с указанием типа файла: MXL (родной формат), XLSX, PDF, HTML, ODS. Таблица значений напрямую в файл не пишется — её сначала выводят в табличный документ или сериализуют через ЗначениеВСтрокуВнутр для внутреннего обмена между базами.

Для обмена с Excel удобнее всего сохранять табличный документ в формате XLSX — структура ячеек и оформление сохранятся. Если нужна машиночитаемая выгрузка (например, для загрузки в другую систему), используйте CSV или XML: их формируют построчным обходом таблицы значений с записью через объект ТекстовыйДокумент или ЗаписьXML.

Типичные ошибки
01
Имена параметров в макете и в коде не совпадают — ячейки остаются пустыми без сообщения об ошибке
02
Попытка сохранить табличный документ как данные учёта — он предназначен только для показа и печати
03
Не указан тип колонки таблицы значений — сортировка чисел идёт как строки, свёртка даёт неверные итоги
04
Изменение типовой конфигурации вместо расширения — доработки теряются при обновлении
05
Вывод огромного результата запроса в табличный документ целиком — форма зависает; используйте постраничный вывод или СКД

Альтернативы: СКД, динамический список и консоль отчётов

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

Для списков на формах (журналы документов, подбор товаров) используйте динамический список — он сам выполняет запрос, поддерживает отборы и не требует кода формирования. Ручная таблица значений на форме нужна только для редактируемых данных, которых ещё нет в базе.

Сравнение подходов

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

Полный контроль над оформлением; подходит для печатных форм. Требует кода и ручной настройки макета

СКД

Гибкие отчёты с отборами и группировками без кода вывода. Сложнее добиться точного фиксированного макета

Динамический список

Списки на формах с автоматическим обновлением. Не подходит для печати и произвольного оформления

Таблица значений

Обработка данных в коде. Не отображается пользователю без дополнительного вывода

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

Можно ли создать табличную часть без конфигуратора, в режиме предприятия?

Нет. Табличная часть — это элемент структуры метаданных, она создаётся только в конфигураторе или через расширение. В режиме предприятия можно лишь заполнять уже существующие табличные части и настраивать видимость колонок на форме.

Почему в табличном документе пустые ячейки вместо данных?

Почти всегда причина в несовпадении имён: параметр в макете называется иначе, чем в коде, или у ячейки тип заполнения «Текст» вместо «Параметр». Откройте макет, проверьте свойства ячейки и сравните имя с тем, что заполняется в коде.

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

Создайте реквизит формы типа «ТаблицаЗначений», добавьте колонки, перетащите реквизит в дерево элементов формы и заполните его методом ЗначениеВРеквизитФормы. Прямое присваивание таблицы значений элементу формы не работает.

Что делать, если табличный документ с тысячами строк формируется очень долго?

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

Как сохранить сформированную таблицу в Excel?

Используйте метод табличного документа Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX). Оформление, объединённые ячейки и ширина колонок сохранятся. Формулы Excel так не передаются — выгружаются только значения.

Итог

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

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