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