Как исправить ошибку «Неизвестное имя формы» при вызове формы внешней обработки

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При работе с внешними обработками в среде 1С:Предприятие разработчики часто сталкиваются с ситуацией, когда система отказывается открывать диалоговое окно или вспомогательную форму, выдавая ошибку «Неизвестное имя формы». Особенно часто это происходит при использовании популярных инструментов, таких как КонсольЗаданий.epf, когда мы пытаемся создать или отредактировать регламентное задание. В этой статье мы подробно разберем, почему возникает эта ошибка, и рассмотрим пошагово все способы ее решения.

Выясним причину возникновения ошибки

Проанализируем ситуацию: когда мы запускаем обработку, включенную в состав конфигурации, 1С ищет ее формы в дереве метаданных. Однако, если мы открываем файл .epf как внешнюю обработку, она не регистрируется в глобальном дереве объектов конфигурации под своим коротким именем. Основная причина ошибки заключается в том, что метод ПолучитьФорму() не может найти путь к объекту, так как в коде указан неверный префикс или отсутствует указание на то, что объект является внешним.

Рассмотрим пример ошибочного кода, который часто встречается в типовых консолях заданий:


Диалог = ПолучитьФорму("Обработка.КонсольЗаданий.Форма.ДиалогРегламентногоЗадания", СтруктураПараметров);

Здесь система ищет форму внутри метаданных конфигурации (в ветке «Обработки»). Если в самой конфигурации обработки с именем КонсольЗаданий нет, платформа закономерно выдаст ошибку о неизвестном имени формы.

Способ 1: Использование правильного префикса «ВнешняяОбработка»

Первое, что мы должны проверить — это то, как мы обращаемся к метаданным. Для внешних файлов (расширение .epf) необходимо явно указывать, что это внешняя обработка. Разберем, как изменить строку кода для корректной работы:


// Вместо "Обработка.Имя..." используем "ВнешняяОбработка.Имя..."
Диалог = ПолучитьФорму("ВнешняяОбработка.КонсольЗаданий.Форма.ДиалогРегламентногоЗадания", СтруктураПараметров);

Важный нюанс: имя КонсольЗаданий в данном случае — это не имя файла на диске, а внутреннее имя объекта, заданное в конфигураторе на закладке «Основные» в поле «Имя». Если вы переименовали файл в папке Windows, это не поможет — нужно проверять именно свойство объекта внутри 1С.

Способ 2: Обращение через контекст «ЭтотОбъект»

Если мы работаем внутри модуля формы самой обработки, наиболее надежным способом будет обращение к форме через текущий контекст. Это избавляет нас от необходимости жестко прописывать имя обработки в коде, что делает нашу обработку более универсальной (например, при ее переименовании).

Рассмотрим, как модифицировать вызов:


// Используем метод объекта, чтобы система искала форму внутри этого же файла
Диалог = ЭтотОбъект.ПолучитьФорму("ДиалогРегламентногоЗадания", СтруктураПараметров);

В этом случае платформа понимает, что искать форму ДиалогРегламентногоЗадания нужно не во всей базе, а только внутри текущего контейнера (нашей внешней обработки). Этот способ считается «правилом хорошего тона» в разработке на 1С.

Способ 3: Учет особенностей управляемого приложения

Если вы работаете в современном интерфейсе (Управляемые формы, интерфейс «Такси»), использование метода ПолучитьФорму может быть ограничено или работать иначе, чем в обычном приложении. В управляемом интерфейсе рекомендуется использовать метод ОткрытьФорму().

Проанализируем пример для управляемых форм:


// Путь для управляемой формы внешней обработки
ПутьКФорме = "ВнешняяОбработка.КонсольЗаданий.Форма.ДиалогРегламентногоЗадания";
ОткрытьФорму(ПутьКФорме, СтруктураПараметров, ЭтаФорма);

Если вы открываете внешнюю обработку через стандартный диалог «Файл — Открыть», платформа присваивает ей временное уникальное имя. В некоторых случаях это может привести к тому, что прямой вызов по имени ВнешняяОбработка.КонсольЗаданий не сработает. Тогда следует использовать свойство формы ИмяФормы, которое уже содержит правильный префикс.

Способ 4: Проверка соответствия имен в метаданных

Иногда ошибка сохраняется даже после правки кода. Рассмотрим ситуацию, когда имя формы в коде не соответствует имени в конфигураторе. Нам необходимо выполнить следующие шаги:

  1. Откроем внешнюю обработку в конфигураторе (через меню Файл -> Открыть).
  2. Перейдем на закладку «Формы».
  3. Убедимся, что форма действительно называется ДиалогРегламентногоЗадания.
  4. Проверим свойство «Имя» самой обработки на корневом уровне. Если там написано КонсольЗаданий2019, то и в коде вызова (Способ 1) должно быть написано именно так.

Посмотрим на пример несоответствия:

В конфигураторе имя обработки: РЗ_Консоль

В коде написано: ПолучитьФорму("ВнешняяОбработка.КонсольЗаданий...")

Результат: Ошибка «Неизвестное имя формы» гарантирована. Исправьте код, чтобы он соответствовал метаданным.

Дополнительные рекомендации при работе с БСП

Если вы используете обработку «Консоль заданий», которая была выгружена из современной конфигурации на базе БСП (Библиотеки стандартных подсистем), помните о безопасном режиме. При запуске внешних обработок в безопасном режиме доступ к некоторым методам получения форм может быть заблокирован политиками безопасности.

В таких случаях попробуйте запустить 1С от имени администратора или убедитесь, что обработка не помещена в «Безопасный режим» при регистрации в справочнике «Дополнительные отчеты и обработки». Для этого в карточке обработки нужно снять соответствующий флаг или разрешить использование опасных действий.

Подведем итог: чаще всего проблема решается либо добавлением слова ВнешняяОбработка в путь к форме, либо использованием обращения через ЭтотОбъект. Проанализировав структуру вашего кода и метаданных, вы легко устраните это досадное препятствие в работе.

← На главную