|
Как правильно обойти элементы в связке многие-ко-многим?
RomanYS, Garykom, Seriy_Volk, Fedor-1971, T32, piter3, maxab72, alexela, DrZombi, phabeZ, H A D G E H O G s, strange2007, Масянька, privetik, vicof, Hawk_1c, Mafiozaa, СвинТуз, AntiBuh, mmg, abfm, Ёпрст, Буковка, nick86, Rovan, Zapal, dimm7310, bushd, elka302, Chameleon1980
| ☑ |
0
1сПупс
26.05.25
✎
15:28
|
привет!
Есть табличная часть документа Заказ в производство (в которой есть колонки ID и значение), и есть массив значений ( содержащий только ID). Как правильно обойти элементы ТЧ чтобы все строки с совпадающими ID получили значение 1 (скрин)?
Если бы табличная часть сравнивалась с одним элементом массива, была бы связь один ко многим (один элемент массива к строкам ТЧ). Тут все легко. А Как действовать в случае связи многие ко многим?
Обходить ТЧ и внутри каждого элемента ТЧ делать цикл на сравнение с одним из элементов массива?
|
|
1
maxab72
26.05.25
✎
15:31
|
Обходить массив значений а строки из Заказа отбирать по фильтру по ИД.
|
|
2
H A D G E H O G s
26.05.25
✎
15:32
|
MergeJoin
|
|
5
Fedor-1971
27.05.25
✎
10:50
|
(0) Не совсем понятно что нужно
1. Есть массив ИД
2. Есть таблица значений (ТЧ Заказа в производство) с ИД и Значением
Что собрался делать?
Заполнять некую другую ТЧ по ИД выдавать там значение из п.2?
Проверять, что для ИД из п.1 заполнены все значения в таблице из п.2? (решение предложено в (1))
|
|
8
СвинТуз
27.05.25
✎
14:22
|
Если обойти, а не загнать в запрос,
то видимо "НайтиСтроки"
|
|
9
СвинТуз
27.05.25
✎
14:23
|
Можно отсортировать по ключу и идти синхронно по двум таблицам
|
|
10
СвинТуз
27.05.25
✎
14:24
|
+ тупой перебор
|
|
11
СвинТуз
27.05.25
✎
14:25
|
Итого как минимум четыре способа
Есть и еще
"Барометр" короче от Нильса Бора
|
|
12
Garykom
гуру
27.05.25
✎
14:30
|
(9) Сортировка это тоже затраты
|
|
13
Garykom
гуру
27.05.25
✎
15:21
|
(0) Засунуть массив в ТЗ, передать в запрос, соединить
|
|
14
Garykom
гуру
27.05.25
✎
14:33
|
(13)+ Хотя парю, если надо просто 1 для совпадающих строк то прямо массив передаем в запрос
И делаем условие ID В(&Массив)
|
|
15
H A D G E H O G s
27.05.25
✎
14:33
|
(9) Это называется СоединениеСлиянием, MergeJoin.
Вот тут даже алгоритм есть, прям на русском.
wiki:Алгоритм_соединения_слиянием_сортированных_списков
|
|
16
Garykom
гуру
27.05.25
✎
14:34
|
(15) Еще один
А затраты на сортировку???
|
|
17
Garykom
гуру
27.05.25
✎
14:42
|
Для целочисленных ID при наличии дофига памяти и (Макс(ID)-Мин(ID)) укладывается в нее
Наиболее быстрый алгоритм это однопроходный алгоритм на простых массивах (не которые 1С а напрямую в памяти)
Сначала по массиву значений, пишем 1 в ПростойМассив[ID]
Затем по ТЧ, тупо смотрим ?(ПростойМассив[ID] = 1, 1, 0)
|
|
18
СвинТуз
28.05.25
✎
09:12
|
(17)
Типа соответствие? Номер строки в первой ключ. Значение массив строк во второй. Или массив номеров?
|
|
19
RomanYS
28.05.25
✎
09:58
|
1. Простейший вариант. ТЧ обходим, в массиве ищем (Мас.Найти(...))
1+. Тоже самое, но массив заменяем на соотвествие
2. Если значений в массиве заведомо мало (это не случай из (0)). Обходим массив и ТЧ.НайтиСтроки()
3,4... Мерджи, соединение запросом и прочее. Тоже не случай ТС
|
|
20
Garykom
гуру
28.05.25
✎
11:24
|
(19) поиск в массиве или соответствии с 5 лямов элементов?
обрати внимание на ID в (0)
|
|
21
RomanYS
28.05.25
✎
11:30
|
(20) То, что макс. значение ID 5+ млн, вовсе не означает, что столько значений в выборке.
При 5 млн строк речи про ТЧ бы вообще не было.
Ну и в соответствии это будет вполне приемлемо, если конечно не повторять 5 млн раз)
|
|
22
Garykom
гуру
28.05.25
✎
11:33
|
(21) допустим в ТЧ 100к строк
а в массиве значений с ID 1 лям элементов
?
|
|
23
RomanYS
28.05.25
✎
11:48
|
(22)
|
|
24
RomanYS
28.05.25
✎
11:49
|
(22) 0.27 секунд на 100000 поисков норм результат?
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший