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