|   |   | 
| 
 | Как правильно проверить 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 naïve 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. закидывай тз в запрос, выбирай в ВТ и соединяй по заполненным колонкам. У одинаковых строк сериализованные значения буду одинаковыми и они соединятся | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |