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

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

Таблица в 1С: как создать и работать с ней

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

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

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

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

Что именно вы хотите создать: выбираем тип таблицы

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

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

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

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

Как выбрать действие

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

Как создать таблицу значений программно

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

Типичный код создания и заполнения выглядит так:

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

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

ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));

ТЗ.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));

НоваяСтрока = ТЗ.Добавить();

НоваяСтрока.Номенклатура = СсылкаНаТовар;

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

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

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

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

bsl
Запрос = Новый Запрос("ВЫБРАТЬ Номенклатура, Количество ИЗ Документ.Реализация.Товары");
ТЗ = Запрос.Выполнить().Выгрузить();
ТЗ.Свернуть("Номенклатура", "Количество");

Основные операции с таблицей значений

После заполнения таблица значений поддерживает типовые операции обработки. Метод Свернуть("Номенклатура", "Количество") группирует строки по указанным колонкам и суммирует числовые поля — аналог группировки в запросе. Метод Сортировать("Цена Убыв") упорядочивает строки, а Найти(Значение, "Колонка") возвращает первую подходящую строку.

Для множественного поиска используется НайтиСтроки(СтруктураОтбора), который возвращает массив строк. Удалить строки можно методом Удалить(Строка), очистить всю таблицу — Очистить(). Итог по числовой колонке считается методом Итог("Количество").

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

Как создать табличный документ для вывода данных

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

Для работы с макетом в конфигураторе добавьте макет типа «Табличный документ», нарисуйте в нём области: шапку, строку данных, подвал. В ячейках, куда нужно подставлять значения, установите свойство «Заполнение» — «Параметр» и укажите имя параметра, например НаименованиеТовара.

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

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

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

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

Для Каждого СтрокаТЗ Из ТЗ Цикл

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

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

ОбластьСтрока.Параметры.Количество = СтрокаТЗ.Количество;

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

КонецЦикла;

ТабДок.Показать("Реестр");

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

Порядок создания табличного документа
  1. 1
    Создайте макет типа Табличный документ в конфигураторе
  2. 2
    Нарисуйте области: шапка, строка данных, подвал
  3. 3
    Задайте параметры в ячейках, куда подставляются данные
  4. 4
    В коде создайте объект Новый ТабличныйДокумент
  5. 5
    Получайте области макета, заполняйте параметры и выводите в документ
  6. 6
    Покажите результат методом Показать или сохраните в файл

Как добавить таблицу на форму обработки

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

Затем перетащите реквизит в дерево элементов формы — платформа автоматически создаст элемент «Таблица» с колонками. После этого работа в коде идёт с реквизитом формы как с обычной таблицей значений: Объект.Товары.Добавить() или, для реквизита формы, через методы коллекции данных формы.

Обратите внимание на нюанс управляемых форм: на клиенте таблица значений недоступна, работа идёт через объект «ДанныеФормыТаблица». Для массовой загрузки данных используйте серверные процедуры и передавайте готовую таблицу через ЗначениеВДанныеФормы.

Если таблица на форме заполняется в цикле из тысяч строк, делайте это в серверной процедуре целиком, а не по одной строке с клиента — каждый клиент-серверный вызов добавляет заметную задержку, и форма будет «подвисать».
ПЗ
Практическое замечание

Типичные ошибки при создании таблиц в 1С

Самая частая ошибка — добавление колонок без указания типа. Такая колонка принимает значения любого типа, из-за чего сортировка чисел может идти как сортировка строк («10» раньше «2»), а метод Свернуть не суммирует значения. Всегда задавайте ОписаниеТипов явно.

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

Третья типичная проблема — попытка использовать таблицу значений на клиенте в управляемой форме. Код Новый ТаблицаЗначений в клиентской процедуре завершится ошибкой: переносите создание и заполнение таблицы в серверную процедуру.

Типичные ошибки
01
Колонки без типа — ломается сортировка, свёртка и итоги
02
Опечатка в имени параметра макета — ошибка при выводе области
03
Создание ТаблицаЗначений в клиентской процедуре управляемой формы — недопустимый вызов
04
Обращение к колонке по имени с пробелом — идентификатор недопустим
05
Ожидание, что таблица значений сохранится после закрытия — данные теряются

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

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

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

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

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

Количество строк в таблице значений
Норма

Совпадает с числом обработанных записей

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

Ноль строк или меньше ожидаемого — проверьте условия заполнения

Типы колонок в отладчике
Норма

Числовые поля имеют тип Число

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

Смешанные типы — добавьте ОписаниеТипов

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

Все области выведены, параметры заполнены

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

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

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

Можно ли создать таблицу значений без программирования?

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

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

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

Чем таблица значений отличается от дерева значений?

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

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

Передайте таблицу значений как внешний источник данных в схему компоновки данных через КомпоновщикМакета и объект ВнешниеНаборыДанных. Для простого случая достаточно программно заполнить табличный документ в цикле.

Есть ли ограничение на размер таблицы значений?

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

Как сохранить табличный документ в Excel?

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

Итог

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

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