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