Имя: Пароль:
1C
1С v8
как работать с хранилищем системных настроек?
0 GANR
 
16.11.11
19:17
Нужно, чтобы форма документа открывалась с разными системными настройками видимости её элементов, в зависимости от выбранного контрагента (настройки задаются интерактивно). Почему при открытии формы уже созданного документа она отображается с настройками по умолчанию, а если посмотреть меню Действия...\Изменить форму - вижу те настройки, которые сохранял? Как сделать так, чтобы настройки вступали в силу сразу при открытии формы ???

Код модуля формы документа прилагается

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   
   Если Параметры.Ключ.Пустая() Тогда
       Возврат;
   КонецЕсли;
   Запрос = Новый Запрос;
   Запрос.Параметры.Вставить("Объект", Объект.Контрагент);
   Запрос.Текст =
   "ВЫБРАТЬ
   |    мдмНастройкиФорм.Настройки
   |ИЗ
   |    РегистрСведений.мдмНастройкиФорм КАК мдмНастройкиФорм
   |ГДЕ
   |    мдмНастройкиФорм.Объект = &Объект";
   Результат = Запрос.Выполнить();
   Если Не Результат.Пустой() Тогда
       Выборка = Результат.Выбрать();
       Выборка.Следующий();
       ХранилищеСистемныхНастроек.Сохранить(ИмяФормы + "/НастройкиФормы", "", Выборка.Настройки.Получить(), , Неопределено);
   КонецЕсли;
   
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии()
   
   СохранитьНастройкиНаСервере();
   
КонецПроцедуры

&НаСервере
Процедура СохранитьНастройкиНаСервере()
   
   Настройки = ХранилищеСистемныхНастроек.Загрузить(ИмяФормы + "/НастройкиФормы");
   Если Настройки <> Неопределено Тогда
       НаборЗаписей = РегистрыСведений.мдмНастройкиФорм.СоздатьНаборЗаписей();
       НаборЗаписей.Отбор.Объект.Установить(Объект.Контрагент);
       НаборЗаписей.Прочитать();
       ТекЗапись = ?(НаборЗаписей.Количество() <> 0, НаборЗаписей[0], НаборЗаписей.Добавить());
       ТекЗапись.Объект = Объект.Контрагент;
       ТекЗапись.Настройки = Новый ХранилищеЗначения(Настройки);
       НаборЗаписей.Записать();
   КонецЕсли;
   ХранилищеСистемныхНастроек.Удалить(ИмяФормы + "/НастройкиФормы", "", Неопределено);
КонецПроцедуры
1 GANR
 
17.11.11
09:30
up
2 Maxus43
 
17.11.11
09:36
почему при создании на сервере они сохраняются? по логике надо их получать и применять
3 GANR
 
17.11.11
09:44
(3) При открытии, следующим за созданием на сервере система должна прочитать настройки, сохраненные при создании на сервере. Она их читает, но почему-то не применяет. Как же изловчиться не выходя за пределы формы?
4 Maxus43
 
17.11.11
09:47
не осилил. читаем книги - "Всё что должно быть сделано с формой для открытия должно быть сделано при создании на сервере" (с) общий смысл разработки управляемого приложения.
З.ы. Применяй в при создании на сервере
5 GANR
 
17.11.11
09:48
(4) Что-же конкретно я делаю не так?
6 Maxus43
 
17.11.11
09:50
(5) я не вижу из кода где ты применяеш настройки
>>При открытии, следующим за созданием на сервере система должна прочитать настройки
это она сама должна? кто сказал?
я хз, с настройками не работал
7 GANR
 
17.11.11
11:00
(6) Заработало!!! Надо использовать событие модуля менеджера документа "обработка получения формы" - оно происходит ПЕРЕД созданием формы объекта и именно в нем нужно менять настройки.

Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
   
   ТекДокумент = Неопределено;
   Параметры.Свойство("Ключ", ТекДокумент);
   Если Не ЗначениеЗаполнено(ТекДокумент) Тогда
       Возврат;
   КонецЕсли;
   Запрос = Новый Запрос;
   Запрос.Параметры.Вставить("Объект", ТекДокумент.Контрагент);
   Запрос.Текст =
   "ВЫБРАТЬ
   |    мдмНастройкиФорм.Настройки
   |ИЗ
   |    РегистрСведений.мдмНастройкиФорм КАК мдмНастройкиФорм
   |ГДЕ
   |    мдмНастройкиФорм.Объект = &Объект";
   Результат = Запрос.Выполнить();
   Если Не Результат.Пустой() Тогда
       Выборка = Результат.Выбрать();
       Выборка.Следующий();
       ХранилищеСистемныхНастроек.Сохранить("Документ.ТестовыйДокумент.Форма.ФормаДокумента/НастройкиФормы", "", Выборка.Настройки.Получить(), , Неопределено);
   КонецЕсли;

КонецПроцедуры
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.