ОбъектМетаданныхКонфигурация.ПланыВидовХарактеристик

Свойства · ChartsOfCharacteristicTypes

Тип: КоллекцияОбъектовМетаданных. Коллекция объектов метаданных, которые описывают все планы видов характеристик, определенные в конфигурации. Элементами коллекции являются объекты типа ОбъектМетаданных: ПланВидовХарактеристик.

Полное описание, параметры и ограничения

ОбъектМетаданныхКонфигурация.ПланыВидовХарактеристик (ConfigurationMetadataObject.ChartsOfCharacteristicTypes)

ОбъектМетаданныхКонфигурация (ConfigurationMetadataObject)

ПланыВидовХарактеристик (ChartsOfCharacteristicTypes)

Доступен, начиная с версии 8.1.

Использование:
Только чтение.
Описание:
Тип: КоллекцияОбъектовМетаданных.
Коллекция объектов метаданных, которые описывают все планы видов характеристик, определенные в конфигурации.
Элементами коллекции являются объекты типа ОбъектМетаданных: ПланВидовХарактеристик.
Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.1.

Описание изменено в версии 8.3.20.

Методическая информация

Практические примеры

Составить карту категорий объектов текущей конфигурации

Инвентаризация схемы: сколько определено справочников, документов, регистров, форм и сервисов. Это не число товаров или документов в базе.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Запускайте в учебной копии конфигурации. Примеры читают структуру метаданных, но не создают объекты, не записывают регистры и не проводят документы.

  2. Сверяйте вывод с деревом конфигурации в Конфигураторе. Имена, длины и настройки в УНФ, КА2, БП, УТ 11 и УТ 10.3 могут различаться.

  3. Для запуска на старой версии некоторые новые категории могут отсутствовать. Здесь используется именно API 8.5.1.1343.


Категории = Новый Соответствие;
Категории.Вставить("Справочники", Метаданные.Справочники);
Категории.Вставить("Документы", Метаданные.Документы);
Категории.Вставить("Журналы документов", Метаданные.ЖурналыДокументов);
Категории.Вставить("Перечисления", Метаданные.Перечисления);
Категории.Вставить("Константы", Метаданные.Константы);
Категории.Вставить("Регистры сведений", Метаданные.РегистрыСведений);
Категории.Вставить("Регистры накопления", Метаданные.РегистрыНакопления);
Категории.Вставить("Регистры бухгалтерии", Метаданные.РегистрыБухгалтерии);
Категории.Вставить("Регистры расчета", Метаданные.РегистрыРасчета);
Категории.Вставить("Планы счетов", Метаданные.ПланыСчетов);
Категории.Вставить("Планы видов характеристик", Метаданные.ПланыВидовХарактеристик);
Категории.Вставить("Планы видов расчета", Метаданные.ПланыВидовРасчета);
Категории.Вставить("Планы обмена", Метаданные.ПланыОбмена);
Категории.Вставить("Бизнес-процессы", Метаданные.БизнесПроцессы);
Категории.Вставить("Задачи", Метаданные.Задачи);
Категории.Вставить("Последовательности", Метаданные.Последовательности);
Категории.Вставить("Нумераторы", Метаданные.НумераторыДокументов);
Категории.Вставить("Общие модули", Метаданные.ОбщиеМодули);
Категории.Вставить("Подписки на события", Метаданные.ПодпискиНаСобытия);
Категории.Вставить("Регламентные задания", Метаданные.РегламентныеЗадания);
Категории.Вставить("Общие реквизиты", Метаданные.ОбщиеРеквизиты);
Категории.Вставить("Параметры сеанса", Метаданные.ПараметрыСеанса);
Категории.Вставить("Определяемые типы", Метаданные.ОпределяемыеТипы);
Категории.Вставить("Обработки", Метаданные.Обработки);
Категории.Вставить("Отчеты", Метаданные.Отчеты);
Категории.Вставить("Общие формы", Метаданные.ОбщиеФормы);
Категории.Вставить("Общие команды", Метаданные.ОбщиеКоманды);
Категории.Вставить("Группы команд", Метаданные.ГруппыКоманд);
Категории.Вставить("Общие макеты", Метаданные.ОбщиеМакеты);
Категории.Вставить("Общие картинки", Метаданные.ОбщиеКартинки);
Категории.Вставить("Подсистемы", Метаданные.Подсистемы);
Категории.Вставить("Интерфейсы", Метаданные.Интерфейсы);
Категории.Вставить("Стили", Метаданные.Стили);
Категории.Вставить("Элементы стиля", Метаданные.ЭлементыСтиля);
Категории.Вставить("Цвета палитры", Метаданные.ЦветаПалитры);
Категории.Вставить("Языки", Метаданные.Языки);
Категории.Вставить("Роли", Метаданные.Роли);
Категории.Вставить("Роли автономных ограничений", Метаданные.РолиОграниченияАвтономнойКонфигурации);
Категории.Вставить("Функциональные опции", Метаданные.ФункциональныеОпции);
Категории.Вставить("Параметры функциональных опций", Метаданные.ПараметрыФункциональныхОпций);
Категории.Вставить("Критерии отбора", Метаданные.КритерииОтбора);
Категории.Вставить("Хранилища настроек", Метаданные.ХранилищаНастроек);
Категории.Вставить("HTTP-сервисы", Метаданные.HTTPСервисы);
Категории.Вставить("Web-сервисы", Метаданные.WebСервисы);
Категории.Вставить("WS-ссылки", Метаданные.WSСсылки);
Категории.Вставить("WebSocket-клиенты", Метаданные.WebSocketКлиенты);
Категории.Вставить("Сервисы интеграции", Метаданные.СервисыИнтеграции);
Категории.Вставить("Боты", Метаданные.Боты);
Категории.Вставить("Пакеты XDTO", Метаданные.ПакетыXDTO);
Категории.Вставить("Внешние источники данных", Метаданные.ВнешниеИсточникиДанных);
ВсегоОписаний = 0;
Для Каждого Категория Из Категории Цикл
    Количество = Категория.Значение.Количество();
    Сообщить(СтрШаблон("%1: %2", Категория.Ключ, Количество));
    ВсегоОписаний = ВсегоОписаний + Количество;
КонецЦикла;
Сообщить("Учтено верхнеуровневых описаний: " + Строка(ВсегоОписаний));
Сообщить(Категории.Количество() = 50);

Разбор по шагам

  1. У каждой категории берём коллекцию метаданных напрямую из корня текущей конфигурации.

  2. Соответствие связывает понятную подпись с коллекцией. Цикл вызывает Количество описаний, не выбирает данные прикладных таблиц.

  3. Разделяем прикладные объекты, исполняемые модули/события, интерфейс/оформление, права/опции и интеграционные контракты.

  4. Пустая коллекция допустима: отсутствие WebSocket-клиентов или планов расчёта не является ошибкой конфигурации.

  5. Итог складывает только верхний уровень. Вложенные реквизиты, формы объектов и колонки сюда не включаются.

Как проверить результат

  1. В выводе ровно 50 категорий с неотрицательными количествами.

  2. Сверьте два значения со своим деревом Конфигурация: например, Справочники и ОбщиеМодули.

  3. Пустая учебная база может иметь документы в метаданных и 0 документов в данных. Создание экземпляра документа не изменяет этот отчёт.

Ожидаемый результат

Получена карта состава схемы без чтения товаров, пользователей, документов и секретов интеграций.

На что обратить внимание

  1. ОбщиеФормы не включает все формы каждого справочника: они вложены в соответствующие объекты.

  2. Количество HTTPСервисов не доказывает публикацию, доступность или правильность HTTP-ответов.

  3. Количество Роли не означает число пользователей и не раскрывает назначенные пользователю права.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Проверить семейство ссылки: четыре своих типа и три неподходящих значения

ТипВсеСсылки возвращает ОписаниеТипов семейства, не коллекцию записей. Классифицируем семь своих значений и отдельно запрещаем бизнес-действие для распознанных пустых ссылок.

Где и как запускать

Полный серверный модуль новой собственной УчебныеСемейства85, 8.5.1.1343. Только четыре пустые ссылки и семь собственных значений в памяти; записи и обмена нет.

Подготовка

  1. Создайте НОВУЮ пустую файловую базу, корневая конфигурация УчебныеСемейства85, платформа точно 8.5.1.1343. Это не копия УТ/КА2/УНФ/БП. Объекты ниже создаются в Конфигураторе, данные в них не вводятся.

  2. Справочники → Добавить: единственный УчебныеТовары85. Код Строка 9, наименование Строка 50, без владельца, иерархии, предопределённых элементов и дополнительных реквизитов. Модули пустые.

  3. Планы видов характеристик → Добавить: единственный УчебныеСвойства85. Код Строка 9, наименование Строка 50, тип значений характеристик Строка 30. Модули пустые, без дополнительных реквизитов, предопределённых элементов и обработчиков.

  4. Планы счетов → Добавить: единственный УчебныеСчета85. Длина кода 9, наименование 50, без предопределённых счетов и дополнительных реквизитов; модули пустые. Для этого урока счета не создаются и состав субконто не используется.

  5. Планы обмена → Добавить: единственный УчебныеУзлы85. Код Строка 9, наименование Строка 50, распределённая информационная база выключена, состав плана пустой. Не создавайте узлы, сообщения, регистрации изменений и начальные образы; модули пустые.

  6. Других объектов этих четырёх семейств не добавляйте. Документов, регистров, расширений, подписок и фоновых заданий для урока нет. Обновите конфигурацию базы данных.

  7. Создайте серверный общий модуль УчебныеСемействаПримеры. Вставьте весь модуль и вызовите ВыполнитьПример() Экспорт из своей серверной команды обработки. Не вставляйте экспортную процедуру в тело другой процедуры.

  8. Пустые ссылки получаются из своих конкретных менеджеров. Непустые объекты не ищутся по первой строке, кодам или UUID; запись и обмен не выполняются. Данные семи тестов существуют только в собственном массиве в памяти.

  9. Здесь пример в 1С не запускался. Контракты сверены с установленной справкой 8.5.1.1343. Распознавание семейства типа не является проверкой заполнения, существования записи, разрешения доступа или пригодности для бизнес-операции.

Процедура ВыполнитьПример() Экспорт
    Если Метаданные.Справочники.Количество() <> 1
        Или Метаданные.Справочники.Найти("УчебныеТовары85") = Неопределено Тогда
        ВызватьИсключение "Нужен только собственный объект УчебныеТовары85";
    КонецЕсли;
    Если Метаданные.ПланыСчетов.Количество() <> 1
        Или Метаданные.ПланыСчетов.Найти("УчебныеСчета85") = Неопределено Тогда
        ВызватьИсключение "Нужен только собственный объект УчебныеСчета85";
    КонецЕсли;
    Если Метаданные.ПланыВидовХарактеристик.Количество() <> 1
        Или Метаданные.ПланыВидовХарактеристик.Найти("УчебныеСвойства85") = Неопределено Тогда
        ВызватьИсключение "Нужен только собственный объект УчебныеСвойства85";
    КонецЕсли;
    Если Метаданные.ПланыОбмена.Количество() <> 1
        Или Метаданные.ПланыОбмена.Найти("УчебныеУзлы85") = Неопределено Тогда
        ВызватьИсключение "Нужен только собственный объект УчебныеУзлы85";
    КонецЕсли;
    ТипыТоваров = Справочники.ТипВсеСсылки();
    ТипыСчетов = ПланыСчетов.ТипВсеСсылки();
    ТипыСвойств = ПланыВидовХарактеристик.ТипВсеСсылки();
    ТипыУзлов = ПланыОбмена.ТипВсеСсылки();
    Сообщить(ТипЗнч(ТипыТоваров) = Тип("ОписаниеТипов"));
    Сообщить(ТипЗнч(ТипыСчетов) = Тип("ОписаниеТипов"));
    Сообщить(ТипЗнч(ТипыСвойств) = Тип("ОписаниеТипов"));
    Сообщить(ТипЗнч(ТипыУзлов) = Тип("ОписаниеТипов"));
    Тесты = Новый Массив;
    Тесты.Добавить(Новый Структура("Значение,Ожидается", Справочники.УчебныеТовары85.ПустаяСсылка(), "Справочник"));
    Тесты.Добавить(Новый Структура("Значение,Ожидается", ПланыСчетов.УчебныеСчета85.ПустаяСсылка(), "ПланСчетов"));
    Тесты.Добавить(Новый Структура("Значение,Ожидается", ПланыВидовХарактеристик.УчебныеСвойства85.ПустаяСсылка(), "ПланВидовХарактеристик"));
    Тесты.Добавить(Новый Структура("Значение,Ожидается", ПланыОбмена.УчебныеУзлы85.ПустаяСсылка(), "ПланОбмена"));
    Тесты.Добавить(Новый Структура("Значение,Ожидается", 7, "НеПоддерживается"));
    Тесты.Добавить(Новый Структура("Значение,Ожидается", "УчебныеТовары85", "НеПоддерживается"));
    Тесты.Добавить(Новый Структура("Значение,Ожидается", Неопределено, "НеПоддерживается"));
    Распознано = 0;
    Отклонено = 0;
    Для Каждого Тест Из Тесты Цикл
        ТипВхода = ТипЗнч(Тест.Значение);
        Если ТипыТоваров.СодержитТип(ТипВхода) Тогда
            Категория = "Справочник";
        ИначеЕсли ТипыСчетов.СодержитТип(ТипВхода) Тогда
            Категория = "ПланСчетов";
        ИначеЕсли ТипыСвойств.СодержитТип(ТипВхода) Тогда
            Категория = "ПланВидовХарактеристик";
        ИначеЕсли ТипыУзлов.СодержитТип(ТипВхода) Тогда
            Категория = "ПланОбмена";
        Иначе
            Категория = "НеПоддерживается";
        КонецЕсли;
        Если Категория <> Тест.Ожидается Тогда
            ВызватьИсключение "Семейство своего тестового значения определено неверно";
        КонецЕсли;
        Сообщить(Строка(ТипВхода) + " → " + Категория);
        Если Категория = "НеПоддерживается" Тогда
            Отклонено = Отклонено + 1;
            Сообщить("Значение не преобразуется из числа или строки в ссылку");
        Иначе
            Распознано = Распознано + 1;
            Если ЗначениеЗаполнено(Тест.Значение) Тогда
                ВызватьИсключение "Тест должен содержать только собственную пустую ссылку";
            КонецЕсли;
            Сообщить("Семейство распознано, но ссылка пустая: бизнес-действие запрещено");
        КонецЕсли;
    КонецЦикла;
    Если Тесты.Количество() <> 7 Или Распознано <> 4 Или Отклонено <> 3 Тогда
        ВызватьИсключение "Не подтверждено прохождение всех семи своих тестов";
    КонецЕсли;
    Сообщить("Распознано 4 пустых типизированных ссылки, отклонено 3 нессылочных значения");
    Сообщить("Определение типа не проверяет существование записи и не разрешает бизнес-операцию");
КонецПроцедуры

Разбор по шагам

  1. Проверить точную платформу, имя собственной новой конфигурации и наличие только своих четырёх объектов метаданных.

  2. Получить по одному ОписаниеТипов от менеджера семейства. Справочники — менеджер всех справочников, Справочники.УчебныеТовары85 — менеджер конкретного справочника.

  3. Самостоятельно получить четыре пустые ссылки. Их значения пустые, но типы разные и существуют в собственной конфигурации.

  4. Добавить отрицательные проверки: число 7, строка с названием справочника и Неопределено. Название или числовое значение не преобразуется в ссылку.

  5. Для каждого теста взять ТипЗнч и проверить принадлежность через СодержитТип. Проверяется тип, не имя объекта и не результат Строка.

  6. Сравнить фактическую категорию с собственной ожидаемой. Несоответствие вызывает исключение, а не скрывается в итоговом количестве.

  7. После распознавания отдельно проверить ЗначениеЗаполнено: четыре своих ссылки пустые, поэтому бизнес-действие не выполняется.

  8. Проверить все семь тестов: четыре распознаны как семейства, три отклонены. Записи, обмена и проверки существования объекта в этом опыте нет.

Как проверить результат

  1. Четыре проверки возвращаемого ОписаниеТипов показывают Истина.

  2. Все семь категорий совпадают с заданными ожидаемыми: Справочник, ПланСчетов, ПланВидовХарактеристик, ПланОбмена и три НеПоддерживается.

  3. Четыре ссылки распознаны по типу, но отдельно признаны пустыми; код не использует их как существующие записи.

  4. Итог 4/3 получен после проверки каждого теста, а не вместо проверки содержимого. База и сообщения обмена не изменяются.

Ожидаемый результат

Разобрана проверка входного типа до бизнес-операции и различие между семейством, конкретным типом, заполнением и существованием записи.

На что обратить внимание

  1. Проверка семейства может быть шире допустимого конкретного справочника: в реальном обработчике дополнительно проверяйте точный контракт параметра.

  2. ОписаниеТипов не перечисляет элементы информационной базы. Здесь не выполняются выборки и не читаются данные пустых ссылок.

  3. Тип характеристики Строка не является типом ссылки на элемент плана видов характеристик; этот урок проверяет именно ссылку.

  4. Тип узла плана обмена не даёт разрешения регистрировать изменения, отправлять сообщения или создавать начальный образ.

  5. Заполненная ссылка тоже может вести к отсутствующей записи; этого отдельного условия типовая классификация не доказывает.

  6. Здесь только статическая проверка по справке; запуск в 1С не подтверждён.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.