Имя: Пароль:
1C
1С v8
Получение Типа реквизита или объекта
0 SeaJikS
 
naïve
19.03.25
21:49
Такое дело, мне нужно что бы выполнялась вот эта строка ТипРеквизитаИзМетаданных.СодержитТип(Тип("СправочникСсылка.Организации")), но с условием что вместо СправочникСсылка.Организации у меня может быть любой другой справочник, вопрос заключается в том как мне получить эту самую ссылку ИМЕННО в таком виде как она указана в этой строчке, все возможные ТипЗнч и тд получают из реквизита документа что то на подобии Организация, то есть даже не во множественно числе и я просто строкой не могу подставить, никак не могу найти в интернете способ получить именно эту вот строку или хотя бы слово Организации
1 Ёпрст
 
19.03.25
22:00
.Имя
2 Ёпрст
 
19.03.25
22:02
Ну или
.ПолноеИмя()
3 Ёпрст
 
19.03.25
22:03
выбирай
4 SeaJikS
 
naïve
19.03.25
22:07
(3) Даже близко не то, допустим я получаю ПолноеИмя() реквизита Организация(Тип: СправочникСсылка.ОрганизацИИ), так он мне выдает путь, скажем так, но в итоге выдает мне Организаци"Я", а мне нужно что бы это было ХОТЯ БЫ слово Организаци"И", я уже молчу про то что бы он просто выдал мне как в конфигураторе СправочникСсылка.Организации
5 SeaJikS
 
naïve
19.03.25
22:11
(4) То есть я получил вот такую строку с помощью ПолноеИмя()
Реквизит;Организация;Документ.СчетНаОплатуКлиенту.Реквизит.Организация
И в ней нет ничего что бы мне вообще пригодилось
6 SeaJikS
 
naïve
19.03.25
22:12
(5) В этой же строке и вариант с Имя, второй элемент строки после ";" тоже не то
7 Ёпрст
 
19.03.25
22:12
(4) че ? ПолноеИмя смотри у метаданных
8 SeaJikS
 
naïve
19.03.25
22:15
(7) Поподробнее что имеешь ввиду, если метаданных объекта то это понятно я уже допер как получить имя объекта, но с РЕКВИЗИТОМ это не работает
а мне нужен ТИП реквизита как в дереве конфигуратора, там вот где ТипДанных написано СправочникСсылка.ОрганизацИИ мне вот именно это кодом надо получить и перевести в строку и записать в текстовый документ
9 SeaJikS
 
naïve
19.03.25
22:19
Для большего понимания контекста вот где я работаю

Для Каждого Реквизит Из МетаданныеДокумента.Реквизиты Цикл
            ИмяРеквизита = Реквизит.Имя;
            ТипДанныхРеквизита = Реквизит.ПолноеИмя();
            СтрокаВыгрузки = "Реквизит;" + ИмяРеквизита + ";" + ТипДанныхРеквизита;
            ТекстовыйФайл.ДобавитьСтроку(СтрокаВыгрузки);
        КонецЦикла;
ТипДанныхРеквизита мне как раз и нужен
10 Ёпрст
 
19.03.25
22:50
(9) Тип.Типы() и поиск метаданные.НайтиПоТипу.
У тебя вся засада только в реквизитах составного типа
11 Ёпрст
 
19.03.25
22:55
Тип того
Для Каждого Объект Из Метаданные.Справочники["Номенклатура"].Реквизиты Цикл
	Для Каждого Тип ИЗ Объект.Тип.Типы() Цикл
		Попытка
			Ссылка = Новый(Тип);
			Сообщить(Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).ПолноеИмя());
		Исключение
			//це примитивный тип строка/число/дата
		КонецПопытки
	КонецЦикла;
КонецЦикла;
12 Ёпрст
 
19.03.25
22:56
Ну или запросом получить
13 SeaJikS
 
naïve
19.03.25
23:07
(11) так получается там где Номенклатура я могу запихнуть свои условно Организация и это сработает?
14 DiMel_77
 
19.03.25
23:10
(11) А можно и так:


Для Каждого Объект Из Метаданные.Справочники["Номенклатура"].Реквизиты Цикл
	Для Каждого Тип ИЗ Объект.Тип.Типы() Цикл
		ТипСтрокой = ПолучитьТип(Тип);
	КонецЦикла;
КонецЦикла;

Функция ПолучитьТип(Тип)
		
	Если Тип = Тип("Число") Тогда
		Возврат "Число";
        ИначеЕсли Тип = Тип("Булево") Тогда
		Возврат "Булево";
	ИначеЕсли Тип = Тип("Дата") Тогда
		Возврат "Дата";	
	ИначеЕсли Тип = Тип("Строка") Тогда
		Возврат "Строка";	
	ИначеЕсли Тип = Тип("ХранилищеЗначения") Тогда
		Возврат "ХранилищеЗначения";
	ИначеЕсли Тип = Тип("УникальныйИдентификатор") Тогда
		Возврат "УникальныйИдентификатор";
    Иначе
	
		Результат = XMLТип(Тип).ИмяТипа;
						
		Результат = СтрЗаменить(Результат, "CatalogRef", "СправочникСсылка");
		Результат = СтрЗаменить(Результат, "DocumentRef", "ДокументСсылка");
		Результат = СтрЗаменить(Результат, "EnumRef", "ПеречислениеСсылка");
		Результат = СтрЗаменить(Результат, "ChartOfAccountsRef", "ПланСчетовСсылка");
		Результат = СтрЗаменить(Результат, "ChartOfCharacteristicTypesRef", "ПланВидовХарактеристикСсылка");
		Результат = СтрЗаменить(Результат, "ChartOfCalculationTypesRef", "ПланВидовРасчетаСсылка");
		Результат = СтрЗаменить(Результат, "ExchangePlanRef", "ПланОбменаСсылка");
		Результат = СтрЗаменить(Результат, "BusinessProcessRef", "БизнесПроцессСсылка");
		Результат = СтрЗаменить(Результат, "BusinessProcessRoutePointRef", "ТочкаМаршрутаБизнесПроцессаСсылка");
		Результат = СтрЗаменить(Результат, "TaskRef", "ЗадачаСсылка");
	
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции // ПолучитьТип()

15 Ёпрст
 
19.03.25
23:10
(13) да.
Можешь поискать и готовые решения обхода метаданных, Их кучку налепили
16 SeaJikS
 
naïve
19.03.25
23:31
(11) Так ну во первых к сожалению в самой первой строке мы как раз ставим то что мне и нужно найти, Организация туда вставить нельзя, опять же нужно название колекции справочников то есть во множественном числе, а во вторых даже с названием коллекции она ругается что я пытаюсь изменить объект данных формы

Ошибка при установке значения атрибута контекста (Объект): Нельзя изменять поле, содержащее объект данных формы
17 DiMel_77
 
19.03.25
23:44
(16) Вы походу код вообще читать не умеете...
В общем случае реквизит может иметь составной или определяемый тип. Что в этом случае у вас будет в выгрузке?

А для вашего случая код будет таким:
Для Каждого Реквизит Из МетаданныеДокумента.Реквизиты Цикл
            ИмяРеквизита = Реквизит.Имя;
            ТипДанныхРеквизита = ТипДанныхРеквизита(Реквизит);
            СтрокаВыгрузки = "Реквизит;" + ИмяРеквизита + ";" + ТипДанныхРеквизита;
            ТекстовыйФайл.ДобавитьСтроку(СтрокаВыгрузки);
        КонецЦикла;
...
Функция ТипДанныхРеквизита(Реквизит, РазделительТипов = "; ")

    ТипДанныхРеквизита = "";

    Для Каждого Тип ИЗ Реквизит.Тип.Типы() Цикл
	ТипДанныхРеквизита = ТипДанныхРеквизита + ?(ТипДанныхРеквизита = "","",РазделительТипов) + ПолучитьТип(Тип);
    КонецЦикла;

   Возврат ТипДанныхРеквизита;

КонецФункции 


Где функция ПолучитьТип() из сообщения (14)
18 SeaJikS
 
naïve
20.03.25
00:12
(17) я прошу прощения нереально уже туплю)), но большое спасибо это именно то что я искал сегодня весь день