Всем привет!

Может кто сталкивался и сможет подсказать: есть ли способ привести значение из Внешнего Источника к локальному ссылочному типу?

История такая: есть хитрый запрос к БД, который невозможно написать на 1С, но можно оформить во внешний источник. Запрос обращается к справочнику Номенклатура и возвращает ссылку на Номенклатуру в виде binary(16). Можно как-то 1С объяснить, что этот binary(16) – это ссылка на уже имеющийся в ней справочник Номенклатура? (подставить «определяемый тип» пробовал – не получилось, тип оказался «недопустимым»)

Понятно, что можно из запроса вытащить Код справочника, а потом по нему найти нужные ссылки. Но это дополнительные запросы, хочется этого избежать.
---
никак. только получением гуид и поиск/получение по нему в базе. Для 1С полученные данные из внешнего источника данных никак не ассоциируются со своей базой.
---
ищите формулу преобразования binary(16) в УИД 1С. Можно найти даже функцию для SQL. По нему уже можно получить ссылку, если известен ссылочный тип.
---
Тут вопрос, вы где его хотите использовать ? этот binary(16) собственно это двоичные данные, в терминах 1С, не совсем понятно, что вы с ним делать хотите, искать по ГУИД Или что ?
---
Про внешний источник не скажу, но через ADODB.Connection ссылка объекта это просто Массив байтов длиной 16 элементов. Преобразовать его в УИД пара пустяков.
---
Ок, похоже несовсем понятно выразился.

Я хочу, чтобы это работало максимально просто и без лишних преобразований. Вот так:

```1c
    ЗапросКИсточнику = новый Запрос();
    ЗапросКИсточнику.текст = "ВЫБРАТЬ т.Ссылка
    | ИЗ ВнешниеИсточникиДанных.СложныйЗапрос.Номенклатура как т ";

    ТЗНоменклатуры = ЗапросКИсточнику.выполнить().выгрузить();

    Для каждого стр из ТЗНоменклатуры цикл
    строкаТЧ = Товары.Добавить(); //предположим, что это строка ТЧ документа
    строкаТЧ.Номенклатура = стр.Номенклатура.Ссылка;
    КонецЦикла;
```

То есть, забрать данные из источника и сразу работать с ними как с ссылкой. Чтобы 1С знала, что это не какой-то левый binary, а обычная номенклатура.
---
никак. только получением гуид и поиск/получение по нему в базе. Для 1С полученные данные из внешнего источника данных никак не ассоциируются со своей базой.
---
ну вот я надеялся, что можно как-то 1С объяснить про типы получаемых значений.
Печально, конечно. Спасибо
---
так это сделано для безопасности работы с Объектом базы данных. Это виртуальное понятие и может включать в себя получение из нескольких таблиц.
---
На стороне внешнего источника данных создаете VIEW, в которой делает преобразование BINARY(16) в строковое значение GUID, понимаемый 1С и и в качестве внешнего источника данных указываете полученный VIEW, а не исходную таблицу.

работать станет несколько проще
---
нет, не подойдёт. Я хочу получить несколько тысяч ссылок, чтобы потом с ними работать. Если я буду потом кодом 1С превращать их из строки в ссылку, это будет долго - потеряется весь выигрыш от переписанного запроса.
Проще уж правда получить коды элементов и потом запросом вытащить ссылки по таблице кодов.

Есть, коенечно, совсем радикальный вариант: сделать регистр сведений, а потом на уровне СУБД подменить его на view с нужным запросом. Но это уже совсем какая-то опасная алхимия, которая потенциально может обрушить реструктуризацию (например, если запустить выгрузку в dt или ТиИ с полной реструктуризацией всего)
---
добавьте индексируемый реквизит Идентификатор скажем, строка(36). Заполняйте его строковым значением ссылки при записи нового элемента. Ищите элементы по этому реквизиту при работе с внешними источниками.