Имя: Пароль:
1C
1С v8
Вызов функции метаданных в управляемом приложении.
0 Zarix1994
 
13.04.16
16:31
Хочу получить ссылку на объект из управляемого приложения не немогу понять как из строки получить объект метаданных
Вот код:
[CODE]&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Объект.ОтражатьВБухгалтерскомУчете = Истина;
    Объект.ОтражатьВУправленческомУчете = Истина;
    Объект.ВалютаДокумента = ПолучениеРеквизитов("Справочники.Валюты",1,"980");
КонецПроцедуры



//Функция возвращает необходимую информацию из определённого объекта конфигурации
//Список операций:
//1 - Найти по коду (Параметр1 - Код)
//
&НаСервере
Функция ПолучениеРеквизитов(ОбъектКонфигурации,Операция,Параметр1)
    Если Операция = 1 Тогда
        Возврат ОбъектКонфигурации.НайтиПоКоду(Параметр1);
    КонецЕсли;    
КонецФункции
[/CODE]
Пробывал через вычислить ничего не помогло(
1 Волшебник
 
модератор
13.04.16
16:32
немогу, Пробывал

пишите по-русски
2 salvator
 
13.04.16
16:33
Объект.ВалютаДокумента = ПолучениеРеквизитов(Справочники.Валюты,1,"980");
3 Zarix1994
 
13.04.16
16:37
salvator так не подходит, ибо выдаёт ошибку, мол переменная справочники не объявлена.
4 salvator
 
13.04.16
16:57
(3) Если в функции только справочники используются, то так попробуй

Процедура ПриОткрытии(Отказ)
    Объект.ОтражатьВБухгалтерскомУчете = Истина;
    Объект.ОтражатьВУправленческомУчете = Истина;
    Объект.ВалютаДокумента = ПолучениеРеквизитов(Объект.ВалютаДокумента.Метаданные().Имя,1,"980");
КонецПроцедуры

Функция ПолучениеРеквизитов(ИмяСпр,Операция,Параметр1)
    Если Операция = 1 Тогда
        Возврат Справочники[ИмяСпр].НайтиПоКоду(Параметр1);
    КонецЕсли;    
КонецФункции
5 Zarix1994
 
13.04.16
17:00
В том то и дело там передаются параметры не только справочников, а ещё и документов, и регистра сведений.
6 salvator
 
13.04.16
17:09
(5) Тогда передавать в первый параметр ссылку (например, Объект.ВалютаДокумента), и с помощью функции определять менеджер объекта по ссылке:

Функция МенеджерОбъектаПоСсылке(Ссылка) Экспорт
    
    ИмяОбъекта = Ссылка.Метаданные().Имя;
    ТипСсылки = ТипЗнч(Ссылка);
    
    Если Справочники.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат Справочники[ИмяОбъекта];
    ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат Документы[ИмяОбъекта];
    ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат БизнесПроцессы[ИмяОбъекта];
    ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат ПланыВидовХарактеристик[ИмяОбъекта];
    ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат ПланыСчетов[ИмяОбъекта];
    ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат ПланыВидовРасчета[ИмяОбъекта];
    ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат Задачи[ИмяОбъекта];
    ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат ПланыОбмена[ИмяОбъекта];
    ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат Перечисления[ИмяОбъекта];
    Иначе
        Возврат НеОпределено;
    КонецЕсли;
    
КонецФункции
7 sash-ml
 
13.04.16
17:16
Менеджер = Неопределено;
Вычислить("Менеджер = " + ОбъектКонфигурации);
Менеджер.НайтиПоКоду(Параметр1);
8 salvator
 
13.04.16
17:33
Кстати, да. Почему у тебя Вычислить не сработало?

Функция ПолучениеРеквизитов(ОбъектКонфигурации,Операция,Параметр1)
    Менеджер = Вычислить(ОбъектКонфигурации);
    Если Операция = 1 Тогда
        Возврат Менеджер.НайтиПоКоду(Параметр1);
    КонецЕсли;    
КонецФункции

где ОбъектКонфигурации - строка вида "Справочники.ИмяСправочника".
9 Zarix1994
 
14.04.16
09:25
(8) Спасибо помогло, я просто делал это на клиенте а не на сервере.