Разработка и Конфигурация · 12 мин
Как создать свою таблицу в 1С
Разбираем способы создать таблицу в 1С: таблица значений, табличный документ, динамический список. Примеры кода, типичные ошибки и проверка результата.
В 1С слово «таблица» может означать несколько разных объектов: таблицу значений в памяти, табличный документ для вывода данных, динамический список на форме или табличную часть справочника. Прежде чем приступать к работе, важно определить, какая именно таблица нужна, потому что способы создания и инструменты у них различаются принципиально.
Чаще всего под «своей таблицей» понимают таблицу значений — универсальную структуру данных во встроенном языке 1С. Она живёт в оперативной памяти, не требует изменения конфигурации и подходит для промежуточных расчётов, обмена данными и построения отчётов.
Если задача — показать пользователю красиво оформленную таблицу с возможностью печати, используют табличный документ. А если нужно, чтобы таблица хранилась в базе постоянно, потребуется изменить конфигурацию: добавить справочник, регистр сведений или табличную часть к существующему объекту.
Какую таблицу выбрать под задачу
Выбор типа таблицы определяет весь дальнейший сценарий работы. Таблица значений существует только во время выполнения процедуры и исчезает после её завершения — она идеальна для временных вычислений, но бесполезна для хранения данных между сеансами.
Табличный документ — это визуальный объект, похожий на лист Excel: с ячейками, областями, форматированием и возможностью печати. Его заполняют программно или через макет и показывают пользователю как результат отчёта.
Динамический список отображает данные из базы в реальном времени на форме. Табличная часть объекта (справочника или документа) хранит строки в базе данных и сохраняется вместе с владельцем. Регистр сведений подходит для независимых таблиц данных с произвольной структурой измерений.
Сравнение вариантов
Временные данные в памяти, расчёты, обмен. Не сохраняется в базе, требует кода.
Вывод и печать отчётов. Не предназначен для хранения данных.
Строки документа или справочника. Хранится в базе, требует изменения конфигурации.
Независимая таблица данных в базе. Подходит для настроек, соответствий, цен.
Отображение данных базы на форме с отборами. Только просмотр и выборка.
Создание таблицы значений программно
Таблица значений создаётся конструктором Новый ТаблицаЗначений. После этого нужно описать колонки: имя, тип данных и, при необходимости, заголовок для отображения. Тип задаётся через объект «ОписаниеТипов» — это важно, потому что без типизации колонка примет любые значения, что усложнит сортировку и итоги.
Строки добавляются методом Добавить(), после чего поля заполняются по именам колонок. Таблица поддерживает сортировку, поиск, свёртку по группировочным колонкам и выгрузку в массив структур.
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150)));
Таблица.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
Таблица.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)));
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Номенклатура = "Кабель ВВГ 3х2.5";
НоваяСтрока.Количество = 10;
НоваяСтрока.Сумма = 4500;
Таблица.Сортировать("Сумма Убыв");
Проверить содержимое таблицы можно в отладчике: установите точку останова после заполнения и посмотрите значение переменной. Убедитесь, что количество строк соответствует ожиданиям, а типы колонок не привели к обрезанию данных — например, длинная строка не должна усечься по квалификатору.
- 1Объявите переменную: Таблица = Новый ТаблицаЗначений
- 2Добавьте колонки с указанием типов через ОписаниеТипов
- 3Заполните строки методом Добавить() и присвойте значения полям
- 4Проверьте результат в отладчике или выведите количество строк
- 5При необходимости отсортируйте или сверните таблицу
Заполнение таблицы из запроса
На практике таблицу значений редко заполняют вручную построчно. Стандартный приём — выполнить запрос к базе данных и выгрузить результат методом Выгрузить(). Тогда структура колонок формируется автоматически по полям запроса, а типы берутся из метаданных.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Ссылка КАК Номенклатура,
| Товары.Остаток КАК Остаток
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки КАК Товары";
Таблица = Запрос.Выполнить().Выгрузить();
Такой подход быстрее цикла обхода выборки и снижает количество ошибок в типах. Если нужна не вся таблица, а дерево с иерархией, используйте Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией) — получится дерево значений, которое удобно выводить на форму в элемент «Дерево».
Вывод таблицы пользователю через табличный документ
Таблица значений сама по себе невидима для пользователя. Чтобы показать данные, их переносят в табличный документ — объект ТабличныйДокумент. Простейший способ — построчный вывод: записать значения в ячейки через свойство Область() или метод Вывести() с областями макета.
Профессиональный подход — создать макет табличного документа в конфигураторе, разметить в нём области «Шапка», «Строка», «Подвал» с параметрами в фигурных скобках, а затем программно заполнять параметры и выводить области в цикле. Так оформление отделено от логики, и поправить внешний вид отчёта можно без изменения кода.
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетОтчета");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(ОбластьШапка);
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Для Каждого СтрокаТЗ Из Таблица Цикл
ОбластьСтрока.Параметры.Заполнить(СтрокаТЗ);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
ТабДок.Показать("Отчёт по остаткам");
Для сложных отчётов с группировками, отборами и диаграммами лучше подходит система компоновки данных (СКД): вместо ручного вывода описывается схема с набором данных и настройками, а платформа сама формирует табличный документ. Это дольше в освоении, но даёт пользователю гибкие настройки без доработки кода.
Таблица на форме обработки
Если таблицу нужно редактировать интерактивно, её размещают на форме внешней обработки или отчёта. В конфигураторе добавляется реквизит формы с типом «ТаблицаЗначений», в него добавляются колонки-реквизиты, после чего реквизит перетаскивается в дерево элементов формы — платформа создаст табличное поле автоматически.
Заполнение такой таблицы выполняется в серверной процедуре: получаете данные запросом и присваиваете их реквизиту формы. Для передачи таблицы между клиентом и сервером в управляемых формах используют методы ЗначениеВРеквизитФормы() и РеквизитФормыВЗначение(), потому что напрямую работать с объектом «ТаблицаЗначений» на клиенте нельзя.
Постоянное хранение: табличная часть или регистр сведений
Таблица значений и табличный документ не сохраняются в базе. Если данные должны переживать закрытие программы, потребуется объект конфигурации. Два основных варианта: табличная часть существующего объекта и самостоятельный регистр сведений.
Табличная часть добавляется в конфигураторе на вкладке «Данные» объекта: кнопка «Добавить табличную часть», затем в неё добавляются реквизиты-колонки с нужными типами. Строки табличной части сохраняются вместе с документом или элементом справочника и недоступны без владельца.
Регистр сведений подходит, когда таблица логически независима: например, соответствие артикулов поставщиков вашим товарам. В конфигураторе создаётся регистр, определяются измерения (ключи строки) и ресурсы (хранимые значения). Запись выполняется программно через менеджер записи или набор записей, чтение — запросом.
Как выбрать действие
Проверка результата и типичные ошибки
После создания таблицы проверьте три вещи: количество строк соответствует источнику данных, типы колонок не обрезали значения, а итоги сходятся с контрольными цифрами. Для таблицы значений из запроса удобно сравнить Таблица.Количество() с количеством записей в выборке по тому же запросу в консоли запросов.
Для табличного документа контролируйте, что все параметры макета заполнены: незаполненный параметр выведется пустым без ошибки, и пропуск легко не заметить. Полезно включить отображение сетки и проверить ширину колонок перед печатью.
Как проверить результат
Совпадает с количеством записей источника
Строк меньше — проверьте отборы запроса и соединения
Числа сортируются по убыванию корректно, итоги сходятся
Сортировка 100 идёт раньше 20 — колонка строковая
Все ячейки заполнены, шапка и подвал на месте
Пустые ячейки — параметры макета не совпадают с полями
После записи данные читаются запросом
Данные пропали — объект не записан или транзакция отменена
Для разбора структуры незнакомой таблицы значений удобно временно вывести список колонок в цикле: имя, тип и заголовок. Это быстрее, чем искать место создания таблицы по всему коду, особенно в чужих обработках.
Частые вопросы
Можно ли создать таблицу в 1С без программирования?
Да, частично. Динамический список на форме и отчёт на СКД настраиваются в конфигураторе без написания кода. Но таблица значений и программный вывод в табличный документ требуют встроенного языка — без кода их не создать.
Чем таблица значений отличается от табличного документа?
Таблица значений — структура данных в памяти для обработки и расчётов, у неё есть типизированные колонки, но нет визуального представления. Табличный документ — визуальный объект с ячейками и форматированием для показа и печати. Обычно данные готовят в таблице значений, а выводят через табличный документ.
Как сохранить таблицу значений между сеансами работы?
Напрямую — никак, объект существует только в памяти. Варианты: сериализовать через значение в строку (ЗначениеВСтрокуВнутр) и положить в хранилище значения, записать данные в регистр сведений или сохранить во внешний файл (CSV, MXL для табличного документа).
Можно ли добавить свою таблицу в типовую конфигурацию без снятия с поддержки?
Да, через механизм расширений конфигурации. В расширении можно добавлять собственные регистры сведений, справочники и другие объекты, не изменяя основную конфигурацию. Это сохраняет возможность штатного обновления.
Почему в таблице значений числа сортируются неправильно?
Чаще всего колонка создана без типа или со строковым типом, поэтому «100» оказывается раньше «20». Задайте колонке тип Число через ОписаниеТипов при добавлении — сортировка и итоги станут корректными.
Что выбрать для отчёта: ручной вывод в табличный документ или СКД?
Для простого фиксированного отчёта достаточно макета и ручного вывода — это быстрее в разработке. Если пользователям нужны отборы, группировки, варианты отчёта и периоды «на лету», выбирайте СКД: первоначальная настройка сложнее, но отчёт получится гибким без доработок кода.
Что важно запомнить
Для временных данных используйте таблицу значений с типизированными колонками, для вывода и печати — табличный документ с макетом, для постоянного хранения — табличную часть или регистр сведений. Типовую конфигурацию дорабатывайте через расширения и всегда проверяйте результат: количество строк, типы колонок и заполненность выводимых областей.