1с объект не найден получить guid
Если Вам встречались в базе записи "<Объект не найден>", то значит настала пора познакомитсья с Уникальным идентификатором .
Уникальный идентификатор - это уникальный набор символов который характерезует экземпляр метаданных объектного типа в 1С(Напрмимер, элемент справочника или документ). По сути ссылка и является уникальным идентификатором, причем даже у разных видов объектов он не может быть похож. Выглядит он примерно так:
Т.е. это набор из 32 шестнадцатеричных цифр разделенных дефисами.
Надпись <Объект не найден> появляется в базе когда есть ссылка(уникальный идентификатор) на объект, а объекта в базе нет. Такое может возникнуть или при удалении объектов без проврки ссылочной целостности или при обмене между базами.
Разберем для примера надпись: <Объект не найден> (36:9c4e0022642fda9811e10393c0d776fd)
Для начала узнаем какой тип объекта был удален, для этого используем метод ПолучитьСтруктуруХраненияБазыДанных(), он возвращает таблицу значений(по умолчанию в формате SDBL) где указано соответсвие внутренних идентификаторов и объектов метаданных.
Например можно написать такой код:
В ней мы находим идентификатор который в конце содержит 36 (цифры до двоеточия), но только не в составе числа( Document2836 ), а точное соответсвие. В нашем случае это следующая строка:
Reference36 | Справочник.Номенклатура |
Значит удаленный элемент был элементом справочника "Номенклатура".
Как Вы заметили внутри скобок находится тип объекта и уникальный идентификатор строкой.
Теперь мы можем на одной из архивных копий найти удаленный элемент, добавив дефисы в имеющуюся у нас строку идентификтора:
Зная все значения полей мы можем вручную или с помощью обработок воссоздать удаленный элемент, но у них будет одно главное отличие - разные Уникальные идентификаторы. А если мы хотим восстановить элемент, то и идентификатор нужно восстановить тот же. Для этого нужно использовать метод "УстановитьСсылкуНового", например так:
Итак, обработка позволяет по ID определить, какому объекту базы данных он принадлежит. Поддерживаются все ссылочные типы базы данных.
Реализовано три режима: поиск ссылки, создание объекта БД и получение ссылки для объекта БД.
Поиск ссылки
Идентификатор, вводимый в поле "Известный GUID" может иметь различные виды:
1. Объект не найден (25:888ba76e-9ccf-aed3-4a2f-1d8152ba0f17)
Обычно такие ссылки, они же "битые" появляются в результате обмена данными, когда ссылка на объект выгрузилась, а сам объект - нет.
Частный случай пункта 1.
Обычная ссылка, полученная применением функции Строка() к объекту типа "УникальныйИдентификатор()". Может где-нибудь храниться, например в регистре "Соответствие объектов информационных баз".
Тоже, что и в пункте 3, без дефисов.
Можно вводить (копипастить) в любом формате. Следует отметить, что если в ID присутствует номер таблицы из структуры хранения БД, то объект определяется из этой таблицы. Например, здесь это номер "25" - число перед ":" в идентификаторе.
Далее - нажимаем кнопку "Найти ссылку" и в поле "Результат" появится ссылка на объект БД (если он найдется, если нет, то "битая"). Если объект не найден, то его можно создать - на второй закладке.
Итак, поиск осуществляется:
- если есть номер таблицы, то сразу в этой таблице;
- если номера нет, то по порядку во всех ссылочных типах БД.
Создание объекта
Все тоже самое, только кнопка другая - "Создать объект". Система пытается создать объект и установить для него введенный ID. Если удалось, то пользователю предлагается заполнить форму этого объекта и записать его в БД.
Опять же, если в идентификаторе есть номер таблицы, то создаем объект сразу в этой таблице. Если нет, то выбираем тип создаваемого объекта руками.
Получение ссылки
По выбранной ссылке на объект БД система получает ее уникальный идентификатор в 3-х вариантах (для удобства).
Также определяется название таблицы хранения объекта, которому принадлежит выбранная ссылка.
Области использования обработки
Сколько раз я видел у клиентов криво настроенный обмен, в результате которого появлялась куча битых ссылок. При анализе таких обменов (особенно XML) важно понимать, что за объект скрывается за битой ссылкой в базе-источнике. Особенно когда реквизит приемника составного типа или вообще любая ссылка. Эта обработка быстро ответит на данный вопрос. Без нее нудно тратилось время на выяснение сего момента, зачастую набивая код в "табло", т.к. нужно было быстро понять, в чем дело, а обработку писать не хотелось.
Также, например, в регистре "Соответствие объектов информационных баз" хранится это самое соответствие. Объект в текущей базе ясен, а вот что там за ID лежит - вопрос. Хотя, конечно, тут тип можно определить быстро.
Еще бывали моменты, когда есть список ID-шников и попробуй определи, что это за объекты.
Полезно использовать мою обработку вместе с обработками поиска битых ссылок.
Обработка написана под 8.2, но можно использовать и для 8.1 с предварительной конвертацией. Формы - обычные.
Планируемые доработки
1. Получение ID для любой ссылки. Реализовано .
2. Возможность передавать список ID-шников для поиска ссылок в базе-источнике.
3. Получение ID ссылки на объект в другой базе через COM-соединение и наоборот.
<Объект не найден> (84:893f00215aecf30a11e0760ca6c900fd) - Что же делать!?
В данной статье я опишу пример быстрого восстановления данных.
Откройте ее в 1С через Файл - Открыть, откроется окно вида:
Поиск битых ссылок в базе 1С
Для примера, найдем битые ссылки в Документах
Восстановление битой ссылки в 1С
Копируем текст объект не найден. и вставляем в поле:
Нажимаем на кнопку Получить GUID
В результате обработки получаем GUID и ТИП удаленного элемента.
Нажав создать объект из GUID. открывается форма Ввода нового Элемента,
Заполните её данными (если есть архив базы, то используйте его для поиска данных)
Как в архивной копии базы найти элемент по GUID
Открываем копию базы, через Файл - Открыть запускаем обработку
В поле GUID вставляем полученный ранее guid
Нажав на Ссылку -> получим элемент базы данных с этим guid
Открыв на просмотр найденный элемент, вы можете скопировать все данные для восстановления удаленного элемента в предыдущей базе.
Аналогично, можно обратно - из Ссылки получить Guid
Надеюсь что интерфейс обработки понятен и прост.
Пишите, пожалуйста, все свои пожелания и замечания в комментариях.
2. Если Вы знаете что удалили, то можете сразу нажать кнопку Создать Объект Из GUID - Пункт 4.
3. Если Вы не знаете что удалили, тогда вам нужно поднять архивную копию базы, открыть там обработку и вставить полученный GUID в поле GUID.
далее нажать Ссылку -> и в правом поле отобразится необходимый Вам объект(в моем случае Попов Роман Владимирович).
Открыв его, узнаем что это справочник Сотрудники и всю содержащуюся в справочнике информацию. Возвращаемся в базу, где необходимо восстановить объект и жмем кнопку Создать Объект Из GUID
4. Из открывшегося списка выбираем Справочник Сотрудники, в открывшейся форме заполняем все поля данными из архивной базы и жмем OK. Все, данный объект восстановлен.
Для быстрого поиска всех <Объект не найден> используйте Поиск в базе битых ссылок - "объект не найден"
Для программиста:
Для получения уникального идентификатора объекта, используйте код вида:
Код 1C v 8.х
Для того чтобы преобразовать <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824) в УникальныйИдентификатор (GUID)
Код 1C v 8.х
Для получения ссылки по уникальному идентификатору, используйте код:
Код 1C v 8.х
Создать объект документ или справочник и установить ему свой Уникальный идентификатор
Код 1C v 8.х
Для 1С 7.7 смотрите:
Технология восстановления удаленных объектов или элементов в 1С 7.7
еще можно получить ИдентификаторДокумента при OLE доступе:
Код 1C v 7.x
Еще посмотрите метод:
ЗначениеВСтрокуВнутр(<?>);
Синтаксис:
ЗначениеВСтрокуВнутр(<Объект>)
Назначение:
Преобразование значения объекта агрегатного типа в строковое системное представление.
Возвращает: представление значения объекта в строковом системном виде.
Параметры:
<Объект> - значение объекта агрегатного типа данных которое нужно преобразовать.
Подробнее см. в документации, глава ''Системные процедуры и функции''
Читайте также: