Хранение значений (настроек) 8.1

09.09.10

Разработка - Универсальные функции

Более универсальные функции СохранитьЗначение/ВосстановитьЗначение

Стандартные механизмы сохранения пользовательских данных ("настроек") имеют недостатки:

1. Работают только на компьютере пользователя (т.к. хранятся в папке пользователя, а не в базе)

2. Настройки теряются при динамическом обновлении или смене компьютера

в 8.2 эта проблема решена механизмом платформы

для 8.1 используются встроенные в типовые конфигурации механизмы хранения (регистр сведений "СохраненныеНастройки") для создания более универсальных функций сохранения настроек и сохранения универсальности приходится проверять, какие методы доступны и использовать оптимальные (код ниже)

Интерфейсы использования функций такие же, как и у СохранитьЗначение/ВосстановитьЗначение принцип действия прост, если доступны методы сохранения типовых конфигураций 1С используются они иначе платформенные

Фунции гл_ВосстановитьЗначение; гл_СохранитьЗначение - замена СохранитьЗначение;ВосстановитьЗначение, ТекущийПользовательВСправочникеПользователи; НеДоступныМеханизмыСохраненияНастроекВКонфигурации - вспомогательные

Процедура гл_СохранитьЗначение(ИмяНастройки, ЗначениеНастройки) Экспорт

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

       
НаборЗаписей = РегистрыСведений.СохраненныеНастройки.СоздатьНаборЗаписей();

       
//Установка отборов
       
НаборЗаписей.Отбор.Пользователь.Установить(ТекПользовательВСправочнике);
       
НаборЗаписей.Отбор.ИмяОбъекта.Установить(ИмяНастройки);

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

КонецПроцедуры

Функция
гл_ВосстановитьЗначение(ИмяНастройки) Экспорт

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

        Если
Результат.Пустой() Тогда
            Возврат Неопределено;
        Иначе
           
СохраненноеЗначениеХранилище = Результат.Выгрузить()[0].СохраненнаяНастройка;
            Возврат
СохраненноеЗначениеХранилище.Получить();
        КонецЕсли;
    КонецЕсли;

КонецФункции

Функция
ТекущийПользовательВСправочникеПользователи()

   
ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
   
ИмяТекущегоПользователя = ? (ПустаяСтрока(ТекущийПользователь), "НеАвторизован", ТекущийПользователь);

    Возврат
Справочники.Пользователи.НайтиПоКоду(ИмяТекущегоПользователя);

КонецФункции

Функция
НедоступныМеханизмыСохраненияНастроекВКонфигурации()

   
//Для доступности сохранения в конфигурация... должны присутствовать регистр сведений СохраненныеНастройки и справочник Пользователи
   
Возврат (   Метаданные.РегистрыСведений.Найти("СохраненныеНастройки") = Неопределено ИЛИ
               
Метаданные.Справочники.Найти("Пользователи") = Неопределено);

КонецФункции

p.s. Приходилось не раз использовать т.к. стадартные функции не сохраняют в ИБ, а механизмы типовых не универсальны

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

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3553    Abysswalker    9    

45

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    6572    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    49297    dimanich70    83    

170

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7369    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    61798    atdonya    31    

70

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9176    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4601 03.09.09 16:30 Сейчас в теме
Хорошая идея. Сам делал подобное ещё в клюшечные времена.
2. AlexO 136 09.09.10 01:43 Сейчас в теме
А где тут "Внешний отчет, обработка для 1С" из заголовка?
И привязка к пользователю - не всегда хорошо. Есть ли какие-то более универсальные механизмя сохранения общих настроек различного типа (что в 8.1, что в 8.2), или нужно свой регистр создавать?
3. Evg-Lylyk 5246 09.09.10 11:34 Сейчас в теме
(2)
А где тут "Внешний отчет, обработка для 1С" из заголовка?

поправил
В типовых конфигурациях 8.1 есть нужный регистр "СохраненныеНастройки"
Настройки обычно для каждого польз. свои (т.е. каждый настраивает как ему нужно) иначе лучше использ. другие механизмы например, "Константы"
В 8.2 есть механизм настроек (они теперь хранятся в базе ) и данный алгоритм не актуален для 8.2
Ответил так как понял ... вопрос задан оторвано от задачи. Что за настройки что сохраняют?
4. Dr.ZIG 27 20.09.10 08:33 Сейчас в теме
Как раз задачка у мя есть - у пользователя слетают настройки отчётов при вылете 1Ски. Попробую реализовать через регистр. Плюс авансом, надеюсь работать будет =)
5. пользователь 22.09.10 10:25
Сообщение было скрыто модератором.
...
6. пользователь 22.09.10 10:26
Сообщение было скрыто модератором.
...
7. MrVesna 20 02.05.12 22:05 Сейчас в теме
Если у пользователя нет соответствующих прав, то выскакивает ошибка: Недостаточно прав для работы с таблицей "РегистрСведений.СохраненныеНастройки". В основном правами для изменения и редактирования этого регистра обладает Администратор с полными правами (в БП 8.2 еще и Бухгалтер), т.е. список пользователей не велик! Придется предоставлять Пользователям полные права, что нехорошо.
8. AlexanderKai 11.04.14 17:54 Сейчас в теме
(7) MrVesna,
Зачем им предоставлять полные права? Предоставь просто права на этот регистр сведений.
9. AnryMc 850 11.04.14 18:37 Сейчас в теме
В 2010 году я решал через сохранение настройки во внешнем файле
http://infostart.ru/public/77702/
"Сохранение - восстановление настроек отчета через файл"
Позволяет сохранять и восстанавливать (переносить) настройки отчетов через внешний файл
Обработка «ВНЕШНЯЯ» в конфигурацию встраивать не надо, работает с любым «встроенным» в конфигурацию отчетом
Для отправки сообщения требуется регистрация/авторизация