ОбъектМетаданных: Справочник.Формы

Свойства · Forms

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

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

ОбъектМетаданных: Справочник.Формы (MetadataObject: Catalog.Forms)

ОбъектМетаданных: Справочник (MetadataObject: Catalog)

Формы (Forms)

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

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

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

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

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

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

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

Проверить, какие формы назначены учебному справочнику

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

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

Полный текст собственного серверного общего модуля УчебныеЗадачи. Он уже содержит процедуру Экспорт и вспомогательную функцию; не вставляйте внутрь другого обработчика.

Подготовка

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

  2. Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.

  3. Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.

  4. Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.

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

  6. Все проверки этого блока только читают метаданные собственного справочника. Изменения настроек из подготовки выполняйте вручную в Конфигураторе только новой базы Учебная85, затем обновляйте конфигурацию БД.

  7. Не устанавливайте расширения в учебную базу и не создавайте дополнительные индексы, характеристики, команды или макеты, если конкретное упражнение этого не требует.

  8. У УчебныеТовары создайте две управляемые формы: ФормаТовара вида Форма элемента справочника и ФормаСписка вида Форма списка справочника. Назначьте их соответственно основной формой объекта и основной формой списка.

  9. Другие формы/назначения специально не создавайте. После обновления БД замените пустой общий модуль УчебныеЗадачи всем кодом ниже: он содержит готовую ВыполнитьПример и вспомогательную функцию. Не вставляйте функции внутрь другой процедуры.

Процедура ВыполнитьПример() Экспорт

Если Метаданные.Справочники.Найти("УчебныеТовары") = Неопределено Тогда
    ВызватьИсключение "Сначала создайте учебный справочник по подготовке";
КонецЕсли;

Описание = Метаданные.Справочники.УчебныеТовары;
Сообщить(Описание.Формы.Количество() = 2);
Если Описание.ОсновнаяФормаОбъекта = Неопределено Или Описание.ОсновнаяФормаСписка = Неопределено Тогда
    ВызватьИсключение "Назначьте две собственные основные формы по подготовке";
КонецЕсли;
Сообщить(Описание.ОсновнаяФормаОбъекта.Имя = "ФормаТовара");
Сообщить(Описание.ОсновнаяФормаСписка.Имя = "ФормаСписка");
Сообщить("ОсновнаяФормаОбъекта: " + ПредставитьНазначениеФормы(Описание.ОсновнаяФормаОбъекта));
Сообщить("ОсновнаяФормаГруппы: " + ПредставитьНазначениеФормы(Описание.ОсновнаяФормаГруппы));
Сообщить("ОсновнаяФормаСписка: " + ПредставитьНазначениеФормы(Описание.ОсновнаяФормаСписка));
Сообщить("ОсновнаяФормаДляВыбора: " + ПредставитьНазначениеФормы(Описание.ОсновнаяФормаДляВыбора));
Сообщить("ОсновнаяФормаДляВыбораГруппы: " + ПредставитьНазначениеФормы(Описание.ОсновнаяФормаДляВыбораГруппы));
Сообщить("ДополнительнаяФормаОбъекта: " + ПредставитьНазначениеФормы(Описание.ДополнительнаяФормаОбъекта));
Сообщить("ДополнительнаяФормаГруппы: " + ПредставитьНазначениеФормы(Описание.ДополнительнаяФормаГруппы));
Сообщить("ДополнительнаяФормаСписка: " + ПредставитьНазначениеФормы(Описание.ДополнительнаяФормаСписка));
Сообщить("ДополнительнаяФормаДляВыбора: " + ПредставитьНазначениеФормы(Описание.ДополнительнаяФормаДляВыбора));
Сообщить("ДополнительнаяФормаДляВыбораГруппы: " + ПредставитьНазначениеФормы(Описание.ДополнительнаяФормаДляВыбораГруппы));
Сообщить("Стандартные команды: " + Строка(Описание.ИспользоватьСтандартныеКоманды));
Сообщить("Способ редактирования: " + Строка(Описание.СпособРедактирования));
КонецПроцедуры

Функция ПредставитьНазначениеФормы(НазначеннаяФорма)
    Если НазначеннаяФорма = Неопределено Тогда
        Возврат "Не назначена — учитываются правила автогенерации и клиентского режима";
    КонецЕсли;
    Возврат НазначеннаяФорма.ПолноеИмя();
КонецФункции

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

  1. Читаем назначенные основные формы и убеждаемся, что существуют именно две подготовленные формы.

  2. Вспомогательная функция форматирует описание формы: Неопределено обрабатывается до ПолноеИмя. Она не открывает окно и не создаёт экземпляр формы.

  3. Основные и дополнительные назначения показываем отдельно. Дополнительная форма может использоваться, когда основная не установлена/не подходит клиенту, согласно назначению.

  4. ИспользоватьСтандартныеКоманды и СпособРедактирования — настройки справочника, не свойства уже открытого окна.

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

  1. Три проверки дают Истина.

  2. В сообщениях основные объект/список указывают ФормаТовара и ФормаСписка. Остальные назначения показывают фактическое состояние; незаданные не вызывают ошибку.

  3. Окно формы справочника этим кодом не открывается.

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

Диагностика назначений форм до поиска ошибки открытия не того окна.

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

  1. Неопределено у основной формы не доказывает, что стандартное открытие невозможно: платформа может генерировать форму.

  2. Нельзя присваивать эти свойства во встроенном языке для изменения конфигурации: настройки меняются в Конфигураторе.

  3. Не приравнивайте имя формы в метаданных к объекту ФормаКлиентскогоПриложения.

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

Проверить проектные свойства формы и не выдать их за runtime-разметку

Разбираем расширенное представление, пояснение, интерфейс и три свойства без описанного типа результата.

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

Полный серверный общий модуль собственной учебной копии КА2 Progress 2.5.20.75, только чтение схемы.

Подготовка

  1. Используйте отдельную учебную копию КА2 Progress из C:\claude\KA2\Progress\XML_CF_KA2_PROGRESS, конфигурация КомплекснаяАвтоматизация 2.5.20.75, платформа 8.5.1.1343. Это не инструкция запуска в рабочей базе.

  2. Создайте серверный общий модуль УчебныеКонтрактыИнтерфейса с флагом Сервер. Вставьте полный модуль одного урока и вызовите УчебныеКонтрактыИнтерфейса.ВыполнитьПример() из серверной учебной команды.

  3. Команды подтверждены в Catalogs\Номенклатура.xml и Documents\РеализацияТоваровУслуг.xml; форма — в Catalogs\Номенклатура\Forms\ФормаСписка.xml; нумератор — в DocumentNumerators\ДокументыРеализацииТоваров.xml.

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

  5. При отличающейся версии или расширениях результат может отличаться от выгрузки. Сверяйте активную конфигурацию, а не исправляйте её ради зелёных сообщений.

Процедура ВыполнитьПример() Экспорт
    Каталог = Метаданные.Справочники.Найти("Номенклатура");
    Если Каталог = Неопределено Тогда
        ВызватьИсключение "Нет подтверждённого справочника Номенклатура";
    КонецЕсли;
    ФормаМетаданных = Каталог.Формы.Найти("ФормаСписка");
    Если ФормаМетаданных = Неопределено Тогда
        ВызватьИсключение "Нет формы Номенклатура.ФормаСписка";
    КонецЕсли;
    Сообщить("Расширенное представление заполнено: " + Строка(НЕ ПустаяСтрока(ФормаМетаданных.РасширенноеПредставление)));
    Сообщить("Пояснение заполнено: " + Строка(НЕ ПустаяСтрока(ФормаМетаданных.Пояснение)));
    Сообщить("Использование в режиме интерфейса: " + Строка(ФормаМетаданных.ИспользованиеВРежимеСовместимостиИнтерфейса));
    Попытка
        Сообщить("Тип НазначенияИспользования: " + Строка(ТипЗнч(ФормаМетаданных.НазначенияИспользования)));
    Исключение
        Сообщить("НазначенияИспользования недоступны: " + ОписаниеОшибки());
    КонецПопытки;
    Попытка
        Сообщить("Тип Справка: " + Строка(ТипЗнч(ФормаМетаданных.Справка)));
    Исключение
        Сообщить("Справка недоступна: " + ОписаниеОшибки());
    КонецПопытки;
    Попытка
        Сообщить("Тип проектного свойства Форма: " + Строка(ТипЗнч(ФормаМетаданных.Форма)));
    Исключение
        Сообщить("Проектное свойство Форма недоступно: " + ОписаниеОшибки());
    КонецПопытки;
    Сообщить("XML-макет и код формы этим отчётом не получены; окно формы не открывалось");
КонецПроцедуры

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

  1. РасширенноеПредставление и Пояснение относятся к объявленному представлению формы. Проверка заполненности не меняет текущий заголовок окна.

  2. ИспользованиеВРежимеСовместимостиИнтерфейса — отдельный перечислимый параметр. Его диагностируем как получен: отсутствующее явное поле в XML не превращаем в выдуманный вариант.

  3. У НазначенияИспользования, Справка и Форма в краткой справке указан тип Неопределено. Не предполагаем, что это массив, HTML-строка или исполняемый объект формы.

  4. Три обращения защищены отдельными Попытка/Исключение: показан фактический тип либо реальная причина недоступности. Отсутствие значения не подменяется искусственным массивом.

  5. Для чтения макета и модуля используют экспорт Catalogs\Номенклатура\Forms\ФормаСписка\Ext\Form.xml и его Module.bsl/Конфигуратор отдельно. Этот урок их не исполняет.

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

  1. Шесть подписанных диагностических строк: три настройки и по одному результату каждого защищённого обращения.

  2. Нет обещанных Истина для проектных свойств с неописанным типом. Последнее сообщение прямо указывает, чего отчёт не получил.

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

Показан полезный отчёт доступности с честной границей между описанием метаданных и runtime-экземпляром.

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

  1. Не вызывать методы окна или элементов на значении проектного свойства Форма.

  2. Тип Неопределено в справке не является доказательством, что runtime всегда вернёт Неопределено.

  3. Не обходить недоступность проектных данных включением привилегированного режима.

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

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

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

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

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