Имя: Пароль:
1C
 
Как найти повторяющиеся значения в dbf
0 miracled
 
11.06.20
08:31
Имеется файл dbf в котором больше 50000 полей.Соответственно путём перебора всех строк, а ещё и в цикле, поиск в нём будет происходить слишком долго.
Методы Найти и НайтиПоКлючу использует индексный файл и находит только первое значение,а они у меня повторяются.
Собственно вопрос : как найти повторяющиеся элементы?
1 Гобсек
 
11.06.20
08:40
Когда я работал на foxpro, то в подобном случае создавал подходящий индекс и просматривал записи в цикле. Повторяющиеся записи идут подряд.
После перехода на 1С в подобных случаях создаю в 1С таблицу, загружаю в неё данные из dbf. В 1С  такая задача решается аналогично.
2 AAA
 
11.06.20
08:42
50000 полей или записей ?
3 miracled
 
11.06.20
08:43
(2)Имел ввиду записей
4 miracled
 
11.06.20
08:44
(1)Спасибо,попробую сделать через таблицу.
Если у кого-то ещё есть варианты,буду рад услышать
5 AAA
 
11.06.20
08:45
50000 записей - это вообще ни о чем, закачать в таблицу значений и делай с ней что хочешь
6 ДенисЧ
 
11.06.20
08:45
Взять какую-то компононету для обращения к дбф (например, адо) и запросом...
7 Bigbro
 
11.06.20
09:14
сделать новый ключ который будет уникальным и искать по нему.
8 ASU_Diamond
 
11.06.20
09:37
(1) в 1С проще: загнал дбф в ТЗ; добавил колонку, которую заполняешь единичками; сворачиваешь по нужному полю, добавленную колонку суммируешь; сортируешь по добавленному полю по убыванию - в начале таблицы идут значения с дублями. Так можно по нескольким полям анализ проводить.
9 miracled
 
11.06.20
09:45
Долго будет заполняться 50000 записей в ТЗ?
10 ASU_Diamond
 
11.06.20
10:02
(9) от секунды до бесконечности. Всё зависит от данных.
11 trad
 
11.06.20
10:10
(9) не надо никаких ТЗ
0. Если не существует, то добавить индекс соответствующий ключу поиска
1. ТекущийИндекс = Индекс
2. НайтиПоКлючу("=")
3. в цикле Следующая() пока поля равны ключу
12 AAA
 
11.06.20
10:16
(8)Поддерживаю
(11)спорно
Я так понимаю, что задача разовая и надо решать ее как разовую, просто взять и сделать
Ну будет выполняться 5 сек или 8, какая разница для обсуждаемого вопроса ? Надо просто брать и делать
13 ASU_Diamond
 
11.06.20
10:31
(11) Всё зависит от задачи. Оптимальнее конечно вообще не с помощью 1С это делать.
14 AAA
 
11.06.20
10:35
Можно вообще из 1с 7.7 одним прямым запросом - SELECT, COUNT(), HAVING
15 trad
 
11.06.20
10:37
(12) если задача разовая, то (11) тоже проще всего
16 AAA
 
11.06.20
10:41
За время обсуждения я бы уже сделал всеми рекомендуемыми способами )