Сравнить две Таблицы Значений #415524


#0 by El_Duke
Есть две табл. значений ТЗ_1 и ТЗ_2. В обоих по 3 поля. Надо сравнить строки этих таблиц и если строка из ТЗ2 не входит и ТЗ1, то перенести её в ТЗ_3. Пишу код: ТЗ_2.ВыбратьСтроки; Как правильно сформулировать условие для Если ? Перепробовал несколько условий - каждый раз отбираются лишние строки. Подскажите кто сталкивался и делал такое.
#1 by zdas
делай уникальный индекс, по нему и ищи
#2 by zdas
либо цикл в цикле)))) (за это бы оторвал руки)
#3 by Sarius
Добавить в таблицы по полю со значением "1" для новой и "-1" для старой, слить таблицы и свернуть по первым трем полям и суммой по единицам. Далее разбор таблицы - где положительные - этих строк нет в первой таблице.
#4 by nop
а если ТЗ_1.КоличествоСтрок > ТЗ_2.КоличествоСтрок ?
#5 by Sarius
мой вариант, кстати, такое нормально обработает
#6 by Волесвет
+ 1 прально ... можно еще 2 в 1 склепать и там одинаковые убрать...
#7 by nop
молодец! Токо памяти много ...
#8 by kiruha
В 7.7 нет индексов. И для справки - внутренний алгоритм работы ТЗ даже на групповых операциях - последовательный перебор. Прежде чем руки отрывать - неплохо голову включить
#9 by zdas
индекс в ТЗ можно сделать, что быстрее - перебор программный или кодом 1С?
#10 by Волесвет
млин что й то я повторяюсь)))
#11 by zdas
+9 к тоже не помешало бы голову включить;)
#12 by Sarius
ну не под БК же программируем.... По сути это и происходит. Сливая 2 таблицы с -1 и 1 и сворачивая мы делаем новое поле нулевым. Если было несколько одинаковых строк в таблице - то поле будет -1 или +3 - неважно, важно, что плюсовое значение покажет, что во второй таблице таких строк на столько-то больше. Если же свернуть таблицы до создания поля - то получим именно уникальные строки, т.е. повторений не будет.
#13 by El_Duke
причем тут количество строк ? мне надо по значениям строк отбирать, значит надо сравнивать поля каждой строки в двух таблицах
#14 by Sarius
не надо тебе их сравнивать... Сделай как я описал - и будет тебе счастье...
#15 by lamme
само тупое ... сцепляем все значения колонок в одну строку - и сравниваем имхо - такой поиск и перебеор долгий черех Тз.НайтиЗначений - быстрее получится (сначала подготовить так же в двух ТЗ - колонку где искать (ТЗ1) и что искать (ТЗ2))
#16 by Sarius
сначала пришло в голову такое - отбросил, так как поле с единицей и проще добавить и проще работать
#17 by zdas
мой способ в быстрее. Способ 1, общих строк: 1402 // свертка
#18 by zdas
могу код скинуть если интересно
#19 by lamme
ясно дело - что Тз.НайтиЗначение намного быстрее - чем в цикле выбиратьСтроки в ТЗ
#20 by El_Duke
для семерки ?
#21 by zdas
код с индексом компактнее и быстрее
#22 by zdas
да
#23 by Euguln
а время на постановку индекса?
#24 by Mikeware
Параметры: ТЗ2 - тип: ИндексированннаяТаблица. Таблица, с которой строится разность. ИндексТекущейТЗ - тип: Строка, Число. Имя или номер индекса в текущей таблицы. ИндексВторойТЗ - тип: Строка, Число. Имя или номер индекса в ТЗ2. флДобавлятьСтрокиТЗ2 - тип: Число. Флаг добавления строк ТЗ2 в результат. Описание: разность двух таблиц по ключевым полям. Результатом является таблица, в которой присутствуют строки текущей ТЗ, которых нет в ТЗ2, и строки ТЗ2, которых нет в текущей ТЗ (с учетом флДобавлятьСтрокиТЗ2). Совпадение строк определяется по индексам ИндексТекущейТЗ и ИндексТЗ2. Количество колонок в индексах должно быть одинаковым
#25 by El_Duke
скинь
#27 by zdas
почти никакого)))
#28 by zdas
решения для кроется во втором способе, только условие немного поменять надо )))
#29 by Euguln
для чистоты эксперимента приведи цифры
#30 by zdas
пожалста (это в рабочей базе, где сейчас неплохая нагрузка на сервер)
#31 by Euguln
я имел в виду общее время для таблиц )))
#32 by kiruha
Есть же индексированная таблица в 1С++
#33 by El_Duke
дык у меня нет ВК
#34 by zdas
см , я привел время для этого не надо ВК:)) все стандартными средствами)
#35 by Euguln
в судя по не учитывается время индексирования
#36 by zdas
полное время :) Индекс в данном случае - простое уникальное поле, вот и все:)
#37 by Euguln
Сделай так:
#38 by zdas
это заполнение ТЗ как для первого варианта, так и для второго. я тебе дал время в скорость заполнения индекса для 11 документов. И насколько я помню разговор не о скорости заполнения ТЗ :).
#39 by Euguln
имеется в виду, интересна ситуация, когда индекс создается дополнительно уже для готовых таблиц, а не на этапе их создания.
#40 by zdas
ну да, немного дольше чем установка 1 и -1.
#41 by Ёпрст
делай всё через свернуть... это быстрее, чем создание индекса и поиск по нему потом.
#42 by Ёпрст
+41 а пример в - полная туфта..если что.
#43 by Serginio1
Сортируем сравниваемые таблицы, сравниваем и идем от меньшего к большему. К сожаление сравнение полей на <> не проходит т.к. разные функции сравнения для таблицы. Пример для 2 полей. Можно упростить через получитьЗначение
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С