К статье
Практический материал

Разработка и Конфигурация · 8 мин

1С 8: как заполнить таблицу — полное руководство

Как заполнить таблицу в 1С 8: табличные части документов, таблицы значений в коде, заполнение по кнопке, из запроса и внешних источников.

Работа с таблицами — одна из базовых задач в 1С 8: табличные части документов и справочников, таблицы значений в обработках, динамические списки. Способ заполнения зависит от того, какой именно объект вы заполняете: интерактивно через интерфейс, программно через встроенный язык или загрузкой из внешнего файла.

Эта статья охватывает основные сценарии: ручное заполнение табличной части документа, программное добавление строк в табличную часть и в таблицу значений, заполнение по кнопке «Заполнить», загрузку данных из запроса и файла. Примеры кода приведены для управляемых форм, но принципы одинаковы для платформы 8.2 и 8.3.

Какие таблицы бывают в 1С 8

Прежде чем заполнять, важно понять, с каким объектом вы работаете, потому что методы различаются. Основные виды таблиц в платформе:

  • Табличная часть — составная часть документа, справочника или обработки (например, «Товары» в реализации). Хранится в базе вместе с объектом.
  • Таблица значений — временный объект в памяти, создаётся программно, не сохраняется в базе сама по себе.
  • Динамический список — таблица на форме, связанная с запросом к данным; напрямую не редактируется.
  • Дерево значений — иерархический аналог таблицы значений.

Далее рассмотрим заполнение каждого из рабочих типов.

Ручное заполнение табличной части документа

Самый простой сценарий — интерактивный. Откройте документ, перейдите на вкладку с табличной частью и используйте один из способов:

  • Кнопка «Добавить» (или клавиша Insert) — добавляет пустую строку, реквизиты заполняются вручную.
  • Кнопка «Подобрать» — открывает форму подбора номенклатуры с возможностью выбора нескольких позиций и указания количества.
  • Кнопка «Заполнить» — заполняет таблицу автоматически по данным системы (остаткам, заказу, основанию).
  • Ввод документа «на основании» — табличная часть заполняется из документа-основания.
Порядок ручного заполнения
  1. 1
    Откройте документ и перейдите на вкладку с табличной частью
  2. 2
    Нажмите «Добавить» или «Подобрать» и укажите позиции
  3. 3
    Проверьте количество, цены и счета учёта в строках
  4. 4
    Запишите документ и проверьте итоговые суммы

Если кнопки «Заполнить» нет — это ограничение конкретной конфигурации, а не ошибка. В типовых решениях состав кнопок зависит от вида документа и настроек функциональности.

Программное заполнение табличной части

В модуле объекта или обработки табличная часть заполняется методом Добавить() у коллекции строк. Типовой шаблон:

Для Каждого СтрокаДанных Из ДанныеДляЗаполнения Цикл

НоваяСтрока = Объект.Товары.Добавить();

НоваяСтрока.Номенклатура = СтрокаДанных.Номенклатура;

НоваяСтрока.Количество = СтрокаДанных.Количество;

НоваяСтрока.Цена = СтрокаДанных.Цена;

КонецЦикла;

Перед заполнением часто требуется очистить таблицу, чтобы не задублировать строки: Объект.Товары.Очистить();. Делайте это осознанно — очистка удаляет уже введённые пользователем данные.

Если заполнение вызывается с формы, помните про контекст: на клиенте доступны данные формы, на сервере — запросы к базе. Тяжёлые операции (обход больших выборок) выполняйте в серверной процедуре с директивой &НаСервере.

Создание и заполнение таблицы значений

Таблица значений создаётся в памяти и используется для промежуточных расчётов, передачи данных между процедурами, вывода на форму обработки.

ТЗ = Новый ТаблицаЗначений;

ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));

ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));

СтрокаТЗ = ТЗ.Добавить();

СтрокаТЗ.Номенклатура = НайденнаяСсылка;

СтрокаТЗ.Количество = 10;

Когда данные уже есть в базе, быстрее заполнить таблицу выгрузкой результата запроса:

Запрос = Новый Запрос("ВЫБРАТЬ Номенклатура, Количество ИЗ ...");

ТЗ = Запрос.Выполнить().Выгрузить();

Заполнение таблицы по кнопке «Заполнить»

В собственных разработках кнопка «Заполнить» обычно вызывает команду формы, которая на сервере собирает данные и заполняет табличную часть. Типовая структура обработчика:

&НаКлиенте

Процедура ЗаполнитьТовары(Команда)

Если Объект.Товары.Количество() > 0 Тогда

ПоказатьВопрос(Новый ОписаниеОповещения("ЗаполнитьТоварыЗавершение", ЭтотОбъект),

"Табличная часть будет очищена. Продолжить?", РежимДиалогаВопрос.ДаНет);

Иначе

ЗаполнитьТоварыНаСервере();

КонецЕсли;

КонецПроцедуры

На сервере процедура очищает табличную часть, выполняет запрос к остаткам или другому источнику и добавляет строки. Такой шаблон защищает пользователя от случайной потери введённых данных.

Загрузка таблицы из внешних данных

Когда данные приходят из Excel, CSV или другой системы, есть несколько подходов:

Сравнение вариантов загрузки

Копирование из Excel через буфер обмена

Подходит для разового ввода небольшого числа строк; требует совпадения порядка колонок

Типовая обработка загрузки данных

Есть во многих конфигурациях; сопоставление колонок настраивается пользователем, но структура файла ограничена

Собственная обработка с чтением файла

Максимальная гибкость и контроль; требует разработки и тестирования на копии базы

При любой загрузке из файла ищите номенклатуру и контрагентов по устойчивому ключу — коду, артикулу или ИНН, а не по наименованию: наименования часто отличаются пробелами и регистром, что создаёт дубли.

Типичные ошибки
01
Поиск элемента по наименованию — приводит к дублям справочника и неправильным строкам
02
Забытая очистка табличной части — строки задваиваются при повторном заполнении
03
Заполнение на клиенте с обращением к запросам — ошибка вызова серверных методов
04
Отсутствие типизации колонок таблицы значений — сбои сортировки и итогов
05
Заполнение без проверки результата — пустые ссылки и нулевые количества уходят в проведение

Проверка результата заполнения

После любого способа заполнения убедитесь, что данные корректны, до записи и проведения документа:

Контрольные точки

Как проверить результат

Количество строк
Норма

Совпадает с количеством в источнике данных

Тревожный признак

Строк больше (дубли) или меньше (потери при загрузке)

Ссылочные поля
Норма

Все поля заполнены, нет пустых ссылок

Тревожный признак

Пустая номенклатура или контрагент в строках

Суммы и количества
Норма

Итог документа сходится с исходными данными

Тревожный признак

Расхождение итогов, нулевые цены

Проведение
Норма

Документ проводится без ошибок

Тревожный признак

Сообщения о незаполненных реквизитах или нехватке остатков

Для программной проверки удобно пройти по строкам циклом и вывести номера проблемных строк пользователю — это быстрее, чем разбирать ошибки проведения по одной.

Часто задаваемые вопросы

Как добавить строку в табличную часть программно?

Вызовите метод Добавить() у коллекции табличной части: НоваяСтрока = Объект.Товары.Добавить(). Затем присвойте значения реквизитам строки. Если работаете на форме с данными объекта, обращайтесь через Объект.ИмяТабличнойЧасти.

Как очистить таблицу перед заполнением?

Используйте метод Очистить(): Объект.Товары.Очистить() для табличной части или ТЗ.Очистить() для таблицы значений. Учтите, что действие необратимо — при наличии введённых вручную строк запросите подтверждение у пользователя.

Чем таблица значений отличается от табличной части?

Табличная часть хранится в базе как составная часть объекта и сохраняется при записи. Таблица значений существует только в памяти во время выполнения кода и исчезает после завершения — её данные нужно явно переносить в объекты базы.

Почему кнопка «Заполнить» не заполняет таблицу?

Частые причины: не заполнены ключевые реквизиты шапки (организация, склад, договор), по которым строится отбор; нет данных-источников (остатков, заказов); недостаточно прав. Проверьте шапку документа и наличие исходных данных в отчётах.

Как заполнить таблицу значений из запроса?

Выполните запрос и вызовите метод Выгрузить() у результата: ТЗ = Запрос.Выполнить().Выгрузить(). Колонки и их типы создадутся автоматически по полям выборки — вручную описывать структуру не нужно.

Можно ли загрузить таблицу из Excel без программирования?

Для небольшого объёма — скопируйте строки в буфер обмена и вставьте в табличную часть, если конфигурация это поддерживает. Для регулярных загрузок используйте типовую обработку загрузки данных из табличного документа, если она есть в вашей конфигурации.

Итог

Что важно запомнить

Способ заполнения зависит от типа таблицы: табличные части — методом Добавить() или кнопками формы, таблицы значений — конструктором с типизированными колонками или выгрузкой из запроса. Перед перезаполнением очищайте таблицу осознанно, а результат всегда проверяйте до проведения документа.