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