gifts2017

Удалить пустые ссылки из регистров

Опубликовал Андрей Чунихин (ApocalypseNTC) в раздел Администрирование - Чистка базы

Поиск и удаление неопределенных ссылок (<Объект не найден>) в регистрах

Иногда случается так, что в движениях регистров, подчиненных регистратору, теряется ссылка на регистратор "<Объект не найден>".

Честно, говоря у меня таких ситуаций давно не было, но с тех времен осталась обработка, которая очищает движения регистров с битыми(пустыми) ссылками.

Подобная обработка уже есть: http://infostart.ru/public/14510/

Но представленная мной обработка написана гораздо изящнее и перебирает все виды регистров (РегистрБухгалтерии, РегистрНакопления, РегистрРасчета, РегистрСведений), кроме того она проста в использовании.

Может она вам и не пригодится, но код стоит посмотреть.

Должна работать на любой конфигурации. Проверялась на УПП 1.2 и Бухгалтерии.

 

UPD: Прислушался к советам sergeypv. И сделал обработку более функциональной.

Теперь все регистры показаны в виде дерева значений с флажками для проверки только нужных.

Добавлен индикатор (не точный) процесса. В строке состояния отображаются производимые операции.

После выполнения обработки выводится отчет в виде табличного документа с группировками.

Кроме того, обработка выполняется с транзакциями, а это значит, чтобы отменить действия обработки нужно нажать комбинацию клавиш Ctrl+Break до завершения выполнения обработки.

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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
УдалитьПустыеСсылкиИзРегистров
.epf 6,70Kb
05.09.14
595
.epf 6,70Kb 595 Скачать
УдалитьПустыеСсылкиИзРегистров версия 2
.epf 10,77Kb
05.09.14
246
.epf 10,77Kb 246 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. overdriver (overdriver) 30.06.10 01:21
Спасибо. Работает. Как раз появилась одна ничейная запись по взаиморасчетам. Успешно была удалена этой обработкой.
2. Алексей (Alav) 30.06.10 06:23
3. Андрей Чунихин (ApocalypseNTC) 30.06.10 06:50
Работает быстрее, чем ТиИ. Да и ТиИ не всегда помогает.
4. Сергей Поляк (sergeypv) 30.06.10 07:02
Не плохо бы на форму "положить" строку с именем текущего регистра и индикатор по этому регистру. Так же хотелось бы иметь возможность выбрать один из регистров для проверки, а не все. У кого база за 200 ГБ, тот поймет. Ну и в конце не плохо бы отчет с количеством пустых ссылок в каждом регистре.
ApocalypseNTC; +1 Ответить
5. Андрей Чунихин (ApocalypseNTC) 30.06.10 09:14
Хорошее предложение. Сделаю.
6. Андрей Куканов (KukA.5) 30.06.10 09:36
Хорошая полезная вещь, аккуратно изготовленная.
Автору огромный плюс и за идею и за ее очень толковую реализацию.

Как полезный совет:
для любых ссылочных типов если в запросе напишем "Где ...СсылочныйТипПоля.Ссылка ЕСТЬ NULL...", то получим неявное соединение Ссылки "с самой собой", то есть с несуществующим в БД объектом, то есть получим NULL. А это и есть битые ссылки.

Не всегда же можно оперется на регистратор в регистре, правда ведь? :D
7. Игорь Исхаков (Ish_2) 30.06.10 10:02
В обработке в процедуре ПочиститьРегистр() в тексте запроса есть строка
"ГДЕ НаименованиеРегистра.Регистратор.Дата ЕСТЬ NULL"
- что понятно и прозрачно. Значит в соответствующей таблице регистраторов объект с такой ссылкой отсутствует и обращение к любому из реквизитов такого регистратора даст NULL , значит эта ссылка битая.

А вот твой пост (6) загадочен и непонятен.
Причем тут фильтр на значение самой ссылки
"Где ...СсылочныйТипПоля.Ссылка ЕСТЬ NULL..." ?
8. bulpi bulpi (bulpi) 30.06.10 12:22
Все хорошо, только нужно больше информации для пользователя : индикация как идет процесс и т.д.
9. МagIvan (RailMen) 30.06.10 13:47
Даешь обработку "Расшифровка, откуда взялись пустые ссылки" :D
10. Андрей Куканов (KukA.5) 30.06.10 15:35
(7) если у нас есть регистр сведений, например, независимый (без регистратора), то "битые ссылки" в нем ...могут быть.

"битые ссылки" могут оказаться по любым измерения, ресурсам, реквизитам, которые ссылочного типа.

В этом случае их можно "отловить" конструкцией в запросе "Где ИмяПоляСсылочногоТипа.Ссылка Есть NULL"....
Кстати, Регистратор является ссылочным типом и можно (хотя это безусловно будет чуть :) более затратно в этом конкретном случае) сделать проверку не на Регистратор.Дата, а на Регистратор.Ссылка.


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

Надеюсь, теперь мой комментарий стал менее туманный (но более скучным).
11. Андрей Чунихин (ApocalypseNTC) 30.06.10 23:36
Прислушался к советам sergeypv. И сделал обработку более функциональной.
12. Михаил Андреев (bagr) 01.07.10 11:11
Смотрел 2-ую версию. Для себя сделал:

1) Убрал Сообщить("Чтобы прервать выполнение обработки нажмите Ctrl-Break", СтатусСообщения.Информация); - реально раздражает, заменил его Надписью.
2) Добавил в начале, конце и перед Возврат - Сообщить("Начало "+ТекущаяДата()); Сообщить("Конец "+ТекущаяДата());
3) Добавил в цикле процедуры КнопкаВыполнитьНажатие(Кнопка) Состояние(ВидРегистра.Имя+": "+Регистр.Имя); (если регистр большой - обрабатывается долго, видно хоть какой) - а в процедуре "почистить" почему-то "состояние" не обрабатывает
13. Михаил Андреев (bagr) 01.07.10 11:54
А ну конечно понятно почему в процедуре Почистить не отрабатавает Состояние, там же собственно запрос по битым ссылкам...
14. Владислав Лаврухин (wiranata) 05.07.10 08:14
При работе обработки не обнаружил заявленных:
---------------------------------------------------------------------------------------------------------------------
Теперь все регистры показаны в виде дерева значений с флажками для проверки только нужных.

Добавлен индикатор (не точный) процесса. В строке состояния отображаются производимые операции.

После выполнения обработки выводится отчет в виде табличного документа с группировками.
---------------------------------------------------------------------------------------------------------------------

Возможно не там смотрел...
15. Андрей Чунихин (ApocalypseNTC) 05.07.10 08:34
Два файла для скачивания. Вот на вторую версию ссылка http://infostart.ru/public/download.php?file=72450
16. ms_andrey ms_andrey (ms_andrey) 06.07.10 17:47
Выдается ошибка при опции Удалить
{Форма.Форма(134)}: Ошибка при вызове метода контекста (Записать): Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Взаиморасчеты с контрагентами)
НаборЗаписей.Записать();
по причине:
Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Взаиморасчеты с контрагентами)

В чем может быть проблема?
17. Андрей Чунихин (ApocalypseNTC) 07.07.10 20:06
А какая конфигурация? Лучше отладчиком посмотреть.
18. Allexey (alex_4x) 10.08.10 13:04
Прикол в том, что при попытке чистить этой обработкой записи в PostgreSQL ной базе - 1С Вылетает в момент попытки записать в регистр с отбором по пустому документу.
19. PlatonovStepan (Jogeedae) 29.10.10 12:13
а у меня такая называется : ПоискИУдалениеБитыхСсылокВРегистрах.epf :D.
20. Алиса Вакула (Вакулиса) 11.07.11 13:17
Не работает когда есть запись с пустой ссылкой. То есть Документ.ПустаяСсылка()
21. coollerok (Coollerok) 08.11.11 01:20
А у меня все работает! Спасибо!
22. Валентин Гуров (gurovvv) 06.12.11 14:20
полезная обработка! спасибо! на основании нее сделал для себя другую, которая чистит регистры от записей с пустыми документами.
23. Вадим Егоров (von_de) 06.12.11 23:34
По умолчанию с инфостарта качается старая версия обработки - конечно не фонтан. Вторая версия понравилась, помогла справится с пустыми записями.Спасибо.
24. Art Ame (art-ame) 18.12.11 22:59
Кто испробовал, подскажите , помогает избавиться от такого глюка как "с качеством Новый на складе .... недостаточно" при наличии этого товара?
На любых конфигурациях работает?
25. Art Ame (art-ame) 18.12.11 23:23
Ну,вот, испробовала... Что сказать, не работает она в УТ 8.1!!!
Выводит окошко с надписями "Сообщить" , "Удалить", "Выполнить", "Закрыть". Окошки, как показано выше на скриншотах, отсутствуют.
26. Галина Злобина (gala2009) 18.04.12 11:35
спасибо за обработку, очень пригодилась
27. Артур Асатрян (Tur_gad) 16.07.12 07:20
Замечательная вещь скачал давно но воспользовался только недавно, работает как часы и очень полезна). Особенно с моей перековерканной базой. Удалось отловить много битого движения когда сумма есть а документа как такового нет). Огромное спасибо за эту разработку респект вам и удачи в дальнейшей работе!!!!
28. Артур Асатрян (Tur_gad) 20.12.12 11:51
Вопросик по чему после конвертации обработки под 8,2 у меня удаляет все движение в базах. короче коверкает жуть. подскажите в чем может быть проблема?
29. Максим Гарницкий (masiok) 16.05.13 14:33
Удаляет только битые ссылки? Или как в описании сказано пустые?
30. v i (vis_tmp) 15.11.13 22:12
31. dka80 ~ (dka80) 30.07.15 13:00
Спасибо. Думал сам написать, а все уже изобретено до нас )) Отработала без проблем.
32. Денис (Den_D) 27.09.16 15:38
Вот что значит профессионал! Уже платформа 8.3.8, УПП 1.3, а обработка работает четко! Спасибо
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа