Профессия — 1С » Битые ссылки

При возникновении любой ошибки мы стараемся не только нивелировать ее последствия, но и предотвратить ее возникновение в будущем ✍ Чтобы не допустить повторного появления битых ссылок на удаленные объекты, нам необходимо понять причины их появления в базах 1С 8.3

Поиск битых ссылок в 1С запросом

Очень часто встает вопрос: как отобрать элементы с битыми ссылками запросом 1С?

Вопрос решается достаточно легко, рассмотрим его на примере:

необходимо отобрать документы Счет на оплату покупателю, где вместо организации установлена «битая ссылка».

Решение задачи:

Поиск битый ссылок запросом

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания – попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Что мы сделали?

Первым отбором «НЕ СчетНаОплатуПокупателю.Организация ЕСТЬ NULL»  мы определили, что ссылка установлена.

Вторым отбором СчетНаОплатуПокупателю.Организация.Код ЕСТЬ NULL, обращаясь к коду организации по точке, система строит левое соединение, но не находит в таблице организаций такой элемент — возвращает NULL.

Всё получается достаточно просто.

Рубрики

Свежие комментарии

Декабрь 2021
Пн Вт Ср Чт Пт Сб Вс
  1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

« Ноя    

Причины, поиск и исправление битых ссылок

При возникновении любой ошибки мы стараемся не только нивелировать ее последствия, но и предотвратить ее возникновение в будущем. Чтобы не допустить повторного появления ссылок на удаленные объекты, нам необходимо понять причины их появления в базах 1С 8.3. Обычно подобные явления, называемые битыми ссылками, возникают из-за следующих нюансов:

  1. Недостаточно безопасно настроены права, из-за чего у пользователей есть возможность прямого удаления элементов базы данных. Обычно простым пользователям не дают права на удаление во избежание подобных ситуаций;
  2. Случайное программное удаление данных. Для недопущения битых ссылок используйте функцию «УдалитьОбъекты», передавая объекты в нее в виде массива ссылок. Эта функция проверяет, есть ли в базе ссылки на удаляемые объекты, и стирает только неиспользуемые данные;
  3. Неверно настроенный обмен данными. Здесь совет один – при создании обмена между различными базами стоит быть внимательнее и проверить все ключевые реквизиты.
Рис.1 Тестирование и исправление ИБРис.1 Тестирование и исправление ИБ

После того, как мы разобрались с причинами, нам предстоит исправить сложившуюся ситуацию. Для этого необходимо найти битые ссылки и удалить или исправить их. Для этих целей платформа 1С имеет функционал тестирования и исправления, встроенный в конфигуратор. Чтобы его запустить, необходимо зайти в меню «Администрирование» – «Тестирование и исправление», настроить параметры и нажать «Выполнить». Если оптимизация и ускорение работы 1С вызывает у вас сложности, обратитесь к нашим специалистам по сопровождению 1С.

После выполнения тестирования и исправления 1С выдаст информационное окно, в котором перечислены все исправленные объекты. Эти данные лучше сохранить, чтобы в будущем не было претензий со стороны пользователей. Но у этого механизма есть два серьезных недостатка – он медленный и ему необходим монопольный доступ. Поэтому большинство специалистов самостоятельно пишут небольшие обработки, которые ищут и исправляют битые ссылки.

Для программного поиска обычно используют один из двух методов – с помощью языка запросов или через функцию «ПолучитьОбъект». Рассмотрим пример, когда нам необходимо найти ссылки на удаленного поставщика в документах «ПриобретениеТоваровУслуг». Выберем все документы, где значение поля «Партнер» не равно пустой ссылке, то есть заполнено, и есть NULL. Этот метод хорош тем, что можно установить дополнительные отборы или взять сразу несколько типов документов.

Запрос = Новый Запрос;Запрос.Текст = “ВЫБРАТЬ | ПриобретениеТоваровУслуг.Ссылка КАК Ссылка | ИЗ | Документ.ПриобретениеТоваровУслуг КАК ПриобретениеТоваровУслуг | ГДЕ | ПриобретениеТоваровУслуг.Партнер = ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка) | И ПриобретениеТоваровУслуг.Партнер ЕСТЬ НЕ NULL“;РезультатЗапроса = Запрос.Выполнить();ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ДокументДляИсправления =ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); ДокументДляИсправления.Партнер = Справочники.Партнеры.ПустаяСсылка(); // код для замены на другого партнера(предварительно он должен быть создан) //ДокументДляИсправления.Партнер = Справочники.Партнеры.НайтиПоНаименованию(“ПартнерДляБитыхСсылок”); ДокументДляИсправления.Записать() ;КонецЦикла;

Результатом запроса будет перечень документов с битыми ссылками. Чтобы их удалить, мы получаем объект каждого документа по ссылке, заменяем реквизит «Партнер» на пустую ссылку и записываем документ. Также можно заменить «.» на другого партнера или попробовать восстановить данные из резервной копии.

Использование метода «ПолучитьОбъект» постепенно уходит в прошлое, но остается достаточно эффективным решением для поиска битых ссылок. Суть в проверке каждого документа определенного типа и, если обнаружена битая ссылка в 1С, то удаляем ее или заменяем.

На практике удаление битых ссылок и их замена чаще всего осуществляются в ручном режиме ответственными пользователями. Для этого им нужен перечень документов, который мы им можем обеспечить, заменив в коде запись документа на команду «Сообщить».

ВыборкаДокументов = Документы.ПриобретениеТоваровУслуг.Выбрать() ;Для каждого элемент из ВыборкаДокументов цикл Если не элемент.Партнер.Пустая() И элемент.Партнер.ПолучитьОбъект() = неопределено тогда ДокументДляИсправления =элемент.Ссылка.ПолучитьОбъект(); ДокументДляИсправления.Партнер = Справочники.Партнеры.ПустаяСсылка(); // код для замены на другого партнера(предварительно он должен быть создан) //ДокументДляИсправления.Партнер = Справочники.Партнеры.НайтиПоНаименованию(“ПартнерДляБитыхСсылок”) ДокументДляИсправления.Записать(); КонецЕсли;КонецЦикла;

Существует возможность воссоздать удаленные данные, используя ссылку из документов. Однако в современных конфигурациях количество реквизитов достаточно большое и программно все их заполнить сложно. В любом случае помните, что необходимо устранить причину возникновения битых ссылок после их ликвидации в базе.

По всем вопросам, связанным с оптимизацией работы 1С, обращайтесь за консультацией по 1С по телефону, а также оставляйте заявки на нашем сайте. Наши специалисты свяжутся с вами в кратчайшие сроки.

Битые ссылки глазами пользователя

В режиме предприятия битые ссылки выглядят так:

Пример битой ссылки 1С

Внимание!

Следует учесть, что такую же «картинку» пользователь может увидеть и в случае некорректно настроенных ролей.

Ниже описано несколько способов поиска некорректных ссылок на объекты.

Проверка работы расширений после обновлений

Тестирование и исправление v8 1cv8.cf Абонемент ($m)

Иногда бывает, что после обновления конфигурации некоторые расширения перестают работать и часто такие ошибки выявляются только в процессе тестирования или рабочем режиме.При правильной разработке и проектировании расширения можно свести к минимуму такие ошибки, но иногда их не избежать.Если в базе расширений не более 5-10, то проверить каждое после обновления не составляет труда, а вот если их больше 50 – проверка отнимает слишком много времениПоэтому была написана обработка, которая в автоматическом режиме проверяет расширения, подключенные в программе.Обработка универсальная и будет работать в любой программе, в которой есть расширения.

3 стартмани

19.07.2019    19492    31    77dream77    4    

Поиск битых ссылок

Допустим, что мы предполагаем наличие битых ссылок в каком-либо объекте. Сразу же возникает вопрос их поиска. Рассмотрим два варианта как это можно сделать программными средствами.

1. С использованием метода ПолучитьОбъект()

Рассмотрим самый простой пример — поиск битых ссылок в реквизите справочника. Пусть в справочнике Товары у нас есть реквизит Поставщик. И есть подозрение, что кто-то удалил поставщика без проверки. Переберем все товары и в каждом товаре проверим поставщика. Суть метода заключается в том, что ссылка у нас есть, а по сути ссылка — это уникальный идентификатор объекта, но самого объекта нет, поэтому метод ПолучитьОбъект() вернет Неопределено.

ВыборкаТовары = Справочники.Товары.Выбрать();Пока ВыборкаТовары.Следующий() Цикл ПоставщикСсылка = ВыборкаТовары.Поставщик; Если НЕ ПоставщикСсылка.Пустая() И ПоставщикСсылка.ПолучитьОбъект() = Неопределено Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = “Найдена битая ссылка на поставщика в товаре: “ + ВыборкаТовары.Наименование; Сообщение.Сообщить(); КонецЕсли;КонецЦикла;

2. С использованием языка запросов 1С

Сейчас в версиях платформы 1С8 достаточно редко можно встретить код, где как в предыдущем примере выполняется обход всех элементов справочника. Как правило все делается с использованием языка запросов 1С. И поиск битых ссылок не исключение. Их также можно искать при помощи запросов. В этом случае у нас поле Товары.Поставщик.Ссылка будет равно NULL. И плюс надо отсечь товары у которых поставщик просто не заполнен:

Запрос = Новый Запрос;Запрос.Текст =“ВЫБРАТЬ| Товары.Представление КАК Товар|ИЗ| Справочник.Товары КАК Товары|ГДЕ| Товары.Поставщик.Ссылка ЕСТЬ NULL | И Товары.Поставщик <> ЗНАЧЕНИЕ(Справочник.Поставщики.ПустаяСсылка)”;Результат = Запрос.Выполнить();Выборка = Результат.Выбрать();Пока Выборка.Следующий() Цикл Сообщение = Новый СообщениеПользователю; Сообщение.Текст = “Найдена битая ссылка на поставщика в товаре: “ + Выборка.Товар; Сообщение.Сообщить();КонецЦикла;

Сервис «Тестирование и исправление информационной базы»

Для открытия окна настройки проверки необходимо в конфигураторе выбрать пункт меню Администрирование > Тестирование и исправление.

Запуск проверки ссылочной целостности 1С

В открывшемся окне устанавливаем флаг «Проверка ссылочной целостности информационной базы». Данная проверка выполняется только совместно с проверкой логической целостности информационной базы.

Далее выбираем что необходимо сделать при обнаружении битых ссылок:

  • Только тестирование — после анализа будет отображен перечень некорректных ссылок;
  • Тестирование и исправление — можно не только получить перечень некорректных ссылок, но и исправить их: очистить некорректную ссылку или создать объект, соответствующий некорректной ссылке.

Следует иметь в виду, что проверка ссылочной целостности выполняется в монопольном режиме, а значит работа пользователей в это время невозможна.

В больших базах процесс поиска битых ссылок может занять достаточно длительное время, и не уложиться в интервал технологического перерыва. Из-за этого в нижней части окна предусмотрена возможность порционного выполнения.

Определение битой ссылки в объектной модели

Если у Вас нет возможности сделать проверку запросом, рекомендую использовать два разных метода. Рассмотрим их на примере, который давали ранее:

Используя ПолучитьОбъект()

При использовании метода «ПолучитьОбъект()» битая ссылка вернет «Неопределено».

Например:

Если Счет.Организация.ПолучитьОбъект() = Неопределено ТогдаСообщить(“Ссылка битая!”);КонецЕсли;

Поиск в строке

Этот метод самый простой — поиск строки «Объект не найден» в представлении элемента.

Например:

Если Найти(Строка(Счет.Организация),“Объект не найден”) <> 0 ТогдаСообщить(“Ссылка битая!”);КонецЕсли;

Читайте также другие статьи по разработке в 1С.

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Программный поиск битых ссылок

Программный поиск битых ссылок обладает одним несомненным преимуществом: нет необходимости устанавливать монопольный режим и ограничивать доступ пользователей к базе.

Фирма 1С не предоставляет какой-то универсальной обработки для поиска битых ссылок в пользовательском режиме, поэтому придется «творить» самому. Вот несколько подходов, которые можно использовать:

  • Получение в запросе подчиненного реквизита и сравнение его с NULL. В качестве подчиненного реквизита наиболее рационально использовать ссылку — она есть у всех объектов. В запросе также необходимо учесть, что подчиненный реквизит от пустой ссылки также возвращает NULL.
  • Получение объекта от ссылки при помощи метода ПолучитьОбъект(). Если ссылка битая, то будет возвращено значение Неопределено.
  • Получение представления ссылочного типа и сравнение его со строкой «<Объект не найден>».

// ***** Поиск битых ссылок при помощи запроса *****Запрос = Новый Запрос;Запрос.Текст =     “ВЫБРАТЬ    |    ПоступлениеТоваровУслуг.Ссылка,    |    ПоступлениеТоваровУслуг.Контрагент    |ИЗ    |    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг    |ГДЕ    |    ПоступлениеТоваровУслуг.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)    |    И ПоступлениеТоваровУслуг.Контрагент.Ссылка ЕСТЬ NULL”;// ***** Определение корректности ссылки при помощи метода ПолучитьОбъект() *****Если ЗначениеЗаполнено(Док.Контрагент) И Док.Контрагент.ПолучитьОбъект() = Неопределено Тогда    // Значение реквизита Контрагент – битая ссылкаКонецЕсли;// ***** Определение корректности ссылки путем анализа представления *****Если Найти(Строка(Док.Контрагент), “<Объект не найден>”) > 0 Тогда    // Значение реквизита Контрагент – битая ссылкаКонецЕсли;

Остались вопросы?
Спросите в комментариях к статье.

Смотри также:

Монопольный режим 1С
Список информационных баз 1С
Как определить где хранятся файлы базы 1С

2017-06-09

Поиск и восстановление битых ссылок (Объект не найден)

Поиск данных Тестирование и исправление v8 v8::УФ 1cv8.cf Абонемент ($m)

Групповая обработка ссылок вида Объект не найден (502:37855254002e11eb11e73b8f36150d9e) заполняется максимально просто копированием и вставкой из буфера:1) Выделяет уникальные идентификаторы (далее УИ);2) Ищет ссылки на объекты базы по УИ;3) Создаёт пустые объекты с указанным УИ;4) Регистрирует найденные ссылки для обмена данными.Работает на любых продуктах 8.3.Проверялась на 1С:ERP Управление предприятием 2 (2.4.3.167)

1 стартмани

17.08.2018    19468    153    sapervodichka    2    

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...