Как заполнить таблицу значений данными?
В 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, другой таблицы. Все эти методы позволяют гибко работать с данными в оперативной памяти, без записи в базу.