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

В 1С таблица значений (ТаблицаЗначений) — это временная структура, предназначенная для хранения табличных данных в оперативной памяти. После создания таблицы и определения колонок следующим шагом будет её заполнение. В 1С заполнение таблицы значений может происходить различными способами: вручную, в цикле, из запроса, из коллекции, из таблицы базы данных, через загрузку данных и т.д. Ниже приведены все возможные подходы, раскрытые максимально подробно.

1. Заполнение вручную

Наиболее простой и прямой способ — добавление строк вручную и установка значений в полях:

Таблица = Новая ТаблицаЗначений;
Таблица.Колонки.Добавить("Товар");
Таблица.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Товар = "Молоко";
НоваяСтрока.Количество = 10;
НоваяСтрока.Цена = 35.5;
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Товар = "Хлеб";
НоваяСтрока.Количество = 5;
НоваяСтрока.Цена = 25;

2. Заполнение в цикле (программно)

Если необходимо заполнить таблицу повторяющимися или генерируемыми данными:

Для Сч = 1 По 10 Цикл
Строка = Таблица.Добавить();
Строка.Товар = "Товар" + Строка(Сч);
Строка.Количество = СлучайноеЧисло(10) + 1;
Строка.Цена = СлучайноеЧисло(100) + 10;
КонецЦикла;

Этот способ удобен при необходимости имитации данных или генерации на лету.

3. Заполнение из запроса

Один из наиболее распространённых и надёжных способов:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
Номенклатура.Наименование КАК Товар,
Номенклатура.Артикул КАК Артикул,
Номенклатура.ЕдиницаХраненияОстатков.Наименование КАК Единица
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.ЭтоГруппа = Ложь";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Товар");
Таблица.Колонки.Добавить("Артикул");
Таблица.Колонки.Добавить("Единица");
Пока Выборка.Следующий() Цикл
Стр = Таблица.Добавить();
Стр.Товар = Выборка.Товар;
Стр.Артикул = Выборка.Артикул;
Стр.Единица = Выборка.Единица;
КонецЦикла;

4. Загрузка из коллекции объектов

Если у вас уже есть коллекция объектов, её можно загрузить в таблицу значений через ЗагрузитьКоллекцию():

СписокНоменклатуры = Справочники.Номенклатура.Выбрать();
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Ссылка");
Таблица.Колонки.Добавить("Наименование");
Пока СписокНоменклатуры.Следующий() Цикл
Стр = Таблица.Добавить();
Стр.Ссылка = СписокНоменклатуры.Ссылка;
Стр.Наименование = СписокНоменклатуры.Наименование;
КонецЦикла;

Либо сразу, если коллекция объектов соответствует структуре таблицы:

Таблица.ЗагрузитьКоллекцию(СписокНоменклатуры);

5. Загрузка из массива структур

Если вы формируете массив структур вручную или получаете его откуда-то:

Массив = Новый Массив;
Стр1 = Новый Структура;
Стр1.Вставить("Товар", "Молоко");
Стр1.Вставить("Цена", 35);
Массив.Добавить(Стр1);
Стр2 = Новый Структура;
Стр2.Вставить("Товар", "Хлеб");
Стр2.Вставить("Цена", 25);
Массив.Добавить(Стр2);
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Товар");
Таблица.Колонки.Добавить("Цена");
Таблица.ЗагрузитьКоллекцию(Массив);

6. Загрузка из XML, JSON, текста

Можно также загрузить данные из внешнего источника, если данные сериализованы:

// Для XML  через ЧтениеXML()
ТекстXML = ПолучитьТекстИзФайла("C:\\Temp\\data.xml");
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьСтроку(ТекстXML);
Таблица = ПрочитатьXML(Чтение);
// Для JSON
ТекстJSON = ПолучитьТекстИзФайла("C:\\Temp\\data.json");
Массив = ЧтениеJSON(ТекстJSON);
Таблица = Новый ТаблицаЗначений;
// затем ЗагрузитьКоллекцию(), как в примере выше

7. Копирование из другой таблицы значений

Если у вас уже есть таблица Таблица1, можно:

Таблица2 = Таблица1.Скопировать();

Или перебрать вручную с трансформацией данных:

Для Каждого Стр Из Таблица1 Цикл
НоваяСтр = Таблица2.Добавить();
НоваяСтр.Товар = Стр.Товар;
НоваяСтр.Количество = Стр.Количество \* 1.18; // с НДС, например
КонецЦикла;

8. Вывод заполненной таблицы в интерфейс

Если необходимо отобразить таблицу пользователю:

  • В форме создается реквизит формы (например, ДанныеТаблицы) типа ТаблицаЗначений.

  • В модуле формы присваиваем:

ЭлементыФормы.ТабличноеПоле.Данные = Таблица;

9. Проверка результата

Вы можете просмотреть содержимое таблицы в сообщениях:

Для Каждого Стр Из Таблица Цикл
Сообщить(Стр.Товар + ": " + Стр.Цена);
КонецЦикла;

Также полезна проверка количества строк:

Сообщить("Всего строк: " + Таблица.Количество());

Таким образом, таблица значений в 1С может быть заполнена различными способами в зависимости от источника данных: вручную, в цикле, из запроса, из коллекции, массива, структуры, XML/JSON, другой таблицы. Все эти методы позволяют гибко работать с данными в оперативной памяти, без записи в базу.