Перечислить тринадцать форм, не открывая их

Учебные задачи

Число 13 взято из ChildObjects подтверждённого XML. Формы и макеты — разные коллекции.

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

Полный серверный общий модуль учебной копии КА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. Подтверждённый источник: SettingsStorages\ХранилищеВариантовОтчетов.xml. Формы находятся в SettingsStorages\ХранилищеВариантовОтчетов\Forms, модуль менеджера — в Ext\ManagerModule.bsl.

  4. Из серверной команды учебной обработки вызовите УчебныеМетаданныеХранилища.ВыполнитьПример(). Метаданные — описание схемы, не менеджер чтения/сохранения пользовательских вариантов.

  5. Уроки только читают описание: не открывают штатные формы, не выполняют модуль менеджера, не загружают отчётные варианты и не меняют настройки пользователя.

  6. Проверки формы/количества основаны на этой выгрузке. При другой версии или расширениях перепроверьте источник, не изменяйте активную конфигурацию ради совпадения чисел.

Процедура ВыполнитьПример() Экспорт
    Хранилище = Метаданные.ХранилищаНастроек.Найти("ХранилищеВариантовОтчетов");
    Если Хранилище = Неопределено Тогда
        ВызватьИсключение "В активной учебной копии не найдено подтверждённое хранилище вариантов";
    КонецЕсли;
    Формы = Хранилище.Формы;
    Сообщить(Формы.Количество() = 13);
    Проверенных = 0;
    Для Каждого ФормаМетаданных Из Формы Цикл
        Если Формы.Найти(ФормаМетаданных.Имя) <> ФормаМетаданных Тогда
            ВызватьИсключение "Поиск по имени не вернул собственную дочернюю форму";
        КонецЕсли;
        Проверенных = Проверенных + 1;
        Сообщить(ФормаМетаданных.Имя + " — " + ФормаМетаданных.Представление());
    КонецЦикла;
    Сообщить(Проверенных = 13);
    Сообщить(Формы.Найти("ВыборФинансовогоПериода") <> Неопределено);
    Сообщить(Формы.Найти("НеСуществуетGuideOwnedФорма") = Неопределено);
    Сообщить(Хранилище.Макеты.Количество() = 0);
КонецПроцедуры

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

  1. Получаем дочерние Формы именно выбранного хранилища, не все общие формы конфигурации.

  2. Обход выводит имя и представление каждой формы; её модуль не вызывается.

  3. Для каждой формы поиск по точному имени должен вернуть тот же объект метаданных.

  4. Отдельно показываем существующую форму выбора периода и безопасный поиск отсутствующего имени.

  5. Макеты пусты в этой выгрузке, несмотря на тринадцать форм. Это не число сохранённых вариантов отчёта.

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

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

  2. В каталоге есть СохранениеВариантаОтчетаВФайл, но сам файл этим обходом не создаётся.

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

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

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

  1. Расширения/версия могут добавить формы: пересверяйте XML, не удаляйте лишние формы ради числа 13.

  2. Не путайте поиск формы по имени с выполнением её команды.

  3. Макеты объекта хранилища не равны всем макетам отчётов конфигурации.

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

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

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

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

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