|
Как сравнить на идентичность две ТЗ? | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
20.06.13
✎
14:24
|
Есть две таблицы значений. Как сравнить их на идентичность.
Причем порядок строк может быть разный? Я думаю сделать так: 1. Проверяем что колонки совпадают. Если нет - РАЗНЫЕ. 2. Сортируем по всем колонкам. 3. Идем по каждой строчке. Если встречаем расхождение - РАЗНЫЕ и прерываем. 4. Если дошли до конца, то ИДЕНТИЧНЫЕ. Есть метод попроще? ЗначениеВСтрокуВНутр почемуто даже для отсортированных разные значения показывает... Вот как-то так. |
|||
1
1Cv8_accepted
20.06.13
✎
14:26
|
(0) О, какие люди! )) Запросы в голову не приходят?
|
|||
2
fmrlex
20.06.13
✎
14:29
|
(0) Нда. Я тоже за запрос.
|
|||
3
Песец
20.06.13
✎
14:30
|
Скопипастить из типовой соответствующую функцию не предлагать.
|
|||
4
Гений 1С
гуру
20.06.13
✎
14:39
|
(1) (2) а если ТЗ не типизированная. Запрос не скушает, гыгыгы...
|
|||
5
Гений 1С
гуру
20.06.13
✎
14:39
|
(3) выложи ее сюды, фили
|
|||
6
Рэйв
20.06.13
✎
14:40
|
Если ЗначениеВСтроку(ТЗ1)=ЗначениеВСтроку(ТЗ2) Тогда
Сообщить("О чудо!Они одинаковые!"); КонецЕсли; |
|||
7
mozzga
20.06.13
✎
14:42
|
берем первую строку таблицы1 и ищем подобную в таблице2, если нет то <>
|
|||
8
Рэйв
20.06.13
✎
14:42
|
(0)>>ЗначениеВСтрокуВНутр почемуто даже для отсортированных разные значения показывает.
Так не бывает |
|||
9
Ненавижу 1С
гуру
20.06.13
✎
14:43
|
1. Проверяем что колонки совпадают. Если нет - РАЗНЫЕ.
2. Добавляем в одну из них (или ее копию) поле Флаг, проставляем его равным 1 3. Добавляем из второй строки, но с флагом -1. 4. сворачиваем с суммированием по флагу. 5. если есть ненулевые флаги, то разные |
|||
10
Песец
20.06.13
✎
14:43
|
(5) Я как раз и написал, чтоб не выкладывали, а то неинтересно будет :)
|
|||
11
Песец
20.06.13
✎
14:43
|
// Функция выполняет сравнение двух коллекций строк, для которых доступен обход
// посредством оператора Для каждого … Из … Цикл. // Сравниваемые коллекции должны отвечать следующим требованиям: // - доступен обход посредством оператора Для каждого … Из … Цикл, // - наличие в обеих коллекциях всех колонок, перечисленных в параметре ИменаКолонок // (если ИменаКолонок не заполнен - всех колонок) // // Параметры: // КоллекцияСтрок1 - коллекция, отвечающая вышеописанным требованиям // КоллекцияСтрок2 - коллекция, отвечающая вышеописанным требованиям // ИменаКолонок - строка, разделенная запятыми - имена колонок, // по которым производится сравнение. // Не является обязательным для коллекций, // состав колонок которых можно выявить: // ТаблицаЗначений, СписокЗначений, Соответствие, Структура, // если не указан - сравнение производится по всем колонкам. // Для коллекций других типов является обязательным // ИсключаяКолонки - имена колонок, которые игнорируются при сравнении, необязательный // УчитыватьПоследовательностьСтрок - булево, если Истина, то коллекции признаются // идентичными только если одинаковые строки размещены // в коллекциях на одинаковых местах // Функция КоллекцииИдентичны(КоллекцияСтрок1, КоллекцияСтрок2, ИменаКолонок = "", ИсключаяКолонки = "", УчитыватьПоследовательностьСтрок = Ложь) Экспорт |
|||
12
Лефмихалыч
20.06.13
✎
14:44
|
1. Пройтись по колонкам, проверить, чтобы одинаковые были. Параллельно собрать строки с описанием полей запроса и описанием полей соединения
2. Засунуть в случае совпадения колонок обе ТЗ в запрос 3. соединить полным соединением на (Есть NULL или <>) 4. Если не Результат.Пустой() Тогда не совпадают |
|||
13
1Cv8_accepted
20.06.13
✎
14:45
|
(0), (9) Тогда уж сортируй хотя бы, и перед основным циклом сравни количества колонок и записей, например...
|
|||
14
Deon
20.06.13
✎
14:46
|
(12) а если в одной таблице есть 2 полностью одинаковые строки?
|
|||
15
Лефмихалыч
20.06.13
✎
14:46
|
или даже - обе в запрос и в запросе добавить флаг, который суммировать, сгруппировав объединение таблиц). Тоже вариант.
|
|||
16
vde69
20.06.13
✎
14:47
|
можно так http://infostart.ru/public/68432/ хотя это не быстро будет...
|
|||
17
Лефмихалыч
20.06.13
✎
14:47
|
(14) а, ну да, доподнительным пакетом выбрать Количество(ВТ1.*), Количество(ВТ2.*) и сравнить
|
|||
18
acsent
20.06.13
✎
14:47
|
сериализация в xml
|
|||
19
Aprobator
20.06.13
✎
14:48
|
(18) при разной сортировке?
|
|||
20
patapum
20.06.13
✎
14:49
|
(0)
1. если колонки совпадают, то 2. добавить колонку Количество, в первой ТЗ заполнить единицами. 3. добавить строки второй таблицы, количество заполнять минус единицами. 4. свернуть 5. бежать циклом, если нашли не ноль, значит не совпали зы. если предполагается в исходных наличие повторов, свернуть обе перед началом п.1 |
|||
21
Deon
20.06.13
✎
14:50
|
(20) прикольно
|
|||
22
Aprobator
20.06.13
✎
14:56
|
(0)
1. Согласен. 2. Проверяем количество строк в таблицах - не солвпадает - разные 3. Запомним где нить количество строк любой таблицы. Формируем таблицу с идентичной структурой и пишем туда обе 4.таблицы. 5. Сворачиваем полученную таблицу по всем колонкам. 6. Количество строк в полученной таблицы отличается от пункта 3 - РАЗНЫЕ, иначе - ПРОФИТ! |
|||
23
Aprobator
20.06.13
✎
14:58
|
хотя, если возможны дули строк - не взлетит.
|
|||
24
Aprobator
20.06.13
✎
14:59
|
дубли )
|
|||
25
patapum
20.06.13
✎
15:00
|
(22) +100
(24) свернуть обе перед началом |
|||
26
acsent
20.06.13
✎
15:01
|
(19) при одинаковой конечно. xml сериализация уберет ненужные иденитфикаторы
|
|||
27
Aprobator
20.06.13
✎
15:04
|
хм - надо будет взять на заметку.
|
|||
28
lamesnake
20.06.13
✎
15:15
|
(22) (25) А если в одной таблице одна строка задублирована, а в другой - другая?
|
|||
29
Ненавижу 1С
гуру
20.06.13
✎
15:30
|
(20) ты же спер из (9)
|
|||
30
luns
20.06.13
✎
15:57
|
в вакууме не очень интересно решать. не известно большие ли таблицы и прочее.
ну а так, я за запрос, так как можно сразу и отличающиеся строки на выходе поймать, чтобы что то с ними сделать. я давненько вроде так движения сравнивал. |
|||
31
Гений 1С
гуру
20.06.13
✎
18:00
|
(20) о да, это известный метод, гыгыгы
|
|||
32
exwill
20.06.13
✎
18:32
|
(0) Вычислить CRC для каждой таблицы.
|
|||
33
mehfk
20.06.13
✎
18:45
|
(32) напиши Нуралиеву или на инфастард, чтобы замутили ф-цию глобального контекста вычислитьцрц32объекта() и до кучи вычислитьмд5объекта().
а по сути - сортировка может не совпадать - че делать? |
|||
34
Cyberhawk
20.06.13
✎
18:46
|
А каковы критерии идентичности исходных ТЗ?
|
|||
35
exwill
20.06.13
✎
18:51
|
(33) Сначала отсортировать, потом вычислить.
Хороший метод для Гения. |
|||
36
mehfk
20.06.13
✎
18:59
|
(35)А для того чтобы одинэсник мог извратиться как хочет в сортировке в методе Сортировать() предусмотреть второй параметр, который передает ссылку на ф-цию сортировки :)
|
|||
37
mistеr
20.06.13
✎
19:02
|
(34) Гениев это не волнует.
|
|||
38
mehfk
20.06.13
✎
19:03
|
(36) fix не сортировки, а сравнения
|
|||
39
mistеr
20.06.13
✎
19:04
|
(34) Строго говоря, "идентичны" означает ссылки на одну и ту же ТЗ. Можно говорить о равенстве или эквивалентности. Но опять же, кого это волнует.
|
|||
40
Cyberhawk
20.06.13
✎
19:07
|
(39) давай введем характеристики ТЗ: число столбиков, число строк, типы столбиков, порядок строк. Все эти хар-ки должны быть идентичными? Или наоборот: равенство двух ТЗ по этому набору хар-к позволяет говорить об идентичности двух ТЗ? Или набор хар-к какой-то другой?
|
|||
41
MaxS
20.06.13
✎
19:10
|
Как запросом сравнить, если в ТЗ несравниваемые типы данных?
Например, строка длиной 0, другое ТЗ, хранилищезначения с дистрибутивом Windows одной версии, но разных релизов. Или внешне одинаковые картинки, но разной компрессии. И т.д. и т.п. |
|||
42
romix
20.06.13
✎
19:11
|
Первая таблица
ААА 1 БББ 1 ЦЦЦ 1 Вторая таблица ААА -1 БББ -1 ХХХ -1 Дописывание второй таблицы в конец первой и свертка (Свернуть) дает нули там где идентичное и +1/-1 там где расхождения. |
|||
43
mehfk
20.06.13
✎
19:13
|
(42) У меня в первой таблице в первойсправочник
|
|||
44
mehfk
20.06.13
✎
19:16
|
"Сотрудники" а во второй "ФизЛица". Представление одинаковое. Но у васи пупкина наименование вася пупкин, а фио на 1 января 2001 года вася иванов. Как сравнивать?
|
|||
45
Посмотрим
20.06.13
✎
19:28
|
(44) при чем тут это? Задача другая стоит
|
|||
46
Ковычки
20.06.13
✎
19:29
|
(8) существует еще формат колонок и их имена
|
|||
47
Посмотрим
20.06.13
✎
19:29
|
в (9) уже ответ дан, чего мусолите?
|
|||
48
ice777
20.06.13
✎
20:00
|
(47) мне в (12) от левмихалыча больше импонирует отчего-то.
Так забавнее. |
|||
49
EvgeniuXP
20.06.13
✎
20:40
|
(44) от сотрудника взять владельца (ФизЛицо) и сравнивай.
|
|||
50
Эмбеддер
20.06.13
✎
20:44
|
как вариант без заморочек, можно делать так: значения помещаем в одну таблицу. поля, по которым группируем - без изменений, а количества, суммы и т.п. делаем разными колонками (например сумма_1, сумма_2, количество_1 и количество_2). потом если свернуть, то достаточно проверить что сумма_1=сумма_2 и т.д
правда, применяю не для проверки равенства таблиц, но для таблиц тоже подойдет |
|||
51
Эмбеддер
20.06.13
✎
20:45
|
вариант (9) конечно лучше
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |