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

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

Как создать свою таблицу в 1С

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

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

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

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

Какую таблицу выбрать под задачу

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

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

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

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

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

Временные данные в памяти, расчёты, обмен. Не сохраняется в базе, требует кода.

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

Вывод и печать отчётов. Не предназначен для хранения данных.

Табличная часть объекта

Строки документа или справочника. Хранится в базе, требует изменения конфигурации.

Регистр сведений

Независимая таблица данных в базе. Подходит для настроек, соответствий, цен.

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

Отображение данных базы на форме с отборами. Только просмотр и выборка.

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

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

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

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

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

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

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

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

НоваяСтрока.Номенклатура = "Кабель ВВГ 3х2.5";

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

НоваяСтрока.Сумма = 4500;

Таблица.Сортировать("Сумма Убыв");

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

Порядок создания таблицы значений
  1. 1
    Объявите переменную: Таблица = Новый ТаблицаЗначений
  2. 2
    Добавьте колонки с указанием типов через ОписаниеТипов
  3. 3
    Заполните строки методом Добавить() и присвойте значения полям
  4. 4
    Проверьте результат в отладчике или выведите количество строк
  5. 5
    При необходимости отсортируйте или сверните таблицу

Заполнение таблицы из запроса

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

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

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

"ВЫБРАТЬ

| Товары.Ссылка КАК Номенклатура,

| Товары.Остаток КАК Остаток

|ИЗ

| РегистрНакопления.ОстаткиТоваров.Остатки КАК Товары";

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

Такой подход быстрее цикла обхода выборки и снижает количество ошибок в типах. Если нужна не вся таблица, а дерево с иерархией, используйте Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией) — получится дерево значений, которое удобно выводить на форму в элемент «Дерево».

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

Таблица значений сама по себе невидима для пользователя. Чтобы показать данные, их переносят в табличный документ — объект ТабличныйДокумент. Простейший способ — построчный вывод: записать значения в ячейки через свойство Область() или метод Вывести() с областями макета.

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

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

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

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

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

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

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

ОбластьСтрока.Параметры.Заполнить(СтрокаТЗ);

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

КонецЦикла;

ТабДок.Показать("Отчёт по остаткам");

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

Таблица на форме обработки

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

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

Постоянное хранение: табличная часть или регистр сведений

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

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

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

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

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

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

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

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

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

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

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

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

Совпадает с количеством записей источника

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

Строк меньше — проверьте отборы запроса и соединения

Типы колонок
Норма

Числа сортируются по убыванию корректно, итоги сходятся

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

Сортировка 100 идёт раньше 20 — колонка строковая

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

Все ячейки заполнены, шапка и подвал на месте

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

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

Сохранение в базе
Норма

После записи данные читаются запросом

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

Данные пропали — объект не записан или транзакция отменена

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

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

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

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

Чем таблица значений отличается от табличного документа?

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

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

Напрямую — никак, объект существует только в памяти. Варианты: сериализовать через значение в строку (ЗначениеВСтрокуВнутр) и положить в хранилище значения, записать данные в регистр сведений или сохранить во внешний файл (CSV, MXL для табличного документа).

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

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

Почему в таблице значений числа сортируются неправильно?

Чаще всего колонка создана без типа или со строковым типом, поэтому «100» оказывается раньше «20». Задайте колонке тип Число через ОписаниеТипов при добавлении — сортировка и итоги станут корректными.

Что выбрать для отчёта: ручной вывод в табличный документ или СКД?

Для простого фиксированного отчёта достаточно макета и ручного вывода — это быстрее в разработке. Если пользователям нужны отборы, группировки, варианты отчёта и периоды «на лету», выбирайте СКД: первоначальная настройка сложнее, но отчёт получится гибким без доработок кода.

Итог

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

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