Guesto notes
Иногда в ИБ можно встретить ссылки на объекты (75:a353ac9e17b7bc7111e60238e0dc59c6), это ссылки на удаленные объекты. Получаются такие ссылки в ходе сбоев ИБ, РИБ(Распределенных Информационных Баз) или других механизмов создающих ссылки не записанных объектов(разбирал здесь).
В любом случае — это не есть хорошо, будем исправлять! Разберем пример поиска таких ссылок в регистре сведений «Данные для обработки» некой конфигурации, регистр имеет одно измерение «Номенклатура«, тип Справочник.Номенклатура.
В рамках задачи необходимо удалить записи регистра с битыми ссылками, в статье не будет разбираться тестирование и исправление ИБ, или другое восстановление ссылок.
Поиск ссылок
Сама ссылка считается валидной, а вот если обратиться к ее реквизиту в запросе, то получим NULL. Из этого пишем запрос получающий наименование из ссылки в измерении «номенклатура» регистра сведений «Данные для обработки» и отбираем записи у которых значение запрашиваемого реквизита равно NULL. Если измерений по которым необходимо производить поиск больше одного, то объединяем условия через ИЛИ.
А для удаления таких записей просто создадим наборы записей указав отборы и запишем.
После выполнения данного кода из регистра сведений будут удалены все записи со ссылками .
Для пользователя:
Скачиваете эту обработку восстановления объектов по GUID :
Для 1С 8.1:
здесь или Скачивать файлы может только зарегистрированный пользователь!
Для 1С 8.2:
Скачивать файлы может только зарегистрированный пользователь!
. Новая Версия. 8.2 и 8.3 – Скачивать файлы может только зарегистрированный пользователь! Подробное описание: Объект не найден в 1С или про Битые ссылки 1С
и открываете ее в программе:
1. Копируем фразу и получаем 05dbe824-a4c6-11dd-bf56-00145e3710ab
2. Если Вы знаете что удалили, то можете сразу нажать кнопку Создать Объект Из GUID – Пункт 4.
3. Если Вы не знаете что удалили, тогда вам нужно поднять архивную копию базы, открыть там обработку и вставить полученный GUID в поле GUID.
далее нажать Ссылку -> и в правом поле отобразится необходимый Вам объект(в моем случае Попов Роман Владимирович).
Открыв его, узнаем что это справочник Сотрудники и всю содержащуюся в справочнике информацию. Возвращаемся в базу, где необходимо восстановить объект и жмем кнопку Создать Объект Из GUID
4. Из открывшегося списка выбираем Справочник Сотрудники, в открывшейся форме заполняем все поля данными из архивной базы и жмем OK. Все, данный объект восстановлен.
Для программиста:
Для получения уникального идентификатора объекта, используйте код вида:
Код 1C v 8.х
Для того чтобы преобразовать (84:bf5600145e3710ab11dda4c605dbe824) в УникальныйИдентификатор (GUID)
Код 1C v 8.х
Для получения ссылки по уникальному идентификатору, используйте код:
Код 1C v 8.х
Создать объект документ или справочник и установить ему свой Уникальный идентификатор
Код 1C v 8.х
еще можно получить ИдентификаторДокумента при OLE доступе:
Код 1C v 7.x
Еще посмотрите метод:
ЗначениеВСтрокуВнутр( );
Синтаксис:
ЗначениеВСтрокуВнутр( )
Назначение:
Преобразование значения объекта агрегатного типа в строковое системное представление.
Возвращает: представление значения объекта в строковом системном виде.
Параметры:
– значение объекта агрегатного типа данных которое нужно преобразовать.
Подробнее см. в документации, глава ”Системные процедуры и функции”
Обратите внимание, если в запросе требуется получить ссылку на регистратор регистра накопления, то запрос должен быть построен не к остаткам и не к оборотам, а просто к регистру (как в этом примере)
Итог исполнения запроса:
Регистратор | Номенклатура | СерияНоменклатуры | ДокументОприходования |
Поступление товаров и услуг АМН00015703 от 26.11.2010 12:36:37 | УСИЛИТЕЛЬ БАМПЕРА ЗАДНЕГО | 10702030/281010/0044030, КОРЕЯ | (202:8f3be61ec213fa5511dffc85b405870a) |
… | … | … | … |
Качество | Склад | ХарактеристикаНоменклатуры | СтатусПартии | Заказ |
Некондиция 15 | Основной склад | Купленный | ||
… | … | … | … | … |
Дополнение
По сведениям наших коллег в некоторых случаях может потребоваться отбор не по
а по представлению, т.е. с использованием конструкции вида:
Мы думаем, что это может быть связано с различными видами «битости» ссылок. В любом случае, один из способов должен Вам помочь. Поэтому рекомендуем поэкспериментировать с обоими этими условиями.
Автор 1С
4 thoughts on “ Как в запросе выполнить отбор по «объект не найден» (1С: v8: Программисту) ”
Возможно, есть какие-то нюансы. На ум приходит то, что могут быть «полные» или «частичные» потери связей с исходными объектами и, как следствие, могут быть разные подходы решения задачи.
Хорошо бы проанализировать эту задачу на самых различных данных.
Будем рады любым дополнительным отзывам и сведениям от всех, кто с этим еще столкнется.
Думается мне, что нюанс тут… есть, но только в формулировке и ее понимании.
«нужно проверять на NULL значение ссылки» — неточная и/или неверная формулировка.
Речь идет о том, чтобы условие в запросе выглядело так:
ГДЕ Чек.Номенклатура.Ссылка ЕСТЬ NULL
А это почти равнозначно условию
ГДЕ Чек.Номенклатура.Представление ЕСТЬ NULL
(Почему почти? Я знаю пока одно различие: если есть, скажем, в регистре измерение Операция с типом ПеречислениеСсылка, так в запросе Операция.Ссылка использовать можно, а вот Операция.Представление вызывает ошибку! По крайней мере на платформе 8.2.16.)
По регистру сведений «АналитикаУчетаЗатрат» данный подход не работает ни по ссылке, ни по «Ссылка.Представление», если — тип СправочникСсылка.КлючиАналитикиУчетаЗатрат.