В рамках заметки предложено два вариант работы с настройками пользователя.
Ваиант 1
Сохранение настроек:
ИмяНастройки = «ТЕСТ»;
ЗначениеНастройки = Новый Структура(«Это настройки произвольного типа, к примеру структура», «»);
СохранитьЗначение(ИмяНастройки, ЗначениеНастройки) ;
- ИмяНастройки — ключ настроек, тип “строка”.
- значение — значение произвольного типа, возможность заманчивая, но не стоит слишком увлекаться и сохранять все подряд.
Восстановление настроек:
ИмяНастройки = «ТЕСТ»;
ЗначениеНастройки = ВосстановитьЗначение(ИмяНастройки);
Если ЗначениеНастройки = Неопределено Тогда
Сообщить(«Нет настройки с ключем ТЕСТ!»);
КонецЕсли;
- ИмяНастройки — ключ настройки, тип “строка”
- возвращает значение произвольного типа, сохраненное ранее.Если восстановить не удалось, возвращает “Неопределено”
Плюсы
- прост в использовании
- возможно сохранить настройки произвольного типа текущего пользователя в текущей информационной базе
Минусы
-
Только толстый клиент
- Возможно работать ТОЛЬКО с настройками текущего пользователя
Вариант 2
Использование объекта ХранилищеОбщихНастроек. Считаю этот вариант наиболее удобным и гибким.
Объект доступен в глобальном контексте. Содержит следующие методы:
Сохранение настроек:
// ключи могут быть произвольными строками
КлючОбъекта = «MIKO«;
КлючНастроек = «ПанельТелефонии»;
// настройки могут быть произвольного типа
Настройки = Новый Структура(«Это настройки произвольного типа, к примеру структура», «»);
ИмяПользователя = ИмяПользователя();
// имя пользователя — пользователь владелец настроек, если параметр не указать,
// то настройки будут сохранены для ТЕКУЩЕГО пользователя
ИмяПользователя = ИмяПользователя();
ХранилищеОбщихНастроек.Cохранить(КлючОбъекта, КлючНастроек, Настройки, , ИмяПользователя);
Под пользователем понимается именно пользователь информационной базы! Пример получения имени текущего пользователя:
// получим имя
ИмяТекущегоПользователя = ИмяПользователя();
// в типовых конфигурация используется справочник «Пользователи»
// в этом справочнике в стандартном реквизите «Код» обычно
// хранят информацию по имени пользователя, пример получения имени:
ИмяПользователя = Справочники.Пользователи.НайтиПоНаименованию(«Администратор»).Код;
// обычно «Код», для этого справочника — строка фиксированной длинны, потому вероятно разумно обрезать пробелы справа:
ИмяПользователя = СокрП(ИмяПользователя);
Восстановление настроек:
КлючОбъекта = «MIKO«;
КлючНастроек = «ПанельТелефонии»;
ВладелецНастроек = ИмяПользователя();
// Для восстановления настроек необходимо воспользоваться функцией Загрузить
СтруктураНастроек = Неопределено;
Попытка
СтруктураНастроек = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта,КлючНастроек,,ВладелецНастроек);
// если настроек нет, то будет возвращено значение «Неопределено»
Исключение
Сообщить(«Нет прав на восстановление настроек.»);
КонецПопытки;
Если СтруктураНастроек = Неопределено Тогда
Сообщить(«Не вышло восстановить настройки!»);
КонецЕсли;
ВладелецНастроек — это имя пользователя, владельца настроек. Параметр очень важный.
Настройки других пользователей могут получать ТОЛЬКО пользователи с расширенными правами.
Необходимо право «АдминистрированиеДанных«.
Пробелы справа игнорируются!
Плюсы
- Возможно работать со значениями настроек других пользователей.
- Доступность: Сервер, толстый клиент, внешнее соединение.
Получение всех ключей настроек по ключу объекта
// Пример получения всех настроек по ключу объекта
КлючОбъекта = «MIKO»;
ВладелецНастроек = ИмяПользователя();
Попытка
// возвращает список значений
// элементы списка — ключи настроек
СтруктураНастроек = ХранилищеОбщихНастроек.ПолучитьСписок(КлючОбъекта, ВладелецНастроек);
Исключение
Сообщить(«Нет прав на восстановление настроек.»);
КонецПопытки;
Подведем итог
В рамках этой заметки я рассказал о двух вариантах работы с настройками пользователя. Пробуйте :).






Ключ объекта с русских букв МИКО перекочевал на английские MIKO
Мануал для новичков, лучше их лишний раз не путать 🙂
Спасибо! Поправил.
В типовых на основе БСП можно так:
(3) MaxS, Да и так можно. Настройки будут сохранены / восстановлены по имени текущего пользователя.
Обязательными являются только параметры «КлючОбъекта» и «Настройки«.
в УПП есть очень удобный механизм, реализованный через регистр сведений Сохраненные настройки, пользуюсь им, очень доволен. Вызов выглядит примерно так:
УниверсальныеМеханизмы.СохранениеНастроек(СтруктураНастройки);
УниверсальныеМеханизмы.ВосстановлениеНастроек(СтруктураНастройки);
Есть еще справочник Сохраненные настройки, но мне РС показался более удобным.
Плюсы: — можно сохранять для пользователей, для групп пользователей
— настройка прав, например, для групп сохранять настройки могут только Полные права
— легко посмотреть какие настройки есть в регистре и редактировать некоторые поля из записей регистра. (наименование, пользователь)
— есть флажки автосохранения и автозагрузки настроек, правда придется вызов соответствующих процедур прописывать явно в отчете.
— ключом является имя объекта, так что можно подменить один отчет другим, внешним например, лишь бы имена совпадали, они будут делить настройки. (с другой стороны это может быть минусом)
Ещё один метод и решение — , через файл
Ещё решение —
Мир этому дому!
Конструктивный подход — к вариантам автора добавились варианты с БСП, через использование регистра сведений, файл и т.д. Есть из чего выбирать. За статью плюс.
За статью (+).
Присоединяюсь к (5) — в УПП удобный механизм
Подскажите.
Попробовал 2-й метод, для внешней обработки (обычное приложение).
При вызове метода ХранилищеОбщихНастроек.Cохранить(… вываливается ошибка Метод объекта не обнаружен (Cохранить)
(9) uri1978, вроде с платформы 8,15 … у вас какая?
(9) uri1978, выложите текст примера.
(10) AnryMc, в данном случае проверена на 8.2.13 и старше
Платформа 8.2.18.82
Код (модуль объекта):
Показать
(13) uri1978,
сравните две строки (к примеру в табло)
Сохранить — это правильно
Cохранить — что то тут не так, не стал разбираться, скорее всего используются латинские символы
(13) uri1978, Рабочая процедура
(14) Поправьте как раз в вашей публикации («Сохранить» первый символ у вас латиница)
Ваиант 1 тоже желательно поправить)
А могу я сохранить в ХранилищеОбщихНастроек таблицу внешней обработки целиком? или нужно как-то построчно?
(3) Если сохранять настройки по такому принципу, то в роли имени настройки и значения что выступают?? Имени настройки и Значению настройки просто придумать строковые значения? Типа:
(18) У вас получилось в итоге сохранить сразу всю таблицу??
(19) Да, можно так, там ещё есть ключ настройки, можно в параметрах процедуры глянуть назначение.
В качестве ИмяНастройки желательно уникальное значение, например «МояОбработка.МояФорма»
(20) Пока отказался от идеи, но буду еще пробовать
А кто знает как сохранитьвосстановить в настройку выбранный в работе тип реквизита составного типа???
(22) Можно использовать события формы:
Показать
(24) Спасибо, попробую
Большое спасибо!
(23) выбранный тип реквизита — пустая ссылка, ничего же не изменилось? 🙂 Сохраняй да восстанавливай.