Дерево реквизитов для объекта метаданных


Делал механизм оповещения о создании/изменении объектов справочников / документов с динамически настраиваемыми условиями отбора (аля правила регистрации в КД). В справочнике настройки указывается объект метаданных, условия срабатывания и шаблон текста оповещения. Для шаблона понадобилось дерево реквизитов выбранного объекта. В этой обработке выкладываю функционал построения дерева реквизитов по объекту метаданных конфигурации.

Поиск на ресурсе выдавал кучу обработок построения дерева объектов конфигурации, с реквизитами не нашел (возможно, плохо искал).

При построении дерева используется рекурсивный вызов процедуры с контролем уровня глубины рекурсии. Также добавлена защита от ситуации Регистратор.Валюта. ОсновнаяВалюта… 

Писал и тестировал на 8.3.13.1513 (совместимо с другими версиями 8.*). 
Обработка на УФ.

2 Comments

  1. alex_4x

    А как отображается, если реквизит имеет составной тип данных?Например такие реквизиты как ДокументОснование в типовых — это несколько видов документов. Как отрабатывает рекурсия в таких случаях? На приведенном скриншоте все реквизиты односложные.

    Reply
  2. mrcamomile

    В целях заполнения шаблона неограниченной вложенности через «.» я ставил заглушку на составные реквизиты. Т.е. дерево не раскрывает реквизит составного типа.

    реквизитТипы = реквизит.Тип.Типы();
    Если реквизитТипы.Количество() <> 1 Тогда
    Продолжить;
    КонецЕсли;
    
    Если НЕ ТипыРасшифровки.СодержитТип(реквизитТипы[0]) Тогда
    Продолжить;
    КонецЕсли;
    
    // уходим от цикла Валюта.ОсновнаяВалюта.ОсновнаяВалюта…
    Если ИспользованныеТипы.Найти(реквизитТипы[0]) <> Неопределено Тогда
    Продолжить;
    КонецЕсли;
    ИспользованныеТипы.Добавить(реквизитТипы[0]);
    
    

    Показать

    В шаблоне использую представление ссылки составного реквизита, а его реквизиты в шаблоне не использую.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *