За основу была взята типовая обработка из УПП 1.2 со сходным названием.
Основные изменения.
Можно выполнять поиск дублей не только в справочниках, но и в планах видов характеристик. Сделан удобный выбор объекта метаданных.
Сопоставление дублей можно выполнять по любому количеству строгих критериев и одному нестрогому для строкового реквизита (по похожим словам). При выборе объекта метаданных автоматически добавляются рекомендуемые критерии сравнения (для подчиненных справочников равенство владельцев) и элементы отбора (для объектов с группами исключаются группы).
Реализовано удобное представление найденных групп дублей.
Можно задавать произвольный порядок сортировки результатов.
По двойному клику на ключе записи регистра сведений в списке найденных ссылок открывается форма списка этого регистра и текущей строкой устанавливается нужная запись, что позволяет быстро обработать ее руками в случае необходимости.
Перед замещением в независимых регистрах сведений в случае склеивания записей по новым ключам открывается диалог настройки замещения, где отображаются отличия в ресурсах конфликтующих записей и можно выбрать какую именно оставить. Это очень актуально, когда производится замена дублей объектов, у которых много свойств хранится в независимых непериодических регистрах сведений. В качестве примеров можно привести регистры из типовых конфигураций «Права доступа пользователей», «Значения свойств объектов», «Настройки пользователей». Если выполнять замену в них с помощью типовой обработки, то это может привести к потерям правильных данных в этих регистрах.
Выполнение замен с отключенными проверками регистрируется в журнале регистрации (событие — «Запись с флагом Загрузка»).
Эта полностью мобильная версия обработки больше не обновляется.
Актуальная версия теперь в Подсистема «Инструменты разработчика»
Переделал справку в соответствии с выполненными доработками.
Устранил ошибку при поиске зависимых, которую сам же и сделал.
Добавил полноценный сохраняемый отбор.
Сделал более интеллектуальное обновление зависимых настроек. Теперь не очищаются поля настроек поиска без необходимости.
Выпустил v0.90
— расширены возможности по настройке критериев сравнения (теперь можно задавать любое количество строгих критериев сравнения и один нестрогий)
— заметно переработан интерфейс
— ускорен поиск
Эта версия позволяет в частности выполнять поиск в пределах владельца, что позволяет эффективно устранять дубли в подчиненных справочниках!
Справку по обработке пока не обновил, а также скриншоты. Позже сделаю.
v0.91
— исправлены мелкие недочеты в интерфейсе
v0.93
— исправлены незначительные ошибки
— из доступных полей теперь исключаются хранилища значений и строки неограниченной длинны
— значительно ускорен поиск в режиме без сравнения по похожим словам за счет новых возможностей свежего релиза платформы 8.1.8.76
— актуализировал справку
v0.94
— исправлены ошибки, связанные с ручным вводом состава группы
— исправлено обновление групп после автоматической замены во всех группах
— добавлен режим ручного ввода групп
— теперь по умолчанию отображается номер группы в списке групп
v0.95
— исправлена ошибка в поиске зависимых элементов, которую сам же и сделал, оптимизируя типовой код
— исправлены мелкие ошибки с ручным вводом групп
v0.96
— предоставлена возможность открытия ссылок на закладке зависимых элеметнов
v0.97
— добавлен вывод сообщений об ошибках записи
Вот пытаюсь найти дубли по полному совпадению ИНН и КПП в справочнике контрагенты..
Выдаёт
Показать полностью
(9) Какой релиз платформы?
(10) 8.1.7.37 Надо 8.1.8?
(11)
Ну я же не зря пишу «Обработка (8.1.8+) v0.97».
Это означает совместимость с версией платформы 8.1.8 и выше.
При использовании «Подсистемы для разработчика» открытие данной обработки выдает кучу ошибок синтаксиса типа
{ВнешняяОбработка.ПоискИЗаменаДублирующихсяЭлементов(1424,11)}: Процедура или функция с указанным именем уже определена (ЛксСкопироватьЭлементОтбора)
Процедура <<?>>ЛксСкопироватьЭлементОтбора(пЭлементОтбораПриемник, пЭлементОтбораИсточник) Экспорт
(13) Логично. Многие функции из общих модулей подсистемы были перенесены в модуль данной обработки для того, чтобы она стала мобильной. Их придется вручную удалять из модуля обработки, т.к. они дублируются.
(14) Что логично, согласен.
Но тогда хотелось бы видеть один из двух вариантов
1) или выложить здесь второй файлик для работы с подсистемой
2) или включить данную разработку в подсистему 🙂
.
Мне больше импонирует второе решение 🙂
Что скажешь?
(15) В подсистему ее включать тематически неверно. Над озвученной проблемой я бился в свое время, но так и не нашел хорошего решения.
Возможно будет все таки принято решение о включении обработки в подсистему «Инструменты разработчика».
Вот еще один аргумент в пользу включения в подсистему :
ИМХО подобные обработки по замене значений нельзя доверять конечному слабому пользователю типа обычных бухов/менеджеров.
Они должны быть инструментов для опытных внедренцев/разработчиков, что входит в предметную область твоей подсистемы 🙂 !
(13 — 17) Сделал.
Платформа 8.1.11.67.
При выборе некоторых справочников выдает ошибку:
Ошибка при установке значения атрибута контекста (Текст): {(5, 2)}: Неоднозначное поле «Объект.Код»
<<?>>Объект.Код.* КАК Код,
ПостроительОтчетаОтбора.Текст = »
по причине:
{(5, 2)}: Неоднозначное поле «Объект.Код»
<<?>>Объект.Код.* КАК Код,
(19) Это известная проблема. Она была устранена в более новой немобильной версии в составеhttp://infostart.ru/projects/1274 . Если все же нужна мобильная исправленная версия, постараюсь сделать в ближайшие дни.
+1.
Только вот ещеhttp://infostart.ru/blogs/594/
Было сделано при помощи этой обработки.
(21) Не совсем понял, с какой именно проблемой ты столкнулся.
Спасибо.
Обработка попалась вовремя, когда напортачили с переносом из 7-ки.
Спасибо. Думали сами дорихтовать напильником типовую, но нашли эту.
Замечание: для подчинённого справочника устанавливаю режим «совпадение» по владельцу и ещё одному реквизиту и «нестрогое совпадение» по наименованию. В результате выдаёт группы с разными владельцами. Чем лечить?
v0.98
— исправлено (25)
А для 8.0 обработку можно использовать если воссоздать код в конфигурации?
(27) Нет. Здесь используются временные таблицы.
А есть старый вариант для 8 или что то отдаленно напоминающие?
(29) Нет.
(33) Ждем, ждем. А пока ты продолжаешь пользоваться ею =)
Прекрасная, наиполезнейшая обработка, скачала еще весной, пользуюсь постоянно, после переносов со всяких нестандартных конфигураций имеется куча дублей, особенно когда несколько организаций в одну сливаются. Спасибо автору и за другие обработки (http://infostart.ru/projects/1274) — все нужные! С наступающим НГ!
(34) Напомни, плиз, аналогичная обработка в подсистеме «Инструменты разработчика» одновременно с данной обновляется?
Или я что-то путаю?
(36) Нет. Там обновляется чаще. А это — мобильная версия. Она обновляется реже.
эээ… может, я чего-то просмотрел, но где возможность обработки «Планов видов расчетов»??
(38) Процитирую »
Обработка позволяет выполнять гибкий поиск, замену и удаление дублирующихся элементов любого справочника или плана видов характеристик.» — Это первые строки описания.
Принципиальных препятствий нет. Добавлю в следующей версии все ссылочные типы.
И в ней уже реализовано (39)
Кстати, здесь версия намного новееhttp://infostart.ru/projects/1274/
Хотелось бы видеть в ней изменение реквизитов правильного элемента (ну скажем, случился косяк с добавлением дублей, а при создании этого дубля изменился реквизит, обозначающий дату прекращения действия этого элемента)
(42) Не понял. Попробуй переформулировать. Кто нибудь понял, что имеется ввиду?
Автор, Вы умничка! Спасибо огромное за обработку! Очень выручила…
Ништяк! Сегодня в ЗУП`е с физлицами боролся, обработка очень помогла.
Спасибо
Еще было бы неплохо задавать какие то условия, по которым будет определяться правильный элемент. Например, если не помечен на удаление. Либо если какой то реквизит равен чему то.
хорошая вещь, очень помогла при поиске по нескольким одинаковым реквизитам
На v.0.97 для себя дописала:
возможность пометки на удаление «лишних» кроме возможности их непосредственного удаления;
поиск и показ реквизитов типа Строка неограниченной длины;
очистку текущей группы по щелчку на колонке;
показ текущей группы по активизации строки (если активная колонка — «Вывести группу»);
открытие значения реквизита ссылочного типа из таблицы состава текущей группы.
Могу скинуть, изменений мало. Если они будут включены в свежий релиз — буду рада.
Да, ещё писала «интеллектуальную» заменялку в регистрах сведений, но потёрла. Вкратце: если отличается только один ресурс типа строка и замена содержит оригинал, то флаг ставится автоматически. Ну и установка таймаута для формы замены в регистрах (потому как 3000 групп тяжеловато вручную океить, а там замены как раз как вышеприведённые были).
(49) Нельзя по-подробнее про «по щелчку на колонке»? Я не понял, что это за действие.
Процедура ОчиститьГруппу(НоваяТекущаяГруппа = Неопределено)
Если НоваяТекущаяГруппа=Неопределено Тогда Отказ=Истина; Возврат; КонецЕсли;
ы=мРезультатыПоиска;
Для й=(-(мРезультатыПоиска.Количество()-1)) по 0 Цикл
Если мРезультатыПоиска[-й].НомерГруппы=НоваяТекущаяГруппа.НомерГруппы Тогда мРезультатыПоиска.Удалить(-й); КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура КоманднаяПанельНастройкиОтчетаПоиск(Кнопка)
….
КолонкаОчиститьГруппу = ЭлементыФормы.НайденныеГруппы.Колонки.Вставить(1, «Очистить группу»);
КолонкаОчиститьГруппу.Имя = «ОчиститьГруппу»;
КолонкаОчиститьГруппу.ТолькоПросмотр = Истина;
…
КонецПроцедуры
Процедура НайденныеГруппыВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
…
ИначеЕсли Колонка.Имя = «ОчиститьГруппу» Тогда
ОчиститьГруппу(Элемент.ТекущаяСтрока);
ВывестиГруппу(Элемент.ТекущаяСтрока);
ОбновитьТекущуюГруппуРезультатовПоиска();
…
КонецПроцедуры
Да, и сохранение отборов нормальное прикрутила.
Скажите пожалуйста, а в регистрах накопления данная обработка умеет менять значения?
…и в регистрах бухгалтерии
(54,55) Умеет.
(49) можно подробнее подробнее про пометку на удаление ? Проблемы с РБД. надо чтоб везде пометились… заранее спасибо
Обработка была доработана, но в составе подсистемы ИРhttp://infostart.ru/projects/1274/ .
При выборе справочника «Хранилище доп. информации» БП
{Форма.Форма(1036)}: Ошибка при установке значения атрибута контекста (Текст): {(5, 2)}: Неоднозначное поле «Объект.Наименование»
<<?>>Объект.Наименование.* КАК Наименование,
ПостроительОтчетаОтбора.Текст = »
по причине:
{(5, 2)}: Неоднозначное поле «Объект.Наименование»
<<?>>Объект.Наименование.* КАК Наименование,
(59) Давай полный текст запроса
ВЫБРАТЬ 0
ИЗ Справочник.ХранилищеДополнительнойИнформации КАК Объект
{ГДЕ
Объект.Наименование.* КАК Наименование,
Объект.Предопределенный.* КАК Предопределенный,
Объект.ПометкаУдаления.* КАК ПометкаУдаления,
Объект.Ссылка.* КАК Ссылка,
Объект.ВидДанных.* КАК ВидДанных,
Объект.Объект.* КАК Объект,
Объект.ИДФайлаПочтовогоПисьма.* КАК ИДФайлаПочтовогоПисьма,
Объект.ЗначениеРазделенияДоступа.* КАК ЗначениеРазделенияДоступа}
{УПОРЯДОЧИТЬ ПО
0 КоличествоЭлементовВГруппе
,
Объект.Наименование.* КАК Наименование,
Объект.Предопределенный.* КАК Предопределенный,
Объект.ПометкаУдаления.* КАК ПометкаУдаления,
Объект.Ссылка.* КАК Ссылка,
Объект.ВидДанных.* КАК ВидДанных,
Объект.Объект.* КАК Объект,
Объект.ИДФайлаПочтовогоПисьма.* КАК ИДФайлаПочтовогоПисьма,
Объект.ЗначениеРазделенияДоступа.* КАК ЗначениеРазделенияДоступа}
(61) Посыпаю голову пеплом. Не доходили руки решить эту проблему принципиально. Но теперь это придется сделать, чтобы смыть позор =)
(61) Посмотрел в последней версии в составе ИР. Там проблема решена, хотя и не принципиально. Обновлять мобильную версию пока не знаю, когда буду.
Ошибка: Индекс выходит за границы (Форма, 561)
Исправление:
Для Каждого Последовательность ИЗ Метаданные.Последовательности Цикл
Если Последовательность.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда
НадоЗаписывать = Ложь;
НаборЗаписи = Последовательности[Последовательность.Имя].СоздатьНаборЗаписей();
НаборЗаписи.Отбор.Регистратор.Установить(СтрокаТаблицы.Данные);
НаборЗаписи.Прочитать();
// ++
Если НаборЗаписи.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
// —
(64) Спасибо.
0.99
— исправлено (64)
Еще как пожелание возможность обрабатывть группы поодиночке. А то «Автозамена» сразу обрабатывает все. А иногда надо обработать выборочно.
а что мешает (67)?
(68)
А как это сделат? Чтобы не удалять не нужные группы.
(70) Теперь понятно. Что речь идет о групповой выборочной автозамене. Пожелание понятно.
(71) Лучше как мне кажеться добавить на против каждой найденной группы возможность ставить «галочку», те что не помечены не попадают в «Автозамену».
Но вобще решать вам.
Возникает ошибочка при попытке сделать отбор по полю глубина которого больше 1, например хочу отобрать все одинаковые по наименованию договора + одинаковые по наименованию владельца …ошибка выскакивает…когда пытаюсь выбрать Владелец.Наименование
(73) Для начала неплохо ошибку показать. Воспроизводится ли ошибка в немобильной (более новой) версии из состава подсистемы ИР?
Еще есть пожелание к разработчику. можно чтобы была возможность выгрузки в Excel дерева с дублями:
— 1 Группа
— Первый обект
— Второй обект
— 2 Группа
— Первый обект
— Второй обект
— Третий объект
Зачем это нужно. А для того чтоьбы потом предоставить этот список двойников людям которые его могли создать и определить «человеком» какой элемент являеться правильный.
Возможно ли пропускать определённые регистры при поиске ссылок?
Актуально для конфигурации с коммерческими закрытыми модулями, которые 100% не ссылаются на обрабатыавемый справочник.
(76) Возможно, но такая возможность не реализована.
(77)
А когда Можно будет увидеть пожелания?
(78) Пока не готов ответить о сроках реализации.
Достойно! +
Среди справочника АЗС эта (7) обработка не дала ни одного результата.
Количество элементов = 57. Есть даже такие:
1) АЗС ООО «УРЕНГОЙРЕСУРС»
2) ООО»Уренгойресурс»
Настройку менял. Анализ длится всего секунду.
В чем секрет?
И еще — как исключить префиксы (ООО ОАО и т.д.)?
Спасибо за обработку!
Вылезла ошибка, когда в строковом поле есть строки состоящие из пробелов, их обрезало до пустой строки функция СокрП.
Текст ошибки:
{Форма.Форма(182)}: Индекс находится за границами массива
СтрокаПоиска.НомерГруппы = НайденныеГруппы.НайтиСтроки(мСтруктураКлючаПоиска)[0].НомерГруппы;
Мои исправления:
Показать
(82) В мобильной (этой) версии данная ошибка пока не устранена. Но она уже давно устранена в немобильной версииhttp://infostart.ru/public/15126/
(83) Ех, нет возможности добавлять подсистему в большинстве проектов. Там функции внешние используются? Можно легко выгрузить во внешнюю обработку?
Непонятно как после замены ссылок как удалить освободившиеся не нужные элементы справочника ?
Работаю со справочником Контрагенты 1С БП …
(0)
Почитал комментарии, у меня осталось 2 вопроса:
1. при замене Номенклатуры, что произойдет с подчиненными реквизитами такими как Ед., Серия? т.е. если в документе была указана номенклатура и ее ЕдИзм, то после замены что будет с ЕдИзм?
2. Как происходит замена в документах? после замены идет запись и перепроведение? (просто у меня есть старые документы, у которых я изменил перепроведение) = > если их перепровести, то пойдут косяки…
Спасибо!
(86)
2. Перепроведение документов данной обработкой не выполняется. После замены в объекте документа выполняется только его запись.
(87) а что тогда будет после замены с данными регистров, по которым делает движение документ, в котором мы заменяем значения, если он не проводится? т.е. записи регистров будут ссылаться на не существующий элемент?
(87) Замены производятся во всех изменяемых прикладным кодом таблицах БД, в т.ч. и в регистрах.
ок. Спасибо!
тогда +
Жаль, что в «Результате поиска» нельзя увидеть другие реквизиты. Например, ищем по ИНН, а основной контрагент определяется по наличию КПП. Если бы справочно выводить КПП, то можно было бы быстро определить кто основной контрагент.
Не находит элементы при сравнении по похожим словам в БП 1.16.6.6 Платформа 8.1.15.14
Обработка незаменимая вещь пр переносе нескольких баз 7.7 в одну базу 8.1.
Год назад очень помогла. Караул!
Очень полезная разработка. Я ее немножко доработал :
— добавлено сохранение отборов и порядка в схеме (настроек отчета)
— добавлена возможность проверки зависимых элементов на полную идентичность по всем реквизитам ( оригинал — только по наименованию)
— добавленв возможность создания зависимого от правильного элемента, если он не найден ( например для замены договора при замене контрагентов)
Хочу еще сделать печать групп и их состава, а так же удаление групп из таблицы…
(91) Как это нельзя, если можно. Жмешь правую кнопу мышки на составе текущей группы, выбираешь настройку колонок и ставишь там флажок КПП.
(94) …»Как это нельзя, если можно. Жмешь правую кнопу мышки на составе текущей группы, выбираешь настройку колонок и ставишь там флажок КПП.»…
А там нет такого флажка. Поля появляются только если по ним идет сравнение на первой закладке :(.
Поддерживаю (91), очень хочется выводить доп. поля в Результатах поиска, а не кликать по элементам на просмотр — поля всех реквизитов справочника.
Усоверщенствованная мной версия здесьhttp://infostart.ru/public/67047/
(95) я же сказал на СОСТАВЕ текущей группы, а не на группе.
Обработка супер, но есть одно НО.
Предупреждать надо чайников, таких как я, что если поставить нестрогое соответствие по одному из реквизитов то остальные не проверяются на равенство. Я таким образом после слияния двух баз, стал чистить дубли. Дошел до справочника «Статьи затрат», поставил нестрогое соответствие по наименованию и строгое по «Вид Расходов НУ» и «Отнесение расходов к деятельности… ЕНВД чего-то там». Элементов нашлось порядка 100, на глаз вроде все правильно. Ну обработка и объединила мне, например, ЕСН по виду расходов «ЕСН», «Оплата труда», «Налоги и сборы из 3-ех в один. Пришлось писать обработку по отмене изменений, что не есть гуд.
(98) Можете ли привести скриншоты, демонстрирующие первую и вторую закладку формы в вашем случае? Были ли колонки «Вид расходов НУ» и «Отнесение расходов …» в таблице «Надейнные группы»?
(99) Скриншоты прикрепил как файлы, как делать, чтобы скриншоты прямо в комментах показывались — не знаю.
Обработку скачивал 14 марта — может за эти дни версия поменялась. Написал собственно потому, что хотел поделиться алгоритмом восстановления: Значит я сделал в копии базы и в рабочей базе регистр сведений «Восстановление», туда записал всю таблицу ссылок из копии. Перекачал из копии в рабочую базу справочник статьи затрат и регистр «Восстановление». В рабочей базе запустил обработку по восстановлению. Вроде получилось, хотел через планы обмена, да не смог пока разобраться. Все сделал путем настройки обработки автора. Вроде работает. До настроенную обработку прикрепил, может кому пригодиться. 🙂
(100) Скриншоты 🙂
(100) Скриншот закладки 2 сделай пожалуйста с теми включенными колонками в табличном поле состава группы, по которым строгое сравнение задано.