Создание колонок ТЗ с определенными типами, которые соответствуют типам значений некоторой структуры.

1. DrDrewAvenue 07.12.21 09:22 Сейчас в теме
Всем доброго времени суток! Пытаюсь преобразовать массив структур в таблицу значений с целью последующей сортировки и отбора.
Есть такая функция:
Функция МассивВТаблицуЗначений(МассивСтруктур)
		
	Таблица = Новый ТаблицаЗначений;
    
    Если ТипЗнч(МассивСтруктур) = Тип("Массив")
        И МассивСтруктур.Количество() > 0
		И ТипЗнч(МассивСтруктур[0]) = Тип("Структура") Тогда
        ПерваяСтруктура = МассивСтруктур[0];
		Для Каждого Элемент Из ПерваяСтруктура Цикл
			ТипЗначения = Строка(ТипЗнч(Элемент.Значение));
			Таблица.Колонки.Добавить(Элемент.Ключ, Новый ОписаниеТипов(ТипЗначения));
        КонецЦикла;
        
        Для Каждого Структура Из МассивСтруктур Цикл 
            НоваяСтрока = Таблица.Добавить();
            ЗаполнитьЗначенияСвойств(НоваяСтрока, Структура);
        КонецЦикла;
    КонецЕсли;
    
    Возврат Таблица;
	
КонецФункции
Показать


Сначала создаю колонки, соответсвующие ключам структуры. Пытаюсь задать тип колонки в соответствии с типом значения соответствующего ключа.
С примитивными типами всё ок. Дохожу до ключа, значения которого ссылаются на стандартное перечисление конфигурации "УчетНачисленийВСреднемЗаработкеОбщий". И вот тут начинаются проблемы. Переменной "ТипЗначения" присваивается значение УчетНачисленийВСреднемЗаработкеОбщий. А мне нужно, чтобы было так - ПеречислениеСсылка.УчетНачисленийВСреднемЗаработкеОбщий. Как это сделать не понимаю...
Создавать конкретные колонки в коде с указанием конкретного типа я не вижу смысла. Пытаюсь сделать универсальное решение.
Может кто-нибудь помочь?
Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.19.48)
По теме из базы знаний
Найденные решения
6. SlavaKron 07.12.21 17:21 Сейчас в теме
Так а в чём проблема создать описание типа на основе массива типов?
МассивТипов = Новый Массив;
МассивТипов.Добавить(ТипЗнч(Элемент.Значение));
Таблица.Колонки.Добавить(Элемент.Ключ, Новый ОписаниеТипов(МассивТипов));
8. SlavaKron 08.12.21 09:05 Сейчас в теме
(7)
У колонок получается составной тип
МассивТипов инициализируется точно для каждой колонки? Составной тип не должен получаться.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 07.12.21 09:27 Сейчас в теме
(1)В общем случае - никак не сделать, т.к. имена объектов метаданных разных типов могут быть одинаковыми.
Для определения типа нужно знать вид объекта.
3. user636433_prog 07.12.21 09:51 Сейчас в теме
а еще там может быть составной тип если хотите вообще универсально.
как по мне нужно искать в метаданных найти по типу, и обрабатывать
4. DrDrewAvenue 07.12.21 10:26 Сейчас в теме
Понятно, спасибо за разъяснения. Вообще цель в присвоении типизации - это дальнейшее использование данной ТЗ в Построителе запроса. Мне нужен гибкий отбор как раз по значениям в этой колонке. А как только создаю построитель и устанавливаю отбор, то не даёт установить. Везде говорят что как раз из-за отсутсвия типизации у колонок таблицы..
5. JohnGalt 57 07.12.21 14:51 Сейчас в теме
Универсальное решение и присвоение непримитивных типов колонкам - вещи взаимоисключаемые, как по мне.
6. SlavaKron 07.12.21 17:21 Сейчас в теме
Так а в чём проблема создать описание типа на основе массива типов?
МассивТипов = Новый Массив;
МассивТипов.Добавить(ТипЗнч(Элемент.Значение));
Таблица.Колонки.Добавить(Элемент.Ключ, Новый ОписаниеТипов(МассивТипов));
7. DrDrewAvenue 08.12.21 04:50 Сейчас в теме
(6)
МассивТипов = Новый Массив;
МассивТипов.Добавить(ТипЗнч(Элемент.Значение));
Таблица.Колонки.Добавить(Элемент.Ключ, Новый ОписаниеТипов(МассивТипов))


Честно говоря была такая идея. Сейчас попробовал проверить. Да, так действительно работает. У колонок получается составной тип, насколько я понимаю. Построитель запроса более не ругается на установку отбора. Но я честно говоря всё равно не понимаю как это работает... Сейчас смотрю на типы колонок в исходной ТЗ - там составные типы. Смотрю ТЗ, которую возвращает построитель запроса - там уже строго те типы у каждой колонки, которые и должны быть.
8. SlavaKron 08.12.21 09:05 Сейчас в теме
(7)
У колонок получается составной тип
МассивТипов инициализируется точно для каждой колонки? Составной тип не должен получаться.
9. DrDrewAvenue 08.12.21 10:19 Сейчас в теме
(8) Да, действительно, нужно инициализировать внутри цикла добавления колонок, тогда всё ок!
10. Wiz145 29.09.23 11:38 Сейчас в теме
Вот рабочая схема.
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("ДокументСсылка.НазваниеДокумента1"));  
МассивТипов.Добавить(Тип("ДокументСсылка.НазваниеДокумента2")); 
ОписаниеТипов = Новый ОписаниеТипов(МассивТипов);   
    
ТЗ.Колонки.Добавить("Документ",ОписаниеТипов,"Документ");
Новичок1с; +1 Ответить
11. Новичок1с 4 07.11.23 09:01 Сейчас в теме
(10)
Тип("


Благодарю за совет.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот