У меня возникла проблема - нужно было открывать управляемую форму обработки с параметрами. При открытии из этих параметров я заполнял реквизиты формы из этих параметров в процедуре ПриСозданииНаСервере из системного реквизита Параметры.
Но если у формы была сохраненная основная настройка, она затирала мои параметры.
Можно было конечно, сделать флажок - режим открытия обработки и анализировать его в событии ПриОткрытииНаСервереПередЗагрузкойДанных
Но я поступил по другому - сериализирую Параметры, тип которых ДанныеФормыСтруктура через XDTO в событии ПриСозданииНаСервере в реквизит формы типа строка неограниченной длины и восстанавливаю их для анализа в событии ПриОткрытии. Так надежнее, мало ли что еще придумает 1С и как еще будут изменены реквизиты формы до момента её открытия.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Объект.ПараметрыОткрытия = ОбъектВXMLЧерезXDTO(Параметры);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПриОткрытииНаСервере();
Если Объект.Автостарт Тогда
ВыполнитьОбмен(Неопределено);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриОткрытииНаСервере()
Если НЕ ЗначениеЗаполнено(Объект.Организация) Тогда
Объект.Организация = Пользователи.ТекущийПользователь()._Осно
КонецЕсли;
ПараметрыОткрытия = ОбъектИзXMLЧерезXDTO(Объект.ПараметрыОтк
Если ПараметрыОткрытия.Свойство("Документ") Тогда
ТекДокумент = Объект.ПараметрыОткрытия.Документ;
Объект.Организация = ТекДокумент.Организация;
Объект.Партнер = ТекДокумент.Партнер;
Объект.Соглашение = ТекДокумент.Соглашение;
Объект.Документ = ТекДокумент;
КонецЕсли;
Если ПараметрыОткрытия.Свойство("ПравилоОбмен
ТекПравилоОбмена = ПараметрыОткрытия.ПравилоОбмена;
Объект.Организация = ТекПравилоОбмена.Организация;
Объект.Партнер = ТекПравилоОбмена.Владелец;
Объект.Соглашение = ТекПравилоОбмена.СоглашениеДляЗаказа;
Объект.ПравилоОбмена = ТекПравилоОбмена;
ПравилоОбменаПриИзмененииНаСервере(
КонецЕсли;
Если Параметры.Свойство("Выгружать") Тогда
Объект.Выгружать = истина;
КонецЕсли;
Если Параметры.Свойство("Выполнить") Тогда
Объект.Автостарт = истина;
КонецЕсли;
КонецПроцедуры
Функция ОбъектВXMLЧерезXDTO(Объект) Экспорт
//Назначение: Сериализация в XML через XDTO (для объектом компоновки)
//ДатаСоздания: 20080328
//Автор: Лейбович Максим 1С
//Тестирована: Да
//Автор: Гений1С
Перем ЗаписьXML;
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML,
Возврат ЗаписьXML.Закрыть();
КонецФункции
Функция ОбъектИзXMLЧерезXDTO(Текст, Тип=Неопределено) Экспорт
//Назначение: Сериализация из XML через XDTO (для объектом компоновки)
//ДатаСоздания: 20080328
//Автор: Лейбович Максим 1С
//Тестирована: Да
//Автор: Гений1С
Перем ЧтениеXML;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Текст);
Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML,
КонецФункции
Обратите внимание, что в процедуре ПриОткрытии на клиенте нельзя восстановить параметры из XDTO, поэтому я создаю дополнительный реквизит "Автостарт" у формы, который заполняю в серверной процедуре ПриОткрытииНаСервере.
Journal information