fixin (fixin) wrote,
fixin
fixin

Category:

Немного о параметрах и настройках управляемых форм



У меня возникла проблема - нужно было открывать управляемую форму обработки с параметрами. При открытии из этих параметров я заполнял реквизиты формы из этих параметров в процедуре ПриСозданииНаСервере из системного реквизита Параметры.


Но если у формы была сохраненная основная настройка, она затирала мои параметры.


Можно было конечно, сделать флажок - режим открытия обработки и анализировать его в событии ПриОткрытииНаСервереПередЗагрузкойДанныхИзНастроекНаСервере, например, очищая соответствие Настройки.


Но я поступил по другому  - сериализирую Параметры, тип которых ДанныеФормыСтруктура через 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, поэтому я создаю дополнительный реквизит "Автостарт" у формы, который заполняю в серверной процедуре ПриОткрытииНаСервере.

Tags:
Subscribe
promo fixin декабрь 31, 2037 16:57 1417
Buy for 30 tokens
UPD: Друзья, в августе 2019 года блог переехал на http://fixinchik.ru. Welcome! Добро пожаловать в журнал Осипова Сергея Александровича, известного также как Fixin и Гений 1С. Рекомендую ознакомиться с Часто Задаваемыми Вопросами обо мне. Что я хочу в подарок - список. Мой проект "…
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 37 comments