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