От ОписаниеТипов до ПутиДанных

1. szv 157 18.02.21 03:09 Сейчас в теме
Задача:
Есть реквизит. Известно значение Описаниетипов. Нужно получить путь к данным. (задача из СКД - отборы).


Пример:
ДоступноеПоле ДоступноеПолеКомпоновкиДанных ДоступноеПолеКомпоновкиДанных
Поле НоменклатурнаяГруппа (ПолеКомпоновкиДанных)
Тип Номенклатурная группа (ОписаниеТипов)

Смотрите прикрепленный файл.

Ответ: Справочники.НоменклатурныеГруппы

Предлагается такой текст:
Значение = ДоступноеПоле.Тип.ПривестиЗначение()


Собственно с этого момента можно без СКД - решать задачу от Значения к Пути



Путь=Метаданные.НайтиПоТипу(ТипЗнч(Значение)).ПолноеИмя();
	Если Лев(Путь,3)="Спр" Тогда
		ПутьКДанным = СтрЗаменить(Путь,"Справочник","Справочники"); 			
	ИначеЕсли Лев(Путь,3)="Док" Тогда
		ПутьКДанным = СтрЗаменить(Путь,"Документ","Документы"); 			
	ИначеЕсли Лев(Путь,3)="Пер" Тогда
		ПутьКДанным = СтрЗаменить(Путь,".","я."); 			
	ИначеЕсли Лев(Путь,3)="Пла" Тогда
		ПутьКДанным = СтрЗаменить(Путь,"ПланСчетов","ПланыСчетов"); 			
	Иначе
		ПутьКДанным="";
		Сообщить("Неизвестный тип данных");	
	КонецЕсли; 
Показать

_________________________________________________

Код получился корявым. Есть идеи как его улучшить?
Прикрепленные файлы:
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SlavaKron 18.02.21 08:46 Сейчас в теме
(1) То, что вы называете "путь к данным" таковым не является - это скорее идентификатор, имеющий значение только при написании кода во встроенном языке для обращения к менеджеру прикладного объекта. Если нужен именно строковый результат:
Функция ПолучитьПутьКДанным(ОписаниеТипа)
	
	Типы = ОписаниеТипа.Типы();
	Если Типы.Количество() = 0 Тогда
		Возврат ""
	КонецЕсли;
	
	ОбъектМетаданных = Метаданные.НайтиПоТипу(Типы[0]);
	
	Если ОбъектМетаданных = Неопределено Тогда
		Возврат ""
	КонецЕсли;
	
	ПолноеИмяМетаданных = ОбъектМетаданных.ПолноеИмя();
	
	ЧастиИмени = СтрРазделить(ПолноеИмяМетаданных, ".");
	
	Соответствие = Новый Соответствие;
	Соответствие.Вставить("Справочник", "Справочники");
	Соответствие.Вставить("Документ", "Документы");
	Соответствие.Вставить("Перечисление", "Перечисления");
	Соответствие.Вставить("ПланВидовХарактеристик", "ПланыВидовХарактеристик");
	Соответствие.Вставить("ПланВидовРасчета", "ПланыВидовРасчета");
	Соответствие.Вставить("ПланСчетов", "ПланыСчетов");
	Соответствие.Вставить("Задача", "Задачи");
	Соответствие.Вставить("БизнесПроцесс", "БизнесПроцессы");
	
	ЧастиИмени[0] = Соответствие[ЧастиИмени[0]];
	
	Возврат СтрСоединить(ЧастиИмени, ".");
	
КонецФункции
Показать
Если всё же нужен менеджер, то проще так:
Менеджер = Новый(СтрЗаменить(ПолноеИмяМетаданных, ".", "Менеджер."))
3. szv 157 19.02.21 09:09 Сейчас в теме
То, что вы называете "путь к данным" таковым не является - это скорее идентификатор


В синтаксисе языка называется "ПутьКДанным". И нужен строковый результат. Ваш вариант красивей, но я надеялся избавиться от перевода - Справочник в Справочники, используя команды языка, но не перебором объектов.
Прикрепленные файлы:
Оставьте свое сообщение

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