Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 сен 2025, 13:50

Удаление битых ссылок из регистров сведений

Автор dertyus, Сегодня в 11:24

dertyus и 1 гость просматривают эту тему.

dertyus

Добрый день! Пишу внешнюю обработку по удалению битых ссылок из регистров сведений. Про ТиИ знаю! Нужна именно внешняя обработка!Использую следующий метод:

 Однако он не работает для ресурсов и реквизитов регистров, в которых тоже могут быть битые ссылки! Кто-нибудь знает как удалять программно битые ссылки из РЕСУРСОВ И РЕКВИЗИТОВ?



&НаСервере
Процедура УдалитьБитыеСсылкиНаСервере()
   
   Регистры = ПолучитьРегистрыДляПроверки();
   
   Для Каждого Регистр Из Регистры Цикл
      УдалитьБитыеСсылкиВРегистре(Регистр.Имя, Регистр.Колонка);
   КонецЦикла;
   
КонецПроцедуры

&НаСервере
Процедура УдалитьБитыеСсылкиВРегистре(ИмяРегистра, Колонка)
   
   Попытка
      Запрос = Новый Запрос;
      Запрос.Текст =
      "ВЫБРАТЬ
      |   " + ИмяРегистра + "." + Колонка + " КАК Колонка
      |ИЗ
      |   РегистрСведений." + ИмяРегистра + " КАК " + ИмяРегистра + "
      |ГДЕ
      |  " + ИмяРегистра + "." + Колонка + ".Ссылка ЕСТЬ NULL"; 
      
      РезультатЗапроса = Запрос.Выполнить();
      
      Выборка = РезультатЗапроса.Выбрать();
      Пока Выборка.Следующий() Цикл
         Набор = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей();
         Набор.Отбор[Колонка].Установить(Выборка.Колонка);
         Набор.Записать();   
      КонецЦикла;
      
      Если Выборка.Количество() > 0 Тогда
         Сообщить(СтрШаблон("Из регистра %1 удалено битых ссылок %2", ИмяРегистра, Выборка.Количество()));
      КонецЕсли;
      
   Исключение
      Сообщить(СтрШаблон("Ошибка при удалении в регистре %1: %2",
      ИмяРегистра, ОписаниеОшибки()));
   КонецПопытки;
   
КонецПроцедуры

Теги:
Рейтинг@Mail.ru

Поиск