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

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 67 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)
Тип("


Благодарю за совет.
Оставьте свое сообщение
Вакансии
1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 100 000 руб.
Временный (на проект)

Разработчик 1С
Москва
зарплата от 150 000 руб.
Полный день

Программист
Санкт-Петербург
зарплата от 180 000 руб. до 240 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 150 000 руб. до 250 000 руб.
Полный день