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

- Пример 1 – точный контроль типов (особенно для ссылок).
- Пример 2 – проще и быстрее, но без детализации типов ссылочных объектов.
Пример №1 преобразование Структуры в ТЗ 1С 8.3:
// Функция преобразует структуру в таблицу значений с одной строкой данных
//
// Параметры:
// Знач Структра - Структура - Входная структура, которую нужно преобразовать
//
// Возвращаемое значение:
// ТаблицаЗначений - Таблица с одной строкой, где колонки соответствуют ключам структуры,
// а значения - значениям структуры. Для ссылочных типов создаются
// соответствующие типы колонок.
//
// Особенности:
// - Для ссылочных типов (справочники, документы, перечисления) автоматически определяются
// типы колонок как ссылочные
// - Поддерживаются все базовые типы данных 1С
// - Функция экспортная и может быть использована из других модулей
//
Функция СтруктураВТаблицуЗначений1(Знач Структра) Экспорт
// Создаем новую таблицу значений
ТЗ = Новый ТаблицаЗначений;
// Добавляем одну строку в таблицу (будем ее заполнять)
НовСтр = ТЗ.Добавить();
// Создаем описание типов для всех ссылочных типов (справочники, документы, перечисления)
// Это нужно для последующей проверки типа значений структуры
ОписаниеТиповСсылок = Новый ОписаниеТипов(
Новый ОписаниеТипов(
Справочники.ТипВсеСсылки(),
Документы.ТипВсеСсылки().Типы(),
Перечисления.ТипВсеСсылки().Типы()));
// Перебираем все элементы структуры (ключ-значение)
Для Каждого ТекСтрока Из Структра Цикл
// Добавляем колонку в таблицу значений:
// - имя колонки = ключ структуры
// - тип колонки определяем в зависимости от типа значения:
// если это ссылочный тип - создаем описание типа как ссылка, иначе - как базовый тип
ТЗ.Колонки.Добавить(
ТекСтрока.Ключ,
?(ОписаниеТиповСсылок.СодержитТип(ТипЗнч(ТекСтрока.Значение)),
Новый ОписаниеТипов(СтрЗаменить(ТекСтрока.Значение.Метаданные().ПолноеИмя(), ".", "Ссылка.")),
Новый ОписаниеТипов(Строка(ТипЗнч(ТекСтрока.Значение))));
// Записываем значение из структуры в соответствующую колонку таблицы
НовСтр[ТекСтрока.Ключ] = ТекСтрока.Значение;
КонецЦикла;
// Возвращаем заполненную таблицу значений
Возврат ТЗ;
КонецФункции
//
// Параметры:
// Знач Структра - Структура - Входная структура, которую нужно преобразовать
//
// Возвращаемое значение:
// ТаблицаЗначений - Таблица с одной строкой, где колонки соответствуют ключам структуры,
// а значения - значениям структуры. Для ссылочных типов создаются
// соответствующие типы колонок.
//
// Особенности:
// - Для ссылочных типов (справочники, документы, перечисления) автоматически определяются
// типы колонок как ссылочные
// - Поддерживаются все базовые типы данных 1С
// - Функция экспортная и может быть использована из других модулей
//
Функция СтруктураВТаблицуЗначений1(Знач Структра) Экспорт
// Создаем новую таблицу значений
ТЗ = Новый ТаблицаЗначений;
// Добавляем одну строку в таблицу (будем ее заполнять)
НовСтр = ТЗ.Добавить();
// Создаем описание типов для всех ссылочных типов (справочники, документы, перечисления)
// Это нужно для последующей проверки типа значений структуры
ОписаниеТиповСсылок = Новый ОписаниеТипов(
Новый ОписаниеТипов(
Справочники.ТипВсеСсылки(),
Документы.ТипВсеСсылки().Типы(),
Перечисления.ТипВсеСсылки().Типы()));
// Перебираем все элементы структуры (ключ-значение)
Для Каждого ТекСтрока Из Структра Цикл
// Добавляем колонку в таблицу значений:
// - имя колонки = ключ структуры
// - тип колонки определяем в зависимости от типа значения:
// если это ссылочный тип - создаем описание типа как ссылка, иначе - как базовый тип
ТЗ.Колонки.Добавить(
ТекСтрока.Ключ,
?(ОписаниеТиповСсылок.СодержитТип(ТипЗнч(ТекСтрока.Значение)),
Новый ОписаниеТипов(СтрЗаменить(ТекСтрока.Значение.Метаданные().ПолноеИмя(), ".", "Ссылка.")),
Новый ОписаниеТипов(Строка(ТипЗнч(ТекСтрока.Значение))));
// Записываем значение из структуры в соответствующую колонку таблицы
НовСтр[ТекСтрока.Ключ] = ТекСтрока.Значение;
КонецЦикла;
// Возвращаем заполненную таблицу значений
Возврат ТЗ;
КонецФункции
Пример №2 преобразование Структуры в ТЗ 1С 8.3:
// Функция преобразует структуру в таблицу значений с одной строкой данных
// Альтернативная версия с упрощенным определением типов колонок
//
// Параметры:
// Знач Структра - Структура - Входная структура, которую нужно преобразовать
//
// Возвращаемое значение:
// ТаблицаЗначений - Таблица с одной строкой, где колонки соответствуют ключам структуры,
// а значения - значениям структуры. Типы колонок определяются автоматически
// на основе типов значений в структуре.
//
// Особенности:
// - Более простая реализация по сравнению с СтруктураВТаблицуЗначений1
// - Не требует специальной обработки ссылочных типов
// - Автоматически определяет типы колонок на основе фактических значений
// - Использует ЗаполнитьЗначенияСвойств для копирования данных
// - Функция экспортная и может быть использована из других модулей
//
Функция СтруктураВТаблицуЗначений2(Знач Структра) Экспорт
// Создаем новую пустую таблицу значений
ТЗ = Новый ТаблицаЗначений;
// Перебираем все элементы структуры (ключ-значение)
Для Каждого ТекСтрока Из Структра Цикл
// Создаем массив типов для текущего значения
Типы = Новый Массив;
// Добавляем в массив тип текущего значения
Типы.Добавить(ТипЗнч(ТекСтрока.Значение));
// Добавляем колонку в таблицу значений:
// - имя колонки = ключ структуры
// - тип колонки определяется типом значения из структуры
ТЗ.Колонки.Добавить(ТекСтрока.Ключ, Новый ОписаниеТипов(Типы));
КонецЦикла;
// Добавляем новую строку в таблицу
ДанныеТЗ = ТЗ.Добавить();
// Копируем все значения из структуры в строку таблицы значений
// (автоматически по именам свойств/ключей)
ЗаполнитьЗначенияСвойств(ДанныеТЗ, Структра);
// Возвращаем заполненную таблицу значений
Возврат ТЗ;
КонецФункции
// Альтернативная версия с упрощенным определением типов колонок
//
// Параметры:
// Знач Структра - Структура - Входная структура, которую нужно преобразовать
//
// Возвращаемое значение:
// ТаблицаЗначений - Таблица с одной строкой, где колонки соответствуют ключам структуры,
// а значения - значениям структуры. Типы колонок определяются автоматически
// на основе типов значений в структуре.
//
// Особенности:
// - Более простая реализация по сравнению с СтруктураВТаблицуЗначений1
// - Не требует специальной обработки ссылочных типов
// - Автоматически определяет типы колонок на основе фактических значений
// - Использует ЗаполнитьЗначенияСвойств для копирования данных
// - Функция экспортная и может быть использована из других модулей
//
Функция СтруктураВТаблицуЗначений2(Знач Структра) Экспорт
// Создаем новую пустую таблицу значений
ТЗ = Новый ТаблицаЗначений;
// Перебираем все элементы структуры (ключ-значение)
Для Каждого ТекСтрока Из Структра Цикл
// Создаем массив типов для текущего значения
Типы = Новый Массив;
// Добавляем в массив тип текущего значения
Типы.Добавить(ТипЗнч(ТекСтрока.Значение));
// Добавляем колонку в таблицу значений:
// - имя колонки = ключ структуры
// - тип колонки определяется типом значения из структуры
ТЗ.Колонки.Добавить(ТекСтрока.Ключ, Новый ОписаниеТипов(Типы));
КонецЦикла;
// Добавляем новую строку в таблицу
ДанныеТЗ = ТЗ.Добавить();
// Копируем все значения из структуры в строку таблицы значений
// (автоматически по именам свойств/ключей)
ЗаполнитьЗначенияСвойств(ДанныеТЗ, Структра);
// Возвращаем заполненную таблицу значений
Возврат ТЗ;
КонецФункции
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник