Делать будем через механизм подключаемых команд, поэтому данная статья актуальна только для форм, которые подключены к функционалу подключаемых команд БСП, т.е. у которых при создании на сервере вызвано ПодключаемыеКоманды.ПриСозданииНаСервере() и где в модуле формы расположены обязательные процедуры
Предположим, у нас есть клиентский общий модуль с некой процедурой, где в качестве параметра была передана форма
Согласно описанию библиотеки подключаемых команд, таблица подключаемых команд у нас находится во временном хранилище. Адрес расположен в реквизите формы по пути (Форма.)ПараметрыПодключаемыхКоманд.АдресТаблицыКоманд.
Для того чтобы использовать этот механизм достаточно добавить строку в эту таблицу и положить обратно. Сделать это можно как заранее (например после инициализации ПодключаемыеКоманды.ПриСозданииНаСервере()), так и в процессе (достаточно добавить описание 1 раз)
В добавляемую строку нужно записать следующие свойства
Обязательными для нас являются следующие свойства: ИмяВФорме, Идентификатор, Обработчик, РежимЗаписи
Далее переходим в наш серверный общий модуль. Процедура вызываемая нами должна иметь 2 параметра. Первый всегда ссылка, второй структура, в свойствах которой есть форма (серверное представление).
Теперь для вызова нашей серверной процедуры из клиентского общего модуля с передачей формы наша клиентская процедура должна принять следующий вид
После завершения кода на сервере форма будет полноценно возвращена на клиент(полноценная передача с преображением серверного представления в клиентское) без крестов и прочих ошибок.
Вообще с помощью механизма подключаемых команд можно делать универсальные расширения без добавления форм в расширение (как расширяемого объекта), при этом выводя свои элементы на форму, добавляя свои реквизиты, а так же подключать события этим элементам, которые будут отрабатывать через механизм подключаемых команд.
Все описанное многократно использовалось мной в реальных проектах (правда, в более усложненном и универсальном виде).
Пример описан для БСП 3.1.10.х.