Имя: Пароль:
1C
1С v8
удаление строк таблицы значений
, , ,
0 Пес1с
 
26.10.14
22:49
Есть 2 тз, в каждой физлицо и сумма. Как удалить строки из первой тз, которые есть во второй тз?
1 raykom
 
26.10.14
23:00
Строки по какому признаку идентифицируешь ?
2 Фокусник
 
26.10.14
23:05
(0) перебор 1ой ТЗ с конца, поиск по физлицу во второй ТЗ, если найдено, то удалять строку в первой ТЗ
3 Пес1с
 
26.10.14
23:08
только перебор?
4 Torquader
 
26.10.14
23:08
Перебираем меньшую таблицу.
Если это т1, то как сказал (3) с конца, а если т2, то можно и сначала.
Также не мешало бы сделать индексы по полям, по которым идёт сравнение.
5 Torquader
 
26.10.14
23:11
(3) Можно загрузить обе таблицы в одну, добавив колонку, в которую для первой поставить +1, а для второй -1, тогда потом можно "свернуть" и удалить строки с нулём.

Кстати, интересный вопрос - если в первой таблице две одинаковых строки, а во второй такая одна, то удаляем две или одну ?
6 Фокусник
 
26.10.14
23:13
(3) сколько миллионов строк в этих ТЗ? :)
7 Пес1с
 
26.10.14
23:14
двух одинаковых строк там нет, так что можно не париться)
8 Torquader
 
26.10.14
23:14
Не, ну можно и запросом выбрать из первой то, чего нет во втором, только вот будет ли это быстрее перебора - ещё тот вопрос.
9 FlashC
 
26.10.14
23:15
(0) откуда тз формируете? может, логичнее было бы задать вопрос как получить тз с таким то условием. не клюшки же)
10 Torquader
 
26.10.14
23:15
Левое соединение и условие на Null
11 raykom
 
26.10.14
23:19
+(5) объединяем в одну таблицу, добавлям оинаковый признак, колонку число, единичку, на пример.

И сворачиваем все это дело

Табл.Свернуть("ФИО, Сума","Кол");
                Для лл=1 По Табл.КоличествоСтрок() Цикл
                    кол=Табл.ПолучитьЗначение(лл,"Кол");
                    Если кол>1 Тогда
                        \\УДаляем строку    
                КонецЦикла;
12 raykom
 
26.10.14
23:25
+(11)Только это для клюшек было )))
13 raykom
 
26.10.14
23:25
Ну без разницы. Работать будет, а вот уж по скорости - хз.
14 Torquader
 
26.10.14
23:26
(13) По скорости лучше вообще не получать таблицу, из которой нужно что-то удалить, а удалять сразу из запроса, её формирующего.
15 Sorm
 
26.10.14
23:28
(13) Вопрос в количестве строк. Если хотим переложить на DB сервер - все во временные таблицы, проиндексировать, левое соединение, взять строки, где Null справа, очистить первую таблицу, загрузить из результата запроса.
16 raykom
 
26.10.14
23:30
(14)Ну так оно. Но это уже не три строки. Да и понимания надо больше, чем для (13)
17 Пес1с
 
27.10.14
01:20
Всем спасибо, сделал через запрос)
2 + 2 = 3.9999999999999999999999999999999...