алгоритм полного соединения #528854


#0 by Администратор 1С
Здравсвуйте, Подскажите эффективный алгоритм реализации двух таблиц значений без использования запроса
#1 by Cthulhu
не можем.
#2 by ДенисЧ
Ась?
#3 by Администратор 1С
Хотел сказать: Нужен алгоритм для реализации полного внешнего соединения 2-х таблиц значений без использваония запроса.
#4 by Cthulhu
: ну скомпонуй программно (без запроса) результирующую ТЗ. только вот - анакуа???
#5 by Администратор 1С
Вопрос по какому алгоритму скомпоновать?
#6 by Администратор 1С
сравнить 2 таблицы хочу
#7 by Defender aka LINN
А что запросы, не походят по религиозным соображениям?
#8 by МихаилМ
опишите критерии эффективности.
#9 by Администратор 1С
запросом не получается, в колонке для соедения текст, который перед тем как соеденить нужно еще обработать удалить пробелы лишние и т.д.
#10 by Defender aka LINN
И?
#11 by Администратор 1С
? быстродействие
#12 by Администратор 1С
предлагаете пройтись в цикле по таблица, выполнить "текстовые операции" , а потом запрос использовать??
#13 by МихаилМ
этап предобработки для сопоставления не миновать.
#14 by Администратор 1С
предобработку можно в циклах основного алгоритма выполнять
#15 by МихаилМ
ошибаетесь.
#16 by Администратор 1С
Вы не могли поподробнее?
#17 by Defender aka LINN
Какбе, да.
#18 by Администратор 1С
Я думал что если уж бегать по таблциам то можно сразу их сравнивать и соединять
#19 by Defender aka LINN
Можно и не бегать. От условий зависит. Ну а если не хочешь запрос - бери, да и соединяй, кто ж мешает-то?
#20 by Администратор 1С
Вопрос как это сделать?
#21 by Лефмихалыч
ну, надо как-то себя заставить... В чем именно проблема? Ты не знаешь, как сравнить два значения? Или не знаешь, как перебрать все строки ТЗ? Или количество колонок заранее не известно и ты не знаешь, как перебрать все колонки ТЗ? Или ты не знаешь, как в рамках твоей задачи ответить на вопрос, а равны ли две ТЗ?
#22 by Администратор 1С
Не знаю сколько раз перебирать строки ТЗ. Колонки перебирать не надо, их колчиество известно. Не знаю может есть "типовой/ые" алгоритмы для решения данной задачи. Задача то стандартная.
#23 by Лефмихалыч
типовой метод - запрос, но тебе вера не позволяет. перебирать надо, чем меньше, тем лучше
#24 by Администратор 1С
Какого по вашему наименьшее число переборов для полного соединения?
#25 by Defender aka LINN
Как сделать что?
#26 by Rie
Строки ТЗ перебирать один раз, предварительно отсортировав их.
#27 by Rie
+ Стоп. Соврал. Соединение - полное ведь. Бежишь по первой, внутри цикла бежишь по второй.
#28 by Администратор 1С
Так по моему левое соединение получится
#29 by Ork
Full Join это когда каждый слева имеет соответствие каждому справа. Так что все правильно.
#30 by Ork
+ Left join это когда каждому слева ставится в соответствие что-либо справа. И если "справа" есть записи, которые не соответствуют условию соединения - они в результат не попадут. А все, что "слева" попадает 100%.
#31 by Администратор 1С
Это внтуренее соедение по моему.  а как быть с записями из таблицы по который осущетвлен внутренний цикл для которых соотвествий не найдено.
#32 by DrShad
так ведь полное соединение
#33 by МихаилМ
#34 by Администратор 1С
В какой момент они будут включены в результирующую талицу?
#35 by Администратор 1С
не понял
#36 by ado
Вставляешь в результат, подставляя в колонки другой таблицы нуллы.
#37 by Администратор 1С
а как быть с записями из таблицы по который осущетвлен внутренний цикл для которых соотвествий нет? в какой момент?
#38 by Администратор 1С
Ты буш уверен что их можно включить в рез. таблицу
#39 by H A D G E H O G s
Ах тыж йо... тыж на...
#40 by H A D G E H O G s
ЧислоСтрок=Маск(Таб1.Количество,Таб2.Количество);
#41 by H A D G E H O G s
Тут не ПОЧТИ НАВЕРНЯКА не нужен запрос, если только Результат соединения не будет использован в следующем запросе (это я про производительность)
#42 by Администратор 1С
?
#43 by Администратор 1С
Вопрос то вроде не сложный, но вариант решение был предложен только в . Правда не верный, двух циклов не достаточно.
#44 by H A D G E H O G s
Лениво
#45 by МихаилМ
алгоритм из 27 дополните пометкой строк 2 таблицы, которые участвовали в соединении потом ещё перебор втрой таблицы и добавление строк не умноженных в первой части алгоритма те не помеченных. но этот алгоритм оптимальеным по скорости назвать сложно. тк он обратвает не множества а строки. но хоть что-то.
#46 by Администратор 1С
Спасибо ща опробую
#47 by МихаилМ
а по поводу скорости скд умеет делать левое соединение. сам скорость работы не проверял (разработчики 1с любят халтурить). сответственно с скд находим несовпадения (ищите темы на мисте пропоиск различных одинаковых. например дополняем строками ключами несовпадениями далее применяем скд. кстати можно для нормализации полей ключей в ТЗ тоже СКД применить попробовать. может будет быстрее. если можно приведите различия значений полей-сопоставлений
#48 by Лефмихалыч
кто знает, как называется патологическая боязнь писать код в конфигураторе?
#49 by acsent
Сортируешь обе таблицы по ключевым полям и спуском вниз сравниваешь
#50 by Администратор 1С
Обобщив все вышесказанное, а также инфу из инета. Нашел, что алгоритмы соедениния бывают (: 1.Алгоритм соединения вложенными циклами. Предложено в , дополнено в . 2.Алгоритм соединения хэшированием. 3.Алгоритм соединения слиянием сортированных списков Видимо предложено в , правда при соедении по текстовому полю, как у меня, придется использовать метод описанный . В итоге сделал как в : Для каждого строкаВнешнТабл  ИЗ ВнешняяТаблица Для каждого СтрокаВнутрТаблицы из ВнтуреняяТаблица Цикл Спасибо за ответы.
#51 by IVT_2009
Слить в одну введя идентификатор таблицы и сверткой количество повторений вывести.
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

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