Замена ссылок, поиск и удаление дублей











Замена ссылок, поиск и удаление дублей.
Механизм замены ссылочных элементов в объектах базы данных реализован в общих модулей встраиваемых в конфигурацию.
Замена ссылок в управляемом интерфейсе.

В обработке есть справка, в которой описан порядок работы с обработкой.

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

Выполнить замену ссылок неправильных элементов на правильные. Пометить на удаление и удалить объекты из базы данных с проверкой ссылочной целостности. 

Можно указать режим замены ссылок: Режим «Обмена данными», выполнение в единой транзакции.

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

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

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

1. Настройка правил поиска дублей.

2. Запуск поиска дублей.

3. Поиск связанных данных (где используются ссылки наших задвоенных объектов).

4. Выполнение замены неправильных ссылок на правильные ссылки.

5. Пометка удаление неправильных ссылок. 

6. Удаление неправильных объектов.

ДОРАБОТКИ

 10.03.2012. Сделан удобный выбор объекта метаданных в настройке поиска дублей.

 18.07.2012. Версия 1.0.1.4.

    1. При записи набора регистра бухгалтрерии в режиме обмена данных (ОбменДанными.Загрузка = Истина) есть фича:

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

    Напротив, если ОбменДанными.Загрузка = Ложь, то в таком случае значение автоматически обNULLяется.

    В результате такого поведения при заменах ссылок в регистрах бухгалтерии могли возникать ошибки, если замена велась с отключенным режимом записи (ОбменДанным.Загрузка = Истина).

    Исправляется перезаписью записей регистра в режиме ОбменДанными.Загрузка = Ложь.

    2. Внесены поправки по замечаниям.

    3. Добавлены дополнительные настройки. Таблица ошибок. Ведение журнала регистрации.

    4. Добавлена конфигурация с модулями замены, с возможностью вынесения процедуры выполнения замены на сервер, появилась возможность запуска выполнения замены в фоновом режиме. (см. конфигурации «ВыполнениеЗаменыСсылочныхЭлементов.cf» и «ИндикаторФоновогоЗадания.cf»).

   Конфигурация «ИндикаторФоновогоЗадания.cf» для клиент-серверного режима.

 14.08.2012. Версия 1.0.1.5.

    1. Добавлена замена ссылок в общих реквизитах объектов.

    2. Исправлены найденные ошибки (см. комментарий 17).

27.11.2012. Версия 2.1.1.10.

    1. Переписано ядро механизма выполнения замены ссылок. Повышена стабильность программы, скорость выполнения, оптимальное использование оперативной памяти. При выполнение замены ссылок в больших объемах данных могла возникать ошибка «Нехватка памяти» или выполнение могло проходить слишком медленно.

    2. Добавлены новые настройки: Параметры обмена данными, фонового задания, уровней транзакции, контекста выполнения.

    3. Усовершенствован механизм индикации хода выполнения обработки.

    4. Написана справка для обработки.

11.12.2012. Версия 2.1.1.11.

    1. Оптимизированы алгоритмы обработки замены ссылок в движениях документа.

    2. Добавлен механизм хранения описаний ошибок (исключений) с возможностью прерывания выполнения обрабоки замены ссылок при накоплении заданного количества исключений.

24.12.2012. Версия 2.1.1.12.

    1. Добавлена возможность подключать обработчики для событий обработки замены ссылок. События обработки замены:

        — «инициализация дополнительных параметров» — в клиент-серверном варианте выполняется дважды, один раз на клиентской стороне, другой на серверной;

        — «перед выполнением замены ссылок» — выполняется один раз перед выполнением всех замен;

        — «перед полученим объекта» — выполняется перед получением объекта, в котором необходимо выполнить замены, из базы данных;

        — «перед записью объекта» — выполняется перед записью объекта, с уже выполненными заменами, в базу данных;

        — «после выполнения замен» — выполняется один раз после выполнения замены всех ссылок.


17.03.2014. Версия 2.1.2.7.

    — оптимизация интерфейсных механизмов;

    — добавлено автосохранение значений элементов формы (текущих настроек);

    — изменен формат файла настроек.

 

29.04.2014. Версия 2.1.2.7.

    — реализована возможность добавлять в ключ поиска дублей строковое поле неограниченной длины (такое поле приводится к ограниченному полю длиной в 1000 символов);

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

 

26.09.2014. Версия 2.3.1.1.

    — добавлена управляемая форма для замены ссылок в объектах базы данных;

    — незначительные исправления и улучшения (реализована замена в регистрах с регистратором-битой ссылкой, повышена стабильность кода).

01.12.2014. Версия 2.3.1.3.

    — добавлена возможность включения привилегированного режима (выполнение замены с полными правами);

    — исправлена ошибка выполнения замены ссылок в последовательностях.

 

73 Comments

  1. Magister

    В регистрах ссылки без перепроведения документов-регистраторов заменяет?

    Reply
  2. nalivai-chai

    (1) Magister, заменяет ссылки в записях регистров документов-регистраторов без перепроведения документов.

    Кстати, если ссылка есть в связанной записи регистра, но её нет в самом документе-регистраторе, то функция «Поиск ссылок» выдаст ссылку на документ, но не на регистр.

    Reply
  3. mainDPV

    При создании настройки поиска дублей неплохо было бы по аналогии с «Универсальным подбором и обработкой» обработку тайпинга (ввода текста в поле) сделать к полю «Таблица данных», чтобы не только из списка выбирать.

    А в остальном — зачет, я успешно опробовал. Автору плюс.

    Reply
  4. Boroda

    Немного не допонял, а от стандартной с ITS она чем отличается? Та вроде бы делает то же самое, но как бы гарантирована 1С. Здесь какие-то изюминки?

    Reply
  5. nalivai-chai

    (5) Boroda,

    1. Интерфейсом. Основная цель при написании обработки состояла в создании интерфейса для групповой обработки задвоенных элементов справочников с использованием стандартной 1С-овской процедурой замены. Около года пользуюсь успешно обработкой в крупных и мелких проектах. Единственное было, что вылетала 1С-овская «гарантировання» процедура замены на регистрах бухгалтерии и при замене ссылок видов расчета. Пользуюсь для создания правил «ПостроителемОтчета», давно хочу переделать под СКД, но руки не доходят, тем более для 99% случаев хватает «Построителя».

    2. Процедура замены отличается обработкой регистра бухгалтерии (стандартная «гарантированная» вылетала, вроде при обработке небалансовых измерений), и заменой ссылок видов расчета.

    Reply
  6. GoodWinSpr

    если бы была на стандартной написана, доверял бы больше, если настройка реально работает + тебе!, буду тестить…

    Reply
  7. serggo

    Пока не сделал поиск ссылок на неправильный объект — изменять ссылки не хотела, так и задумано?

    Reply
  8. nalivai-chai

    (8) serggo, да, так задумано. что бы совсем уж бездумно не действовать.

    Reply
  9. nalivai-chai

    (7) GoodWinSpr, ))) уж её тестил-перетестил где только возможно: и на самописных, и нетиповых, и всех возможных типовых конфигурациях. Обработка «боевая», всегда собой.

    Reply
  10. serggo

    Отличная штука, плюсуем )

    Reply
  11. Magister

    (2) Скачал, попробую. Именно то, что сейчас надо 🙂

    Баг: если не указать ни одного ключевого поля — всё сохраняется, но при поиске получаем:

    {Форма.Форма.Форма(725)}: Помилка при встановленні значення атрибуту контексту (Текст)

    | » + МассивВСтрокуПоШаблону(МассивКлючевыхПолей, «,

    через:

    {(9, 2)}: Синтаксична помилка

    <<?>>

    Reply
  12. DimanYa

    При заменен значений в закрытом периоде, не выдаёт такое сообщение: «Редактирование данных этого периода запрещено. Изменения не могут быть записаны…»

    Говорит, что замена выполнена успешна, но на самом деле ничего не произошло.

    Reply
  13. nalivai-chai

    Пожалуйста.

    Reply
  14. Darkid

    {ВнешняяОбработка.ПоискЗаменаУдалениеДублейОбъектов.МодульОбъекта(369,3)}: Переменная не определена (РаботаСИндикаторомВыполнения)

    <<?>>РаботаСИндикаторомВыполнения.УдалитьИндикатор(Свойства.Индикатор);

    УПП 1.3.27.4

    платформа 15.294

    Reply
  15. son_v

    Будем брать). Спасибо)

    Reply
  16. bitrostov

    Та же ошибка {ВнешняяОбработка.ПоискЗаменаУдалениеДублейОбъектов.МодульОбъекта(369,3)}: Переменная не определена (РаботаСИндикаторомВыполнения)

    <<?>>РаботаСИндикаторомВыполнения.УдалитьИндикатор(Свойства.Индикатор);

    Причем и на УПП, и на бухгалтерии 2.0. Платформа 8.2.15

    Reply
  17. nalivai-chai

    (18) bitrostov, (16) Darkid, Исправлено.

    Reply
  18. V.Nikonov

    Плевался на штатные обработки поиска дубликатов при поиске дублей элементов (например, ДоговорКонтрагента) подчиненных другому справочнику…

    Как решена подобная проблема у Вас?

    Reply
  19. nalivai-chai

    (20) V.Nikonov, Просто. Поле «Владелец» должно быть в составе ключа.

    Reply
  20. EmpireSer

    Обработка класс!

    Но почему её нельзя настроить перед открытием из другой обработки?

    Reply
  21. alexko82

    У меня почему то не работает УТ11 обновлена до последней версии 1С:Предприятие 8.2 (8.2.16.362)

    Reply
  22. _Vovik

    Еще не плохо бы сделать пометку на удаление всех не основных. А то когда много мусора — руками долго помечать.

    Спасибо за обработку — очень помогла.

    Reply
  23. DoctorRoza

    Нужно посмотреть 🙂

    Reply
  24. nalivai-chai

    (24) _Vovik,

    Еще не плохо бы сделать пометку на удаление всех не основных. А то когда много мусора — руками долго помечать.

    Реализовано с самого начала существования обработки: нужно в контекстное меню в дереве дублей открыть, там будет.

    Reply
  25. ta44ik

    Красивая штука) Реквизиты только в регистрах не меняет.. Типа корсубконто в партиях товарах бух учет. А так полный зачет)

    Reply
  26. alexin08

    Очень удобная штука однако!

    Reply
  27. Serge_ASB

    у меня задача:

    есть справочник Оргтехники. как выяснилось, существуют дублирующиеся элементы, причем, дубляж идет по серийным номерам. Требуется проверить и вывести совпадающие серийники как «1-к-1», так и без эн последних знаков (как задано в форме обработки).

    может решить подобное ваша обработка?

    Reply
  28. nalivai-chai

    (29) Serge_ASB,

    Сама обработка этого не может.

    Но в ней есть функция типа «ВыполнитьЗаменуСсылок» (точное имя не помню), этой функции можно указать, данные которые нужно заменить «что на что».

    Reply
  29. s_uu

    Добрый день. Очень нужная обработка! А можно ее выслать на s_uu@mail.ru. ?

    Спасибо заранее

    Reply
  30. shoy

    Стоящая обработка! Автор, пожалуйста, приведите допустимые действия в закладке «Обработчики»? Какие функции, кроме «ВыполнитьЗаменуСсылок», там можно вызывать? Как, к примеру, обратиться к объекту в котором нашлась ссылка искомого объекта? Благодарю.

    Reply
  31. shoy

    по ДоговорамКонтрагентов возможны дубли (по владельцу,именам и номеру) с разными видами (Прочее, С Покупателем). Как можно назначить правильным договор с нужным нам видом, нр. «С покупателем»?

    Также, как назначить проведение документов, где проводим замену чего-нибудь?

    Reply
  32. nalivai-chai

    (33) shoy,

    В настройках поиска дублей нужно заполнить отбор правильных элементов.

    Добавить отбор по полю ВидДоговора = «С покупателем».

    Вроде так должно работать.

    Reply
  33. Sasha255n

    Так нужна но нужно посмотреть

    Reply
  34. Sasha255n

    Я считаю очень нужная и актуальная обработка. Мне например пригодилась в случае когда надо было обновить справочник КПС в конфигурации БГУ.

    Reply
  35. Sasha255n

    Я считаю очень нужная и актуальная обработка. Мне например пригодилась в случае когда надо было обновить справочник КПС в конфигурации БГУ. При обновление вылетала ошибка что существуют дубли с помощью данной обработки удалось устранить этот косяк. Автору большое спасибо.

    Reply
  36. Зеленоград

    Отличная обработка!

    Обратной нет? Коллега свернул всех контрагентов с пустым ИНН, теперь думаю — как из архивной БД вытащить соответствия документ-правильный контрагент.

    Reply
  37. nalivai-chai

    Чудес не бывает, к сожалению((

    Найти всех контрагентов с пустым ИНН в копии базы и все объекты в которых он используется. И выгрузкой загрузкой перенести из копии в базу.

    Reply
  38. Abbra

    лютый вин

    Reply
  39. rosinfoteh

    1С: Предприятие 8.3 — НЕ РАБОТАЕТ. Народ автор врет открытым текстом.

    Reply
  40. nalivai-chai

    (41) rosinfoteh, аккуратней со словами, уже сомневаюсь в адекватности их автора.

    Что «НЕ РАБОТАЕТ», на каком основании? (можно скрин кинуть, например)

    Если открыл в управляемом интерфейсе и увидел пустую форму, то флаг тебе в руки, обработка работает только в «обычном приложении».

    Когда у 75 человек работает, а у одного нет… Напоминает: если седьмой муж бьет жене по роже, значит дело не в муже, а в роже.

    Reply
  41. Лена_Лена

    Большое спасибо, обработка пригодилась при переходе с 1с 7.7 на 1с 8.3.

    Reply
  42. tisas77

    Нужная и полезная штука

    Reply
  43. gortol

    одна из немногих и очень нужных обработок, мне помогла!!!!

    а для толстого (обычного приложения) просто незаменимая обработка, может если руки дойдут я её перепилю на тонкого клиента

    PS Ошибка была в конфиге, а не в обработке так что обработка суперская

    PPS кстати начал переписывать на управляемые формы, что то стало получаться ))), скоро релиз

    Reply
  44. nalivai-chai

    (45) gortol, либо ваша УТ11 криво дописана; или, разработчики УТ11 (или БСП) уже не рассчитывают на то, что их конфигурация может быть запущена в толстом клиенте. Ищи в обработчике «Перед записью» регистра сведений «Соответствие объектов информационных баз».

    Я посмотрел в БП 3.0 (что под рукой), там нет никаких экстремальных вызовов.

    Можешь кинуть код обработчика, если есть сложности, попробую определить источник ошибки.

    Reply
  45. Kamikadze

    не доверяю я таким разработкам — все в одному.

    Reply
  46. gortol

    (46) всё норм с обработкой, это в конфиге косяк был, обработка работает как надо, спасибо ВАМ!!

    Reply
  47. shoy

    Обработкой этой много чего делал. Жаль что на УФ её нет!

    Автор, Андрей Андреич, дарагой! А может стоит уже попробовать перенести на УФ? А?

    Reply
  48. nalivai-chai

    (49) shoy, ))) думаю все, но со временем туго.

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

    Reply
  49. lsd_777

    Скачал последнюю версию, запускаю на УТ11.1 уф, и че то непойму, там замена ссылок только, а где поиск дублей? Или в толстом надо запускать, что бы другая форма открылась?

    Reply
  50. nalivai-chai

    (51) lsd_777, на управляемом только замена. До писка дублей пока руки не дошли.

    Reply
  51. lsd_777

    не врубаюсь, ссылки находит, пишет, что заменил, по новой поиск делаю, все по старому! Так же попадаются места, где ругается на нарушение прав, хотя работаю под полными, конф. УТ11.1.7.67

    Reply
  52. nalivai-chai

    (53) lsd_777, можешь письмо написать со скринами шагов, которые делаешь. (kaabass@mail.ru)

    Reply
  53. lsd_777

    (54) Отправил

    Reply
  54. gull22

    Открыл в УФ, никакого упоминания о дублях, кроме как упоминание в справке. Скриншот прилагаю

    Reply
  55. lsd_777

    Автор так и не ответил по моей проблеме!

    Reply
  56. yc_2011

    Что-то у меня единицы измерения не поменяла (УФ). Там общий алгоритм или учитывает структуру типовых конфигураций?

    Reply
  57. yc_2011

    Документы при замене перепроводяться?

    Reply
  58. nalivai-chai

    (55) lsd_777, извини. Попробую сегодня на УТ 11.1 поиграться.

    (56) gull22, поиск дублей только в обычном приложении(.

    (58) yc_2011, нет привязки к какой-то конкретной конфигурации.

    (59) yc_2011, документы при замене не перепроводятся.

    Reply
  59. nalivai-chai

    (53) lsd_777, то, что не выполнялась до конца замена, скорее всего связано с заменами в последовательностях, вопрос решен в версии 2.3.1.3. Проверял на УТ 11.1.9, столкнулся с такой же проблемой.

    Reply
  60. lsd_777

    Ошибка при замене ссылок: При записи объекта в базу данных

    Объект метаданных: Реализация товаров услуг

    Объект: Реализация товаров и услуг ЦСУТ-000012 от 05.09.2014 9:30:18

    Описание ошибки: {ВнешняяОбработка.ПоискЗаменаУдалениеДублейОбъектов.МодульОбъекта(1270)}: Ошибка при вызове метода контекста (Записать)

    НаборЗаписей.Записать();

    по причине:

    Нарушение прав доступа!

    Ничего не изменилось!

    Reply
  61. @Sonya

    Спасибо большое за полезную обработку, особенно актуально для УФ.

    Reply
  62. sergey0703

    Здравствуйте, находит ли данная обработка дубли по «Дополнительным реквизитам и сведениям»?

    Reply
  63. nalivai-chai

    (64) sergey0703, нет.

    Reply
  64. sergey0703

    Сегодня скачал Вашу обработку за стартмани, все красиво-весь заявленный функционал работает, спасибо. Однако должен заметить что если бы еще осуществлялся поиск дублей по «Дополнительным свойствам объектов» в 1С8.2 или по «Дополнительным реквизитам и сведениям» в 1С8.3 -то обработка была бы максимально востребованной.

    Reply
  65. valafan

    Спасибо, очень помогла обработка. Неплохо бы включить Режим загрузки данных (ОбменДанными.Загрузка.Истина) и для установки пометки на удаление.

    Reply
  66. fixin

    АА, напиши что в УФ не работает поиск дублей, только замена.

    Зря потратил время, блин.

    Reply
  67. insurgut

    Спасибо, очень помогла!

    Reply
  68. insurgut

    (68) в конфигураторе разрешаем запуск обычного приложения, запускаем отладку обычного приложения и все работает 🙂

    Reply
  69. tormozit

    (70) «в конфигураторе разрешаем запуск обычного приложения» — это не обязательно.

    Reply
  70. fktrc171

    Скачала обработку , но она не открывается в БГУ 1.0 ,

    Очень надо найти дубли , как открыть обработку в обычном приложении , толстый клиент ? Может кто может закинуть для нас на zadoroz1 собака ya точка ru ?

    Reply
  71. Consultant_1C

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

    Reply
  72. Verdad

    Подскажите, можно как-то отбор на выводимые дубли по количеству записей установить?

    Reply
  73. kafievn

    А обработчике «Фильтр найденных по ссылке» что имеется в доступных параметрах?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *