Собственно вопрос в теме.
Как получить тип реквизита.
Например тип СправочникСсылка.Валюты
---
Все не совсем так. Функция возвращает именно тип. А вот при преобразовании его в строку уже получаем синоним. С помощью метода "Метаданные()" вы сможете получить имя объекта конфигурации, например, "Справочник.Валюты", но вот "СправочникСсылка.Валюты" из него Вам придется сделать самим.

Если Вам известно некоторое значение, и Вас интересует полное имя типа этого значения, можно поступить так:

```1c
    МетаданныеЗначения = Метаданные.НайтиПоТипу(ТипЗнч(Значение));
    Сообщить(МетаданныеЗначения.ПолноеИмя()); // результат: Справочник.Валюты
```

Если Вам необходимо определить именно тип одного из реквизитов известного Вам объекта, то тут немного все сложнее, т.к. тип может быть составным. Примерно так:

```1c
    МетаданныеРеквизита = Объект.Метаданные().Реквизиты.Найти("ИмяНужногоРеквизита");
    Для каждого ТипРеквизита Из МетаданныеРеквизита.Тип.Типы() Цикл
    Если ТипРеквизита = Тип("Строка") Тогда
    Сообщить("Строка");
    ИначеЕсли ТипРеквизита = Тип("Дата") Тогда
    Сообщить("Дата");
    //...и остальные примитивные типы
    Иначе
    МетаданныеЗначения = Метаданные.НайтиПоТипу(ТипРеквизита);
    Сообщить(МетаданныеЗначения.ПолноеИмя()); // опять нужно потом самому добавить "Ссылка"
    КонецЕсли;
    КонецЦикла;
```
---
для чего? нужен тип или строковое представление типа "Справочник.Вылюты"?
Реквизит.Метаданные().ПолноеИмя();
---
Метаданные().ПолноеИмя();
Метод Метаданные не обнаружен

```1c
    Для каждого Реквизит из Документ.Метаданные().Реквизиты Цикл
    Сообщить(Реквизит.Метаданные().ПолноеИмя(););

    КонецЦикла;
```

Да, нужно строковое представление типа.
---
Все не совсем так. Функция возвращает именно тип. А вот при преобразовании его в строку уже получаем синоним. С помощью метода "Метаданные()" вы сможете получить имя объекта конфигурации, например, "Справочник.Валюты", но вот "СправочникСсылка.Валюты" из него Вам придется сделать самим.

Если Вам известно некоторое значение, и Вас интересует полное имя типа этого значения, можно поступить так:

```1c
    МетаданныеЗначения = Метаданные.НайтиПоТипу(ТипЗнч(Значение));
    Сообщить(МетаданныеЗначения.ПолноеИмя()); // результат: Справочник.Валюты
```

Если Вам необходимо определить именно тип одного из реквизитов известного Вам объекта, то тут немного все сложнее, т.к. тип может быть составным. Примерно так:

```1c
    МетаданныеРеквизита = Объект.Метаданные().Реквизиты.Найти("ИмяНужногоРеквизита");
    Для каждого ТипРеквизита Из МетаданныеРеквизита.Тип.Типы() Цикл
    Если ТипРеквизита = Тип("Строка") Тогда
    Сообщить("Строка");
    ИначеЕсли ТипРеквизита = Тип("Дата") Тогда
    Сообщить("Дата");
    //...и остальные примитивные типы
    Иначе
    МетаданныеЗначения = Метаданные.НайтиПоТипу(ТипРеквизита);
    Сообщить(МетаданныеЗначения.ПолноеИмя()); // опять нужно потом самому добавить "Ссылка"
    КонецЕсли;
    КонецЦикла;
```
---
```1c
    МетаданныеЗначения = Метаданные.НайтиПоТипу(ТипЗнч(Значение));
    Сообщить(МетаданныеЗначения.ПолноеИмя()); // результат: Справочник.Валюты
```

Данный метод возвращает не всегда правильный тип.
Я сделал через XMLТип, но мне кажется это костыль.

А можно с вами проконсультироваться? Есть пару вопросов. Можно в телегу/почта
---
Я сделал через XMLТип, но мне кажется это костыль.
А мне кажется вполне нормальным, если решает свою задачу. БСП также использует XMLТипЗнч в процедуре "СообщитьПользователю".

Пишите здесь, в личку.
---
К сожалению, не могу.
На данный момент я в отложенной группе.
---
Столкнулся с такой же проблемой, решил через создание функции.

```1c
    &НаКлиенте
    Функция СравнитьТипы(Знач Значение)

    Возврат ТипЗнч(Значение) = Тип("СправочникСсылка.Валюты");

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

Вдруг кому-то поможет.
---
А мужики-то не знают... Всю жизнь так типы сравнивают без всяких функций.
https://its.1c.ru/db/metod8dev/content/2465/hdoc