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

09.09.10

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

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

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

14.05.2025    5037    DeerCven    14    

57

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

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

21.05.2024    45316    dimanich70    83    

161

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

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

1 стартмани

18.03.2024    6717    6    John_d    13    

59

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

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

12.02.2024    55857    atdonya    31    

68

Универсальные функции Программист 1С v8.3 Бесплатно (free)

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

30.11.2023    8474    ke.92@mail.ru    17    

67

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    22430    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4598 03.09.09 16:30 Сейчас в теме
Хорошая идея. Сам делал подобное ещё в клюшечные времена.
2. AlexO 136 09.09.10 01:43 Сейчас в теме
А где тут "Внешний отчет, обработка для 1С" из заголовка?
И привязка к пользователю - не всегда хорошо. Есть ли какие-то более универсальные механизмя сохранения общих настроек различного типа (что в 8.1, что в 8.2), или нужно свой регистр создавать?
3. Evg-Lylyk 5205 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 849 11.04.14 18:37 Сейчас в теме
В 2010 году я решал через сохранение настройки во внешнем файле
http://infostart.ru/public/77702/
"Сохранение - восстановление настроек отчета через файл"
Позволяет сохранять и восстанавливать (переносить) настройки отчетов через внешний файл
Обработка «ВНЕШНЯЯ» в конфигурацию встраивать не надо, работает с любым «встроенным» в конфигурацию отчетом
Для отправки сообщения требуется регистрация/авторизация