Как исправить ошибку «Метод объекта не обнаружен (ПолучитьФорму)» в управляемой форме 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← На главную

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

Рассмотрим причину возникновения этой ошибки и разберем по шагам, как правильно изменить код для корректной работы в управляемых формах 1С:Предприятие 8.3.

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

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

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

Вариант 1. Использование функции ОткрытьФорму на клиенте

Для открытия произвольной формы или формы объекта метаданных в тонком клиенте используется функция ОткрытьФорму(). Ей необходимо передать полный путь к форме в виде строки.

Проанализируем пример исходного ошибочного кода:


// Ошибочный вариант для управляемой формы:
ФормаЗапросаСкидки = ЭтотОбъект.ПолучитьФорму("ФормаСкидкиUD");

Чтобы исправить эту запись, перепишем вызов следующим образом:


// Корректный вариант открытия формы:
ОткрытьФорму("Документ.ЧекККМ.Форма.ФормаСкидкиUD", , ЭтаФорма, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

Разберем параметры функции ОткрытьФорму():

  1. ИмяФормы — полная строка пути к метаданным, например: "Документ.ЧекККМ.Форма.ФормаСкидкиUD".
  2. Параметры — структура параметров, передаваемых в открываемую форму (при необходимости).
  3. Владелец — указание на форму-владельца (в данном контексте ЭтаФорма).
  4. РежимОткрытияОкна — параметр РежимОткрытияОкнаФормы.БлокироватьОкноВладельца заблокирует текущую форму до завершения работы в открытом окне, что заменяет устаревший модальный режим.

Если в конфигурации не отключена поддержка модальных вызовов (что не рекомендуется для современных систем), допускается вызов метода ОткрытьФормуМодально():

ОткрытьФормуМодально("Документ.ЧекККМ.Форма.ФормаСкидкиUD", , ЭтаФорма);

Вариант 2. Исправление сопутствующих ошибок в серверном коде

Часто после исправления вызова формы разработчики сталкиваются со следующими ошибками при обработке данных на сервере. В управляемых формах данные документа находятся не в объекте базы данных напрямую, а в реквизите Объект типа ДанныеФормыСтруктура.

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

  1. Некорректное обращение к количеству строк:

    Обращение ЭтотОбъект.Товары.Количество вызовет ошибку. На сервере количество элементов табличной части реквизита Объект следует получать через метод Количество():

    КоличествоНоменклатурныхПозиций = Объект.Товары.Количество();
  2. Ошибочный обход элементов формы вместо коллекции данных:

    Попытка обойти коллекцию через визуальные элементы формы Элементы.Товары.Значение приведет к ошибке, так как Элементы хранят интерфейсные элементы управления. Для обхода строк табличной части нужно использовать реквизит Объект.Товары:

    
    // Ошибочно:
    // Для Каждого СтрокаТЧТовары Из Элементы.Товары.Значение Цикл
    
    // Правильно:
    Для Каждого СтрокаТЧТовары Из Объект.Товары Цикл
        СтрокаТЧТовары.ПроцентСкидкиНаценки = ИтоговыйПроцентСкидки;
        // Дальнейшая обработка строки
    КонецЦикла;
    

Соблюдение правил разделения клиентского и серверного контекстов, а также использование актуальных методов работы с управляемыми формами позволяет избавиться от ошибок и обеспечить стабильную работу доработок в 1С:Предприятие 8.3.

← На главную