четверг, 21 ноября 2013 г.

Узнать тип метаданных, получить перечисление

Узнать тип объекта (справочник, документ, перечисление...), можно используя функцию "XMLТипЗнч".


//Если СоединениеС1С_.Справочники.ТипВсеСсылки().СодержитТип(СоединениеС1С_.ТипЗнч(Источник)) Тогда
    Если Найти(СоединениеС1С_.XMLТипЗнч(источник).TypeName,"CatalogRef")>0 Тогда
       

        Вид = Источник.Метаданные().Имя;
        Если Вид="Партнеры" Тогда
            Вид="Контрагенты";
        КонецЕсли;
        Если Источник.Пустая() Тогда
            Возврат Справочники[Вид].ПустаяСсылка();
        КонецЕсли;
        УиИст = СоединениеС1С_.string(Источник.УникальныйИдентификатор());
        Уи = Новый УникальныйИдентификатор(УиИст);
        Нашли = Справочники[Вид].ПолучитьСсылку(Уи);
        Если Найти(строка(Нашли),"<Объект не найден>")>0 Тогда
            Сообщить_("Не нашли в УТ:"+вид+": "+Источник.Наименование);
        КонецЕсли;
        Возврат Нашли;
    //ИначеЕсли СоединениеС1С_.Перечисления.ТипВсеСсылки().СодержитТип(СоединениеС1С_.ТипЗнч(Источник)) Тогда    
    ИначеЕсли Найти(СоединениеС1С_.XMLТипЗнч(источник).TypeName,"EnumRef")>0 Тогда
        ИмяПеречисления = Источник.Метаданные().Имя;
        НужныйИндекс = СоединениеС1С_.Перечисления[ИмяПеречисления].Индекс(Источник);
        ИмяЗначения = СоединениеС1С_.Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления.получить(НужныйИндекс).имя;
       
        Возврат Перечисления[ИмяПеречисления][ИмяЗначения];
    КонецЕсли;

DocumentRef - документ ссылка
DocumentObject - документ объект 
CharOfAccountsRef - план счетов