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

12.09.23

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

Делюсь еще одним не самым очевидным способом хранения настроек в базах на БСП без доработки конфигурации. Весь код в статье.

Платформа 1с8 предлагает неплохой функционал хранения настроек пользователя - хранилище настроек. Оно прекрасно справляется с сохранением данных настроек в автоматическом режиме. Пока это касается данных конкретного пользователя. Но что, если нужно хранить общие для всех пользователей настройки? Например дополнительные настройки номенклатуры, сотрудников, видов расчета? Тут у хранилища включается ограничение прав - прочитать настройки других пользователей можно лишь обладая правами "АдминистрированиеДанных". Даже включение привилегированного режима не поможет.

Можно воспользоваться функционалом дополнительных реквизитов и сведений. Или создавать свои объекты для хранения, например регистры сведений, благо с расширениями это стало гораздо проще. Или сохранять данные во внешние источники, файлы или таблицы. Все это работает, но не всегда возможно.

Я обычно использую иной путь. Он опробован на нескольких проектах, и несколько лет работает без единого сбоя как в файловых базах, так и клиент-серверных, как в среде Windows, так и Linux.

 

Что предлагается?

В конфигурациях на базе БСП есть отличная подсистема - "Варианты отчетов". Вот ее я и предлагаю использовать.

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

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

 

Весь код под спойлером. Его можно вынести в общий модуль, можно в модуль отчета/обработки. Выполняется весь код на сервере. Метод зарекомендовал себя отлично, решил поделиться с сообществом.

 

Всем удачного кодинга!

 

 
 Код

 

На тему БСП и смежные темы см. также публикации:

Получение контактной информации из отбора

СКД. Использование Менеджера временных таблиц в системе компоновки

ХранилищеОбщихНастроек ВариантыОтчетов настройки

См. также

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

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

21.05.2024    20128    dimanich70    81    

144

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Программист Стажер Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    6426    mrXoxot    11    

112

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

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

30.11.2023    5502    ke.92@mail.ru    16    

65
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RocKeR_13 1366 23.11.20 09:22 Сейчас в теме
прочитать настройки других пользователей можно лишь обладая правами "АдминистрированиеДанных". Даже включение привилегированного режима не поможет.

Почему же не поможет? Все прекрасно в привилегированном режиме читается. А вот с установкой привилегированного режима в безопасном режиме да, есть свои "заморочки"
2. ixijixi 1913 23.11.20 09:48 Сейчас в теме
(1) С разных сторон заходил, ни разу не получилось, возможно дело было и правда в безопасном режиме. Буду признателен доп. информации
4. RocKeR_13 1366 23.11.20 09:51 Сейчас в теме
(2) Можно начать с того, что проверить, а устанавливается ли привилегированный режим у вас? У вас это происходит в рамках расширения, внешней обработки?
3. ABudnikov 3 23.11.20 09:48 Сейчас в теме
(1) Может поделитесь этими "заморочками" ?
5. RocKeR_13 1366 23.11.20 09:54 Сейчас в теме
(3) Для внешней обработки можно, например, тут почитать:
https://1cfresh.com/articles/so_addprocess_fastaudit

3.5. Запрос разрешений для дополнительных отчетов и обработок

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

Запрашивайте в функции СведенияОВнешнейОбработке дополнительного отчета или обработки нужные разрешения с помощью вызовов функций:
РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты
РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса

Описания указанных выше функций см. по ссылке. Пример использования вызовов этих функций показан в обработке _ДемоЗагрузкаНоменклатурыИзПрайсЛистаПрофилиБезопасности из Демонстрационной конфигурации «Библиотека стандартных подсистем».
В функции СведенияОВнешнейОбработке дополнительного отчета или обработки указывайте режим работы дополнительного отчета или обработки Безопасный.


Для расширений в клиент-серверном варианте удалось в безопасном режиме установить привилегированный режим только при создании профиля безопасности и указания его для расширения. Код запроса разрешения приводил вот тут: https://forum.infostart.ru/forum29/topic222812/. Для файлового режима установка привилегированного режима в безопасном режиме в контексте расширения, похоже, невозможна, только снимать у расширения признак "Безопасный режим"
ABudnikov; Светлый ум; +2 Ответить
6. 6y6ka_gop 23.11.20 21:11 Сейчас в теме
Если уж завязываться на БСП, то почему бы не использовать безопасное хранилище данных?
user811769; Yashazz; +2 Ответить
7. ixijixi 1913 23.11.20 21:56 Сейчас в теме
(6) Это отличный вариант, но столкнулся я с ним намного позже, чем отладил свой механизм)
user811769; +1 Ответить
9. DELOVOYDOM 15.01.24 05:08 Сейчас в теме
(7) Конфы типовые отраслевые 1с хранят общие настройки в константах. Я тоже там храню. Не очень понятно, зачем с Хранилищем мудрить? если сама 1с хранит в константах
10. ixijixi 1913 15.01.24 09:06 Сейчас в теме
(9) А еще в регистрах, в справочниках, в файлах и еще черти где) Чтобы хранить свои настройки в константах, надо сначала завести свои константы, а эта возможность далеко не всегда есть - база на поддержке или вообще в облаке. Поэтому выкручиваемся как кто может)
11. DELOVOYDOM 18.01.24 22:24 Сейчас в теме
(10) Все и везде переписали и переписывается на расширения. Никто уже давненько не правит типовую конфу по живому и не мучается с комплектами кастомных поставок и постановкой на поддержку от двух трех поставщиков. Одни плюсы, никаких минусов. Ну и отладка быстрее в разы иногда в десятки раз. За исключением задач и бизнес-процессов, но их не делают в расширении так как есть штатный объект в любой типовой, а в серьезных конфах карты бизнес-процессов хранятся во внешних источниках, редактируются проектным офисом в красивом веб интерфейсе и подгружаются в одну и ту же карту при визуализации процесса. Тем более задачи в конфе моветон создавать как разные метаданные, достаточно одного. Функция задачи это один клик.
Так что расширения уже с 21 платформы покрывают весь спектр. Создали в расширении константы для общих настроек и норм. Я именно написал про общие настройки, не про пользовательские
12. ixijixi 1913 19.01.24 08:54 Сейчас в теме
(11) Часть про облако Вы успешно проигнорировали) Штош, попробуйте ради разнообразия согласовать добавление во Fresh расширения с константами.

А вообще спор на пустом месте. Каждая задача требует своего подхода, я вовсе не отрицаю возможность сохранения настроек в константах, я просто показал еще одну возможность сохранения настроек, когда например других вариантов нет.
8. mikl79 119 11.12.20 17:31 Сейчас в теме
я тоже использую Безопасное хранилище для общих данных
13. cdiamond 235 22.03.24 08:57 Сейчас в теме
Для общих настроек, производимых админом, нет вообще смысла плодить сущности и тащить багаж БСП, ведь всё делается одной строкой кода:

Процедура ЗаписатьНастройку(Ключ, Значение) Экспорт
    
    ХранилищеОбщихНастроек.Сохранить("РазработкаВасяна", Ключ, Значение,, "#ФейковыйЮзерНеСуществует");

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

Функция ПолучитьНастройку(Ключ) Экспорт
    
    УстановитьПривилегированныйРежим(Истина);
    Возврат ХранилищеОбщихНастроек.Загрузить("РазработкаВасяна", Ключ,, "#ФейковыйЮзерНеСуществует");
    
КонецФункции
Показать


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