1С 8.3 Преобразование Структуры в Таблицу значений - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Преобразование Структуры в Таблицу значений

Данные > Примеры кода 1С > 1С 8.3 Cтруктура
  • Пример 1 – точный контроль типов (особенно для ссылок).
  • Пример 2 – проще и быстрее, но без детализации типов ссылочных объектов.
Пример №1 преобразование Структуры в ТЗ 1С 8.3:
// Функция преобразует структуру в таблицу значений с одной строкой данных
//
// Параметры:
//  Знач Структра - Структура - Входная структура, которую нужно преобразовать
//
// Возвращаемое значение:
//  ТаблицаЗначений - Таблица с одной строкой, где колонки соответствуют ключам структуры,
//                    а значения - значениям структуры. Для ссылочных типов создаются
//                    соответствующие типы колонок.
//
// Особенности:
//  - Для ссылочных типов (справочники, документы, перечисления) автоматически определяются
//    типы колонок как ссылочные
//  - Поддерживаются все базовые типы данных 1С
//  - Функция экспортная и может быть использована из других модулей
//
Функция СтруктураВТаблицуЗначений1(Знач Структра) Экспорт

   // Создаем новую таблицу значений
   ТЗ = Новый ТаблицаЗначений;

   // Добавляем одну строку в таблицу (будем ее заполнять)
   НовСтр = ТЗ.Добавить();

   // Создаем описание типов для всех ссылочных типов (справочники, документы, перечисления)
   // Это нужно для последующей проверки типа значений структуры
   ОписаниеТиповСсылок = Новый ОписаниеТипов(
       Новый ОписаниеТипов(
           Справочники.ТипВсеСсылки(),
           Документы.ТипВсеСсылки().Типы(),
           Перечисления.ТипВсеСсылки().Типы()));

   // Перебираем все элементы структуры (ключ-значение)
   Для Каждого ТекСтрока Из Структра Цикл

       // Добавляем колонку в таблицу значений:
       // - имя колонки = ключ структуры
       // - тип колонки определяем в зависимости от типа значения:
       //   если это ссылочный тип - создаем описание типа как ссылка, иначе - как базовый тип
       ТЗ.Колонки.Добавить(
           ТекСтрока.Ключ,
           ?(ОписаниеТиповСсылок.СодержитТип(ТипЗнч(ТекСтрока.Значение)),
               Новый ОписаниеТипов(СтрЗаменить(ТекСтрока.Значение.Метаданные().ПолноеИмя(), ".", "Ссылка.")),
               Новый ОписаниеТипов(Строка(ТипЗнч(ТекСтрока.Значение))));

       // Записываем значение из структуры в соответствующую колонку таблицы
       НовСтр[ТекСтрока.Ключ] = ТекСтрока.Значение;

   КонецЦикла;

   // Возвращаем заполненную таблицу значений
   Возврат ТЗ;

КонецФункции
Пример №2 преобразование Структуры в ТЗ 1С 8.3:
// Функция преобразует структуру в таблицу значений с одной строкой данных
// Альтернативная версия с упрощенным определением типов колонок
//
// Параметры:
//  Знач Структра - Структура - Входная структура, которую нужно преобразовать
//
// Возвращаемое значение:
//  ТаблицаЗначений - Таблица с одной строкой, где колонки соответствуют ключам структуры,
//                    а значения - значениям структуры. Типы колонок определяются автоматически
//                    на основе типов значений в структуре.
//
// Особенности:
//  - Более простая реализация по сравнению с СтруктураВТаблицуЗначений1
//  - Не требует специальной обработки ссылочных типов
//  - Автоматически определяет типы колонок на основе фактических значений
//  - Использует ЗаполнитьЗначенияСвойств для копирования данных
//  - Функция экспортная и может быть использована из других модулей
//
Функция СтруктураВТаблицуЗначений2(Знач Структра) Экспорт

   // Создаем новую пустую таблицу значений
   ТЗ = Новый ТаблицаЗначений;

   // Перебираем все элементы структуры (ключ-значение)
   Для Каждого ТекСтрока Из Структра Цикл
       // Создаем массив типов для текущего значения
       Типы = Новый Массив;
       // Добавляем в массив тип текущего значения
       Типы.Добавить(ТипЗнч(ТекСтрока.Значение));

       // Добавляем колонку в таблицу значений:
       // - имя колонки = ключ структуры
       // - тип колонки определяется типом значения из структуры
       ТЗ.Колонки.Добавить(ТекСтрока.Ключ, Новый ОписаниеТипов(Типы));
   КонецЦикла;

   // Добавляем новую строку в таблицу
   ДанныеТЗ = ТЗ.Добавить();
   // Копируем все значения из структуры в строку таблицы значений
   // (автоматически по именам свойств/ключей)
   ЗаполнитьЗначенияСвойств(ДанныеТЗ, Структра);

   // Возвращаем заполненную таблицу значений
   Возврат ТЗ;

КонецФункции
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 07.04.2025
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому