Имя: Пароль:
1C
 
Подскажите плиз! Как проверить на идентичность 2 таблицы значений!
Ø
0 stariy
 
22.08.06
15:16
Подскажите плиз! Как проверить на идентичность 2 таблицы значений!
Есть ли какой алгоритм...
перебор... уж очень мне не нравиться эта идея.
Смысл такой есть 2 ТЗ скажем по 1000 строк нужно проверить идентичны они или нет, причем не строки а вся ТЗ в целом идентична второй или нет...
1 Ахмед ибн Фадлан
 
22.08.06
15:18
В в77? Посортировать одинаково, ЗначениеВСтрокуВнутр и сравнить строки. Правда не знаю сколько он будет сравнивать большие таблицы.
2 stariy
 
22.08.06
15:24
ок
сейчас попробую
3 stariy
 
22.08.06
15:28
попробовал сразу так
Если ЗначениеВСтрокуВнутр(Материалы)=ЗначениеВСтрокуВнутр(МатериалыНовые) тогда
...
Материалы и материалыНовые - это ТЗ
так вот результат
ЗначениеВСтрокуВнутр для одинаковых ТЗ разный...
может по строкам нужно:?
4 stariy
 
22.08.06
15:30
для 2 одинаковых ТЗ получилось так :
{"#",2c6006f3-7e85-4a97-a820-66b8142aa341}
{"#",044f796d-d54c-40c6-8a32-1f428408450e}
5 Ахмед ибн Фадлан
 
22.08.06
15:36
2(4) Этот способ для в77. Для в8... не знаю... по-моему можно просто сравнить. Две переменные? Или нет? Тогда может их загнать в хранилище значений?
6 stariy
 
22.08.06
15:38
просто сравнить = не работает...
а в хранилище загонять:? в чем смысл..
загоню а как проверить равны они или нет:?
7 Сисой
 
22.08.06
15:50
Надо дождаться 8.1. Временные таблицы рулят.
8 stariy
 
22.08.06
15:52
да уж..
хотелось бы но
сейчас надо...
9 Ахмед ибн Фадлан
 
22.08.06
15:58
2(6) Не могу сказать, это на уровне интуиции - загнать в хранилище значений как двоичные данные и потом сравнить эти два хранилища.
Или даже не знаю... использовать сериализацию ХМЛ... но вот не могу сказать весь алгоритм до конца. Это так - просто направленияв которых бы я думал.
10 angro
 
22.08.06
16:00
как вариант
отсортировать по всем колонкам, а потом сравнить построчно.
11 stariy
 
22.08.06
16:05
ок
буду думать
спасибо
12 stariy
 
22.08.06
16:09
to 10
привет!
пробовал...
не хочется перебором просто понимаешь...
ТЗ могут быть большие более 1000 строк.
13 angro
 
22.08.06
16:10
  для сч=0 по ТЗ.Количество()-1 цикл
    строка = ТЗ[сч];
    строка2 = ТЗ2[сч];
    для сч2=0 по ТЗ.Колонки.Количество()-1 цикл
      Если строка[сч2]<>строка2[сч2] тогда
                             возврат "массивы разные";
                        КонецЕсли;
    КонецЦикла;
  КонецЦикла;
14 angro
 
22.08.06
16:12
здорово,
У тебя в этом месте тормозит? если будет тормозить тогда и надо думать о производительности. По любому на каком-то этапе будет перебор.
15 angro
 
22.08.06
16:15
в цикле загоняем все значения в строку, одну ТЗ в одну строку, другую ТЗ в другую, и сравниваем строки. Программер после тебя голову сломает в этом месте.
16 Чучундер
 
22.08.06
16:15
Правда где-то в рааонй сохранить строку внутр и сравнить
только учесть что внутренние значения
ТЗ1.НоваяКолонка("Клиент","Справочник.Номенклатура")
ТЗ2.НоваяКолонка("Клиент","Справочник")
ТЗ1.Клиент = СрК.ТкущийЭлемент();
ТЗ2.Клиент = СрК.ТкущийЭлемент();
внутренние значения ТЗ1.Клиент и ТЗ2.Клиент - РАЗНЫЕ
17 stariy
 
22.08.06
16:15
уже тормозит...
при больших ТЗ
а примерно так у меня сейчас и сделано...
18 Чучундер
 
22.08.06
16:17
Слить две таблицы в третью и свернуть е по всем колонкам. если количество строк = количуству строк ТЗ1 или ТЗ2 - тогда равны, иначе - нет
19 angro
 
22.08.06
16:19
добавление к (18) только перед этим пронумеровать, а то если в ТЗ есть повторяющиеся строки, так работать не будет.
20 Ахмед ибн Фадлан
 
22.08.06
16:21
2(18,19) блин, гениально! :) молодцы
21 stariy
 
22.08.06
16:21
to 17
сделано как в 13
спасибо за 18 и 19
22 Чучундер
 
22.08.06
16:27
Правильный и красивый вариант в (3) + (16)
строки не сравнивать а сложить побитово результат проинтепретировать как число, если = 0 - то ТЗ одинаковые
23 mcoff
 
23.08.06
03:11
to 22
в таком случае уж xor|and - быстрее будет.
24 Чучундер
 
23.08.06
11:22
(23) Ну это и имелось в виду
25 Myst
 
25.08.06
17:55
самый простой способ это скопировать в одну таблицу и свернуть по свсем полям.Если количество строк будет равно количеству исходной таблицы можно предположить с высокой вероятностью что они идентичны
26 Dev
 
25.08.06
19:47
(18,25) А как можно слить две таблицы в одну без перебора? Простите плохо знаю 8
27 saper
 
26.08.06
15:02
(26) 7.7
ТЗ_1.КоличествоСтрок(ТЗ_1.КоличествоСтрок() + ТЗ_2.КоличествоСтрок());
ТЗ_1.Заполнить(ТЗ_2, ТЗ_1.КоличествоСтрок()- ТЗ_2.КоличествоСтрок() + 1,);