Методы сохранения / восстановления настроек

22.04.13

Задачи пользователя - Адаптация типовых решений

Задача: Необходим механизм, позволяющий сохранять произвольные пользовательские данные (настройки). Настройки относятся к внешней обработке, вариант с изменением конфигурации не рассматривается. План видов характеристик трогать тоже нет желания.
В рамках заметки предложено два вариант работы с настройками пользователя.


Ваиант 1

Сохранение настроек:

    ИмяНастройки = "ТЕСТ";
   
ЗначениеНастройки = Новый Структура("Это настройки произвольного типа, к примеру структура", "");
   
СохранитьЗначение(ИмяНастройки, ЗначениеНастройки) ;

  • ИмяНастройки - ключ настроек, тип “строка”.
  • значение - значение произвольного типа, возможность заманчивая, но не стоит слишком увлекаться и сохранять все подряд.

Восстановление настроек:

    ИмяНастройки = "ТЕСТ";
   
ЗначениеНастройки = ВосстановитьЗначение(ИмяНастройки);
    Если
ЗначениеНастройки = Неопределено Тогда
       
Сообщить("Нет настройки с ключем ТЕСТ!");
    КонецЕсли;

  • ИмяНастройки - ключ настройки, тип “строка”
  • возвращает значение произвольного типа, сохраненное ранее.Если восстановить не удалось, возвращает “Неопределено”
Плюсы
  • прост в использовании
  • возможно сохранить настройки произвольного типа текущего пользователя в текущей информационной базе
Минусы
  • Только толстый клиент

  • Возможно работать ТОЛЬКО с настройками текущего пользователя

Вариант 2

Использование объекта ХранилищеОбщихНастроекСчитаю этот вариант наиболее удобным и гибким.

Объект доступен в глобальном контексте. Содержит следующие методы:

Сохранение настроек: 

    // ключи могут быть произвольными строками
   
КлючОбъекта  = "MIKO";
   
КлючНастроек = "ПанельТелефонии";
   
// настройки могут быть произвольного типа
   
Настройки    = Новый Структура("Это настройки произвольного типа, к примеру структура", "");
   
ИмяПользователя = ИмяПользователя();

   
// имя пользователя - пользователь владелец настроек, если параметр не указать,
    // то настройки будут сохранены для ТЕКУЩЕГО пользователя
   
ИмяПользователя = ИмяПользователя();
   
ХранилищеОбщихНастроек.Cохранить(КлючОбъектаКлючНастроек, Настройки, , ИмяПользователя);

Под пользователем понимается именно пользователь информационной базы! Пример получения имени текущего пользователя:

    // получим имя
   
ИмяТекущегоПользователя = ИмяПользователя();
   
// в типовых конфигурация используется справочник "Пользователи"
    // в этом справочнике в стандартном реквизите "Код" обычно
    // хранят информацию по имени пользователя, пример получения имени:
   
ИмяПользователя = Справочники.Пользователи.НайтиПоНаименованию("Администратор").Код;
   
// обычно "Код", для этого справочника - строка фиксированной длинны, потому вероятно разумно обрезать пробелы справа:
   
ИмяПользователя = СокрП(ИмяПользователя);

Восстановление настроек: 

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

    Если
СтруктураНастроек = Неопределено Тогда
       
Сообщить("Не вышло восстановить настройки!");
    КонецЕсли;

ВладелецНастроек - это имя пользователя, владельца настроек. Параметр очень важный. 

Настройки других пользователей могут получать ТОЛЬКО пользователи с расширенными правами.

Необходимо право "АдминистрированиеДанных".

Пробелы справа игнорируются!


Плюсы
  • Возможно работать со значениями настроек других пользователей.
  • Доступность: Сервер, толстый клиент, внешнее соединение.

Получение всех ключей настроек по ключу объекта  

    // Пример получения всех настроек по ключу объекта
   
КлючОбъекта = "MIKO";
   
ВладелецНастроек = ИмяПользователя();
    Попытка
       
// возвращает список значений
        // элементы списка - ключи настроек
       
СтруктураНастроек = ХранилищеОбщихНастроек.ПолучитьСписок(КлючОбъекта, ВладелецНастроек);
    Исключение
       
Сообщить("Нет прав на восстановление настроек.");
    КонецПопытки;

Подведем итог

В рамках этой заметки я рассказал о двух вариантах работы с настройками пользователя. Пробуйте :).

 


INFOSTART DataFormWizard: управление данными и формами в 1С 8.3

Решение INFOSTART DataFormWizard обеспечивает проверки ввода данных, скрывает от пользователя недоступную информацию и выполняет код в обработчиках — без изменения конфигурации. Легко устанавливается и работает практически с любой конфигурацией на управляемых формах.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Адаптация типовых решений 1С:Предприятие 8 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

32330 руб.

29.06.2023    11355    34    15    

41

Печатные формы Адаптация типовых решений Бухгалтер Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с соответствующими именами, при выводе на печать в размещённые картинки будут выводиться факсимиле из прикреплённых рисунков. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

5500 руб.

07.02.2023    12181    114    20    

70

Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)

Разработка "Дизайнер форм 1С" реализована в виде расширения 1С и является универсальным инструментом для разработки прототипа форм с целью демонстраций, технических заданий и т.д. Без участия разработчика с возможностью экспорта в файл внешней обработки и генерации формы используя искусственный интеллект.

36600 руб.

28.08.2025    6532    2    2    

6

Адаптация типовых решений 1С 8.3 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Беларусь Россия Платные (руб)

Расширение "Дополнительные документы" предназначено для создания дополнительных документов различного назначения, как форм для внесения данных так и печатных форм в расширяемой конфигурации пользовательскими средствами, без работы в конфигураторе и внесения изменений в структуру данных. Тестировалось для "1С:БП", "1С:УНФ","1С:КА"

21859 руб.

29.12.2025    848    1    8    

2

Банковские операции Адаптация типовых решений Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Решение позволяет автоматически заполнять отдельные реквизиты загружаемых банковских документов, основываясь на известных значениях реквизитов и тексте назначения платежа. Простая настройка, широкие возможности анализа назначения платежа без написания кода и сложных шаблонов.

9760 руб.

17.06.2025    2747    8    0    

8

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Расширение для УНФ, чтобы автоматически отменять старые резервы и не мешалть эффективно продавать.

9150 руб.

02.08.2023    7619    25    5    

41

Адаптация типовых решений 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Расширение для вывода информации об остатках и ценах номенклатуры в форме списка и выбора номенклатуры. (УТ 11, КА 2, ERP). Позволяет получать информацию о ценах, остатках и доступности в разрезе складов и характеристик номенклатуры, информацию по документам резерва.

7930 руб.

16.10.2025    918    1    0    

1
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ITEkb 17.04.13 07:43 Сейчас в теме
Ключ объекта с русских букв МИКО перекочевал на английские MIKO
Мануал для новичков, лучше их лишний раз не путать :)
2. boffart 300 17.04.13 08:58 Сейчас в теме
Спасибо! Поправил.
3. MaxS 3099 17.04.13 11:30 Сейчас в теме
В типовых на основе БСП можно так:
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ИмяНастройки , , ЗначениеНастройки);
ЗначениеНастройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(ИмяНастройки );
Spacer; snabservic; sizeoff; abasovit; cheshirshik; tolyan_ekb; almierm; Никулин Леонид; tdml; SagittariusA; Merkalov; marku; Sardukar; korppinen; belyakooov; Windsor77; zoikins; zaic; i.c.h; Elvira_Saydasheva; son_leon; OLDMVN; olezhe; Basil_Kudinov; FlyBird; improg; magv; 3sf; adhocprog; bendarik; jif; alexshtenn; Suslid; tuprikov; json; +35 Ответить
4. boffart 300 17.04.13 12:36 Сейчас в теме
(3) MaxS, Да и так можно. Настройки будут сохранены / восстановлены по имени текущего пользователя.
Обязательными являются только параметры "КлючОбъекта" и "Настройки".
19. Johney20 26.03.18 12:51 Сейчас в теме
(3) Если сохранять настройки по такому принципу, то в роли имени настройки и значения что выступают?? Имени настройки и Значению настройки просто придумать строковые значения? Типа:

ИмяНастройки = "Отбор"
ЗначениеНастройки = "Сохранение отбора"

21. MaxS 3099 26.03.18 12:55 Сейчас в теме
(19) Да, можно так, там ещё есть ключ настройки, можно в параметрах процедуры глянуть назначение.
В качестве ИмяНастройки желательно уникальное значение, например "МояОбработка.МояФорма"
31. improg 752 30.06.21 13:55 Сейчас в теме
(3) Спасибо помогло, у меня такой вариант:

сохранение

	
КлючОбъекта  = "КлючОбъекта"; //вот тут надо что-то прописать, параметр обязательный
	КлючНастроек = "КлючНастроек";
	Настройки    = Новый Структура;
	Настройки.Вставить("Организация",Отчет.Организация);
	Настройки.Вставить("ДатаНач",Отчет.ДатаНач);
	Настройки.Вставить("ДатаКон",Отчет.ДатаКон);
	ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(КлючОбъекта, КлючНастроек, Настройки,,ИмяПользователя());
Показать


загрузка

	
СтруктураОбщихПараметров = Неопределено;
СтруктураОбщихПараметров = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("КлючОбъекта", "КлючНастроек", , , ИмяПользователя());
	Если ТипЗнч(СтруктураОбщихПараметров) = Тип("Структура") Тогда
		СтруктураОбщихПараметров.Свойство("Организация", Отчет.Организация);
		СтруктураОбщихПараметров.Свойство("ДатаНач", Отчет.ДатаНач);
		СтруктураОбщихПараметров.Свойство("ДатаКон", Отчет.ДатаКон);
	КонецЕсли;
Показать
Sardukar; +1 Ответить
5. Synoecium 793 17.04.13 14:10 Сейчас в теме
в УПП есть очень удобный механизм, реализованный через регистр сведений Сохраненные настройки, пользуюсь им, очень доволен. Вызов выглядит примерно так:
УниверсальныеМеханизмы.СохранениеНастроек(СтруктураНастройки);
УниверсальныеМеханизмы.ВосстановлениеНастроек(СтруктураНастройки);

Есть еще справочник Сохраненные настройки, но мне РС показался более удобным.

Плюсы: - можно сохранять для пользователей, для групп пользователей
- настройка прав, например, для групп сохранять настройки могут только Полные права
- легко посмотреть какие настройки есть в регистре и редактировать некоторые поля из записей регистра. (наименование, пользователь)
- есть флажки автосохранения и автозагрузки настроек, правда придется вызов соответствующих процедур прописывать явно в отчете.
- ключом является имя объекта, так что можно подменить один отчет другим, внешним например, лишь бы имена совпадали, они будут делить настройки. (с другой стороны это может быть минусом)
aleksey2; DiGanis; BarsukM; rname; Asfiry; itriot11; JohnyDeath; alexinzaz; json; Zircool; boffart; +11 Ответить
8. nataon 23.04.13 16:19 Сейчас в теме
За статью (+).
Присоединяюсь к (5) - в УПП удобный механизм
6. AnryMc 851 18.04.13 10:55 Сейчас в теме
Ещё один метод и решение - http://infostart.ru/public/77702/ , через файл

Ещё решение - http://infostart.ru/public/150007/
aleksey2; aguriev; +2 Ответить
7. LexSeIch 212 22.04.13 07:16 Сейчас в теме
Мир этому дому!
Конструктивный подход - к вариантам автора добавились варианты с БСП, через использование регистра сведений, файл и т.д. Есть из чего выбирать. За статью плюс.
9. uri1978 138 28.05.13 18:32 Сейчас в теме
Подскажите.
Попробовал 2-й метод, для внешней обработки (обычное приложение).
При вызове метода ХранилищеОбщихНастроек.Cохранить(... вываливается ошибка Метод объекта не обнаружен (Cохранить)
10. AnryMc 851 28.05.13 22:50 Сейчас в теме
(9) uri1978, вроде с платформы 8,15 ... у вас какая?
12. boffart 300 28.05.13 23:00 Сейчас в теме
(10) AnryMc, в данном случае проверена на 8.2.13 и старше
11. boffart 300 28.05.13 22:59 Сейчас в теме
(9) uri1978, выложите текст примера.
13. uri1978 138 29.05.13 09:42 Сейчас в теме
Платформа 8.2.18.82
Код (модуль объекта):
Процедура СохранитьНастройки() Экспорт

	//Сохраним все реквизиты обработки
	РеквизитыОбработки = ЭтотОбъект.Метаданные().Реквизиты;
	
	Для каждого Реквизит из РеквизитыОбработки Цикл
		
		 ХранилищеСистемныхНастроек.Cохранить(Реквизит.Имя,  ЭтотОбъект.Метаданные().Имя, ЭтотОбъект[Реквизит.Имя],,ИмяПользователя());

	КонецЦикла;

КонецПроцедуры // СохранитьНастройки()
Показать
alex_zemlyansky; +1 Ответить
14. boffart 300 18.06.13 18:04 Сейчас в теме
(13) uri1978,
сравните две строки (к примеру в табло)
Сохранить - это правильно
Cохранить - что то тут не так, не стал разбираться, скорее всего используются латинские символы
16. kraynev-navi 699 27.03.14 09:27 Сейчас в теме
(14) Поправьте как раз в вашей публикации ("Сохранить" первый символ у вас латиница)
3man001; SergMuravev; BoryaMbi; 7OH; Mi4man; Spacer; +6 Ответить
15. boffart 300 18.06.13 18:05 Сейчас в теме
(13) uri1978, Рабочая процедура

Процедура СохранитьНастройки() Экспорт
   //Сохраним все реквизиты обработки
   РеквизитыОбработки = ЭтотОбъект.Метаданные().Реквизиты;
   
   Для каждого Реквизит из РеквизитыОбработки Цикл
	   ХранилищеОбщихНастроек.Сохранить(Реквизит.Имя,"", ЭтотОбъект[Реквизит.Имя],,ИмяПользователя());
   КонецЦикла;
КонецПроцедуры // СохранитьНастройки()
FlyBird; alex_zemlyansky; Светлый ум; +3 Ответить
28. SergMuravev 880 24.11.20 01:54 Сейчас в теме
(15)
Сохранить


Поправьте, пожалуйста, в самой публикации. Люди до сих пор мучаются ) Комментарии не всегда время есть читать.
itoptimum; +1 Ответить
17. NN2P 422 19.04.17 12:46 Сейчас в теме
Ваиант 1 тоже желательно поправить)
18. EvgeniyNP 07.02.18 15:36 Сейчас в теме
А могу я сохранить в ХранилищеОбщихНастроек таблицу внешней обработки целиком? или нужно как-то построчно?
20. Johney20 26.03.18 12:54 Сейчас в теме
(18) У вас получилось в итоге сохранить сразу всю таблицу??
22. EvgeniyNP 28.03.18 10:43 Сейчас в теме
(20) Пока отказался от идеи, но буду еще пробовать
24. Boundless 19 06.05.18 23:22 Сейчас в теме
(22) Можно использовать события формы:
&НаСервере
Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)	
	Настройки.Вставить("ТЧ", Объект.ТЧ.Выгрузить());
КонецПроцедуры

&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
	Объект.ТЧ.Загрузить(Настройки.Получить("ТЧ"));	
КонецПроцедуры
Показать
25. EvgeniyNP 10.05.18 17:37 Сейчас в теме
(24) Спасибо, попробую
23. mrm1212 38 19.04.18 08:32 Сейчас в теме
А кто знает как сохранить\восстановить в настройку выбранный в работе тип реквизита составного типа???
27. redtram 50 08.10.19 19:01 Сейчас в теме
(23) выбранный тип реквизита - пустая ссылка, ничего же не изменилось? :) Сохраняй да восстанавливай.
26. Yaga_2011 5 09.07.19 16:39 Сейчас в теме
29. r_aleksander 13.01.21 09:38 Сейчас в теме
Код ниже - не рабочий! Ключ структуры не божет быть указанного вида!
Настройки = Новый Структура("Это настройки произвольного типа, к примеру структура", "");
user645801_yyyuuu123q; +1 Ответить
33. user645801_yyyuuu123q 22.11.22 09:57 Сейчас в теме
(29) Это просто рыба.
Структура может быть любого вида Новый Структура("Ключ",НашеЗначение тип);
30. ixijixi 2134 05.03.21 09:11 Сейчас в теме
Еще вариант сохранения, только для конфигураций на БСП: https://infostart.ru/public/1330558/
32. pyrkin_vanya 504 08.10.21 11:26 Сейчас в теме
А как сохранить настройки под любым пользователем, а восстановить при выполнении регламентного задания?
aleksey2; belyakooov; Nemo74; SagittariusA; serpentweb; denis83; +6 Ответить
34. odinsmot 25.07.23 05:57 Сейчас в теме
(32) ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище, ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища
ryutao; link_l; +2 Ответить
Для отправки сообщения требуется регистрация/авторизация