Тогда я сел и подумал: Что есть эта самая строка? - это всего лишь представление 128 бит в 16-ричной системе счисления.
Функция ПреобразоватьСсылку16_64_(СтрокаИсх, ОбратноеПреобразование = Ложь) Экспорт
РезСтрока = "";
сДлина = СтрДлина(СтрокаИсх);
МассивСИ = ИнициироватьМассивСистемыСчисления(); // как-нибудь создать массив с 64 разными символами
ПолныеЦиклы = 11;
Если ОбратноеПреобразование = Истина Тогда
//64-16 (циклы 2 симв - 3 симв)
Для Итерратор = 0 по ПолныеЦиклы - 1 Цикл
Симв1 = Сред(СтрокаИсх, Итерратор*2+1, 1);
Симв2 = Сред(СтрокаИсх, Итерратор*2+2, 1);
Число1 = МассивСИ.Найти(Симв1);
Число2 = МассивСИ.Найти(Симв2);
ИтогоЧисло = Число1*64+Число2;
Число1_ = Цел(ИтогоЧисло/16/16);
Число2_ = Цел((ИтогоЧисло-Число1_*16*16)/16);
Число3_ = ИтогоЧисло - Число1_*16*16-Число2_*16;
Симв1_ = МассивСИ[Число1_];
Симв2_ = МассивСИ[Число2_];
Симв3_ = МассивСИ[Число3_];
РезСтрока = РезСтрока + Симв1_ + Симв2_ + Симв3_;
КонецЦикла;
РезСтрока = Лев(РезСтрока,8)+"-"+Сред(РезСтрока,9,4)+"-"+Сред(РезСтрока,13,4)+"-"+Сред(РезСтрока,17,4)+"-"+Сред(РезСтрока,21);
Иначе
//16-64 (циклы 3 симв - 2 симв)
СтрокаИсх = СтрЗаменить(СтрокаИсх,"-","") + "0";
Для Итерратор = 0 по ПолныеЦиклы - 1 Цикл
Симв1 = Сред(СтрокаИсх, Итерратор*3+1, 1);
Симв2 = Сред(СтрокаИсх, Итерратор*3+2, 1);
Симв3 = Сред(СтрокаИсх, Итерратор*3+3, 1);
Число1 = МассивСИ.Найти(врег(Симв1));
Число2 = МассивСИ.Найти(врег(Симв2));
Число3 = МассивСИ.Найти(врег(Симв3));
ИтогоЧисло = (Число1*16+Число2)*16+Число3;
Число1_ = Цел(ИтогоЧисло/64);
Число2_ = ИтогоЧисло - Число1_*64;
Симв1_ = МассивСИ[Число1_];
Симв2_ = МассивСИ[Число2_];
РезСтрока = РезСтрока + Симв1_ + Симв2_;
КонецЦикла;
КонецЕсли;
Возврат РезСтрока;
КонецФункции
Пример вызова:
БылТип = ТипЗнч( Товар1 );
СтрСсылка = XMLСтрока(Товар1);
КороткаяСсылка = ПреобразоватьСсылку16_64_(XMLСтрока(Товар1));
СтрСсылка2 = Лев(ПреобразоватьСсылку16_64_(КороткаяСсылка,Истина),36);
Товар2 = XMLЗначение(БылТип,СтрСсылка2);