8.х Как получить элемент иерархического справочника

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

  1. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте, господа и дамы! Проблема такая - имеется иерархический справочник "Сорта", у него имеется подсправочник "Брак". Вопрос - как некоей переменной присвоить значение "Брак" типа "СправочникСсылка.Сорта"?
  2. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    что значит подсправочник?
    --- Объединение сообщений, 27 янв 2015 ---
    если Брак - это элемент справочника Сорта, то примерно так
    Код:
    Брак = Справочники.Сорта.НайтиПоНаименованию("Брак");
    
    но по наименованию искать не самый лучший вариант, может и поменяться
  3. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Tiger86

    Подсправочник в смысле это справочник нижнего уровня. Ну у меня задача в общем такая: есть иерархический справочник "Сорта", он разворачивается еще на два справочника "Брак" и "Норма", а вот в этих справочниках уже лежат собственно элементы. Ну то есть блин, справочник иерархический, грубо говоря папка, в которой лежат еще две папки. Вот мне надо получить имя вложенной папки с типом "СправочникСсылка.Сорта".
    --- Объединение сообщений, 27 янв 2015 ---
    Чтобы было понятно: мне нужно взять некий элемент справочника, посмотреть "в какой папке" он лежит, и в зависимости от этого выполнить с ним дальнейшие действия.
  4. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    это не подсправочники - а группы... ну вот и смотрите, у элемента группы есть реквизит Родитель. Если у вас внутри папки (группы) Брак или Норма нет других групп, то у всех подчиненных элементов папки Брак и Норма будут родителями.
  5. alexburn
    Online

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.758
    Симпатии:
    509
    Баллы:
    204
    Родитель вам в помощь.
  6. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    вот и проверяйте на родителя тогда
  7. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Так это понятно, что через родителя. Смотрите, я беру элемент справочника, получаю его родителя. Допустим его родитель, это "Брак". Ну так мне же его с чем-то нужно сравнить. Вот я и спрашиваю, как некоей переменной присвоить значение "Брак" типа "СправочникСсылка.Сорта", чтобы можно было родителя нашего элемента с этой самой переменной сравнивать.
  8. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.433
    Симпатии:
    373
    Баллы:
    104
    у вас должен быть справочник "Сорта" содержащий элементы (не группы) "Брак", "1 сорт", "2 сорт", "3 сорт" и т.п.

    PS
    подобное можно перечислением занести
  9. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Я наверное и вас запутал до кучи. Простыми словами говоря, задача выглядит так: для заданного элемента справочника проверить, к какой группе он относится. Если он относится к браку, вывести предупреждение "Это брак!", если относится к норме, то вывести предупреждение "Это норма!"
    Как я делаю: получаю элемент справочника, получаю его родителя. А дальше что, с чем его сравнить? Вот код:
    Код:
    Переменная1 = Сорт;
        Брак_или_норма = Переменная1.Родитель;
        Если Переменная1 = ??????? Тогда
            Предупреждение("Брак!");
        Иначе
            Предупреждение("Норма!");
        КонецЕсли;
    
    Вот что мне подставить на место "???????". Очевидно это должна быть переменная со значением "Брак" типа "СправочникСсылка.Сорта". Но как мне этой переменной присвоить такое значение?
    Последнее редактирование: 27 янв 2015
  10. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    читайте внимательно, я вам код представила выше пост №2
  11. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Понимаете какая проблема, сделал так, но срабатывает через раз. Возможно это связано с тем, что у меня в справочнике "Брак" есть элемент "Брак", а в справочнике "Норма" есть элемент "Норма"?

    Хотя вообще странно, в отладчике смотрю, сравнивает в условии две переменные с одинаковыми значениями и одинаковыми типами, но условие не срабатывает. Интересно.
  12. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну так я и написала что лучше по коду икать
    --- Объединение сообщений, 27 янв 2015 ---
    Брак = Справочники.Брак.НайтиПоНаименованию("Брак", , Справочники.Брак.ПустаяСсылка()); ну или так
  13. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Но вам не кажется, что это, мягко говоря, не очень хорошее решение? Достаточно кому-то будет случайно удалить элемент справочника, и все. Мне говорил один знакомый "сенсей" - "поиск по коду и по наименованию - самый худший вариант".
  14. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    в вашем случае, я другого не вижу...
  15. alexburn
    Online

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.758
    Симпатии:
    509
    Баллы:
    204
    Так по именованию и сравнивайте. У вас же оно
    Тогда спросите у вашего сэнсея как он ищет элементы ? Запросом ? Можно и запросом.
  16. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Ну просто мне кажется странным, что нужно сначала искать элемент, а потом его отца. Элемент ведь непостоянен, мало ли кто его удалит или что-нибудь такое, а родитель будет всегда.
  17. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    если элемент удалиться то о каком родителе речь идет? Как вариант сделать эти 2 папки предопределенными - никто не поменяет (только в конфигураторе), но и не факт что технически и логически это правильно

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