helpf.pro
Регистрация
 +6 
Распечатать

Как в запросе отобрать битые ссылки, поиск Битых Ссылок

Когда объект был удален непосредственно, то все ссылки на него в справочниках, в документах, в регистрах стали битыми и отображаются следующим образом:<Объект не найден> (16:bca8000c6efdd52111d8eaba7c9706eb)
Битая ссылка не является пустой. Т.е. метод Пустая() возвращает Ложь. Определить, что ссылка битая можно так:
Код 1C v 8.х
 Если Ссылка.ПолучитьОбъект() = Неопределено Тогда 
//битая ссылка
КонецЕсли;
// или так (НО ненадежно):
Если Лев(СокрЛП(Ссылка),18) = "<Объект не найден>" Тогда

Код 1C v 8.х
 // Еще вариант (действует для обьектов, которые имеют ссылку)
Попытка
обьект=Ссылка.Ссылка;
Исключение
сообщить("битая");
КонецПопытки;


И последний вариант для проверки в запросах:
ГДЕ Объект.РеквизитОбъекта ЕСТЬ NULL И Не Объект=&ПустаяСсылкаОбъекта

Ниже дана программа для удаления записей регистров, у которых регистратор - битая ссылка, т.е. не существует в базе.

Код 1C v 8.х
 Процедура УдалениеБитыхСсылок(ИмяРегистра,ТипРегистра,ТипРегистраЗ)
МенеджерРегистра = ТипРегистра[ИмяРегистра];

Запрос = Новый Запрос("
|ВЫБРАТЬ Регистратор
|ИЗ "+ТипРегистраЗ+"."+ИмяРегистра+"
|ГДЕ Регистратор.Ссылка ЕСТЬ NULL И НЕ Регистратор = &ПустаяСсылкаДокумента");
Запрос.УстановитьПараметр("ПустаяСсылкаДокумента",Неопределено);

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Набор = ТипРегистра[ИмяРегистра].СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(Выборка.Регистратор);
Набор.Записать();
ОбработкаПрерыванияПользователя();
Состояние(""+ТипРегистра+" "+ИмяРегистра);
КонецЦикла;
КонецПроцедуры


Процедура КнопкаВыполнитьНажатие(Кнопка)

Для Каждого пРегистр из Метаданные.РегистрыСведений Цикл
Подчинен = (пРегистр.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору);
Если Подчинен Тогда
УдалениеБитыхСсылок(пРегистр.Имя,РегистрыСведений,"РегистрСведений")
КонецЕсли;
КонецЦикла;

Для Каждого пРегистр из Метаданные.РегистрыБухгалтерии Цикл
УдалениеБитыхСсылок(пРегистр.Имя,РегистрыБухгалтерии,"РегистрБухгалтерии")
КонецЦикла;

Для Каждого пРегистр из Метаданные.РегистрыРасчета Цикл
УдалениеБитыхСсылок(пРегистр.Имя,РегистрыРасчета,"РегистрРасчета")
КонецЦикла;

Для Каждого пРегистр из Метаданные.РегистрыНакопления Цикл
УдалениеБитыхСсылок(пРегистр.Имя,РегистрыНакопления,"РегистрНакопления")
КонецЦикла;

КонецПроцедуры
Разместил:   Версии: | 8.x |  Дата:   Прочитано: 39081
 +6 
Распечатать
Возможно, вас также заинтересует
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 50
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
1C: Enterprise Development Tools 52
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем
1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? 6
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯче
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.