Ссылка по ГУИДам


Универсальная обработка для получения ссылки по различным уникальным идентификаторам (UID для sql, GUID, …) и обратно.

Универсальная обработка для получения ссылки по различным уникальным идентификаторам и обратно.

Независимо от типа, можно получить ссылку из

  1. UID sql, как  «0x982D14DAE9B19A4811E5CE6F944C1335» или «982D14DAE9B19A4811E5CE6F944C1335»
  2. Внутреннего представления, как «{"#",9F6206B2-1ED6-423C-9B08-FD4978930C49,111:982D14DAE9B19A4811E5CE6F944C1335}», 
  3. Текста, как «<Объект не найден> (91:a7b36caad2c62bb94502d42e8ddf17d3)».
  4. Уникального идентификатора, как "6bc73eaa-a8b6-11dc-adc5-0017085a0478"

В пунктах 1,2,3 при изменении поля идет поиск в пределах типа, который указана в поле "Ссылка" (включая пустую ссылку),

а по команде "обновить" идет поиск по всем метаданным (не только по указанной ссылке)

 

И обратно, из ссылки можно получить все эти ГУИДы

Обработка работает как на обычных, так и на управляемых формах

Может пригодиться для расследований интеграции данных с различными базами 1С или sql

Тестировалось на платформах

1С:Предприятие 8.3 (8.3.11.3034)

1С:Предприятие 8.3 (8.3.13.1513).

12 Comments

  1. timeforlive

    Чем вам эта обработка не угодила?

    https://infostart.ru/public/983887/

    Reply
  2. PerlAmutor

    Кстати в большинстве подобных доработок (в том числе и в инструментах разработчика) не хватает очень полезной информации — вычисление даты создания объекта по ссылки на объект. Понятно, что там есть свои особенности и нюансы (либо ссылка может дату не содержать, либо содержать, но с некоторым сдвигом относительно реальной даты её добавления в ИБ). Полученная дата помогает сократить период отбора в Журнале Регистрации одним/двумя/тремя днями, если необходимо найти того, кто создал объект.

    На днях был подобный случай. Нашли номенклатуру с двумя одинаковыми кодами. Оказалось, что были проблемы с правами и пользователь сам её создал (хотя не должен был иметь прав), кроме того была выключена функциональная опция контролирующая уникальность номенклатурных кодов.

    Reply
  3. Voblhned

    (1) все как всегда, платностью. А тут делаешь свое и потом делаешься, возможность заработать =) Че как маленький то

    Reply
  4. timeforlive

    (3) Ты еще не понял, почему я ссылку указал в первом посте? Че как маленький то #k8SjZc9Dxk_#k8SjZc9Dxk

    Reply
  5. avpostnikov

    (2)А версионирование вас чем не устраивает?

    Reply
  6. simonovich

    Все это уже было:

    Функция ПолучитьGUIDпоID(ИД)

    Возврат Прав(ИД, 8) + «-» + Лев(Прав(ИД, 12), 4) + «-» + Лев(Прав(ИД, 16), 4) + «-» + Лев(ИД, 4) + «-» + Прав(Лев(ИД, 16), 12);

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

    Функция ПолучитьIDпоGUID(ГУИД)

    Если ЗначениеЗаполнено(ГУИД) Тогда

    Возврат Сред(ГУИД,20,4) + Прав(ГУИД,12) + Сред(ГУИД,15,4) + Сред(ГУИД,10,4) + Лев(ГУИД,8);

    Иначе

    Возврат «»;

    КонецЕсли;

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

    // Как преобразовать <Объект не найден> в УникальныйИдентификатор (GUID)

    // Как преобразовать <Объект не найден> в УникальныйИдентификатор (GUID)

    //

    // ГУИДУдОбъкта = <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824)

    ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъкта,»<Объект не найден> («,»»);

    ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаСтр,»)»,»»);

    ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаСтр,»0x»,»»);

    ГУИДУдОбъктаСтр = Сред(ГУИДУдОбъктаСтр, Найти(ГУИДУдОбъктаСтр,»:»)+1, СтрДлина(ГУИДУдОбъктаСтр));

    // Преобразуем GUID

    ГУИД = Сред(ГУИДУдОбъктаСтр,25,8)+»-«+Сред(ГУИДУдОбъктаСтр,21,4)+»-«+Сред(ГУИДУдОбъктаСтр,17,4)+»-«+Сред(ГУИДУдОбъктаСтр,1,4)+»-«+Сред(ГУИДУдОбъктаСтр,5,12);

    //и получаем ГУИД = 05dbe824-a4c6-11dd-bf56-00145e3710ab

    Reply
  7. alfir70

    (1) я не делал редактор объектов — он — тяжелый

    просто поиск объекта в базе по разным уидам

    Reply
  8. alfir70

    (6) Функция СтрокадляSQLИзСсылки(ЛюбаяСсылка)

    ЛюбаяСсылка16 = врег(ЗначениеВСтрокуВнутр(ЛюбаяСсылка));

    ПозицияДвоеточия = Найти(ЛюбаяСсылка16, «:»);

    Ссылка16 = Сред(ЛюбаяСсылка16, ПозицияДвоеточия + 1, 32);

    Ссылка16 = ВРег(Ссылка16);

    Возврат Ссылка16;

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

    Функция СсылкаИзДвоичныхДанных(ЗНАЧ ПустаяСсылка, ДвоичныеДанные)

    Если НЕ ТипЗнч(ПустаяСсылка) = Тип(«Строка») Тогда

    ЛюбаяСсылка16 = врег(ЗначениеВСтрокуВнутр(ПустаяСсылка));

    ПозицияДвоеточия = Найти(ЛюбаяСсылка16, «:»);

    ПустаяСсылка = Лев(ЛюбаяСсылка16, ПозицияДвоеточия);

    КонецЕсли;

    Если ТипЗнч(ДвоичныеДанные) = Тип(«Строка») Тогда

    Возврат ЗначениеИзСтрокиВнутр(ПустаяСсылка + ДвоичныеДанные + «}»);

    Иначе

    Возврат ЗначениеИзСтрокиВнутр(ПустаяСсылка + ПолучитьHexСтрокуИзДвоичныхДанных(ДвоичныеДанные) + «}»);

    КонецЕсли;

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

    Reply
  9. alfir70

    (1) я для себя делал

    беру гуиды из sql (не 1с база)

    и быстро нужно найти объект в 1с

    Reply
  10. PerlAmutor

    (5) Тем, что оно включено не для всех объектов конфигурации (как в пользовательском режиме, так и внутри конфигурации). Тем, что версия может не писаться при обмене через планы обменов. Тем, что старые версии могут чиститься регламентным заданием.

    Reply
  11. alfir70

    (2) по какому принципу вы хотите искать дату создания исходя из ссылки?

    Reply
  12. PerlAmutor

    (11) По такому вот https://infostart.ru/public/337631/

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *