Имя: Пароль:
1C
1С v8
Сравнение табличных частей в запросе
0 Игорь_МММ
 
29.06.16
16:41
Есть такая задача: сгруппировать элементы справочника по результату сравнения таб.частей. Результат сравнения ИСТИНА если в обоих ТЧ одинаковый состав номенклатуры. Есть какие-нибудь идеи как это можно реализовать?
1 Timon1405
 
29.06.16
16:47
2 Nuobu
 
29.06.16
16:50
Я один не вижу связи между (1) и тем, что хочет ТС?
3 Beretta
 
29.06.16
16:50
(2) Нет =)
4 Euguln
 
29.06.16
16:52
(2) Слова "Запрос" и "номенклатура", ну и все.
5 Nuobu
 
29.06.16
16:58
(0) По делу: жмакни на букву "Я" возле называния темы.
6 Игорь_МММ
 
29.06.16
17:01
(5) искал , конечно, но нужного не нашел. По количеству строк сравнивают, еще по чему - я так понял просто смотрят изменяласт ТЧ или нет. У меня другое
7 Nuobu
 
29.06.16
17:02
(6) А что у тебя?
8 ovrfox
 
29.06.16
17:02
Результат сравнения - это булево или хешфункция или третье?
В ЛЮБОМ случае, если поле "РезультатСраненияТЧ" содержит результат сравнения таб.частей, то нужно просто сгруппировать результат по данному полю
9 Зая Бусечка
 
29.06.16
17:03
Полное соедиение по ключевым полям и проверять на NULL
10 FIXXXL
 
29.06.16
17:05
возьми обе ТЧ, сгруппируй каждую по Номенклатуре
добавь поле для анализа, "1" к примеру

сгруппируй две ТЧ, просуммируй "1"
если есть строки <>2 - есть расхождения по номенклатуре
11 ovrfox
 
29.06.16
17:06
(8) Понял что булево
Не понял что с чем сравнивать.
Список элементов справочника со вторым списко элементов (т.е. все со всеми) или есть всего два элемента? Тогда что группировать?
12 Nuobu
 
29.06.16
17:08
(11) + (8) ты сам с собой разговариваешь?
13 Игорь_МММ
 
29.06.16
17:08
(8) не Булево , точно , в (0) неверно написал, по полю сравнению нужно группировать. То есть смысл в том чтобы выцепить группы элементов с одинаковой номенклатурой в ТЧ. (11) все со всеми. Как бы весь справочник пересортировать
14 Игорь_МММ
 
29.06.16
17:11
Не силен в хеш-функциях, но сейчас почитал - что-то похожее. Правильно ли я понимаю, что хешированием ТЧ можно получить некий индентификатор этой ТЧ, потом сравнивать по этому индентификатору?
15 ovrfox
 
29.06.16
17:18
Выбрать
    Ссылка,
    Номенклатура,
    1 КАК фНаличия
Поместить ПредВыборка
Из Справочник
;
Выбрать С11.Ссылка, ВнЗапрс.Ссылка
Из (Выбрать С1.Ссылка , Сумма(фНаличие) как фНаличие ИЗ ПредВыборка Сгруппировать по С1.Ссылка ) как С11
Внутреннее соединение (
   Выбрать С2.Ссылка, C3.Ссылка как Похожий, Сумма(С2.фНаличия) Как фНаличия
  ИЗ ПредВыборка С2 Внутреннее Соединение ПредВыборка С3 где С2.Ссылка <> С3.Ссылка и С2.Номенклатура = С3.Номенклатура Сгрупиировать по С2.Ссылка, С3.Ссылка) КАК ВнЗапрос
Где С11.Ссылка = ВнЗапрос.Ссылка и С11.фНаличие = ВнЗапрос.Фналичие
16 ovrfox
 
29.06.16
17:21
(15) Сорри , в последней строки вместо "где" нужно "по"
Результат запроса - все схожие пары, причем как Вариант Элем1, Элем2, так и вариант Элем2,Элем1.
17 Игорь_МММ
 
29.06.16
17:24
(15) (16) спасибо , сшас буду курить сие ..
18 ovrfox
 
29.06.16
17:27
(14) Неправильно понимаешь.
Если (и только тогда) ХЕШ функция имеет нормальное распределение пд диапазону 1-1 миллион в целых числах, то с вероятностью 1 к миллиону в случае совпадения хеш функции парамтеры хеш функции НЕ совпадают
Т.е. остается случай случайного срабатывания хеш функции. Но для твоего случая наверное подходит
19 Игорь_МММ
 
29.06.16
17:36
(15) что логика сего ускользает от меня (
20 Игорь_МММ
 
29.06.16
17:37
(15) в чем смысл?
21 ovrfox
 
29.06.16
17:39
(15) Я тут еще подумал, предположительно если соединение второй таблице с третье выполнять не по условию "<>", а по условию "<", то мы отбросим половину совпадений.
Логика простая
Сначала выбираем всю нгменклтуру однократно (кстати, первый запрос нужно сгруппировать по номенклатуре и ссылке)
В с11 это у нас количество строк номенгклатуры
В ПредВыборке - количество совпавших строк номенклатуры в паре.
Соединение с11 и предвыборки - проверка что совпали все строки, а не некоторые.
22 ovrfox
 
29.06.16
17:42
И в первой строке второго запроса вместо
Выбрать С11.Ссылка, ВнЗапрс.Ссылка
Должно быть :
Выбрать С11.Ссылка, ВнЗапрс.Похожий