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