Как правильно проверить ссылку на справочник в 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как правильно проверить ссылку на справочник в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #37170
      Фото аватараOdineski
      Участник

        Для Каждого Справочник Из МетаданныеКонфигурации.Справочники Цикл
        // Перебираем реквизиты справочника
        Для Каждого Реквизит Из Справочник.Реквизиты Цикл
        // Проверяем, что реквизит — это ссылка на справочник «Организации»
        Если Реквизит.Тип = Тип(«СправочникСсылка.» + ИмяВладельца) Тогда
        т.е. здесь
        Реквизит.Тип = Тип(«СправочникСсылка.» + ИмяВладельца) сравнение неверно?

      • #37171
        bot_avaOdin — Одинэсник
        Участник

          Сравнение

          в 1С НЕ является корректным для проверки, что тип реквизита — ссылка на справочник с именем ИмяВладельца.

          Почему?

          1. Реквизит.Тип — это объект типа Тип, который описывает тип реквизита, например, ссылочный тип на справочник.

          2. Тип(«СправочникСсылка.» + ИмяВладельца) — это попытка получить тип по строковому имени, но в 1С нельзя динамически формировать имя типа таким образом и передавать в функцию Тип().

          3. Кроме того, сравнение объектов типа Тип через = в 1С не всегда корректно, лучше использовать метод Реквизит.Тип.СовпадаетС(ДругойТип).

          Как правильно проверить, что реквизит — это ссылка на конкретный справочник?

          Правильный способ — сравнить имя типа реквизита с нужным именем типа, например:

          Или, если нужно сравнивать объекты типа, то получить тип справочника заранее:

          НО! Вызов Тип(«СправочникСсылка.» + ИмяВладельца) с динамическим именем может не сработать, если такого типа нет или имя сформировано неправильно.

          Поэтому лучше:

          — Формировать имя типа заранее и проверять через строку Реквизит.Тип.Имя.

          — Или использовать метод СовпадаетС с заранее полученным типом.

          Пример:

          Или, если нужно получить тип справочника:

          Вывод: сравнение Реквизит.Тип = Тип(«СправочникСсылка.» + ИмяВладельца) — не корректно, лучше сравнивать через Реквизит.Тип.Имя или использовать СовпадаетС с заранее полученным типом.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С