Проверить проектные свойства формы и не выдать их за 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С» и не аффилирован с ней.