Разработка и Конфигурация · 11 мин
Как сформировать таблицу в 1С: пошаговое руководство
Практическое руководство: как создать таблицу в 1С — табличную часть документа, табличный документ для печати и таблицу значений в коде. Примеры и ошибки.
В 1С слово «таблица» означает три разных объекта: табличную часть документа или справочника, табличный документ для печати и отчётов, а также таблицу значений — программную структуру данных в памяти. Путаница между ними — главная причина ошибок у начинающих разработчиков и пользователей, которые пытаются «сформировать таблицу» и получают не то, что ожидали.
Каждый из трёх типов таблиц создаётся своим способом: табличная часть настраивается в конфигураторе, табличный документ формируется через макет и код, таблица значений — только программно. Все три подхода описаны ниже с конкретными действиями, примерами кода и проверками результата.
Материал ориентирован на платформу 1С:Предприятие 8.3 — актуальную линейку, на которой работают типовые конфигурации «Бухгалтерия», «Управление торговлей», «Зарплата и управление персоналом» и другие. Синтаксис примеров одинаково работает в тонком и толстом клиенте.
Какие бывают таблицы в 1С и как выбрать нужный тип
Прежде чем что-то создавать, ответьте на вопрос: где таблица должна храниться и как использоваться. От этого зависит весь дальнейший путь. Табличная часть хранит данные в базе вместе с документом — например, список товаров в накладной. Табличный документ — это результат для показа пользователю или печати, он не хранится в базе сам по себе. Таблица значений — временная структура в оперативной памяти для промежуточных расчётов, сортировок и обхода данных.
Как выбрать тип таблицы
Частая ошибка — пытаться сохранить табличный документ «как данные». Табличный документ сохраняется только как файл (MXL, Excel, PDF), но не как структура базы. Если данные нужны для дальнейшего учёта, они должны лежать в табличной части или регистре, а табличный документ — лишь их визуальное представление.
Создание табличной части документа в конфигураторе
Табличная часть — это вложенная таблица объекта: строки товаров в реализации, сотрудники в приказе, этапы в договоре. Создаётся она только в конфигураторе, и для этого нужны права на изменение конфигурации. В типовых конфигурациях, находящихся на поддержке, доработку выполняйте через расширение, чтобы не потерять обновления.
- 1Откройте конфигуратор и найдите нужный документ в дереве конфигурации
- 2Правой кнопкой — Добавить — Табличная часть, задайте имя, например «Товары»
- 3Добавьте реквизиты табличной части: Номенклатура, Количество, Цена, Сумма
- 4Откройте форму документа и перетащите табличную часть из дерева реквизитов на форму
- 5Обновите конфигурацию базы данных (F7) и проверьте документ в режиме предприятия
После добавления реквизитов продумайте автоматические расчёты. Классический сценарий — пересчёт суммы при изменении количества или цены. Он делается в модуле формы в обработчиках событий ПриИзменении полей «Количество» и «Цена»: сумма строки вычисляется как произведение, а затем пересчитывается итог документа. Без этих обработчиков пользователю придётся считать вручную, что неизбежно приведёт к ошибкам.
Проверьте результат: откройте документ в режиме 1С:Предприятие, добавьте строку, заполните количество и цену. Сумма должна посчитаться автоматически, документ — записаться без ошибок. Если табличная часть не видна на форме, почти всегда причина в том, что элемент формы не привязан к данным или скрыт настройками видимости.
Формирование табличного документа для печати и отчётов
Табличный документ — основной инструмент печатных форм в 1С. Логика такая: в конфигураторе создаётся макет с именованными областями (шапка, строка, подвал), а код последовательно выводит эти области в итоговый документ, подставляя параметры. Результат пользователь видит на экране и может распечатать или сохранить в файл.
Макет создаётся в конфигураторе: у объекта или в разделе «Общие макеты» добавьте макет типа «Табличный документ». Выделите ячейки шапки, задайте имя области через свойства (например, «Шапка»), в ячейках, куда подставляются данные, укажите тип заполнения «Параметр» и имя параметра. Аналогично создайте области «Строка» и «Подвал».
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетНакладной");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = НомерДок;
ТабДок.Вывести(ОбластьШапка);
Для Каждого СтрокаТовара Из Товары Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Заполнить(СтрокаТовара);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьПодвал.Параметры.ИтогоСумма = Товары.Итог("Сумма");
ТабДок.Вывести(ОбластьПодвал);Метод Вывести добавляет область ниже предыдущей, а Присоединить — справа от текущей, что удобно для горизонтальных отчётов. Параметры заполняются либо по одному (Область.Параметры.НомерДокумента = ...), либо массово через Параметры.Заполнить(), если имена параметров совпадают с именами полей источника.
Как проверить табличный документ
Все параметры заполнены, нет пустых ячеек там, где должны быть значения
Пустые ячейки или текст имени параметра — параметр не заполнен или имя не совпадает
Строки не разрезаются посередине при печати
Часть строки на одной странице, часть на другой — включите проверку Вывести/ПроверитьВывод или настройте автомасштаб
Итоговая сумма совпадает с суммой по строкам
Итог расходится — проверьте, какие строки попали в цикл вывода
Программное создание таблицы значений
Таблица значений — универсальная структура для обработки данных в коде: выгрузка результатов запросов, свёртка, сортировка, поиск дублей. Создаётся конструктором Новый ТаблицаЗначений, после чего в неё добавляются колонки с указанием типа.
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(15, 3)));
ТЗ.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Номенклатура = ТекТовар;
НоваяСтрока.Количество = 5;
НоваяСтрока.Сумма = 1250;
ТЗ.Сортировать("Сумма Убыв");
ТЗ.Свернуть("Номенклатура", "Количество,Сумма");Указывать тип колонки не обязательно, но крайне желательно: без типа сортировка и свёртка могут работать неожиданно, а смешение чисел и строк в одной колонке приведёт к ошибкам сравнения. Для ссылочных типов указывайте конкретный тип ссылки — это ускоряет работу и упрощает отладку.
На практике таблицу значений чаще получают не вручную, а выгрузкой запроса: ТЗ = Запрос.Выполнить().Выгрузить(). Это быстрее и надёжнее ручного заполнения. Методы Свернуть, Найти, НайтиСтроки, Итог покрывают большинство задач обработки без дополнительных циклов.
Выгрузка таблицы в файл и обмен данными
Сформированную таблицу часто нужно передать дальше — бухгалтеру, в другую программу, контрагенту. Табличный документ сохраняется методом Записать с указанием типа файла: MXL (родной формат), XLSX, PDF, HTML, ODS. Таблица значений напрямую в файл не пишется — её сначала выводят в табличный документ или сериализуют через ЗначениеВСтрокуВнутр для внутреннего обмена между базами.
Для обмена с Excel удобнее всего сохранять табличный документ в формате XLSX — структура ячеек и оформление сохранятся. Если нужна машиночитаемая выгрузка (например, для загрузки в другую систему), используйте CSV или XML: их формируют построчным обходом таблицы значений с записью через объект ТекстовыйДокумент или ЗаписьXML.
Альтернативы: СКД, динамический список и консоль отчётов
Не каждую таблицу нужно формировать вручную. Если задача — показать пользователю данные из базы с группировками и отборами, система компоновки данных (СКД) сделает это декларативно: вы описываете запрос и настройки, а платформа сама строит результат. Ручной вывод в табличный документ оправдан для строгих печатных форм, где важен каждый миллиметр макета.
Для списков на формах (журналы документов, подбор товаров) используйте динамический список — он сам выполняет запрос, поддерживает отборы и не требует кода формирования. Ручная таблица значений на форме нужна только для редактируемых данных, которых ещё нет в базе.
Сравнение подходов
Полный контроль над оформлением; подходит для печатных форм. Требует кода и ручной настройки макета
Гибкие отчёты с отборами и группировками без кода вывода. Сложнее добиться точного фиксированного макета
Списки на формах с автоматическим обновлением. Не подходит для печати и произвольного оформления
Обработка данных в коде. Не отображается пользователю без дополнительного вывода
Частые вопросы
Можно ли создать табличную часть без конфигуратора, в режиме предприятия?
Нет. Табличная часть — это элемент структуры метаданных, она создаётся только в конфигураторе или через расширение. В режиме предприятия можно лишь заполнять уже существующие табличные части и настраивать видимость колонок на форме.
Почему в табличном документе пустые ячейки вместо данных?
Почти всегда причина в несовпадении имён: параметр в макете называется иначе, чем в коде, или у ячейки тип заполнения «Текст» вместо «Параметр». Откройте макет, проверьте свойства ячейки и сравните имя с тем, что заполняется в коде.
Как вывести таблицу значений на форму для редактирования?
Создайте реквизит формы типа «ТаблицаЗначений», добавьте колонки, перетащите реквизит в дерево элементов формы и заполните его методом ЗначениеВРеквизитФормы. Прямое присваивание таблицы значений элементу формы не работает.
Что делать, если табличный документ с тысячами строк формируется очень долго?
Основная причина медленного вывода — обращение к базе внутри цикла. Получите все данные одним запросом до цикла, а в цикле только заполняйте параметры. Если строк десятки тысяч, перейдите на СКД или выгрузку в файл вместо интерактивного табличного документа.
Как сохранить сформированную таблицу в Excel?
Используйте метод табличного документа Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX). Оформление, объединённые ячейки и ширина колонок сохранятся. Формулы Excel так не передаются — выгружаются только значения.
Что важно запомнить
Сначала определите тип таблицы: табличная часть хранит данные в базе, табличный документ показывает и печатает, таблица значений обрабатывает данные в коде. Печатные формы стройте через макет с областями, типовую конфигурацию меняйте только через расширение, а перед доработками делайте резервную копию базы.