Тип: КоллекцияОбъектовМетаданных. Коллекция объектов метаданных, описывающих формы данного объекта метаданных.
Полное описание, параметры и ограничения
ОбъектМетаданных: Справочник.Формы (MetadataObject: Catalog.Forms)
ОбъектМетаданных: Справочник (MetadataObject: Catalog)
Формы (Forms)
Доступен, начиная с версии 8.1.
Использование:
Только чтение.
Описание:
Тип: КоллекцияОбъектовМетаданных.
Коллекция объектов метаданных, описывающих формы данного объекта метаданных.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Проверить, какие формы назначены учебному справочнику
Отличаем описание формы в метаданных от открытого окна. Диагностика показывает назначения для объекта, группы, списка и выбора.
Где и как запускать
Полный текст собственного серверного общего модуля УчебныеЗадачи. Он уже содержит процедуру Экспорт и вспомогательную функцию; не вставляйте внутрь другого обработчика.
Подготовка
Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.
Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.
Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.
Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.
Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.
Все проверки этого блока только читают метаданные собственного справочника. Изменения настроек из подготовки выполняйте вручную в Конфигураторе только новой базы Учебная85, затем обновляйте конфигурацию БД.
Не устанавливайте расширения в учебную базу и не создавайте дополнительные индексы, характеристики, команды или макеты, если конкретное упражнение этого не требует.
У УчебныеТовары создайте две управляемые формы: ФормаТовара вида Форма элемента справочника и ФормаСписка вида Форма списка справочника. Назначьте их соответственно основной формой объекта и основной формой списка.
Другие формы/назначения специально не создавайте. После обновления БД замените пустой общий модуль УчебныеЗадачи всем кодом ниже: он содержит готовую ВыполнитьПример и вспомогательную функцию. Не вставляйте функции внутрь другой процедуры.
Процедура ВыполнитьПример() Экспорт
Если Метаданные.Справочники.Найти("УчебныеТовары") = Неопределено Тогда
ВызватьИсключение "Сначала создайте учебный справочник по подготовке";
КонецЕсли;
Описание = Метаданные.Справочники.УчебныеТовары;
Сообщить(Описание.Формы.Количество() = 2);
Если Описание.ОсновнаяФормаОбъекта = Неопределено Или Описание.ОсновнаяФормаСписка = Неопределено Тогда
ВызватьИсключение "Назначьте две собственные основные формы по подготовке";
КонецЕсли;
Сообщить(Описание.ОсновнаяФормаОбъекта.Имя = "ФормаТовара");
Сообщить(Описание.ОсновнаяФормаСписка.Имя = "ФормаСписка");
Сообщить("ОсновнаяФормаОбъекта: " + ПредставитьНазначениеФормы(Описание.ОсновнаяФормаОбъекта));
Сообщить("ОсновнаяФормаГруппы: " + ПредставитьНазначениеФормы(Описание.ОсновнаяФормаГруппы));
Сообщить("ОсновнаяФормаСписка: " + ПредставитьНазначениеФормы(Описание.ОсновнаяФормаСписка));
Сообщить("ОсновнаяФормаДляВыбора: " + ПредставитьНазначениеФормы(Описание.ОсновнаяФормаДляВыбора));
Сообщить("ОсновнаяФормаДляВыбораГруппы: " + ПредставитьНазначениеФормы(Описание.ОсновнаяФормаДляВыбораГруппы));
Сообщить("ДополнительнаяФормаОбъекта: " + ПредставитьНазначениеФормы(Описание.ДополнительнаяФормаОбъекта));
Сообщить("ДополнительнаяФормаГруппы: " + ПредставитьНазначениеФормы(Описание.ДополнительнаяФормаГруппы));
Сообщить("ДополнительнаяФормаСписка: " + ПредставитьНазначениеФормы(Описание.ДополнительнаяФормаСписка));
Сообщить("ДополнительнаяФормаДляВыбора: " + ПредставитьНазначениеФормы(Описание.ДополнительнаяФормаДляВыбора));
Сообщить("ДополнительнаяФормаДляВыбораГруппы: " + ПредставитьНазначениеФормы(Описание.ДополнительнаяФормаДляВыбораГруппы));
Сообщить("Стандартные команды: " + Строка(Описание.ИспользоватьСтандартныеКоманды));
Сообщить("Способ редактирования: " + Строка(Описание.СпособРедактирования));
КонецПроцедуры
Функция ПредставитьНазначениеФормы(НазначеннаяФорма)
Если НазначеннаяФорма = Неопределено Тогда
Возврат "Не назначена — учитываются правила автогенерации и клиентского режима";
КонецЕсли;
Возврат НазначеннаяФорма.ПолноеИмя();
КонецФункции
Разбор по шагам
Читаем назначенные основные формы и убеждаемся, что существуют именно две подготовленные формы.
Вспомогательная функция форматирует описание формы: Неопределено обрабатывается до ПолноеИмя. Она не открывает окно и не создаёт экземпляр формы.
Основные и дополнительные назначения показываем отдельно. Дополнительная форма может использоваться, когда основная не установлена/не подходит клиенту, согласно назначению.
ИспользоватьСтандартныеКоманды и СпособРедактирования — настройки справочника, не свойства уже открытого окна.
Как проверить результат
Три проверки дают Истина.
В сообщениях основные объект/список указывают ФормаТовара и ФормаСписка. Остальные назначения показывают фактическое состояние; незаданные не вызывают ошибку.
Окно формы справочника этим кодом не открывается.
Ожидаемый результат
Диагностика назначений форм до поиска ошибки открытия не того окна.
На что обратить внимание
Неопределено у основной формы не доказывает, что стандартное открытие невозможно: платформа может генерировать форму.
Нельзя присваивать эти свойства во встроенном языке для изменения конфигурации: настройки меняются в Конфигураторе.
Не приравнивайте имя формы в метаданных к объекту ФормаКлиентскогоПриложения.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Проверить проектные свойства формы и не выдать их за runtime-разметку
Разбираем расширенное представление, пояснение, интерфейс и три свойства без описанного типа результата.
Где и как запускать
Полный серверный общий модуль собственной учебной копии КА2 Progress 2.5.20.75, только чтение схемы.
Подготовка
Используйте отдельную учебную копию КА2 Progress из C:\claude\KA2\Progress\XML_CF_KA2_PROGRESS, конфигурация КомплекснаяАвтоматизация 2.5.20.75, платформа 8.5.1.1343. Это не инструкция запуска в рабочей базе.
Создайте серверный общий модуль УчебныеКонтрактыИнтерфейса с флагом Сервер. Вставьте полный модуль одного урока и вызовите УчебныеКонтрактыИнтерфейса.ВыполнитьПример() из серверной учебной команды.
Команды подтверждены в Catalogs\Номенклатура.xml и Documents\РеализацияТоваровУслуг.xml; форма — в Catalogs\Номенклатура\Forms\ФормаСписка.xml; нумератор — в DocumentNumerators\ДокументыРеализацииТоваров.xml.
Исходники конфигурации не меняются. Код только читает метаданные и обрабатывает собственные значения в памяти: не вызывает штатную команду, не открывает форму списка, не получает новый номер и не записывает документы.
При отличающейся версии или расширениях результат может отличаться от выгрузки. Сверяйте активную конфигурацию, а не исправляйте её ради зелёных сообщений.
Процедура ВыполнитьПример() Экспорт
Каталог = Метаданные.Справочники.Найти("Номенклатура");
Если Каталог = Неопределено Тогда
ВызватьИсключение "Нет подтверждённого справочника Номенклатура";
КонецЕсли;
ФормаМетаданных = Каталог.Формы.Найти("ФормаСписка");
Если ФормаМетаданных = Неопределено Тогда
ВызватьИсключение "Нет формы Номенклатура.ФормаСписка";
КонецЕсли;
Сообщить("Расширенное представление заполнено: " + Строка(НЕ ПустаяСтрока(ФормаМетаданных.РасширенноеПредставление)));
Сообщить("Пояснение заполнено: " + Строка(НЕ ПустаяСтрока(ФормаМетаданных.Пояснение)));
Сообщить("Использование в режиме интерфейса: " + Строка(ФормаМетаданных.ИспользованиеВРежимеСовместимостиИнтерфейса));
Попытка
Сообщить("Тип НазначенияИспользования: " + Строка(ТипЗнч(ФормаМетаданных.НазначенияИспользования)));
Исключение
Сообщить("НазначенияИспользования недоступны: " + ОписаниеОшибки());
КонецПопытки;
Попытка
Сообщить("Тип Справка: " + Строка(ТипЗнч(ФормаМетаданных.Справка)));
Исключение
Сообщить("Справка недоступна: " + ОписаниеОшибки());
КонецПопытки;
Попытка
Сообщить("Тип проектного свойства Форма: " + Строка(ТипЗнч(ФормаМетаданных.Форма)));
Исключение
Сообщить("Проектное свойство Форма недоступно: " + ОписаниеОшибки());
КонецПопытки;
Сообщить("XML-макет и код формы этим отчётом не получены; окно формы не открывалось");
КонецПроцедурыРазбор по шагам
РасширенноеПредставление и Пояснение относятся к объявленному представлению формы. Проверка заполненности не меняет текущий заголовок окна.
ИспользованиеВРежимеСовместимостиИнтерфейса — отдельный перечислимый параметр. Его диагностируем как получен: отсутствующее явное поле в XML не превращаем в выдуманный вариант.
У НазначенияИспользования, Справка и Форма в краткой справке указан тип Неопределено. Не предполагаем, что это массив, HTML-строка или исполняемый объект формы.
Три обращения защищены отдельными Попытка/Исключение: показан фактический тип либо реальная причина недоступности. Отсутствие значения не подменяется искусственным массивом.
Для чтения макета и модуля используют экспорт Catalogs\Номенклатура\Forms\ФормаСписка\Ext\Form.xml и его Module.bsl/Конфигуратор отдельно. Этот урок их не исполняет.
Как проверить результат
Шесть подписанных диагностических строк: три настройки и по одному результату каждого защищённого обращения.
Нет обещанных Истина для проектных свойств с неописанным типом. Последнее сообщение прямо указывает, чего отчёт не получил.
Ожидаемый результат
Показан полезный отчёт доступности с честной границей между описанием метаданных и runtime-экземпляром.
На что обратить внимание
Не вызывать методы окна или элементов на значении проектного свойства Форма.
Тип Неопределено в справке не является доказательством, что runtime всегда вернёт Неопределено.
Не обходить недоступность проектных данных включением привилегированного режима.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.