gifts2017

Восстановление ссылок по GUID (универсальная)

Опубликовал Роман (srv7) в раздел Администрирование - Тестирование и исправление

Недавно после нестандартного обмена данными я увидел знакомое <Объект не найден>  в полях некоторых элементов базы-приемника и задался вопросом, как можно быстро в базе-источнике найти объект, от которого уехал только ID ? Особенно если реквизит в базе-приемнике составного типа или вообще его тип не ясен... И в ответ написал обработку.

Итак, обработка позволяет по ID определить, какому объекту базы данных он принадлежит. Поддерживаются все ссылочные типы базы данных.

Реализовано три режима: поиск ссылки, создание объекта БД и получение ссылки для объекта БД.

 

Поиск ссылки

Идентификатор, вводимый в поле "Известный GUID" может иметь различные виды:

1. Объект не найден (25:888ba76e-9ccf-aed3-4a2f-1d8152ba0f17)

Обычно такие ссылки, они же "битые" появляются в результате обмена данными, когда ссылка на объект выгрузилась, а сам объект - нет.

2. 25:888ba76e-9ccf-aed3-4a2f-1d8152ba0f17

Частный случай пункта 1.

3. 888ba76e-9ccf-aed3-4a2f-1d8152ba0f17

Обычная ссылка, полученная применением функции Строка() к объекту типа "УникальныйИдентификатор()". Может где-нибудь храниться, например в регистре "Соответствие объектов информационных баз".

4. 888ba76e9ccfaed34a2f1d8152ba0f17

Тоже, что и в пункте 3, без дефисов.

Можно вводить (копипастить) в любом формате. Следует отметить, что если в ID присутствует номер таблицы из структуры хранения БД, то объект определяется из этой таблицы. Например, здесь это номер "25" - число перед ":" в идентификаторе.

Далее - нажимаем кнопку "Найти ссылку" и в поле "Результат" появится ссылка на объект БД (если он найдется, если нет, то "битая"). Если объект не найден, то его можно создать - на второй закладке.

Итак, поиск осуществляется:

- если есть номер таблицы, то сразу в этой таблице;

- если номера нет, то по порядку во всех ссылочных типах БД.

 

Создание объекта

Все тоже самое, только кнопка другая - "Создать объект". Система пытается создать объект и установить для него введенный ID. Если удалось, то пользователю предлагается заполнить форму этого объекта и записать его в БД.

Опять же, если в идентификаторе есть номер таблицы, то создаем объект сразу в этой таблице. Если нет, то выбираем тип создаваемого объекта руками.

 

Получение ссылки

По выбранной ссылке на объект БД система получает ее уникальный идентификатор в 3-х вариантах (для удобства).

Также определяется название таблицы хранения объекта, которому принадлежит выбранная ссылка.

 

Области использования обработки

Сколько раз я видел у клиентов криво настроенный обмен, в результате которого появлялась куча битых ссылок. При анализе таких обменов (особенно XML) важно понимать, что за объект скрывается за битой ссылкой в базе-источнике. Особенно когда реквизит приемника составного типа или вообще любая ссылка. Эта обработка быстро ответит на данный вопрос. Без нее нудно тратилось время на выяснение сего момента, зачастую набивая код в "табло", т.к. нужно было быстро понять, в чем дело, а обработку писать не хотелось.

Также, например, в регистре "Соответствие объектов информационных баз" хранится это самое соответствие. Объект в текущей базе ясен, а вот что там за ID лежит - вопрос. Хотя, конечно, тут тип можно определить быстро.

Еще бывали моменты, когда есть список ID-шников и попробуй определи, что это за объекты.

Полезно использовать мою обработку вместе с обработками поиска битых ссылок. 

Обработка написана под 8.2, но можно использовать и для 8.1 с предварительной конвертацией. Формы - обычные.

 

Планируемые доработки

1. Получение ID для любой ссылки. Реализовано.

2. Возможность передавать список ID-шников для поиска ссылок в базе-источнике.

3. Получение ID ссылки на объект в другой базе через COM-соединение и наоборот.

Скачать файлы

Наименование Файл Версия Размер
Восстановление ссылок по GUID 400
.epf 14,21Kb
13.07.12
400
.epf 14,21Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Валерий (Walther_008) 13.07.12 17:06
Добавь флажок отключения проверок при записи, а то вот ситуация:
Ошибка при восстановлении объекта:

Не заполнено наименование реквизита.
{ВнешняяОбработка.ВосстановлениеСсылокПоGUID.МодульОбъекта(266)}: Ошибка при вызове метода контекста (Записать): Не удалось записать: "Дополнительные реквизиты"!

Конфигурация: БП 2.0.37
Тип битой ссылки: ПВХ.СвойстваОбъектов
2. Роман (srv7) 14.07.12 11:34
(1) Хорошее замечание ) обновил обработку, но не совсем так. Непосредственная запись в базу новых объектов подразумевает под собой соблюдение правил этой базы для ее объектов и ее логики работы. Например, установка номеров документов или кодов справочников, не говоря уже о реквизитах, заполняемых по умолчанию для новых создаваемых объектов. Или установки владельца для подчиненного элемента. Поэтому на этапе создания объекта БД по GUID, когда уже известен тип объекта, я сделал вызов формы этого объекта. Пользователь сам заполняет нужные поля и, при необходимости, записывает элемент в БД.
Также внесены мелкие исправления и доработки.
3. Игорь Хитров (Новенький_2209) 07.11.12 23:16
4. Роман (srv7) 08.11.12 11:58
(3) а причём тут эти ссылки ? обработка написана не опираясь на указанные статьи
5. Игорь Хитров (Новенький_2209) 09.11.12 18:15
(4) и что? Вы же статью написали? Скорее всего люди, прочитавшие ее, и скачавшие вашу обработку, возможно захотят узнать еще что-то по этой теме. Эти ссылки как раз в кассу.
7. Игорь Хитров (Новенький_2209) 11.11.12 20:18
Мда.

Ну автор вы. Надеюсь политики сокрытия и изобретательства себя окупит.

Удачи.
8. Роман (srv7) 12.11.12 00:38
(7) тролли, сгиньте..
разве автор обязан отчитываться перед вами за разработки, которые он написал и "за просто так" их выложил для всеобщего пользования ? если хотите - пользуйтесь разработкой, если не хотите - не пользуйтесь..
набивать себе рейтинг пустыми комментами - дело неблагодарное..

удачи !
9. Роман (srv7) 12.11.12 00:40
(7) и да, новенький_2209, судя по логину вы недавно на сайте, а здесь общаются люди грамотные и знающие русский язык.. держите планку.
10. Maxim Odinsov (Odinsov) 02.04.14 13:32
11. Павел Богачев (pvb2003) 11.09.14 13:20
Для УФ будет версия (нужно УТ 11.1 и БП 3.0)?
12. Андрей Еремин (wingnut) 17.11.14 14:35
Все замечательно, вот только хорошо бы написать, что при восстановлении из строки GUID надо переворачивать.
Так что для строки Объект не найден (25:888ba76e9ccfaed34a2f1d8152ba0f17)
GUID будет выглядеть
1d8152ba0f17-4a2f-aed3-888b-a76e9ccf

Я понимаю, что автор подразумевает, что это все уже знают. Однако желательно это тоже указать в тексте.
dr.death; METAL; +2 Ответить 2
13. Роман (srv7) 18.11.14 01:54
(11) pvb2003, возможно будет, но пока писать не планировал
14. Роман (srv7) 18.11.14 02:01
(12) wingnut, вы что-то путаете, никакого "переворачивания" там нет.. посмотрите код обработки - там явно написано, каким образом формируется строка гуида для восстановления ссылки.. обработку писал давно, но эту часть только что специально проверил )
15. Андрей Баяндин (An-rey) 26.05.15 19:20
Не отработала у меня обработочка. Купил в надежде на успешный результат, но, его не получил.
Может поправите? Последовательность выполнения во вложенном файле.
Прикрепленные файлы:
гуид_подразд.doc
16. Михаил Беляев (METAL) 17.02.16 15:41
(15) An-rey, у меня та же проблема, только в УТ10.3 со справочником Номенклатура
А именно, при поиске по
<Объект не найден> (68:ba460050568268dc11e370615466d1f3)
вроде бы результат есть, внизу пишет Номенклатура, то есть тип определился верно, и в поле Результат что-то есть, но там опять же битая ссылка, правда другая
<Объект не найден> (68:11e370615466d1f368dc5682ba460050)
См.скрин http://i.imgur.com/UAoDRkR.png

При этом точно известно, что нужный объект в искомой базе есть
И если его указать на третьей закладке и получить GUID и помощью этой обработки, то получается вот такое
<Объект не найден> (68:5466d1f3-7061-11e3-ba46-0050568268dc)
И вот по этой строке уже нормально находит!

(12) wingnut, похоже, Вы правы!
17. Михаил Беляев (METAL) 17.02.16 16:05
Таким образом, перед поиском строку из 1С:Предприятия
<Объект не найден> (68:ba46-0050568268dc-11e3-7061-5466d1f3)
надо преобразовать в
<Объект не найден> (68:5466d1f3-7061-11e3-ba46-0050568268dc)

Если представить ГУИД в исходной строке как 5 групп цифр:
1. 4 символа
2. 12 симв.
3. 4
4. еще 4
5. и 8

В итоге алгоритм напрашивается такой
1. Сперва разбить строку на эти группы символов
2. Потом переставить группы в таком порядке
5-4-3-1-2
3. Полученное вставить в обработку из данной публикации

Протестировал вручную, на моём примере работает!

Надеюсь, автор в ближайшее время поправит разработку!
18. Михаил Беляев (METAL) 17.02.16 16:41
Роман (автор), отправил Вам в личку доработанный вариант, можете использовать при желании
19. Роман (srv7) 17.02.16 19:19
(17) METAL, ничего преобразовывать не надо. Изначально (посмотрите по тексту описания обработки выше) описан формат битой ссылки 8-4-4-4-12, т.е. как Вы написали во втором варианте, к которому преобразовывали ( <Объект не найден> (68:5466d1f3-7061-11e3-ba46-0050568268dc) ). Другой вопрос - откуда Вы взяли битую ссылку такого рода "<Объект не найден> (68:ba460050568268dc11e370615466d1f3)", которая на Ваш взгляд перевёрнутая и некорректная ?
20. Роман (srv7) 17.02.16 19:20
(17) METAL, обработка писалась под 8.2 ещё, возможно что-то в 8.3 или её подрелизах поменялось.