Имя: Пароль:
1C
1С v8
Как правильно проверить 2 таблицы на наличие хотя бы одной совпадающей строчки?
0 Bigbro
 
12.05.23
13:20
Как прожженый клюшечник я бы сделал двойной цикл по одной табличке внешний по второй внутренний где совпало - Возврат Истина после циклов возврат ложь.
но надо идти вперед, и в парадигме снеговиков наверное есть другие варианты?
типа какой то запрос в который передать таблицы.
или может функции БСП какие то есть?
Подскажите, коллеги!
1 OldCondom
 
12.05.23
13:31
в запрос их, свернуть "ИМЕЮЩИЕ Количество > 1"?
2 OldCondom
 
12.05.23
13:32
Возврат Результат.Пустой();
3 Fish
 
12.05.23
13:37
(0) Вот тут вроде толковая статейка, где сравнивают разные методы по быстродействию: https://infostart.ru/public/326983/
А какой будет правильным в твоём случае, сам определи.
4 PR
 
12.05.23
13:49
(0) Лучше всего обходом ТЗ, быстрее будет
Но, если красиво, то запросом выбираешь обе таблицы объединением, в запросе добавляешь два поля ЕстьВТаблице1 и ЕстьВТаблице2, в первой выборке ЕстьВТаблице1 = Истина, ЕстьВТаблице2 = Ложь, во второй наоборот
Потом все группируешь по всем полям, по ЕстьВТаблице1 и ЕстьВТаблице2 агрегируешь по максимум
Потом фильтр, что ЕстьВТаблице1 и ЕстьВТаблице2, то есть что есть и в первой и во второй
Если запрос что-то вернул, значит есть совпадения
5 PR
 
12.05.23
13:50
(1) А если в первой ТЗ две одинаковые строки, а во второй ни одной?
6 PR
 
12.05.23
13:51
Ну или, кстати, сначала выбрать различные из обеих таблиц, потом добавить поле Количество = 1 и потом сагрегировать по нему и искать, где Количество > 1
7 shuhard
 
12.05.23
14:02
(0)[или может функции БСП какие то есть?]
есть, одноименные
8 Garykom
 
12.05.23
15:14
(0) В парадигме 1С 8 УФ надо обе ТЗ передать в запрос как ВТ
И тупо их внутренне соединить по нужным полям
9 Garykom
 
12.05.23
15:16
(8)+ не забыть номера строк исходных ТЗ, чтобы вернуть в результате
10 Donkey_hot
 
12.05.23
17:49
(0) А внутреннее соединение по всем полям не подходит?
11 Bigbro
 
12.05.23
20:42
спасибо за советы, будем пробовать мучать запрос_)
12 vde69
 
12.05.23
22:22
13 AIMAN
 
12.05.23
22:53
(0) если часто такое делать, то хорошо бы их отсортировать, тогда значительно ускориться проверка (ищем пока "меньше" до первого значения "больше" или "равно")
14 НафНаф
 
12.05.23
23:27
(8) кто Вам это сказал?
15 AlvlSpb
 
12.05.23
23:39
Дозаполнить Тз_1 строками из ТЗ_2, получить результирующую ТЗ. Запомнить ТЗ.Количество() в переменной. Свернуть результирующую по всем полям. Сравнить количество ДО свертки с Количеством строк после свертки. Если не равны - есть совпадения
16 Garykom
 
13.05.23
01:29
(14) Вроде как H A D G E H O G s тестировал разные способы обработки данных
и в случае сервера 1С оказалось даже потери на передачу в СУБД и обратно незначительны относительно скорости обработки на СУБД
17 МихаилМ
 
13.05.23
02:32
вопрос обсуждался больше сотни раз. если  человек не может найти обсуждения на этом форуме - ему не место ит индустрии. умение пользоваться поисковыми  сервисами - базовое
18 Bigbro
 
13.05.23
07:10
(15) спасибо кстати, кажется это должен быть лучший вариант, что то у меня вылетел он из головы сразу.
когда-то именно так делал.
спасибо, решение найдено расходимся. )
19 Garykom
 
13.05.23
18:23
(18) советую убедиться что решение с ТЗ.Свернуть() точно наилучшее
ибо не так давно был глюк в платформе и любые операции с ТЗ при наличии ссылочных типов дико тормозили

ну и на 200% уверен что при наличии сервера 1С (а не файловая) через СУБД и запросы будет быстрей
20 NorthWind
 
13.05.23
20:28
(0) собрать две табли в одну, добавив колонку КолСтрок со значением 1.
Далее - Свернуть () по всем значениям, кроме КолСтрок.
Профит. Если количество строк в таб1 и таб2 больше чем количество строк в результате - значит, дубликаты есть.
Где именно - можно определить по КолСтрок, там где значение стало 2 и больше - те строки и дублируются.
Было?
21 NorthWind
 
13.05.23
20:28
минус - расход памяти большой, плюс - думаю, будет шустро.
22 NorthWind
 
13.05.23
20:29
а, блин, уже было. Сорьки
23 Garykom
 
14.05.23
00:52
(20) А в какой таблице и сколько дублей?
Или таблиц больше 2?
24 Aleksey
 
14.05.23
03:25
(18) даже с учетом (5)?
25 Bigbro
 
14.05.23
05:47
(24) ну чтоб дубли убрать все равно сворачивать.
хотя это все больше теоретические построения, на практике там конечно и дублей не будет и в 99% случаев в таблицах по одной строке))
26 Индиго
 
15.05.23
05:56
1.Добавь в каждую ТЗ по колонке
2. перебери каждую и выгружая значения строк в структуры сериализуй структуру в строку и складывай в новый колонки.
3. закидывай тз в запрос, выбирай в ВТ и соединяй по заполненным колонкам. У одинаковых строк сериализованные значения буду одинаковыми и они соединятся
2 + 2 = 3.9999999999999999999999999999999...