Заметил, что в управляемых формах 1С принуждает программистов к плохой архитектуре решений.
Вкратце упомяну, что теперь большинство внешних обработок нельзя прервать по CTRL+Break, т.к. они выполняются на сервере, но сейчас речь не об этом.
Проблема более глобальная.
Если раньше программисты выносили код в общие модули, то теперь в управляемых формах нельзя вызвать код общего серверного модуля с клиента, передав туда форму.
Это провоцирует писать весь код в модуле формы или писать обертку для таких вызовов, но опять же в модуле формы.
На одном из проектов у нас была цель – минимальное вмешательство в типовые формы, поэтому лепить дополнительные процедуры было нельзя. Максимум – некий набор стандартизированных процедур, который легко бы вставлялся парсером.
Поэтому я поступил так – в стандартный набор процедур добавил процедуру-затычку, чтобы можно было с клиента обращаться к серверным общим модулям, имея контекст формы.
Процедура:
&НаСервере
Функция ОбработатьНаСервере(ИмяМетода, Параметры = Неопределено) Экспорт
Выполнить ИмяМетода + "(ЭтаФорма, Параметры)";
Возврат Параметры;
КонецФункции
Пример вызова:
Форма.ОбработатьНаСервере("СерверныйМодуль.ВидЗаявкиПриИзмененииНа
Правда, элементы формы туда по-прежнему передать нельзя, но зато можно передать форму, а это уже полдела. Можно и названия элементов передавать. Намного удобнее, чем сериализовать вручную.
Ну и еще добавил парочку процедур, чтобы можно было обращаться к не экспортным методам формы, а то процедуры в форме могут обращаться, а процедуры из общих модулей уже нет – несправедливо:
&НаКлиенте
Функция ВыполнитьКодНаКлиенте(Код, Параметры = Неопределено) Экспорт
Выполнить Код;
Возврат Параметры;
КонецФункции
&НаСервере
Функция ВыполнитьКодНаСервере(Код, Параметры = Неопределено) Экспорт
Выполнить Код;
Возврат Параметры;
КонецФункции
Journal information