8.х Запрос с использованием иерархии.

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем shuklin_a, 21 май 2015.

  1. TopicStarter Overlay
    shuklin_a
    Offline

    shuklin_a

    Регистрация:
    11 май 2015
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Добрый день. Ситуация такова - есть две таблички - в первой есть колонка со ссылкой на позицию номенклатуры. Во второй колонка с ссылкой на группу справочника номенклатура. Необходимо присоединить (left или inner join) 2-ю к первой по условию - номенклатура из первой должна быть в группе, указанной во второй или в любой из подчиненных ей групп (аналогично В ИЕРАРХИИ, но в запросе без внешних параметров). Глубина вложенности и текущий уровень группы во второй колонке в общем случае неизвестны..
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну а в чем проблема в условиях связи прописать не номенклатура=группа, а что то типа
    Выбор когда Номеклатура в Иерархии(Группа)
    Тогда истина
    Иначе Ложь
    Конец
  3. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Курите рекурсию
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Зачем рекурсию, когда запросом все соединяется?
  5. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Я вот если честно, мало что понял из поста ТС, вот и брякнул :)
  6. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну у него в левой стороне
    Молоток изи справочника номенклатура
    В правой папки
    Инструменты (а в ней еще папка Инструменты типа молотков)
    Инструменты типа молотков

    Так вот ему надо чтобы левым соединением ему притянуло к молотку обе папки т.к он в них находится - вложенность любая
  7. TopicStarter Overlay
    shuklin_a
    Offline

    shuklin_a

    Регистрация:
    11 май 2015
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Неправильно вы поняли. Притягивать нужно ТОЛЬКО если молоток находится в ИЕРАРХИИ папки, указанной в правой таблице, иначе не присоединять строку
    Про рекурсию думал уже, но там грустно что-то ( Надеялся, есть более изящные решения.
    Проблема с запросом, который Вы указали в первом запросе в том, что В ИЕРАРХИИ() не умеет получать в качестве аргумента поле таблицы из запроса - либо список групп получать запросом либо внешний параметр
  8. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну я же вам написал
    --- Объединение сообщений, 21 май 2015 ---
    ссори в Иерархии не сработает. Был уже такой вопрос сейчас вспомню
  9. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Тут имеется ввиду, наверное, если идет большая вложенность у номенклатуры, и не всегда Родитель является Папой :)
  10. TopicStarter Overlay
    shuklin_a
    Offline

    shuklin_a

    Регистрация:
    11 май 2015
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    да. в качестве группы для отбора может быть, например, группа В:
    [​IMG]
    В результате мне нужно добавлять строчку соединением, если номенклатура в одной из групп: В,Д,Е,З,И,К
    Очень хотелось бы это сделать одним запросом, без привлечения циклов 1С. И рекурсия в запросах 1С, вроде бы, не работает (
  11. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Смотрите если у вас глубина справочника конечно то можно использовать конструкцию
    Номенклатура.Родитель = Номенклатура1.Ссылка
    ИЛИ Номенклатура.Родитель.Родитель = Номенклатура1.Ссылка
    ИЛИ Номенклатура.Родитель.Родитель.Родитель = Номенклатура1.Ссылка
    ИЛИ Номенклатура.Родитель.Родитель.Родитель.Родитель = Номенклатура1.Ссылка

    если нет то там надо извратиться получить временную таблицу в котрой будет родитель в первой колоке и во втройй все его родители, а затем уже использовать ее для сравнения
    --- Объединение сообщений, 21 май 2015 ---
    Кстати если это на СКД для отчета то можно сделать как делается построение собственной иерархии
  12. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    А можно для медленно соображающих (типа меня) рассказать что нужно только с парой примеров?
  13. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Ребят, в посте №3 все описано, нафига велосипед изобретать ?
  14. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Там ссылока на стороний ресурс - скинул в личку
  15. TopicStarter Overlay
    shuklin_a
    Offline

    shuklin_a

    Регистрация:
    11 май 2015
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Нет, это не СКД, пожтуми и прошу совета :) Этот пример - костыль. Временно так и сделал, до сюда. Проблема в том, что это нужно сделать в запросе. Глубина вложенности не ограничена. Пока максимальный уровень - 5. Но, кто знает, что дальше будет :)
    --- Объединение сообщений, 21 май 2015 ---
    Рекурсия в запросах 1С отсутствует. А сделать надо именно в запросе.
  16. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Запрос вам не поможет....
  17. TopicStarter Overlay
    shuklin_a
    Offline

    shuklin_a

    Регистрация:
    11 май 2015
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Позже, с работы уже уехал, а с мобильника не ок :)
    --- Объединение сообщений, 21 май 2015 ---
    Значит, придётся оставлять костыль с запасом по вложенности :)
  18. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    По какой причине вам нужно именно запросом ?
  19. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну я же вам ссылку дал как там с запросом можно сделать, или Вы не поняли
  20. TopicStarter Overlay
    shuklin_a
    Offline

    shuklin_a

    Регистрация:
    11 май 2015
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Первый из указанных там я м так сделал ещё раньше, но это самый натуральный костыль. Во втором способе результат запроса обрабатывается средствами 1с. А хочу в запросе. Костыль с запасом вложенности в этом случае предпочтительнее
    --- Объединение сообщений, 21 май 2015 ---
    Потому что запрос работает быстрее. К тому же эта задачака - маленький фрагмент большей. В которой всё сделал запросом.

Поделиться этой страницей