Имя: Пароль:
1C
1C 7.7
v7: Поиск одинаковых значений в ТЧ
0 Enlighted
 
22.05.17
08:32
Добрый день люди. Возникла необходимость поиска в ТЧ одинаковых реквизитов. Есть ли более изящный способ сделать это чем прямой перебор во вложенных циклах?
1 Chameleon1980
 
22.05.17
08:34
зачем во вложенных?
сортируй по искомому полю
и сравнивай очередную строку с предыдущей
2 cw014
 
22.05.17
08:34
Выгрузить в ТЗ, Добавить колонку, заполнить числом "1", свернуть по предполагаемому реквизиту с суммированием новой колонки
3 Chameleon1980
 
22.05.17
08:36
ну и вариант (2)
чтобы понять есть дубли или нет
и дубли чего
4 Enlighted
 
22.05.17
08:39
(1) Дубли нужны по совершенно определенной колонке ТЧ. Остальные колонки не колышат. сотрировать методом "Сортировать"?
(2) мне не нужно узнавать количество дублей мне нужно их найти, а далее я их просто из ТЧ удалю
5 bse
 
22.05.17
08:47
(4) а если в других колонках разные данные?
6 cw014
 
22.05.17
08:48
(4) Таким образом ты узнаешь, на какие позиции есть дубли, а дальше уже перебором таблицы дублей и поиском в табличной части требуемой строки
7 Андрей_Андреич
 
naïve
22.05.17
08:48
создаешь список значений и перебираешь ТЧ с конца.
если реквизит не находишь в списке - добавляешь в список.
находишь - удаляешь строку
8 Масянька
 
22.05.17
08:49
(4) А сразу в ТЧ без дублей?
9 KishMish
 
22.05.17
08:50
(4) Еще один универсальный метод
Не искать, а создавать новую таблицу значений по условию.
Удалять не надо.
Один цикл, новая строка при условии отсутствия найденного значения.
10 Андрей_Андреич
 
naïve
22.05.17
08:51
КолСтрок=КоличествоСтрок();
СЗ=СоздатьОбъект("СписокЗначений");
Пока КолСтрок>0 Цикл
ПолучитьСтрокуПоНомеру(КолСтрок);
Если СЗ.НайтиЗначение(Реквизит)=0 Тогда
СЗ.ДобавитьЗначение(Реквизит);
Иначе
УдалитьСтроку();
КонецЕсли;
КолСтрок=КолСтрок-1;
КонецЦикла;
11 Смотрящий
 
22.05.17
09:03
Перем ТЗ;

спСписок = СоздатьОбъект("СписокЗначений");
Док.ВыгрузитьТабличнуюЧасть(ТЗ);

Переменная = 0;
Пока ТЗ.НайтиЗначение(<ТвоеЗначение>, Переменная, "<Твояколонка>") = 1 Цикл
    
    спСписок.ДобавитьЗначение(ТЗ.НомерСтроки);
    
    ТЗ.УдалитьСтроку(Переменная);
    
    Переменная = 0;
КонецЦикла;
12 Enlighted
 
22.05.17
12:03
(8) Пока недогоню как. Вот задача: найти дубли в справочнике контрагенты. Вот код который однозначно находит дубли, но некоторые естественно по 2 раза:
контрик = СоздатьОбъект("Справочник.Контрагенты");
    контрикдубль = СоздатьОбъект("Справочник.Контрагенты");
    контрик.ВыбратьЭлементы();
    Пока  контрик.ПолучитьЭлемент() = 1 Цикл
        Если контрикдубль.НайтиПоНаименованию(контрик.Наименование) = 1 Тогда
            Если контрик.Код <> контрикдубль.Код Тогда
                НоваяСтрока();
                ФИОКонтрика = контрик.ТекущийЭлемент();
                КодКОнтрика = контрик.Код;
                НоваяСтрока();
                ФИОКонтрика = контрикдубль.ТекущийЭлемент();
                КодКОнтрика = контрикдубль.Код;
            КонецЕсли;
        КонецЕсли;    
    КонецЦикла;
13 Масянька
 
22.05.17
12:05
(12) "Вот задача: найти дубли в справочнике контрагенты. " - а дальше что? Ну, зачем дубли-то искать.
14 aka AMIGO
 
22.05.17
12:22
(12) Один и тот же контрагент может иметь разные наименования.. Проверено жизнью, на многих бухиях: бушки горазды создавать себе проблемы.
У нас этих дублей около 50 штук, да и не по 2, а по 3 и более раз..
Процесс размножения остановлен запретом вводить новых контров всем, кроме суперадминистраторов..
15 aka AMIGO
 
22.05.17
12:28
+14 может лучше проверить дубли по ИНН, а не по наименованию?

В (13) - правильный вопрос.. Записи в справочнике созданы "не просто так", на каждую есть ссылка в документах..
придется заменять в старых доках дубль-контрагентов на что-нибудь одно
16 aka AMIGO
 
22.05.17
12:32
Не понял.. в топике и в сабже речь идет о ТЧ, так что решение предложено в (2)
При чем тут справочник контрагентов?
17 Enlighted
 
22.05.17
13:57
(13) Дубли искать, чтобы удалить их можно было.
(14) (15) Естественно, поэтому дополнительно реализую поиск по документу, и по телефону, выше описано.
(16) Поиск дублей то где осуществлять, не в справочнике же.

А по поводу документов созданных на этих контрагентов, будем заменять их.
18 Масянька
 
22.05.17
14:01
(17) По опыту: берешь буха, который работает с контрагентами, сажаешь, открываешь справочник и пошли... Дубли помечаете на удаление. Когда прошерстите весь справочник - запускаешь поиск и замену значений и меняешь.
Есесьно - сделать копию.
Только зрячим поиском (т. е. бух пальцем тыкает - это дубль), поскольку (15). А по опыту - косяки могут быть в ИНН, телефоне и пр. А может быть не дубль, а другой контрагент, но с тем же ИНН. Так что - только с бухом на пару.
Удачи!
19 Масянька
 
22.05.17
14:05
+ (18) Кстати, еще есть договора... Песня...
20 Злопчинский
 
22.05.17
14:06
(15) мало того, почти во всех документах наряду со ссылками на контргаентов есть ссылки на договор... придется еще с договорами заморачиваться.. переподчинять, заменять в документах...
21 Злопчинский
 
22.05.17
14:06
(19) ты сильный колдун! ;-)
22 Масянька
 
22.05.17
14:08
(21) Ага... С граблями и кактусами :))))
23 Chameleon1980
 
22.05.17
22:51
классная роль суперадминистраторов..
24 Enlighted
 
22.05.17
22:54
Всем: нереально в организации сделать одного человека следящего за контрагентами, ибо точек около 15 на каждой необходимо чтобы была возможность создавать контрагентов. Планирую осуществить недопуск дубликатов по фио/по пасспорту/и по контактному телефону, если 2 из этих признаков совпадут, то это один и тот же контрагент.
25 HawkEye
 
22.05.17
22:56
(24) все можно... две девочки за 15-30 минут обрабатывают все дубли за прошедший день с более чем 70-ти точек...
26 Enlighted
 
22.05.17
23:18
(25) Автоматизация, фигли!
27 Chameleon1980
 
23.05.17
03:36
в другую кривую сторону :)
28 h-sp
 
23.05.17
05:48
(24) у вас контрагенты - какие0то люди? Почему по паспорту?
29 Андрей_Андреич
 
naïve
23.05.17
06:45
Процедуру ПриЗаписи() отменили что ли? Контролировать дубли ИНН при вводе
30 VladZ
 
23.05.17
06:46
(28) Возможно у них контрагенты - физические лица. К примеру, фирма занимается установкой пластиковых окон.
31 VladZ
 
23.05.17
06:48
Чисто технически эту проблему не решить. Нужен "контролирующий орган", т.е. человек, который будет контролировать, а лучше даже если будет один (или два) человека, которые занимаются вводом новых контрагентов. Пусть при вводе ищут наличие существующего. Да и при косяках будет кого наказать. :)
32 Андрей_Андреич
 
naïve
23.05.17
06:51
(24) Какая разница сколько точек? Обмен-то между ними есть и шанс что один новый контрагент за день появится в двух точках равен нулю.
33 HawkEye
 
23.05.17
07:58
(32) так-то от бизнеса зависит...
34 Enlighted
 
23.05.17
08:08
(28) Ломбард с несколькими филиалами, только частные лица
35 Enlighted
 
24.05.17
11:17
Всех благодарю. Решение в (10) выбрал.