1С 8.3 Преобразование Массива В Таблицу Значений
Данные > Примеры кода 1С > 1С 8.3 Массив
Перейти в раздел примеры кода 1С 8.3:

При наличии в конфигурации БСП, можно использовать ДополнитьТаблицуИзМассива и обратный метод ТаблицаЗначенийВМассив.
Преобразование массива в ТЗ в 1С 8.3:
// Преобразует массив структур в таблицу значений
// Параметры:
// Массив - Массив структур, где каждая структура представляет строку данных
// Возвращает:
// ТаблицаЗначений - сформированная таблица, где колонки соответствуют ключам структур
&НаСервереБезКонтекста
Функция ПреобразованиеМассивВТаблицуЗначений(Массив)
// Создаем новую пустую таблицу значений
ТЗ = Новый ТаблицаЗначений;
// Обрабатываем каждую строку (структуру) в массиве
Для Каждого СтрокаМассива Из Массив Цикл
// Если таблица еще не имеет колонок (первая строка)
Если ТЗ.Колонки.Количество() = 0 Тогда
// Создаем колонки на основе ключей первой структуры
Для Каждого ЭлементМассива Из СтрокаМассива Цикл
// Добавляем колонку с именем ключа структуры
ТЗ.Колонки.Добавить(ЭлементМассива.Ключ);
КонецЦикла;
КонецЕсли;
// Добавляем новую строку в таблицу
НоваяСтрока = ТЗ.Добавить();
// Заполняем значения строки из структуры
Для Каждого ЭлементМассива Из СтрокаМассива Цикл
// Устанавливаем значение в соответствующую колонку
НоваяСтрока[ЭлементМассива.Ключ] = ЭлементМассива.Значение;
КонецЦикла;
КонецЦикла;
// Возвращаем сформированную таблицу значений
Возврат ТЗ;
КонецФункции
// Параметры:
// Массив - Массив структур, где каждая структура представляет строку данных
// Возвращает:
// ТаблицаЗначений - сформированная таблица, где колонки соответствуют ключам структур
&НаСервереБезКонтекста
Функция ПреобразованиеМассивВТаблицуЗначений(Массив)
// Создаем новую пустую таблицу значений
ТЗ = Новый ТаблицаЗначений;
// Обрабатываем каждую строку (структуру) в массиве
Для Каждого СтрокаМассива Из Массив Цикл
// Если таблица еще не имеет колонок (первая строка)
Если ТЗ.Колонки.Количество() = 0 Тогда
// Создаем колонки на основе ключей первой структуры
Для Каждого ЭлементМассива Из СтрокаМассива Цикл
// Добавляем колонку с именем ключа структуры
ТЗ.Колонки.Добавить(ЭлементМассива.Ключ);
КонецЦикла;
КонецЕсли;
// Добавляем новую строку в таблицу
НоваяСтрока = ТЗ.Добавить();
// Заполняем значения строки из структуры
Для Каждого ЭлементМассива Из СтрокаМассива Цикл
// Устанавливаем значение в соответствующую колонку
НоваяСтрока[ЭлементМассива.Ключ] = ЭлементМассива.Значение;
КонецЦикла;
КонецЦикла;
// Возвращаем сформированную таблицу значений
Возврат ТЗ;
КонецФункции
Преобразование массива в ТЗ (v.2) в 1С 8.3:
// Преобразует одномерный массив в таблицу значений с одной колонкой
// Параметры:
// Массив - Одномерный массив значений для преобразования
// НазваниеКолонки - Имя создаваемой колонки (по умолчанию "Колонка1")
// Возвращает:
// ТаблицаЗначений - таблица с одной колонкой, содержащая данные из массива
// Особенности:
// - Автоматически заменяет пробелы в названии колонки на подчеркивания
// - Поддерживает экспорт для использования в других модулях
&НаСервереБезКонтекста
Функция ПреобразованиеМассивВТаблицуЗначенийV2(Массив, Знач НазваниеКолонки="") Экспорт
// Устанавливаем название колонки по умолчанию, если не указано
Если ПустаяСтрока(НазваниеКолонки) Тогда
НазваниеКолонки = "Колонка1";
КонецЕсли;
// Заменяем пробелы в названии колонки на подчеркивания
// (для корректного использования в качестве идентификатора)
НазваниеКолонки = СтрЗаменить(НазваниеКолонки, " ", "_");
// Создаем новую таблицу значений
ТЗ = Новый ТаблицаЗначений;
// Добавляем единственную колонку с указанным именем
ТЗ.Колонки.Добавить(НазваниеКолонки);
// Если массив не пустой
Если ЗначениеЗаполнено(Массив) Тогда
// Создаем необходимое количество строк в таблице
Для Сч = 1 По Массив.Количество() Цикл
ТЗ.Добавить();
КонецЦикла;
// Быстро заполняем колонку данными из массива
ТЗ.ЗагрузитьКолонку(Массив, НазваниеКолонки);
КонецЕсли;
// Возвращаем готовую таблицу значений
Возврат ТЗ;
КонецФункции
// Параметры:
// Массив - Одномерный массив значений для преобразования
// НазваниеКолонки - Имя создаваемой колонки (по умолчанию "Колонка1")
// Возвращает:
// ТаблицаЗначений - таблица с одной колонкой, содержащая данные из массива
// Особенности:
// - Автоматически заменяет пробелы в названии колонки на подчеркивания
// - Поддерживает экспорт для использования в других модулях
&НаСервереБезКонтекста
Функция ПреобразованиеМассивВТаблицуЗначенийV2(Массив, Знач НазваниеКолонки="") Экспорт
// Устанавливаем название колонки по умолчанию, если не указано
Если ПустаяСтрока(НазваниеКолонки) Тогда
НазваниеКолонки = "Колонка1";
КонецЕсли;
// Заменяем пробелы в названии колонки на подчеркивания
// (для корректного использования в качестве идентификатора)
НазваниеКолонки = СтрЗаменить(НазваниеКолонки, " ", "_");
// Создаем новую таблицу значений
ТЗ = Новый ТаблицаЗначений;
// Добавляем единственную колонку с указанным именем
ТЗ.Колонки.Добавить(НазваниеКолонки);
// Если массив не пустой
Если ЗначениеЗаполнено(Массив) Тогда
// Создаем необходимое количество строк в таблице
Для Сч = 1 По Массив.Количество() Цикл
ТЗ.Добавить();
КонецЦикла;
// Быстро заполняем колонку данными из массива
ТЗ.ЗагрузитьКолонку(Массив, НазваниеКолонки);
КонецЕсли;
// Возвращаем готовую таблицу значений
Возврат ТЗ;
КонецФункции
Пример из типовой Управление торговлей. Модуль ОбщегоНазначенияУТ в 1С 8.3:
// Возвращает таблицу значений на основании массива структур
//
// Параметры:
// МассивСтруктур - Массив Из Структура - Массив структур, которые будут преобразованы в таблиц значений.
// Свойства структуры первого элемента массива определяют состав колонок результирующей таблицы.
//
// Возвращаемое значение:
// ТаблицаЗначений - таблица значений, созданная из массива структур.
//
Функция ПреобразоватьМассивВТаблицуЗначений(МассивСтруктур) Экспорт
Таблица = Новый ТаблицаЗначений;
// Создадим колонки по первой структуре массива
Если ТипЗнч(МассивСтруктур) = Тип("Массив")
И МассивСтруктур.Количество() <> 0 Тогда
ПерваяСтруктура = МассивСтруктур[0];
Для Каждого Свойство Из ПерваяСтруктура Цикл
Таблица.Колонки.Добавить(Свойство.Ключ, ОписаниеТиповПоТипу(ТипЗнч(Свойство.Значение)));
КонецЦикла;
Для Каждого Структура Из МассивСтруктур Цикл
НоваяСтрока = Таблица.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Структура);
КонецЦикла;
КонецЕсли;
Возврат Таблица;
КонецФункции
//
// Параметры:
// МассивСтруктур - Массив Из Структура - Массив структур, которые будут преобразованы в таблиц значений.
// Свойства структуры первого элемента массива определяют состав колонок результирующей таблицы.
//
// Возвращаемое значение:
// ТаблицаЗначений - таблица значений, созданная из массива структур.
//
Функция ПреобразоватьМассивВТаблицуЗначений(МассивСтруктур) Экспорт
Таблица = Новый ТаблицаЗначений;
// Создадим колонки по первой структуре массива
Если ТипЗнч(МассивСтруктур) = Тип("Массив")
И МассивСтруктур.Количество() <> 0 Тогда
ПерваяСтруктура = МассивСтруктур[0];
Для Каждого Свойство Из ПерваяСтруктура Цикл
Таблица.Колонки.Добавить(Свойство.Ключ, ОписаниеТиповПоТипу(ТипЗнч(Свойство.Значение)));
КонецЦикла;
Для Каждого Структура Из МассивСтруктур Цикл
НоваяСтрока = Таблица.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Структура);
КонецЦикла;
КонецЕсли;
Возврат Таблица;
КонецФункции
// Возвращает описание типов по переданному типу
//
// Параметры:
// Тип - Тип - Тип значения
//
// Возвращаемое значение:
// ОписаниеТипов - созданное на основании переданного типа описание типов.
//
Функция ОписаниеТиповПоТипу(Тип) Экспорт
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип);
ОписаниеТипов = Новый ОписаниеТипов(МассивТипов);
Возврат ОписаниеТипов;
КонецФункции
//
// Параметры:
// Тип - Тип - Тип значения
//
// Возвращаемое значение:
// ОписаниеТипов - созданное на основании переданного типа описание типов.
//
Функция ОписаниеТиповПоТипу(Тип) Экспорт
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип);
ОписаниеТипов = Новый ОписаниеТипов(МассивТипов);
Возврат ОписаниеТипов;
КонецФункции
2
комментарии
Сергей Палыч
18 дек 2023
@Igor Misen, значит вы передали не массив
Igor Misen
11 дек 2023
Ошибка в этой строке:
Для Каждого ЭлементМассива Из СтрокаМассива Цикл
Итератор для значения не определен
{ВнешняяОбработка.МассовоеСозданиеРасходныхНакладныхИСчетовНаОплатуИзОстатков2.Форма.Форма.Форма(258)}: Для Каждого ЭлементМассива Из СтрокаМассива Цикл
Для Каждого ЭлементМассива Из СтрокаМассива Цикл
Итератор для значения не определен
{ВнешняяОбработка.МассовоеСозданиеРасходныхНакладныхИСчетовНаОплатуИзОстатков2.Форма.Форма.Форма(258)}: Для Каждого ЭлементМассива Из СтрокаМассива Цикл
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник