8.х Поиск в справочнике в рамках определённой группы

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем vihuhol, 10 июн 2010.

  1. TopicStarter Overlay
    vihuhol
    Offline

    vihuhol Опытный в 1С

    Регистрация:
    20 апр 2010
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    26
    Добрый день!

    Есть иерархический справочник номенклатуры (года->производители->модели).
    Например 2 уровня групп и элементы. Известно Наименование группы 1-го уровня, Наименование группы 2-го уровня. Наименование самого элемента.

    Подскажите, пожалуйста, как определить есть ли уже группа 2-го уровня в 1-м уровне и есть ли элемент в группе 2-го уровня Справочника?

    Проблема в том, что в разных годах могут быть одинаковые производители, и соответственно в разных годах у одних и тех же производителей будут одинаковые модели... Просто поиск по НайтиПоНаименованию с перебором всего дерева как-то не нравится...
  2. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    у элемента иерархического справочника есть реквизит "Родитель" отсюда и пляшите
  3. TopicStarter Overlay
    vihuhol
    Offline

    vihuhol Опытный в 1С

    Регистрация:
    20 апр 2010
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    26
    Да я понимаю, что есть родитель.
    Но если у меня 20 групп 1-го уровня, и по 41 группе 2-го уровня, то получается, чтобы проверить есть ли искомый элемент, мне нужно сделать 20 проверок(в худшем случае)... а элементов в рамках 1-го уровня будет 3000-4000, т.е. 60.000-80.000 сверок. А если вдруг будет иерархия в 3 уровня... то получается 20*41*3000-4000=2.460.000-3.280.000 сверок..............

    есть ли какой-то другой вариант? или я неправильно использую поле Родитель для поиска?

    Я Ищу так:
    1) Элемент.НайтиПоНаименованию
    2) Получаю Элемент.Родитель и сверяю с заданным.
    3) получаю Элемент.Родитель.Родитель и сверяю с заданным.
    4) п.1-п.3 до тех пор, пока Элемент.Родитель.Родитель не будет равен заданному или пока больше не будет найденных вариантов.

    если что не так - подправьте, пожалуйста.
  4. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Код:
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    Номенклатура2.Ссылка КАК Номенклатура,
    Номенклатура2.Родитель КАК Родитель,
    Номенклатура2.ЭтоГруппа
    ИЗ
    Справочник.Номенклатура КАК Номенклатура1
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура2
    ПО Номенклатура1.Наименование = Номенклатура2.Наименование
    И Номенклатура1.Ссылка <> Номенклатура2.Ссылка
    И Номенклатура1.ЭтоГруппа = Номенклатура2.ЭтоГруппа
    ГДЕ
    (НЕ Номенклатура2.Ссылка ЕСТЬ NULL )
    ИТОГИ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура)
    ПО
    Номенклатура2.Наименование"
    
    
    попробуйте вот это. не совсем так как вы хотите, но засунте в консоль запросов и посмотрите. Если вывод устроит - используйте.
  5. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Или так.
    Код:
    "ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    Номенклатура.Родитель,
    Номенклатура.ЭтоГруппа
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    Номенклатура.Наименование КАК Наименование
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    
    СГРУППИРОВАТЬ ПО
    Номенклатура.Наименование
    
    ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.Ссылка) > 1) КАК ВнутреннийЗапрос
    ПО Номенклатура.Наименование = ВнутреннийЗапрос.Наименование
    ГДЕ
    (НЕ ВнутреннийЗапрос.Наименование ЕСТЬ NULL )
    ИТОГИ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура)
    ПО
    ВнутреннийЗапрос.Наименование"
    
    
    Вывод должен быть одинаковый, не знаю как лучше..
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    если наименование в пределах группы уникально то:

    Справочники.<справочник>.НайтиПоНаименованию("Наименование", Истина, Родитель) - будет произведен поиск в Родителе, т.е. в группе.
  7. x_under
    Offline

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

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Ничего не понял: в чем сложность? Есть наименование группы первого уровня. Как я понял - уникальное. Вы находите эту группу.
    Есть наименование группы второго уровля, которую можно искать в рамках найденной выше. Нашли - радуемся, не нашли - создаем и радуемся.
    Есть наименование элемента и группа вторрого уровня. 3 поиска по наименованию.
    А вы наоборот идете.
  8. TopicStarter Overlay
    vihuhol
    Offline

    vihuhol Опытный в 1С

    Регистрация:
    20 апр 2010
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    26
    Всем спасибо!
    Так про то ж и спрашивал, как его корректней искать... Так действительно будет проще и понятней... :unsure:

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