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

12.09.23

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

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

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

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

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

 

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

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

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

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

 

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

 

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

 

 
 Код

 

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

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

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

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

См. также

БСП. Добавляем отчет в меню Отчеты

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

Добавим новый отчет в меню нового документа средствами БСП.

02.04.2024    3136    John_d    10    

89

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

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

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

28.12.2023    4982    mrXoxot    11    

100

Переоткрытие внешних обработок

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

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

30.11.2023    4105    ke.92@mail.ru    16    

62

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    9401    YA_418728146    6    

143

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2244    25    progmaster    8    

3

Многопоточное выполнение процедуры с помощью ДлительныеОперации

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

26.02.2023    8798    egoriy111    27    

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

Почему же не поможет? Все прекрасно в привилегированном режиме читается. А вот с установкой привилегированного режима в безопасном режиме да, есть свои "заморочки"
2. ixijixi 1796 23.11.20 09:48 Сейчас в теме
(1) С разных сторон заходил, ни разу не получилось, возможно дело было и правда в безопасном режиме. Буду признателен доп. информации
4. RocKeR_13 1321 23.11.20 09:51 Сейчас в теме
(2) Можно начать с того, что проверить, а устанавливается ли привилегированный режим у вас? У вас это происходит в рамках расширения, внешней обработки?
3. ABudnikov 3 23.11.20 09:48 Сейчас в теме
(1) Может поделитесь этими "заморочками" ?
5. RocKeR_13 1321 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 1796 23.11.20 21:56 Сейчас в теме
(6) Это отличный вариант, но столкнулся я с ним намного позже, чем отладил свой механизм)
user811769; +1 Ответить
9. DELOVOYDOM 15.01.24 05:08 Сейчас в теме
(7) Конфы типовые отраслевые 1с хранят общие настройки в константах. Я тоже там храню. Не очень понятно, зачем с Хранилищем мудрить? если сама 1с хранит в константах
10. ixijixi 1796 15.01.24 09:06 Сейчас в теме
(9) А еще в регистрах, в справочниках, в файлах и еще черти где) Чтобы хранить свои настройки в константах, надо сначала завести свои константы, а эта возможность далеко не всегда есть - база на поддержке или вообще в облаке. Поэтому выкручиваемся как кто может)
11. DELOVOYDOM 18.01.24 22:24 Сейчас в теме
(10) Все и везде переписали и переписывается на расширения. Никто уже давненько не правит типовую конфу по живому и не мучается с комплектами кастомных поставок и постановкой на поддержку от двух трех поставщиков. Одни плюсы, никаких минусов. Ну и отладка быстрее в разы иногда в десятки раз. За исключением задач и бизнес-процессов, но их не делают в расширении так как есть штатный объект в любой типовой, а в серьезных конфах карты бизнес-процессов хранятся во внешних источниках, редактируются проектным офисом в красивом веб интерфейсе и подгружаются в одну и ту же карту при визуализации процесса. Тем более задачи в конфе моветон создавать как разные метаданные, достаточно одного. Функция задачи это один клик.
Так что расширения уже с 21 платформы покрывают весь спектр. Создали в расширении константы для общих настроек и норм. Я именно написал про общие настройки, не про пользовательские
12. ixijixi 1796 19.01.24 08:54 Сейчас в теме
(11) Часть про облако Вы успешно проигнорировали) Штош, попробуйте ради разнообразия согласовать добавление во Fresh расширения с константами.

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

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

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

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


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