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