8.х Как юзать ВИерархии ?

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

  1. TopicStarter Overlay
    cynic
    Offline

    cynic

    Регистрация:
    14 мар 2008
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    :unsure:
    Как в коде определить, что справочник находиться в какой-то определенной папке? Насколько я понимаю надо использовать вид сравнения ВИерархии (так как не обязательно это непосредственный родитель), но как?

    Приведите пример плиз B) с условием Если...

    т.е. что-то вроде

    Код:
    Если [справочник в иерархии какого-то справочника] Тогда
    //Выполняем какой-то код
    КонецЕсли;
    
    :D
    меня интересует что в квадратных скобках по умному должно быть))
    вроде понятно изложил, надеюсь подскажите)
  2. TopicStarter Overlay
    cynic
    Offline

    cynic

    Регистрация:
    14 мар 2008
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    не хочется рекурсивной функцией просто делать
  3. Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    А просто по Реквизиту - Родитель не подходит?
    Что-то типа Справочник.Родитель.Наименование=" "
  4. TopicStarter Overlay
    cynic
    Offline

    cynic

    Регистрация:
    14 мар 2008
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    не-а.

  5. Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    А запрос с вложением? я лично так делала...

    Хотя может и что по-проще есть...
  6. lazy
    Offline

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

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Ну а через запрос
    Код:
    Функция ВходитВИерархию(Ном,ГруппаНом)
    Запрос = Новый Запрос;
    Запрос.Текст = " ВЫБРАТЬ
    |спр.Ссылка 
    |ИЗ 
    | Справочник.Номенклатура КАК Спр
    |ГДЕ спр.Ссылка В ИЕРАРХИИ(&Группа)
    |И спр.Ссылка = &МояНоменклатура"
    Запрос.УстановитьПараметр("МояНоменклатура",Ном);
    Запрос.УстановитьПараметр("Группа",ГруппаНом);
    
    Если Запрос.Выполнить.выбрать().Количество() > 0 Тогда
    Возврат(Истина); // входит в группу
    Иначе
    Возврат(Ложь); // не входит
    КонецЕсли;
    КонецФункции
    
    
    
    
    
    Код не проверял - от фонаря нацарапал. Идея думаю понятна, но ИМХО - тормознуто это будет. Еще можно посмотреть на РодительВерхнегоУровня(), возможно пригодится...
  7. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Ой ой ой, лучше не так, даже от фонаря лучше пишите код красиво и эффективно:
    Код:
    Функция ВходитВИерархию(Ном,ГруппаНом)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |спр.Ссылка 
    |ИЗ 
    | Справочник.Номенклатура КАК Спр
    |ГДЕ спр.Ссылка В ИЕРАРХИИ(&Группа)
    |И спр.Ссылка = &МояНоменклатура"
    Запрос.УстановитьПараметр("МояНоменклатура",Ном);
    Запрос.УстановитьПараметр("Группа",ГруппаНом);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Возврат НЕ РезультаЗапроса.Пустой(); 
    
    КонецФункции
    
    
    Либо можно рекурсивно проверить, например так:

    Код:
    Функция ВходитВИерархию(Номенклатура, Родитель)
    
    // Любой элемент в иерархии пустого родителя
    // Для 8.0 условие: Если ЗначениеНеЗаполнено(Родитель) Тогда 
    Если Не ЗначениеЗаполнено(Родитель) Тогда 
    Возврат Истина;
    КонецЕсли;
    
    // Если добрались до самого верха, а родителя так и не нашли - значит ложь
    Если Не ЗначениеЗаполнено(Номенклатура.Родитель) Тогда 
    Возврат Ложь;
    КонецЕсли;
    
    Возврат ?(Номенклатура.Родитель = Родитель, Истина, ВходитВИерархию(Номенклатура.Родитель, Родитель))
    
    КонецФункции
    
    
  8. TopicStarter Overlay
    cynic
    Offline

    cynic

    Регистрация:
    14 мар 2008
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    спасибо всем! Пересмотрели чуть и проблему по другому решмл:)
    а по поводу запросов: дак вот мне и интересно было можно ли ВИерархии не в запросе юзать... видимо нет!?
  9. lazy
    Offline

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

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Ну да, это инструкция языка запросов. Непосредственно средствами языка достичь этого можно разве что рекурсивно...
  10. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    рекурсией в данном случае решать не стоит - ибо будет получаться весь объект, а если в нем храниться, например, картинка - это п..а.
    Первый вариант Эмина насчет запроса намного элегантнее.
Похожие темы
  1. licinijj
    Ответов:
    2
    Просмотров:
    730
Загрузка...

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