Рекурсивная выборка Спецификации Номенклатуры #303349


#0 by fyntom
Привет всем! Есть проблема: необходимо выбрать данные о номенклатуре иерархически. Грубо говоря по номенклатуре смотрится спецификация из чего оно состоит. А потом каждую составляющую еще раз пройти. Получается иерархический рекурсивный обход который мой моск просто не смог осилить. В sql не шибко силен так, что прошу сразу извинить. Добился того чтобы выбиралась номенклатура и спецификация по ней из таблицы спецификации, то есть способ прохода снизу вверх.  А необходимо наоборот из Номенклатуры в Спецификацию. Как это сделать и запустить рекурсивно не знаю  :( Помогите пожалуйста, заранее спасибо. Запрос.Текст=
#1 by fyntom
up
#2 by GenV
Ну даже если динамически формировать запрос с учетом родителей, то как учитывать циклические ссылки на самих себя?
#3 by selenat
пардон, но бред написан в запросе. Создай новую обработку, воспользуйся конструтором выходной формы. Справочник Номенклатуры соединяй левым соединением со спр. Спеццификации (если конечно тебе нужна вся номенклатура, а не только та, по которой есть спецификация), итоги по номенклатуре. Отключи вывод в постороитель отчета. И получишь весь текст и запроса и обхода выборки автоматически. Дальше смотри, думай...
#4 by Divemaster
Если хочешь, почту напиши свою, отправлю тебе функцию, решающую твои проблемы, здесь не буду выкладывать - слишком большой запрос, много буков.. Посмотришь, подправишь для своих нужд.
#5 by fyntom
Спасибо за советы.. готов разбираться.. В запросе согласен что бред. Ибо не силен вообще в запросах. yoland[собака]yandex.ru мое мылко... буду очень признателен.
#6 by Divemaster
разбираться придется :), письмо ушло...
#7 by ЗлобнийМальчик
по идее, такая задачка решается кучей левых соединений
#8 by fyntom
Мой первый опыт работы с построителем запросов увенчался провалом. Хоть я и соединил таблицы и выбрал то что мне надо.. Но это ж вообще зло какоето: Запрос.Текст="ВЫБРАТЬ Выдало следующее: {Форма.Форма1}: Ошибка при вызове метода контекста (Выполнить): {(3, 2)}: Поле не найдено "Справочник.СпецификацииНоменклатуры.Наименование" <<?>>Справочник.СпецификацииНоменклатуры.Наименование КАК Наименование1,      Результат=Запрос.Выполнить;       Спасибо за исходник... Запрос и правдо ацкий. Пишут же люди такое. Делал еще так, строит иерархический обход с рекурсией, но чегото както не очень:
#9 by fyntom
Последний запрос выдает пустые поля.. поэтому и не очень. Хотя запрос вроде верный. Выдает номенклатуру и возможность ссылки на спецификацию.
#10 by selenat
еще бы. У тебя не определено что такое Справочник. И я бы на твоем месте не начинал работать с постороителем отчетов. Разберись сначала с обычными запоосами.
#11 by selenat
+10 Тогда уж так ="ВЫБРАТЬ
#12 by Oleg_Nik
А смысел делать рекурсию именно запросом? Да еще когда с запросами "не очень"... Сделай функцию ПолучитьСоставСпецификации, вызывай ее рекурсивно. Мухи отдельно, котлеты - отдельно.
#13 by fyntom
up
#14 by fyntom
up
#15 by fyntom
УРА!!! Я добился успеха... выборка уже делается правильно... Номенклатура выбирает  и продукцию которая имеет спецификациюНоменклатуры... Но проблема в том.. что хоть она ее и выбирает.. нов какую ветку выборки спустится чтобы ее найти.. Окно дебаггера скоро станет прям заместо обычного окна.. Света там вообще не видно... Раскрываешь этих родителей и ссылки.. Но спецификаций  там нет. Помогите пожалуйста. Процедура ВыдатьРекурсивно(Выборка)
#16 by fyntom
гз
#17 by fyntom
привет... вообщем решил я свою проблему....вовсе не запросом а рекурсивной выборкой. .получилось жутко не оптимально и на больших данных убдет падать... но да ладно...  Но очень интересно как можно оптимизировать это запросом.. чтобы делать превыборку Процедура КнопкаВыполнитьНажатие(Кнопка)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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