Метаданные-реквизиты
Реквизит справочника - это объект, имеющий свойства, такие как напр. тип , длина, точность и т.д. Каким образом получить эти сведения? На помощь приходит работа с объектом метаданные.
//******************************************************************************
Процедура ПриОткрытии()
Форма.ИспользоватьСлой("основной");
Для Сч=1 По Метаданные.Справочник() Цикл//количество справочников в конфигурации
Сз.ДобавитьЗначение(Метаданные.Справочник(Сч).Идентификатор);//все названия справочников
КонецЦикла;
//основные значения, для примера хватит.
Тз.НоваяКолонка("Идентификатор",,,,,15);
Тз.НоваяКолонка("Тип",,,,,10);
Тз.НоваяКолонка("Длина",,,,,5);
Тз.НоваяКолонка("Точность",,,,,5);
КонецПроцедуры
//*******************************************
Процедура Реквизиты()
Форма.ИспользоватьСлой("Дополнительный");
Тз.УдалитьСтроки();
Идент=Сз.ПолучитьЗначение(Сз.ТекущаяСтрока());
Для Сч=1 По Метаданные.Справочник(Идент).Реквизит()Цикл//кол-во реквизитов в конкретно выбранном справочнике.
Тз.НоваяСтрока();//заполняем таблицу.
Тз.Идентификатор=Метаданные.Справочник(Идент).Реквизит(Сч).Идентификатор;
Тз.Тип=Метаданные.Справочник(Идент).Реквизит(Сч).Тип;
Тз.Длина=Метаданные.Справочник(Идент).Реквизит(Сч).Длина;
Тз.Точность=Метаданные.Справочник(Идент).Реквизит(Сч).Точность;
КонецЦикла;
КонецПроцедуры
//******************************************************************************
Процедура Назад()//вернуться к списку справочников
Форма.ИспользоватьСлой("основной");
КонецПроцедуры
Ещё один пример на близкую тему. В ходе работы какого-нибудь модуля надо выяснить как установлен флажок в справочнике в поле Серии кодов, и в зависимости от полученного результата должно произойти ветвление программы. Прямого запроса к объекту метаданных нет. Конечно можно было бы по номеру, при условии что конфигурация законсервирована раз и навсегда. Но это из области фантастики. От перебора объекта метаданных нам никуда не деться. Тогда такой алгоритм: перебираем идентификаторы справочников, как только попался нужный считываем значение реквизита Серии кодов.
//*******************************************
Функция СерииКодов(Идент)
Для Сч=1 По Метаданные.Справочник() Цикл// циклов будет по кол-ву справочников.
Если Метаданные.Справочник(Сч).Идентификатор<>Идент Тогда//если не наш справочник
Продолжить;//на начало цикла.
Иначе //вот он, нашли.
СерКод=Метаданные.Справочник(Сч).СерииКодов;
Прервать;//как нашли сразу выходим из цикла.
КонецЕсли;
КонецЦикла;
Возврат СерКод;//результат.
КонецФункции
//******************************************************************************
Процедура Сформировать()
//работаем, например со справочником Пользователи
Спр=СоздатьОбъект("Справочник.Пользователи");
Идент=Спр.Вид();//строковое название вида
СерКод=СерииКодов(Идент);//перешлем это название в функцию.
Если СерКод="ВесьСправочник" Тогда// и анализируем результат.
//<делаем что-то>
Иначе
//<делаем что-то другое>
КонецЕсли;
КонецПроцедуры