1С 8.3 Преобразование Массива В Таблицу Значений
Данные > Примеры кода 1С > 1С 8.3 Массив
Перейти в раздел примеры кода 1С 8.3:
При наличии в конфигурации БСП, можно использовать ДополнитьТаблицуИзМассива и обратный метод ТаблицаЗначенийВМассив.
Преобразование массива в ТЗ в 1С 8.3:
&НаСервереБезКонтекста
Функция ПреобразованиеМассивВТаблицуЗначений(Массив)
ТЗ = Новый ТаблицаЗначений;
Для Каждого СтрокаМассива Из Массив Цикл
Если ТЗ.Колонки.Количество() = 0 Тогда
Для Каждого ЭлементМассива Из СтрокаМассива Цикл
ТЗ.Колонки.Добавить(ЭлементМассива.Ключ);
КонецЦикла;
КонецЕсли;
НоваяСтрока = ТЗ.Добавить();
Для Каждого ЭлементМассива Из СтрокаМассива Цикл
НоваяСтрока[ЭлементМассива.Ключ] = ЭлементМассива.Значение;
КонецЦикла;
Функция ПреобразованиеМассивВТаблицуЗначений(Массив)
ТЗ = Новый ТаблицаЗначений;
Для Каждого СтрокаМассива Из Массив Цикл
Если ТЗ.Колонки.Количество() = 0 Тогда
Для Каждого ЭлементМассива Из СтрокаМассива Цикл
ТЗ.Колонки.Добавить(ЭлементМассива.Ключ);
КонецЦикла;
КонецЕсли;
НоваяСтрока = ТЗ.Добавить();
Для Каждого ЭлементМассива Из СтрокаМассива Цикл
НоваяСтрока[ЭлементМассива.Ключ] = ЭлементМассива.Значение;
КонецЦикла;
КонецЦикла;
Возврат ТЗ;
КонецФункции
Преобразование массива в ТЗ (v.2) в 1С 8.3:
&НаСервереБезКонтекста
Функция ПреобразованиеМассивВТаблицуЗначенийV2(Массив, Знач НазваниеКолонки="") Экспорт
Если ПустаяСтрока(НазваниеКолонки) Тогда
НазваниеКолонки = "Колонка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)}: Для Каждого ЭлементМассива Из СтрокаМассива Цикл
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник