Имя: Пароль:
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) [email protected] Буду крайне признателен
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) там ни чего замудреного. Самое сложное, это форму перенести. Все остальное просто копированием переносится
AdBlock убивает бесплатный контент. 1Сергей