| 
    
            
         
         | 
    
    
  | 
Получение Типа реквизита или объекта | ☑ | ||
|---|---|---|---|---|
| 
    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) я прошу прощения нереально уже туплю)), но большое спасибо это именно то что я искал сегодня весь день     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |