Описание проблемы: в управляемых формах 1С: Предприятия 8.2. невозможно вызвать другую форму объекта (внешняя обработка, отчет и т.п.) привычным методом обычных форм (ПолучитьФорму("ФормаОбработки", ЭтаФорма).ОткрытьМодально();), так как необходимо указывать полный путь к форме. Почему девелоперы 1С так сделали, выяснять бесполезно, ибо неисповедимы пути господни компании Нуралиева и Ко.
В сети предлагаются несколько решений. От примитивного ОткрытьФорму("ВнешняяОбработка.ИмяОбработки.Форма.ИмяФормы");, до навороченных с помещением обработки во временное хранилище с последующим подключением, вызовом WScript.Shell, и всё это с использованием кучи серверных процедур.
Предлагаю ещё один, на этот раз совсем простой и универсальный метод определения полного пути к форме объекта, полностью клиентский, основанный на замещении имени текущей формы переданным значением. Преимуществом метода является то, что при внедрении внешней обработки/отчёта в конфигурацию или переименовании объекта, не требуется изменять вызовы форм.
Данную функцию следует поместить в модуль вызывающей формы.
// Возвращает полный путь к форме внешней обработки, отчета или любого объекта метаданных в виде
// ВнешняяОбработка.ИмяВнешнейОбработки.Форма.ИмяФормы
// ВнешнийОтчет.ИмяВнешнегоОтчета.Форма.ИмяФормы
// Документ.ИмяОбъекта.Форма.ИмяФормы
//
// ** coded by Sergey (aka Porutchik) * 2012, http://forum.aeroion.ru/
//
// Параметры
// ИмяФормы - - имя формы объекта
//
// Возвращаемое значение:
// - полный путь к форме
//
&НаКлиенте
Функция ПолучитьПолноеИмяФормы(ИмяФормы)
СимволТочка = ".";
ПозицияТочки = СтрДлина(ЭтаФорма.ИмяФормы);
Пока Сред(ЭтаФорма.ИмяФормы, ПозицияТочки, 1) <> СимволТочка Цикл ПозицияТочки = ПозицияТочки - 1; КонецЦикла; //
Возврат Лев(ЭтаФорма.ИмяФормы, ПозицияТочки) + ИмяФормы;
КонецФункции
Пример использования:
ПараметрыФормы = Новый Структура();
ОткрытьФормуМодально(ПолучитьПолноеИмяФормы("ИмяФормыОбработки"), ПараметрыФормы, ЭтаФорма);
Использование функции в существующих работах: