Открыв документ или справочник на месте реквизита, который обычно заполнен, вы обнаруживаете надпись «Объект не найден…». Это может означать только одно – кто-то из пользователей удалил данные базы данных, не проконтролировав их использование. Ситуация неприятная, но не безвыходная – подобные проблемы можно и нужно решать, не допуская в будущем. К сожалению, штатных механизмов для решения не предусмотрено, поэтому придется самостоятельно писать обработку для проверки и исправления. Описанные ниже действия требуют определенных знаний, поэтому, если вы не уверены в своих силах, обращайтесь за услугами по доработке и обслуживанию 1С к профессионалам.
Причины, поиск и исправление битых ссылок
При возникновении любой ошибки мы стараемся не только нивелировать ее последствия, но и предотвратить ее возникновение в будущем. Чтобы не допустить повторного появления ссылок на удаленные объекты, нам необходимо понять причины их появления в базах 1С 8.3. Обычно подобные явления, называемые битыми ссылками, возникают из-за следующих нюансов:
- Недостаточно безопасно настроены права, из-за чего у пользователей есть возможность прямого удаления элементов базы данных. Обычно простым пользователям не дают права на удаление во избежание подобных ситуаций;
- Случайное программное удаление данных. Для недопущения битых ссылок используйте функцию «УдалитьОбъекты», передавая объекты в нее в виде массива ссылок. Эта функция проверяет, есть ли в базе ссылки на удаляемые объекты, и стирает только неиспользуемые данные;
- Неверно настроенный обмен данными. Здесь совет один – при создании обмена между различными базами стоит быть внимательнее и проверить все ключевые реквизиты.
После того, как мы разобрались с причинами, нам предстоит исправить сложившуюся ситуацию. Для этого необходимо найти битые ссылки и удалить или исправить их. Для этих целей платформа 1С имеет функционал тестирования и исправления, встроенный в конфигуратор. Чтобы его запустить, необходимо зайти в меню «Администрирование» - «Тестирование и исправление», настроить параметры и нажать «Выполнить». Если оптимизация и ускорение работы 1С вызывает у вас сложности, обратитесь к нашим специалистам по сопровождению 1С.
После выполнения тестирования и исправления 1С выдаст информационное окно, в котором перечислены все исправленные объекты. Эти данные лучше сохранить, чтобы в будущем не было претензий со стороны пользователей. Но у этого механизма есть два серьезных недостатка – он медленный и ему необходим монопольный доступ. Поэтому большинство специалистов самостоятельно пишут небольшие обработки, которые ищут и исправляют битые ссылки.
Для программного поиска обычно используют один из двух методов – с помощью языка запросов или через функцию «ПолучитьОбъект». Рассмотрим пример, когда нам необходимо найти ссылки на удаленного поставщика в документах «ПриобретениеТоваровУслуг». Выберем все документы, где значение поля «Партнер» не равно пустой ссылке, то есть заполнено, и есть NULL. Этот метод хорош тем, что можно установить дополнительные отборы или взять сразу несколько типов документов.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПриобретениеТоваровУслуг.Ссылка КАК Ссылка
| ИЗ
| Документ.ПриобретениеТоваровУслуг КАК ПриобретениеТоваровУслуг
| ГДЕ
| ПриобретениеТоваровУслуг.Партнер = ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка)
| И ПриобретениеТоваровУслуг.Партнер Ссылка ЕСТЬ NULL";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ДокументДляИсправления =ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
ДокументДляИсправления.Партнер = Справочники.Партнеры.ПустаяСсылка();
// код для замены на другого партнера(предварительно он должен быть создан)
//ДокументДляИсправления.Партнер = Справочники.Партнеры.НайтиПоНаименованию("ПартнерДляБитыхСсылок");
ДокументДляИсправления.Записать() ;
КонецЦикла;
самые свежие новости 1 раз в месяц
Результатом запроса будет перечень документов с битыми ссылками. Чтобы их удалить, мы получаем объект каждого документа по ссылке, заменяем реквизит «Партнер» на пустую ссылку и записываем документ. Также можно заменить «<Объект не найден…>.» на другого партнера или попробовать восстановить данные из резервной копии.
Использование метода «ПолучитьОбъект» постепенно уходит в прошлое, но остается достаточно эффективным решением для поиска битых ссылок. Суть в проверке каждого документа определенного типа и, если обнаружена битая ссылка в 1С, то удаляем ее или заменяем.
На практике удаление битых ссылок и их замена чаще всего осуществляются в ручном режиме ответственными пользователями. Для этого им нужен перечень документов, который мы им можем обеспечить, заменив в коде запись документа на команду «Сообщить».
ВыборкаДокументов = Документы.ПриобретениеТоваровУслуг.Выбрать() ;
Для каждого элемент из ВыборкаДокументов цикл
Если не элемент.Партнер.Пустая() И элемент.Партнер.ПолучитьОбъект() = неопределено тогда
ДокументДляИсправления =элемент.Ссылка.ПолучитьОбъект();
ДокументДляИсправления.Партнер = Справочники.Партнеры.ПустаяСсылка();
// код для замены на другого партнера(предварительно он должен быть создан)
//ДокументДляИсправления.Партнер = Справочники.Партнеры.НайтиПоНаименованию("ПартнерДляБитыхСсылок")
ДокументДляИсправления.Записать();
КонецЕсли;
КонецЦикла;
Существует возможность воссоздать удаленные данные, используя ссылку из документов. Однако в современных конфигурациях количество реквизитов достаточно большое и программно все их заполнить сложно. В любом случае помните, что необходимо устранить причину возникновения битых ссылок после их ликвидации в базе.
По всем вопросам, связанным с оптимизацией работы 1С, обращайтесь за консультацией по 1С по телефону, а также оставляйте заявки на нашем сайте. Наши специалисты свяжутся с вами в кратчайшие сроки.
консультация эксперта
самые свежие новости 1 раз в месяц