Поиск и замена дублирующих элементов (условие по нескольким полям, определение правильных по заполненности реквизитов)



Поиск и замена дублирующих элементов (условие по нескольким полям, определение правильных по заполненности реквизитов)

Отличается от типовой:

1. добавлена возможности поиска на равное значение по нескольким реквизитам

2. добавлена возможность вручную дописывать условие текста запроса поиска дублей

3. добавлена возможность определения правильных элементов, не помеченных на удаление

4. добавлена возможность определения правильных элементов, заполненным реквизитом (выбирается в диалоге)

 

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

 

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

 

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

Так же добавлено условие установки верным элементом, с условием на равенство реквизита (в примере это реквизит «Управленческий код»)

15 Comments

  1. Artemuch2

    Добрый день! А в обработке вы учли функционал наработанный коллегами в предыдущих версиях или это совсем другая обработка замены значений»

    Reply
  2. sokol_5441

    Это обработка взята из «Управление торговлей 10.3», доработана. Она универсальна

    Reply
  3. xrays

    Замечательная обработка. Здорово помогла для исправления ситуации с задвоенной номенклатурой. Спасибо!!!

    Reply
  4. ylyas

    доп отборы на сравнение не работают.

    проверял на упп справочник договоров.

    задав сравнение на орг = орг и контрагент= контрагент и вид договора = вид договора

    получил в совпавших группах договора разных организаций.

    Reply
  5. Pim
    Reply
  6. ylyas

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

    Reply
  7. tofree

    не работает в УТ 11 в серверном варианте (заупк клиента: обычное приложение)

    Reply
  8. prodines

    Привязки в форме не установлены.

    Reply
  9. heavymetal

    (0) исправьте ошибку, указанную в 4 комментарии, тогда плюсану

    Reply
  10. heavymetal

    (5) Pim, спасибо, Ваша дописка помогла

    Reply
  11. shard

    В процедуре УстановитьВернымПоЗаполненностиРеквизитаНажатие исправить

       Для Каждого Строка Из МассивСтрок Цикл
    Если ЗначениеЗаполнено(Строка.Ссылка[ИмяРеквизита]) Тогда
    Строка.Правильный = Истина;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    

    на

       Для Каждого Строка Из МассивСтрок Цикл
    Строка.Правильный = ЗначениеЗаполнено(Строка.Ссылка[ИмяРеквизита]);
    КонецЦикла;
    
    Reply
  12. shard

    (11) а еще лучше эту процедуру заменить на

    Процедура УстановитьВернымПоЗаполненностиРеквизитаНажатие(Элемент)
    
    ИмяРеквизита = «»;
    ВыбранноеЗначение = ВыбратьИзСписка(СписокРеквизитовСправочника, ЭлементыФормы.УстановитьВернымПоЗаполненностиРеквизита);
    Если ВыбранноеЗначение = Неопределено Тогда
    Предупреждение(«Действие отменено»);
    Возврат;
    Иначе
    ИмяРеквизита = ВыбранноеЗначение.Значение;
    КонецЕсли;
    
    мРезультатыПоиска.сортировать(«КоличествоСсылок убыв»);
    Для каждого Стр Из ТаблицаГрупп Цикл
    НомерТекГруппы = Стр.НомерГруппы;
    Если НомерТекГруппы > 0 Тогда
    МассивСтрок = мРезультатыПоиска.НайтиСтроки(Новый Структура(«НомерГруппы», НомерТекГруппы));
    ЕстьПравильный=ложь;
    Для Каждого Строка Из МассивСтрок Цикл
    Строка.Правильный = ?(не ЕстьПравильный,ЗначениеЗаполнено(Строка.Ссылка[ИмяРеквизита]),ложь);
    ЕстьПравильный=?(ЕстьПравильный,ЕстьПравильный,Строка.Правильный);
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры

    Показать

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

    Reply
  13. Pim

    (12). Честно говоря, уже плохо помню о чём речь.

    Но если уже говорить об элегантности кода,

    ЕстьПравильный=ложь;
    Для Каждого Строка Из МассивСтрок Цикл
    Строка.Правильный = (not ЕстьПравильный and ЗначениеЗаполнено(Строка.Ссылка[ИмяРеквизита]) );
    ЕстьПравильный      = (ЕстьПравильный or Строка.Правильный);
    КонецЦикла;
    

    PS:

    Может мне кто-нибудь объяснить поголовную любовь к оператору «НЕ».

    Почему пишут

    ?(не ЕстьПравильный, ЗначениеЗаполнено(Строка.Ссылка[ИмяРеквизита]), ложь);

    вместо

    ?(ЕстьПравильный, ,ложь ЗначениеЗаполнено(Строка.Ссылка[ИмяРеквизита]));
    Reply
  14. shard

    (13) наверное вопрос нашей психологии: «если не так, то переделать иначе норм» ближе по духу, нежели «есть так, то все норм, иначе — переделать», другим не могу объяснить. Хотя так на одну логическую операцию больше.

    Reply
  15. ksen

    Исправил ли автор ошибку в сборке или надо будет самому доделывать?

    Reply

Leave a Comment

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