Имя: Пароль:
1C
 
удаление дублей из таблицы
0 LivingStar
 
20.08.14
13:03
На форме есть таблица, в ней в разных местах возможны дубли, по 5 ти полям, нужно оставить большее числовое значений из дублей, строку с меньшим числовым значением удалить, как лучше это сделать?
1 Dmitriy_76
 
20.08.14
13:04
скопировать таблицу...добавить колонку..колво вхождений ... и свернуть по требуемым полям.
2 Бешеная Нога
 
20.08.14
13:04
в запросе
3 Crush
 
20.08.14
13:07
установитьпараметр "тз", таблица
Максимум(поле1-5)
таблица = выполнить выгрузить
создать колонки
4 LivingStar
 
20.08.14
13:11
так норм будет?

Процедура УбратьДубли()
    Отбор = Новый Структура();
    Для каждого Стр Из Таблица Цикл
        Отбор.Вставить("City",      Стр.City);
        Отбор.Вставить("Meet",      Стр.Meet);
        Отбор.Вставить("City2",     Стр.City2);
        Отбор.Вставить("Toward", Стр.Toward);
        Отбор.Вставить("Auto",   Стр.Auto);
        Строки = Таблица.НайтиСтроки(Отбор);
        Если Строки.Количество() > 1 Тогда
            Таблица.Удалить(Строки[1]);
        КонецЕсли;
        
    КонецЦикла;
КонецПроцедуры
5 Dmitriy_76
 
20.08.14
13:20
(4) нет. при удалении будет прыгать... да и задача в (0) вроде немного другая не ?
6 Crush
 
20.08.14
13:25
(4) ЖЕСТЬ!
7 Crush
 
20.08.14
13:26
Дата регистрации:     31 марта 2005; Стаж: 9 лет 4 месяца 20 дней

Кому то подарили аккаунт программиста с 10 летним стажем
8 Любопытная
 
20.08.14
13:27
(7) Не, он всегда такой
9 palpetrovich
 
20.08.14
13:27
(7) та не, он всегда таким был :)
10 vicof
 
20.08.14
13:30
каким ты был, таким ты и остался,
орел степной, казак лихой...
11 LivingStar
 
20.08.14
13:40
все работает что в (4)
12 LivingStar
 
20.08.14
13:41
(5) куда прыгать? мне главное избавиться от этих лишних строк, что выходит в (4)
13 Godofsin
 
20.08.14
13:42
(11) unfucking believeble
14 vyaz
 
20.08.14
13:42
(11) Ну это просто праздник какой-то, что работает. Ура товарищи!
15 LivingStar
 
20.08.14
13:43
(13) в чем не исправимая проблема (4)?
16 Godofsin
 
20.08.14
13:43
как понимать эту строку: "...оставить большее числовое значений из дублей"? Дай пример таблицы
17 LivingStar
 
20.08.14
13:46
(16) да главное что бы дублей не было

Процедура УбратьДубли()
    Отбор = Новый Структура();
    Для каждого Стр Из Таблица Цикл
        Отбор.Вставить("City",      Стр.City);
        Отбор.Вставить("Meet",      Стр.Meet);
        Отбор.Вставить("City2",     Стр.City2);
        Отбор.Вставить("Toward", Стр.Toward);
        Отбор.Вставить("Auto",   Стр.Auto);
        Строки = Таблица.НайтиСтроки(Отбор);
        Если Строки.Количество() > 1 Тогда
            УдаляемаяСтрока = ?(Число(СтрЗаменить(Сред(Строки[0].Price,1,СтрДлина(Строки[0].Price)-2)," ",""))>=
                                Число(СтрЗаменить(Сред(Строки[1].Price,1,СтрДлина(Строки[1].Price)-2)," ","")),
                                Строки[1],
                                Строки[0]);
            Таблица.Удалить(УдаляемаяСтрока);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
18 Godofsin
 
20.08.14
13:46
(15) Я так понимаю, там есть 6 колонка, где какое-то значение присутствует числовое. По-твоему алгоритму ты ничего не сравниваешь и удаляешь всегда вторую строчку из массива, при том даже несмотря сколько их там. А если строка без дублей?
19 miliko
 
20.08.14
13:48
(0) сколько строк должно остаться ?
20 LivingStar
 
20.08.14
13:49
(18) в (17) сравниваю
21 Godofsin
 
20.08.14
13:49
(17) а если одна строка? а если 3?
22 LivingStar
 
20.08.14
13:50
(19) там много строк, более 2000, главное убрать дубли, я ещё оставляю большее значение цены
23 LivingStar
 
20.08.14
13:50
трогаю если только больше 1, и на сколько вижу что 3х одинаковых нет, только дубли, если так то в (17) должно работать
24 Любопытная
 
20.08.14
13:52
(18) У него всегда две строки (дубли же, дубль это два, всем известно) ;) На больше 1 он проверяет, тут вроде понятно.
(23) Не стоит удалять строки в цикле, в котором таблицу перебираешь. Таблица будет меняться, фигня получиться может.
Ну и страшный алгоритм который получает значение УдаляемаяСтрока мне вообще непонятен)
25 Godofsin
 
20.08.14
13:53
(23) Так не делают, дружище. Запихай в запрос таблицу и выбери строки по максимуму числового значения
26 miliko
 
20.08.14
13:54
(22) если 5 полей по 5 дублям, то должно остаться 5 строк с 5 дублями, а если дубли равны то может быть больше
27 palpetrovich
 
20.08.14
13:55
(0) лови  http://rghost.ru/57568560
надеюсь разберешься ;)
28 LivingStar
 
20.08.14
13:58
(27) антивирус не пропускает((((

(25) согласен, это я попытался так
29 LivingStar
 
20.08.14
13:59
(27) зачем менеджер загрузки качать? кидали бы так файлом куда либо, есть же свободные файлообменники
30 palpetrovich
 
20.08.14
14:01
(28)  ты не ту кнопку тыканешь ...черную надо, вверху слева :)
31 LivingStar
 
20.08.14
14:04
(30) скачал спасибо! посмотрю
32 Crush
 
20.08.14
14:18
(29) Всем улыбок и хорошего настроения!:)
33 Crush
 
20.08.14
14:23
За то что заставил улыбнуться дарю текст запроса. Установи свою таблицу как параметр, и результат выгрузи в эту же таблицу.

тз.City,
тз.Meet,
тз.City2,
тз.Toward,
тз.Auto,
тз.Price
поместить тз
из &тз как тз;

Выбрать тз.City,
тз.Meet,
тз.City2,
тз.Toward,
тз.Auto,
Максимум(тз.Price) Как Price
из тз
Сгруппировать по
тз.City,
тз.Meet,
тз.City2,
тз.Toward,
тз.Auto
34 Crush
 
20.08.14
14:24
+(33) в начале пропустил слово Выбрать
35 LivingStar
 
20.08.14
14:25
(33) спасибо!
36 Timon1405
 
20.08.14
14:26
вангую ошибку "Тип не может быть выбран в запросе"
37 palpetrovich
 
20.08.14
14:29
(36) в (27) нормально  :)
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший