При работе с внешними обработками в среде 1С:Предприятие разработчики часто сталкиваются с ситуацией, когда система отказывается открывать диалоговое окно или вспомогательную форму, выдавая ошибку «Неизвестное имя формы». Особенно часто это происходит при использовании популярных инструментов, таких как КонсольЗаданий.epf, когда мы пытаемся создать или отредактировать регламентное задание. В этой статье мы подробно разберем, почему возникает эта ошибка, и рассмотрим пошагово все способы ее решения.
Проанализируем ситуацию: когда мы запускаем обработку, включенную в состав конфигурации, 1С ищет ее формы в дереве метаданных. Однако, если мы открываем файл .epf как внешнюю обработку, она не регистрируется в глобальном дереве объектов конфигурации под своим коротким именем. Основная причина ошибки заключается в том, что метод ПолучитьФорму() не может найти путь к объекту, так как в коде указан неверный префикс или отсутствует указание на то, что объект является внешним.
Рассмотрим пример ошибочного кода, который часто встречается в типовых консолях заданий:
Диалог = ПолучитьФорму("Обработка.КонсольЗаданий.Форма.ДиалогРегламентногоЗадания", СтруктураПараметров);
Здесь система ищет форму внутри метаданных конфигурации (в ветке «Обработки»). Если в самой конфигурации обработки с именем КонсольЗаданий нет, платформа закономерно выдаст ошибку о неизвестном имени формы.
Первое, что мы должны проверить — это то, как мы обращаемся к метаданным. Для внешних файлов (расширение .epf) необходимо явно указывать, что это внешняя обработка. Разберем, как изменить строку кода для корректной работы:
// Вместо "Обработка.Имя..." используем "ВнешняяОбработка.Имя..."
Диалог = ПолучитьФорму("ВнешняяОбработка.КонсольЗаданий.Форма.ДиалогРегламентногоЗадания", СтруктураПараметров);
Важный нюанс: имя КонсольЗаданий в данном случае — это не имя файла на диске, а внутреннее имя объекта, заданное в конфигураторе на закладке «Основные» в поле «Имя». Если вы переименовали файл в папке Windows, это не поможет — нужно проверять именно свойство объекта внутри 1С.
Если мы работаем внутри модуля формы самой обработки, наиболее надежным способом будет обращение к форме через текущий контекст. Это избавляет нас от необходимости жестко прописывать имя обработки в коде, что делает нашу обработку более универсальной (например, при ее переименовании).
Рассмотрим, как модифицировать вызов:
// Используем метод объекта, чтобы система искала форму внутри этого же файла
Диалог = ЭтотОбъект.ПолучитьФорму("ДиалогРегламентногоЗадания", СтруктураПараметров);
В этом случае платформа понимает, что искать форму ДиалогРегламентногоЗадания нужно не во всей базе, а только внутри текущего контейнера (нашей внешней обработки). Этот способ считается «правилом хорошего тона» в разработке на 1С.
Если вы работаете в современном интерфейсе (Управляемые формы, интерфейс «Такси»), использование метода ПолучитьФорму может быть ограничено или работать иначе, чем в обычном приложении. В управляемом интерфейсе рекомендуется использовать метод ОткрытьФорму().
Проанализируем пример для управляемых форм:
// Путь для управляемой формы внешней обработки
ПутьКФорме = "ВнешняяОбработка.КонсольЗаданий.Форма.ДиалогРегламентногоЗадания";
ОткрытьФорму(ПутьКФорме, СтруктураПараметров, ЭтаФорма);
Если вы открываете внешнюю обработку через стандартный диалог «Файл — Открыть», платформа присваивает ей временное уникальное имя. В некоторых случаях это может привести к тому, что прямой вызов по имени ВнешняяОбработка.КонсольЗаданий не сработает. Тогда следует использовать свойство формы ИмяФормы, которое уже содержит правильный префикс.
Иногда ошибка сохраняется даже после правки кода. Рассмотрим ситуацию, когда имя формы в коде не соответствует имени в конфигураторе. Нам необходимо выполнить следующие шаги:
ДиалогРегламентногоЗадания.КонсольЗаданий2019, то и в коде вызова (Способ 1) должно быть написано именно так.Посмотрим на пример несоответствия:
В конфигураторе имя обработки: РЗ_Консоль
В коде написано: ПолучитьФорму("ВнешняяОбработка.КонсольЗаданий...")
Результат: Ошибка «Неизвестное имя формы» гарантирована. Исправьте код, чтобы он соответствовал метаданным.
Если вы используете обработку «Консоль заданий», которая была выгружена из современной конфигурации на базе БСП (Библиотеки стандартных подсистем), помните о безопасном режиме. При запуске внешних обработок в безопасном режиме доступ к некоторым методам получения форм может быть заблокирован политиками безопасности.
В таких случаях попробуйте запустить 1С от имени администратора или убедитесь, что обработка не помещена в «Безопасный режим» при регистрации в справочнике «Дополнительные отчеты и обработки». Для этого в карточке обработки нужно снять соответствующий флаг или разрешить использование опасных действий.
Подведем итог: чаще всего проблема решается либо добавлением слова ВнешняяОбработка в путь к форме, либо использованием обращения через ЭтотОбъект. Проанализировав структуру вашего кода и метаданных, вы легко устраните это досадное препятствие в работе.