Имя: Пароль:
1C
1С v8
Поиск и дубликатов по нескольким условиям
0 Powerfool
 
22.10.13
06:56
Кто нибудь уже сталкивался? Задача такая, надо обработать элементы справочника, которые задвоились, но только эти элементы надо сравнивать не по одному реквизиту, как в стандартных обработках а по нескольким, ну например, чтоб поиск происходил и по Наименованию и по Владельцу. Расскажите как можно такого добиться? Я даже нормальный запрос придумать не могу как такое получить
1 Wobland
 
22.10.13
06:57
внутреннее соединение уже придумал?
2 sda553
 
22.10.13
06:57
(0) справочник, внутреннее соединение того же справочника ПО всем нужным реквизитам
3 Wobland
 
22.10.13
06:58
+(2) и неравенству ссылки
4 Powerfool
 
22.10.13
07:06
А группировать их как?
5 Wobland
 
22.10.13
07:07
(4) а зачем?
6 Powerfool
 
22.10.13
07:13
Ну чтобы обрабатывать потом. ну допустим я хочу и заменить на одного какогонибудь к в ПоискИЗаменаДублирующихсяЭлементов
7 Powerfool
 
22.10.13
07:13
(5) Ну чтобы обрабатывать потом. ну допустим я хочу и заменить на одного какогонибудь к в ПоискИЗаменаДублирующихсяЭлементов
8 skunk
 
22.10.13
07:13
как вариант


    стрТекстЗапроса = "ВЫБРАТЬ
                      |    Контрагенты.Ссылка,
                      |    Контрагенты.Наименование,
                      |    Контрагенты.Код,
                      |    Контрагенты.РНН,
                      |    Контрагенты.ИдентификационныйКодЛичности КАК ИНН
                      |ПОМЕСТИТЬ тзКонтрагенты
                      |ИЗ
                      |    Справочник.Контрагенты КАК Контрагенты
                      |ГДЕ
                      |    Контрагенты.ЭтоГруппа = ЛОЖЬ
                      |    И Контрагенты.ПометкаУдаления = ЛОЖЬ
                      |;
                      |
                      |////////////////////////////////////////////////////////////////////////////////
                      |ВЫБРАТЬ
                      |    тзКонтрагенты.Ссылка,
                      |    тзКонтрагенты.Наименование,
                      |    тзКонтрагенты.Код,
                      |    тзКонтрагенты.РНН,
                      |    тзКонтрагенты.ИНН
                      |ПОМЕСТИТЬ тзКого
                      |ИЗ
                      |    тзКонтрагенты КАК тзКонтрагенты
                      |ГДЕ
                      |    НЕ тзКонтрагенты.Код ПОДОБНО ""FMC%""
                      |;
                      |
                      |////////////////////////////////////////////////////////////////////////////////
                      |ВЫБРАТЬ
                      |    тзКонтрагенты.Ссылка,
                      |    ВЫБОР
                      |        КОГДА &флНеИспользовать
                      |            ТОГДА ""Не использовать "" + тзКонтрагенты.Наименование
                      |        ИНАЧЕ тзКонтрагенты.Наименование
                      |    КОНЕЦ КАК Наименование,
                      |    тзКонтрагенты.Код,
                      |    тзКонтрагенты.РНН,
                      |    тзКонтрагенты.ИНН
                      |ПОМЕСТИТЬ тзКем
                      |ИЗ
                      |    тзКонтрагенты КАК тзКонтрагенты
                      |ГДЕ
                      |    тзКонтрагенты.Код ПОДОБНО ""FMC%""
                      |;
                      |
                      |////////////////////////////////////////////////////////////////////////////////
                      |УНИЧТОЖИТЬ тзКонтрагенты
                      |;
                      |
                      |////////////////////////////////////////////////////////////////////////////////
                      |ВЫБРАТЬ
                      |    ИСТИНА КАК Пометка,
                      |    тзКого.Ссылка КАК ЧтоЗаменять,
                      |    тзКого.Код,
                      |    тзКого.РНН,
                      |    тзКого.ИНН,
                      |    тзКем.Ссылка КАК НаЧтоЗаменять,
                      |    тзКем.Код КАК КемКод,
                      |    тзКем.РНН КАК КемРНН,
                      |    тзКем.ИНН КАК КемИНН
                      |ИЗ
                      |    тзКого КАК тзКого
                      |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ тзКем КАК тзКем
                      |        ПО тзКого.Ссылка <> тзКем.Ссылка
                      |            И (ВЫБОР
                      |                КОГДА &флРНН
                      |                    ТОГДА тзКого.РНН = тзКем.РНН
                      |                ИНАЧЕ ИСТИНА
                      |            КОНЕЦ)
                      |            И (ВЫБОР
                      |                КОГДА &флИНН
                      |                    ТОГДА тзКого.ИНН = тзКем.ИНН
                      |                ИНАЧЕ ИСТИНА
                      |            КОНЕЦ)
                      |            И (ВЫБОР
                      |                КОГДА &флНаименование
                      |                    ТОГДА тзКого.Наименование = тзКем.Наименование
                      |                ИНАЧЕ ИСТИНА
                      |            КОНЕЦ)
                      |
                      |УПОРЯДОЧИТЬ ПО
                      |    ЧтоЗаменять";
    запКонтрагенты = Новый Запрос(стрТекстЗапроса);
    запКонтрагенты.УстановитьПараметр("флНаименование", стОпции.Наименование);
    запКонтрагенты.УстановитьПараметр("флНеИспользовать", стОпции.НеИспользовать);
    запКонтрагенты.УстановитьПараметр("флРНН", стОпции.РНН);
    запКонтрагенты.УстановитьПараметр("флИНН", стОпции.ИНН);
9 Powerfool
 
22.10.13
07:19
(8) не увидел группировки. Получается просто таблица с "задвоенными" контрагентами и их реквизитами
10 Мимохожий Однако
 
22.10.13
07:19
В УТ10.3 есть готовая
11 Wobland
 
22.10.13
07:21
(9) а как ты хочешь?
12 Powerfool
 
22.10.13
07:22
(9) Ну ладно, беру пару слов назад. Пожалуй это не очень то и просто, но вот с группировкой все равно вопрос у меня открыт (10) Она только по одному реквизиту сравнивает, у мне требуется сравнение по несколких и последующей группировкой, чтобы потом внутри групп обрабатывать эти элементы
13 Powerfool
 
22.10.13
07:22
(11) Ну вот примерно так как написано в (12)
14 1dvd
 
22.10.13
07:23
(12) открой для себя итоги
15 Wobland
 
22.10.13
07:24
я однажды видел, как обработка просила юзера указать нужный верный элемент
16 Мимохожий Однако
 
22.10.13
07:31
(12)Любопытно...Однако на практике не встречал случаев, кроме договоров и единиц измерения по умолчанию, в которых случалась подобная штука. Даже, если родишь подобную обработку, КПД будет мизерный. Всё уйдет в гудок, то бишь программировать будешь дольше, чем править. А типовую обработку для большой группы справочника можно попробовать запустить в цикл по второму признаку задвоенности. Запрос кстати можно выдернуть для примера из той же обработки.
17 Powerfool
 
22.10.13
07:32
(14) Открой для меня итоги. У меня тут туго, если ещё учитывать, что потом в обработке все обрабатывается в построителе, то там мрак.

(15) Потешить самолюбие - это к маме, или психологу. Когда опытные люди издеваются над неопытными это свинство, если по другому не сказать. Лучше бы помог сначала, а уже потом ядом брызгал
18 Powerfool
 
22.10.13
07:34
(16) Запрос и так уже выдернул, разобрался как он работает, но вот под себя переделать не могу.
19 Wobland
 
22.10.13
07:34
(17) не выспался?
20 strange2007
 
22.10.13
07:36
ВА свое время столкнулся с проблемой этих дубликатов и сваял инструмент подобающий. Обработка, где настраиваются различные условия и описывается весь алгоритм поиска этих дубликатов и как узнавать какой верный. Если надо, могу отдать безвозмездно. Правда там хелп никакущий, т.к. писал по мере необходимости
21 Powerfool
 
22.10.13
07:37
(19) Ага
22 Powerfool
 
22.10.13
07:38
(20) powerfoool@yandex.ru Буду крайне признателен
23 strange2007
 
22.10.13
07:41
(22) Лови
24 Powerfool
 
22.10.13
07:50
(23) Благодарю. Теперь осталось разобраться и перекодить в 8.1 :(

Всем спасибо
25 strange2007
 
22.10.13
08:08
(24) там ни чего замудреного. Самое сложное, это форму перенести. Все остальное просто копированием переносится
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn