Имя: Пароль:
1C
 
Сохранение настроек интерфейса управляемой формы
0 CagoBHuK
 
17.01.11
12:14
Здравствуйте, уважаемые гуру!

Возник вопрос следующего характера, касательно управляемых форм: имеется ли возможность сохранять настройку интерфейса управляемой формы для дальнейшего выбора, например, из двух сохраненных настроек? Приведу пример: На управляемой форме 2 группы кнопок по 1 кнопке в каждой. Хотелось бы сохранить 2 настройки таким образом, что бы в первой настройке в первой группе была кнопка №1, а во второй №2. Соответственно, вторая настройка должна содержать в первой группе уже кнопку №2, а во второй группе кнопку №1. Графически можно описать это вот так: http://s49.radikal.ru/i125/1101/1b/c976efffed16.jpg

Я знаю, что при изменении управляемой формы, у пользователя сохраняются настройки, и что при повторном открытии они восстанавливаются. Но хотелось бы сохранять РАЗЛИЧНЫЕ настройки формы для возможности быстрого между ними переключения.
1 Beans
 
17.01.11
12:18
изучать объект "ХранилищеСистемныхНастроек",
информации и примеров по ней нет.

я несколько дней с ним помучился и плюнул!
2 CagoBHuK
 
17.01.11
12:56
Я так понял, что список настроек отображения формы можно получить либо так: ХранилищеСистемныхНастроек.ПолучитьСписок(ЭтаФорма.ИмяФормы+"/НастройкиОкна"), либо так: ХранилищеСистемныхНастроек.ПолучитьСписок(ЭтаФорма.ИмяФормы+"/НастройкиФормы"). Непонятно только, почему в первом случае мне возвращается пустой список значений, а во втором в нем всегда один элемент, значение которого - пустая строка? Где же находится описание формы-то? Что с ним дальше делать? Как присунуть его форме?
3 Beans
 
17.01.11
13:13
СписокНастроек1 =ХранилищеСистемныхНастроек.ПолучитьСписок("Документ.Документ1.Форма.ФормаДокумента/НастройкиОкна",);

НастройкиОкна = ХранилищеСистемныхНастроек.Загрузить("Документ.Документ1.Форма.ФормаДокумента/НастройкиОкна","") ;
   
ХранилищеСистемныхНастроек.Сохранить("Документ.Документ1.Форма.ФормаДокумента/НастройкиОкна","МояНастройка",НастройкиОкна );
 
СписокНастроек2 = ХранилищеСистемныхНастроек.ПолучитьСписок("Документ.Документ1.Форма.ФормаДокумента/НастройкиОкна",);
 

А как это должно на практике работать не знаю.
4 CagoBHuK
 
17.01.11
17:20
СписокНастроек1 =ХранилищеСистемныхНастроек.ПолучитьСписок("Документ.Документ1.Форма.ФормаДокумента/НастройкиОкна",);

Получаем:
СписокНастроек1.Количество() = 1
СписокНастроек1[0].Значение = ""

То есть в списке одно единственное значение - пустая строка, хотя должно быть значение типа НастройкиОкна.

//----------------------------------------------

НастройкиФормы (FormSettings)
Описание:

Содержит настройки состава, взаимного расположения и свойств элементов управляемой формы.

Доступность:

Сервер, толстый клиент.
Сериализуется.

//------------------------------------
Это - то, что мне необходимо, однако, данный метод мне возвращает почему-то пустой список значений.
5 Beans
 
17.01.11
17:48
у меня наоборот у всех форм есть как раз /НастройкиОкна
а /НастройкиФормы нет, где ее взять хз.

по умолчанию ключ пустая строка ""
получить настройки можно
НастройкиОкна = ХранилищеСистемныхНастроек.Загрузить("Документ.Документ1.Форма.ФормаДокумента/НастройкиОкна","") ;
и тип будет НастройкиОкна

заметил если настройку удалить - то вновь она появится только после перезапуска конфигуратора!

по моим экспериментам по умолчанию загружается именно настройка с пустой строкой ""

но можно сохранить свою на основе первой

ХранилищеСистемныхНастроек.Сохранить("Документ.Документ1.Форма.ФормаДокумента/НастройкиОкна","МояНастройка",НастройкиОкна );

появится еще в списке "МояНастройка"  и по логике
если перед открытием формы заменить "МояНастройка" на "" методом Сохранить то она и должна применится.

Но в результате экспериментов мне так и не удалось повлять на поведение формы
6 Beans
 
17.01.11
17:50
попробуй помучить главного методиста Радченко на эту тему,
пусть дает пример

здесь http://devtrainingforum.v8.1c.ru/forum/
7 Beans
 
17.01.11
17:51
ну и еще на всякий случай может найдешь чего полезного

v8: СКД. Программная установка параметров в управляемой форме отчета. Как?
8 CagoBHuK
 
18.01.11
10:15
Получается, что это можно делать только при открытии формы что ли? Тогда весь смысл теряется. Хочется, что бы пользователь САМОСТОЯТЕЛЬНО имел возможность выбрать настройку.
9 CagoBHuK
 
18.01.11
12:34
Открылось для меня, что у формы есть такое свойство, как "КлючНазначенияИспользования". Если сначала сохранить настройку методом;
ХранилищеСистемныхНастроек.Сохранить(ЭтаФорма.ИмяФормы+"/НастройкиОкна","МояНастройка",НастройкиОкна );
А потом при создании на сервере сделать;
ЭтаФорма.КлючНазначенияИспользования = "МояНастройка";
Тогда окно восстановит настройку, сохраненную в "МояНастройка".
10 CagoBHuK
 
18.01.11
14:26
Итак, путем "мозге хох залупирт", потратив кучу времени, я все-таки допер, каким образом работает сей механизм. Итак, проведем экспериментос.
1. Создаем управляемую форму. (я делал это именно внутри конфигуратора, а не внутри внешней обработки.
2. В форме создаем элементы, которые будем двигать/изменять.
3. В форме создаем 3 кнопки. Тексты их обработчиков ниже:

&НаКлиенте
Процедура УправлениеНастройкамиФормы_ЗагрузитьНастройкиФормы(Команда)
   СписокНастроек = ХранилищеСистемныхНастроек.ПолучитьСписок(ЭтаФорма.ИмяФормы+"/НастройкиФормы");
   ИмяНастройки = СписокНастроек.ВыбратьЭлемент();
   Если Не ИмяНастройки = Неопределено Тогда
       НастройкиФормы = ХранилищеСистемныхНастроек.Загрузить(ЭтаФорма.ИмяФормы+"/НастройкиФормы",ИмяНастройки);
       ХранилищеСистемныхНастроек.Сохранить(ЭтаФорма.ИмяФормы+"/НастройкиФормы","",НастройкиФормы );
   КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура УправлениеНастройкамиФормы_СохранитьНастройкиФормы(Команда)
   ИмяНастройки = "";
   Подсказка = "Введите название настройки";
   Если ВвестиСтроку(ИмяНастройки, Подсказка, 0, Истина) Тогда
       НастройкиФормы = ХранилищеСистемныхНастроек.Загрузить(ЭтаФорма.ИмяФормы+"/НастройкиФормы","");
       ХранилищеСистемныхНастроек.Сохранить(ЭтаФорма.ИмяФормы+"/НастройкиФормы",ИмяНастройки,НастройкиФормы);
   КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура УправлениеНастройкамиФормы_УдалитьНастройкуФормы(Команда)
   СписокНастроек = ХранилищеСистемныхНастроек.ПолучитьСписок(ЭтаФорма.ИмяФормы+"/НастройкиФормы");
   ИмяНастройки = СписокНастроек.ВыбратьЭлемент();
   Если Не ИмяНастройки = Неопределено Тогда
       ХранилищеСистемныхНастроек.Удалить(ЭтаФорма.ИмяФормы+"/НастройкиФормы", ИмяНастройки, глЗначениеПеременной("глТекущийПользователь").Наименование)    
   КонецЕсли;
КонецПроцедуры


В этом коде глЗначениеПеременной("глТекущийПользователь") замените на имя пользователя.
4. Тестируем то, что у нас получилось. Открываем нашу форму. Хреновертим с ее видом и нажимаем кнопку сохранения настройки. Вводим красивое имя "Один". Настройка сохранилась.
5. Теперь хреновертим еще и снова нажимаем кнопку сохранения настройки. Вводим красивое имя "Два".
6. Перезапускаем 1С для верности.
7. Открываем нашу форму, кнопаем пимпу загрузки настроек и выбираем настройку с красивым названием "Один".
8. Перезапускаем один эс и снова открываем форму. Что же мы видим?... Ничего не изменилось. Настроечка  с красивым названием "Один" не применилась!
9. Перезапускаем 1С для верности.
10. Открываем нашу форму, кнопаем пимпу загрузки настроек и выбираем настройку с красивым названием "Один".
11. Закрываем один эс.
12. Открываем конфигуратор, открываем любой модуль, встаем в любое незначимое место и добавляем туда символ пробела, например. То есть суть модуля не изменится, но изменится конфигурация.
13. Обновляем конфигурацию.
14. Запускаем один эс и открываем нашу красивую формы.
15. Вуаля! Настроечка с красивым названием "Один" применилась!

Выводы: хотя механизм и работает, но фунциклирует но почему-то исключительно с помощью обновления конфиги, хотя настройки действительно можно сохранять. Непонятно, почему же все-таки он работает правильно, если делать все это платформенными методами.
PS: Уж не знаю, баг ли это, или нет, но в 1С по этому поводу не писал.
11 CagoBHuK
 
01.02.11
11:23
Возможно будет интересно, в конфигурации Библиотека Стандартных Подсистем есть обработка УправлениеНастройкамиФорм. Там вроде как сохранение настроек работает. Только оно позволяет манипулировать текущими настройками форм, тупо заменяя их, а не сохраняя для дальнейшего использования.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан