1. Как получить GUID какой-то ссылки в коде.
ГУИД = Ссылка.УникальныйИдентификатор();
ГУИДСтрокой = СокрЛП(ГУИД);
В комментариях подсказали, как строкой проще получить:
ГУИДСтрокой = XMLСтрока(Ссылка);
2. Как получить ссылку, имея строку GUID, и зная, что это такое.
Если ТипЗнч(ГУИД) = Тип("Строка") Тогда
ГУИД = новый УникальныйИдентификатор(ГУИД);
Иначе
ГУИД = ГУИД;
КонецЕсли;
Ссылка = Справочники[ВидСправочника].ПолучитьСсылку(ГУИД);
Ссылка = Документ[ВидДокумента].ПолучитьСсылку(ГУИД);
// ну и т.д. ПланыВидовХарактеристик, ПланыОбмена ....
3. Как проверить, есть ли такая ссылка, при подобном получении.
Тут есть прекрасный момент, он заключается в том, что вам в любом случае вернется ссылка указанного вида справочника (документа, плана и etc), и ЗначениеЗаполнено() для нее вернет вам Истину (тада-а-ам). Поэтому, можно только проверить, не ли в текстовом представлении слов "<Объект не найден>".
Если Найти(СокрЛП(Ссылка), "<Объект не найден>") > 0 Тогда
//__ это не ссылка
Ссылка = Неопределено; // ну, или Справочник[ВидСправочника].ПустаяСсылка();
Иначе
//__ ура, это наша ссылка
КонецЕсли;
(Добавлено позже) Опять же, подсказали в комментариях.
Если вы пишите в рамках стандартной конфигурации, то можно воспользоваться функцией:
ОбщегоНазначения.СсылкаСуществует();
Если же, это что-то нестандартное, то идея в том, чтобы опросить соответствующую таблицу запросом, а параметром передать саму ссылку. Далее код из комментариев:
Функция СсылкаСуществует(ЛюбаяСсылка, ИмяТаблицы=Неопределено) Экспорт
УстановитьПривилегированныйРежим(Истина);
ТекстЗапроса = "
|ВЫБРАТЬ
| Ссылка
|ИЗ
| [ИмяТаблицы]
|ГДЕ
| Ссылка = &Ссылка
|";
Если ИмяТаблицы = Неопределено Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяТаблицы]", ИмяТаблицыПоСсылке(ЛюбаяСсылка));
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяТаблицы]", ИмяТаблицы);
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("Ссылка", ЛюбаяСсылка);
Возврат НЕ Запрос.Выполнить().Пустой();
КонецФункции
Функция ИмяТаблицыПоСсылке(Ссылка) Экспорт
Возврат Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).ПолноеИмя();
КонецФункции
4. Как получить ссылку, не зная, что это за ГУИД.
Тут задачка "со звездочкой". Можно только перебрать все объекты метаданных, где может быть ссылка, и для каждого вида объекта проверить, не его ли ссылка.
Функция НайтиСсылкуЛюбогоТипаПоГУИД(Знач ГУИД)
//__ пусть ГУИД у нас или строка, или уже УникальныйИдентификатор
Если ТипЗнч(ГУИД) = Тип("Строка") Тогда
ГУИД = новый УникальныйИдентификатор(ГУИД);
Иначе
ГУИД = ГУИД;
КонецЕсли;
Ссылка = Неопределено;
Для Каждого Мета из Метаданные.Справочники Цикл
Ссылка = Справочники[Мета.Имя].ПолучитьСсылку(ГУИД);
//___ хотелось бы, но нет, эта ### возвращает <Объект не найден> и ЗначениеЗаполнено() - Истина
// Если ЗначениеЗаполнено(Ссылка) Тогда
// Возврат Ссылка;
// КонецЕсли;
//___ посему, проверка будет извратной
Если Найти(СокрЛП(Ссылка), "<Объект не найден>") > 0 Тогда
Ссылка = Неопределено;
Иначе
Возврат Ссылка;
КонецЕсли;
КонецЦикла;
// и далее то же самое для Метаданные. ->
// Документы, ПланыВидовХарактеристик, ПланыСчетов, ПланыВидовРасчета, БизнесПроцессы, Задачи, ПланыОбмена
// для документов еще приведу, остальное - на "домашнее задание" ))
Для Каждого Мета из Метаданные.Документы Цикл
Ссылка = Документы[Мета.Имя].ПолучитьСсылку(ГУИД);
Если Найти(СокрЛП(Ссылка), "<Объект не найден>") > 0 Тогда
Ссылка = Неопределено;
Иначе
Возврат Ссылка;
КонецЕсли;
КонецЦикла;
// ...
Возврат Ссылка;
КонецФункции
5. Как получить Ссылки ГУИД в запросе.
Запрос = новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Справочник.Ссылка КАК Ссылка,
| УНИКАЛЬНЫЙИДЕНТИФИКАТОР(Справочник.Ссылка) КАК ГУИД,
| ПРЕДСТАВЛЕНИЕ(УНИКАЛЬНЫЙИДЕНТИФИКАТОР(Справочник.Ссылка)) КАК ГУИДСтрокой
|ИЗ Справочники._НекийСправочник_ КАК Справочник
|";
Важно! Тут есть 2 замечания:
а) Это работает только с релиза 8.3.22.
б) GUID в строку можно преобразовать только через ПРЕДСТАВЛЕНИЕ - никакие ВЫРАЗИТЬ и т.д. не работают. И потом вы не сможете никак использовать это строковое поле внутри этого же запроса (ну, потому что это уже ПРЕДСТАВЛЕНИЕ, а не строка). Если, прям, надо, то выгружаете результат в ТаблицуЗначений и её уже параметром передаёте в другой запрос, а это вовсе не по феншую (МенеджерВременныхТаблиц тоже тут не поможет).
6. Получение строки GUID из битой ссылки.
Имеется в виду, когда у вас где-то появляется надпись типа "<Объект не найден> (54:b3c200155d0a3b0111ed71bc04838993)", а надо получить, собственно строку GUID типа "04838993-71bc-11ed-b3c2-00155d0a3b01".
Функция ГУИДСтрИзОбъектНеНайден(ГУИДОбъекта)
//ГУИДУдОбъекта - это строка, возвращаемая из битой ссылки вида
//"<Объект не найден> (54:b3c200155d0a3b0111ed71bc04838993)"
ГУИДОбъектаСтр = СтрЗаменить(ГУИДОбъекта,"<Объект не найден> (","");
ГУИДОбъектаСтр = СтрЗаменить(ГУИДОбъектаСтр,")","");
ГУИДОбъектаСтр = СтрЗаменить(ГУИДОбъектаСтр,"0x","");
ГУИДОбъектаСтр = Сред(ГУИДОбъектаСтр, Найти(ГУИДОбъектаСтр,":")+1, СтрДлина(ГУИДОбъектаСтр));
// Преобразуем GUID
ГУИД = Сред(ГУИДОбъектаСтр,25,8)+
"-"+Сред(ГУИДОбъектаСтр,21,4)+"-"+Сред(ГУИДОбъектаСтр,17,4)+
"-"+Сред(ГУИДОбъектаСтр,1,4)+"-"+Сред(ГУИДОбъектаСтр,5,12);
//и получаем ГУИД 04838993-71bc-11ed-b3c2-00155d0a3b01
Возврат ГУИД;
КонецФункции