Как в запросе отобрать битые ссылки, поиск Битых Ссылок
Когда объект был удален непосредственно, то все ссылки на него в справочниках, в документах, в регистрах стали битыми и отображаются следующим образом:<Объект не найден> (16:bca8000c6efdd52111d8eaba7c9706eb)
Битая ссылка не является пустой. Т.е. метод Пустая() возвращает Ложь. Определить, что ссылка битая можно так:
Код 1C v 8.х
Код 1C v 8.х
И последний вариант для проверки в запросах:
ГДЕ Объект.РеквизитОбъекта ЕСТЬ NULL И Не Объект=&ПустаяСсылкаОбъекта
Ниже дана программа для удаления записей регистров, у которых регистратор — битая ссылка, т.е. не существует в базе.
<Объект не найдет>, как красиво проверить?
Я считаю, что неверно поставлена цель.
Не "как красиво проверить", а "как эффективно".
На мой взгляд самый эффективный способ в (3).
(20) замер на простом (с точки зрения структуры) справочнике показывает как ни (очень!) странно, что он самый медленный
Для инд = 1 по 1000 Цикл
Ссылка = Справочники.Банки.ПолучитьСсылку();
Запрос = Новый Запрос;//2%
Запрос.Текст =
"ВЫБРАТЬ
| Банки.код
|ИЗ
| Справочник.Банки КАК Банки
|ГДЕ
| Банки.Ссылка = &Ссылка";
Есть = НЕ РезультатЗапроса.Пустой();
Ссылка = Справочники.Банки.ПолучитьСсылку();
Есть = Ссылка.ПолучитьОбъект() <> Неопределено;//25%
Ссылка = Справочники.Банки.ПолучитьСсылку();
Есть = Найти(""+Ссылка, "<Объект не") = 0;//16%
Ссылка = Справочники.Банки.ПолучитьСсылку();
Есть = ЗначениеЗаполнено(Ссылка.ВерсияДанных);//24%
КонецЦикла;
Объект не найден — как исправить эту ошибку в программных продуктах 1С?
Судя по количеству просмотров предыдущей статьи про повреждение файла базы данных, мы понимаем, что такие ошибки в работе пользователей 1С – далеко не редкость. В прошлом материале мы подробно описали механизм исправления этого недочета. И на, первый взгляд, все стало хорошо: ошибка устранена, пользователь смог зайти в базу данных и продолжить работу. Однако далее была обнаружена еще одна ошибка с текстом «Объект не найден», вызванная всё тем же повреждением базы данных. И тут уже придется прибегнуть к тестированию базы. Каким образом была выявлена эта ошибка и как исправлена, расскажем далее.
Для начала приведем пример как выглядит эта ошибка:
Данная ошибка может проявляться в любом документе, в любой базе. В наименовании этой ошибки могут быть любые символы (буквы/цифры). Главное – это название «Объект не найден».
Каким образом эта ошибка себя проявила?
После устранения сбоя, описанного нами ранее, программа открывается и работает, но ведет себя странно. В отчетах отображается информация, а первичный документ пользователь не может найти. В частности, начисление зарплаты по сотруднику. При вводе начисления еще раз документ формируется пустым. И ведь верно – зарплата то ему уже начислена. И это «подтверждают» отчеты. Посмотрим более внимательно.
Сформировав отчет «Полный свод начислений и удержаний», мы видим, что начисление есть.
Попытаемся разобраться, какой документ зафиксировал это начисление. Дальше мы наблюдаем за этой суммой…
Чтобы посмотреть, каким документом введена сумма, нажмите на ней правой кнопкой мышки и выберите команду «Расшифровать».
В открывшемся окне выберите «Регистратор».
Регистратор – это и есть документ, зафиксировавший запись, на основании которой формируется данный отчет и выбранная сумма.
Открываем расшифровку и что мы видим: «Объект не найден» и наша сумма.
В среде программистов это называется «битая ссылка», т.е. в отчете данные отображены (данные в таблицах программы зафиксированы), а сам объект отсутствует. Соответственно, это не дает нам дальше работать, вводить документы, плюс это отображает некорректную информацию.
Все отчеты показывают, что сумма есть. А первичный документ (в нашем случае – начисление зарплаты) мы найти не можем.
Рассмотрим, как выйти из такой ситуации.
Удаление битых ссылок. Тестирование информационной базы.
Шаг 1. Запустите программу в режиме «Конфигуратор».
Шаг 2. Выберите в разделе «Администрирование» пункт «Тестирование и исправление…».
Еще раз напоминаем, что при любых действиях с информационной базой, рекомендуется сначала сделать ее резервную копию. И если вы сомневаетесь в ваших действиях, обратитесь к специалисту за помощью.
Шаг 3. Сделайте резервную копию информационной базы.
В окне настройки тестирования много галочек и каждое действие выполняется при разного рода ошибках. В нашем случае нарушена ссылочная целостность информационной базы. И далее все зависит от варианта решения проблемы. В нашем случае произошла потеря данных, создать объект не получится. Потому, чтобы избавиться от «битой ссылки», ее просто надо удалить.
Шаг 4. Установите галочку «Проверка ссылочной целостности» и «Проверка логической целостности». Установите переключатель в положение «Очищать ссылки» и «Удалять объект».
Т.е. при обнаружении таких несуществующих объектов, система их удалит.
Установка других галочек, в принципе, не помешает. Подробно мы их рассматривать в данной статье не будем. Единственное, некоторые процессы могут занять длительное время.
По окончанию проверки внизу выводится сообщение, что «Тестирование закончено» и строчки проверки «перестают бегать» в окне служебных сообщений.
Наша ошибка исправлена.
Шаг 5. Проверим базу.
Сумма с «битой ссылкой» исчезла из отчета «Полный свод начислений и удержаний».
Программа дает заполнить документ «Начисление зарплаты и взносов» корректно.
Как исправить ошибку — объект на найден в 1С
В статье рассмотрим вопрос как исправляются те ситуации в программе, когда можно увидеть ошибку Объект на найден. Рассмотрим на примере конфигурации 1С:Бухгалтерия 3., но материал также будет актуален и для других программных продуктов фирмы 1С. Как показывает практика , ошибка, объект не найден в 1С не редкость и можеи возникать вследствие, к примеру, повреждения информационной базы или удаления объектов информационной базы и пр. Перед выполнением всех действий рекомендуется сделать архивную копию информационной базы.
Для начала приведем пример как может выглядеть данная ошибка в 1С. Как видим вместо номенклатуры в строке табличной части присутствует “объект на найден”.
Также ошибку Объект не найден в 1С можно увидеть в каком-либо сформированном отчете, в котором будем выведен список документов-регистраторов. Вместо конкретного документа может строка с “объект не найден”. При этом по данному документу может отображаться сумма в отчете.
Какие возможны пути решения во втором случае с документом. Можно попробовать произвести тестирование и исправление. Для этого открываем информационную базу в режиме конфигуратора и далее раскрываем раздел “Администрирование”. После этого выбираем пункт “Тестирование и исправление”.
Далее программа предложит перед выполнением сделать резервную копию. Лучше воспользоваться данной рекомендацией. В окне устанавливаем следующие галочки и нажимаем “Выполнить”.
По завершении в окне внизу появится сообщение о том, что тестирование завершено. И можно проверить результат в информационной базе.
В том случае если имело место удаление без пометки на удаление и контроля ссылочной цельности, то восстановить удаленный объект в этой базе уже нельзя. Для решения проблемы, при наличии свежей резервной копии можно восстановить ее и работать в ней.
Если мы знаем какой объект был удален, то можно прибегнуть к помощи обработки “Выгрузка и загрузка данных XML”. Найти ее можно на просторах интернета или скачать с сайта ИТС. Битые ссылки заменятся нужным объектом из развернутой копии. В нашем примере в документа была удалена номенклатура конфеты “Белочка”.
Открываем обработку в архивной копии и нас будет интересовать закладка “Выгрузка”. Далее переходим на закладку “Дополнительные объекты для выгрузки”. Добавляем интересующую нас номенклатуру в табличную часть и ниже указываем путь, куда будет сохранен выгружаемый xml файл. После чего нажимаем “Выгрузить”.
Далее открываем данную обработку в той базе, где объект не найден и переходим на закладку “Загрузка”. Выбираем наш сохраненный файл выгрузки и нажимаем “Загрузить данные”.
После загрузки проверяем наш документ и видим вместо объект не найдем стоит нужная номенклатура “Белочка”.