Вариант организации хранения настроек подсистем

Публикация № 1538773 22.10.21

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

В статье опишу вариант хранения настроек используемый мной при реализации функциональных блоков

Вводные

  • При создании функционального блока нужно зафиксировать его настройки
  • Доработки производятся в расширении

 

Вариант решения

Хранить настройки в одном служебном регистре, для нормализации использовать обработки.

 

Структура РС НастройкиПодсистемы

  • Измерения
    • Настройка - Строка(50)
    • Подсистема - Строка(50)
  • Ресурсы
    • ХранилищеЗначения - ХранилищеЗначения

 

Общий модуль "НастройкиПодсистемПовтИсп"

// Возвращает обработку с заполненными настройками подсистемы
// Параметры
//  Подсистема - Строка
// Результат Обработка, при отсутствии Неопределено
Функция ПолучитьНастройки(ИмяПодсистемы) Экспорт
	
	Результат = Неопределено;
	
	Попытка
		Результат = Обработки["НастройкиПодсистемы_" + ИмяПодсистемы].Создать();	
	Исключение
		ОбщегоНазначения.Лог(СтрШаблон("ПолучениеНастроек.СозданиеОбработки.%1", ИмяПодсистемы), ОписаниеОшибки(),, Истина);
		Отказ = Истина;
	КонецПопытки;
	
	Если Результат <> Неопределено Тогда
		НастройкиПодсистем.ПолучитьНастройки(Результат);
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

 

Общий модуль "НастройкиПодсистем"


Процедура ЗаписатьНастройки(обОбработка) Экспорт
	
	НаборЗаписей = РегистрыСведений.НастройкиПодсистемы.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Подсистема.Установить(обОбработка.ПолучитьИмяПодсистемы());
	
	Для Каждого Реквизит Из обОбработка.Метаданные().Реквизиты Цикл
		
		Запись = НаборЗаписей.Добавить();
		Запись.Подсистема = обОбработка.ПолучитьИмяПодсистемы();
		Запись.Настройка = Реквизит.Имя;
		Запись.ХранилищеЗначения = Новый ХранилищеЗначения(обОбработка[Реквизит.Имя]);
		
	КонецЦикла;
	
	Для Каждого ТабличнаяЧасть Из обОбработка.Метаданные().ТабличныеЧасти Цикл
		
		Запись = НаборЗаписей.Добавить();
		Запись.Подсистема = обОбработка.ПолучитьИмяПодсистемы();
		Запись.Настройка = "ТЧ_" + ТабличнаяЧасть.Имя;
		Запись.ХранилищеЗначения = Новый ХранилищеЗначения(обОбработка[ТабличнаяЧасть.Имя].Выгрузить());
		
	КонецЦикла;
	
	НаборЗаписей.Записать(Истина);
	
	ОбновитьПовторноИспользуемыеЗначения();
	
КонецПроцедуры

Процедура ПолучитьНастройки(обОбработка) Экспорт
	
	Подсистема = обОбработка.ПолучитьИмяПодсистемы();
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	НастройкиПодсистемы.Настройка КАК Настройка,
	|	НастройкиПодсистемы.ХранилищеЗначения КАК ХранилищеЗначения
	|ИЗ
	|	РегистрСведений.НастройкиПодсистемы КАК НастройкиПодсистемы
	|ГДЕ
	|	НастройкиПодсистемы.Подсистема = &Подсистема";
	
	Запрос.УстановитьПараметр("Подсистема", Подсистема);
	ТЗ = Запрос.Выполнить().Выгрузить();
	Для Каждого Реквизит Из обОбработка.Метаданные().Реквизиты Цикл
		нСтроки = ТЗ.НайтиСтроки(Новый Структура("Настройка", Реквизит.Имя));
		Если нСтроки.Количество() = 0 Тогда
			Продолжить;
		КонецЕсли;
		
		обОбработка[Реквизит.Имя] = нСтроки[0].ХранилищеЗначения.Получить();	
		
	КонецЦикла;
	
	Для Каждого ТабличнаяЧасть Из обОбработка.Метаданные().ТабличныеЧасти Цикл
		нСтроки = ТЗ.НайтиСтроки(Новый Структура("Настройка", "ТЧ_" + ТабличнаяЧасть.Имя));
		Если нСтроки.Количество() = 0 Тогда
			Продолжить;
		КонецЕсли;
		
		Значение = нСтроки[0].ХранилищеЗначения.Получить();
		
		Попытка
			обОбработка[ТабличнаяЧасть.Имя].Загрузить(Значение);
		Исключение
			ОбщегоНазначения.Лог(СтрШаблон("НастройкиПодсистемы.ПолучениеИзРС.%1.%2", Подсистема, ТабличнаяЧасть.Имя), ОписаниеОшибки());
		КонецПопытки;
	КонецЦикла;
	
КонецПроцедуры

 

Модуль Формы обработки настроек

&НаКлиенте
Процедура ЗаписатьНастройки(Команда)
	ЗаписатьНастройкиНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаписатьНастройкиНаСервере()
	обОбработка = РеквизитФормыВЗначение("Объект");
	обобработка.ЗаписатьНастройки();
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	обОбработка = РеквизитФормыВЗначение("Объект");
	обобработка.ПолучитьНастройки();
	ЗначениеВРеквизитФормы(обОбработка, "Объект");
КонецПроцедуры

 

Модуль объекта обработки

Функция ПолучитьИмяПодсистемы() Экспорт
	Возврат "DataLens";
КонецФункции

Процедура ЗаписатьНастройки() Экспорт
	НастройкиПодсистем.ЗаписатьНастройки(ЭтотОбъект);
КонецПроцедуры

Процедура ПолучитьНастройки() Экспорт
	НастройкиПодсистем.ПолучитьНастройки(ЭтотОбъект);
КонецПроцедуры

 

Пример использования

Создаю в расширении обработку "НастройкиПодсистемы_ДаДата", в модуле объекта изменяю 

Функция ПолучитьИмяПодсистемы() Экспорт
	Возврат "ДаДата";
КонецФункции

В обработку "НастройкиПодсистемы_ДаДата" добавляю реквизиты "ИспользованиеСервиса" - Булево и КлючДоступа - Строка (50), вывожу на форму обработки.

 

В модуле подсистемы использую

НастройкиПодсистемы = НастройкиПодсистемПовтИсп.ПолучитьНастройки("ДаДата");

СоответствиеОтвет = Новый Соответствие;

Если НЕ НастройкиПодсистемы.ИспользованиеСервиса Тогда
    Возврат СоответствиеОтвет;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Заголовки", Новый Соответствие);
ДополнительныеПараметры.Заголовки.Вставить("Content-type", "application/json");
ДополнительныеПараметры.Заголовки.Вставить("Accept", "application/json");
ДополнительныеПараметры.Заголовки.Вставить("Authorization", "Token " + НастройкиПодсистемы.КлючДоступа);

ДанныеОтвет = КоннекторHTTP.Post("https://suggestions.dadata.ru" + АдресРесурса, СтрокаДанные, ДополнительныеПараметры);
	

Итог

Без изменения структуры (если РС уже создан) возможно добавлять необходимые настройки.

Как сделать универсальную валидацию не придумал, проверяю на уровне модуля подсистемы.

 

Благодарю за внимание.

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Рейтинг 1-го уровня
1. artbear 1387 22.10.21 11:59 Сейчас в теме
(0) Наверное, что-то интересное, но без примера пока непонятно )

>для нормализации использовать обработки.

Расшифруй эту фразу

вижу, что обработка используется, ее форма, заполняются реквиизиты.

но как в дальнейшем эта обработка используется, не показано.
2. malikov_pro 986 22.10.21 12:24 Сейчас в теме
(1) В моем понимании нормализация это приведение необходимым типам, если в обработке сменился тип, то после загрузки из РС будет "ПустаяСсылка", сайдэффектом может быть преобразованное к строке значение по ссылке.
"но как в дальнейшем эта обработка используется, не показано." - обновил статью.

Так же нормально не решен вопрос по безопасности - буду рад варианту решения.
3. pm74 209 22.10.21 13:25 Сейчас в теме
что понимается под подсистемой? если речь про расширение , то есть такое решениие,
правда для добавления/изменения настройки нужно добавить ее описание в коде расширения
4. malikov_pro 986 22.10.21 13:30 Сейчас в теме
(3) Функциональный блок, пример из проекта на скриншоте во вложении
Прикрепленные файлы:
5. malikov_pro 986 22.10.21 13:45 Сейчас в теме
Вариант решения подобной задачи с использованием БСП https://infostart.ru/1c/articles/1243789/
Оставьте свое сообщение

См. также

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо

Практика программирования v8 Бесплатно (free)

В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.

12.12.2020    5264    Eugen-S    24    

СКД: 5 советов, как сделать лучше

Практика программирования v8 v8::СКД 8.3.14 Бесплатно (free)

Несколько примеров решения задач с использованием разных подходов

27.10.2021    5656    Neti    19    

Полезные примеры СКД, ч.2

Практика программирования v8 v8::СКД Бесплатно (free)

Еще несколько примеров решения задач в СКД.

06.04.2021    11888    Neti    8    

Неочевидные нюансы записи управляемой формы

Практика программирования v8 v8::УФ Платформа 1C v8.2 1cv8.cf Бесплатно (free)

Разберем несколько нюансов записи управляемой формы.

02.04.2021    14649    SeiOkami    54    

Использование классов .Net в 1С для новичков Промо

Разработка внешних компонент Универсальные функции Практика программирования v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    86781    Serginio    116    

Обзор полезных методов БСП 3.1.4

БСП (Библиотека стандартных подсистем) Практика программирования v8 1cv8.cf Бесплатно (free)

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

25.03.2021    47368    rayastar    53    

Звуковое управление в 1С 8.3

Практика программирования v8 1cv8.cf Бесплатно (free)

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021    7683    velemir    33    

Доработка проведения в ERP 2.5. (Регистры накопления, Регистры сведений)

Практика программирования v8 ERP2 БУ Бесплатно (free)

Покажу точки входа для доработки "типового" проведения документов в ERP для регистров оперативного учета. Рассмотрим три основные ситуации: нужно изменить имеющееся проведение документа; нужно сделать записи в существующие регистры; нужно с нуля описать алгоритм проведения в добавленный регистр. Пример реализован на 1С:ERP Управление предприятием 2 (2.5.4.120)

10.01.2021    12003    BuriyLesha    10    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    41377    unichkin    74    

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions

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

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    9433    comol    31    

Базовые вещи БСП, которые облегчат жизнь программисту 1С

БСП (Библиотека стандартных подсистем) Практика программирования v8 1cv8.cf Россия Бесплатно (free)

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

30.08.2020    21776    quazare    34    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    36719    tormozit    107    

Форма выбора (подбор) в управляемых формах

Практика программирования v8 v8::УФ 1cv8.cf Россия Бесплатно (free)

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

08.05.2020    89391    user5300    28    

Конвертация расширения cfe в конфигурацию сf руками

Практика программирования v8 1cv8.cf Бесплатно (free)

Как быстро преобразовать расширение в конфигурацию (для дальнейшего переноса в основную конфигурацию, например).

18.03.2020    11656    wtlz    35    

Эволюция расширения конфигурации

Практика программирования v8 1cv8.cf Бесплатно (free)

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

06.02.2020    16419    Xershi    47    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

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

20.09.2012    83225    tormozit    131    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    70599    ids79    27    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    46017    John_d    22    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    37965    kuzyara    38    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    55170    tormozit    51    

Сходство Джаро - Винклера. Нечеткое сравнение строк

Универсальные функции v8 Россия Бесплатно (free)

В области информатики и статистики сходство Джаро - Винклера представляет собой меру схожести строк для измерения расстояния между двумя последовательностями символов. В публикации рассмотрены некоторые особенности алгоритма, и представлен вариант его реализации на языке 1С.

25.12.2019    8804    brooho    19    

30 задач. Странных и не очень

Практика программирования v8 Бесплатно (free)

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    25792    YPermitin    63    

Обновление релиза измененной типовой конфигурации

Практика программирования v8 1cv8.cf Бесплатно (free)

Пригодится тем, кому еще не приходилось обновлять измененную типовую конфигурацию.

29.11.2019    16019    John_d    76    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    51948    tormozit    74    

Как передать IP адрес, который вызвал HTTP запрос в 1C (для веб-сервера Apache)

Практика программирования v8 Бесплатно (free)

Столкнулся с задачей получения IP адреса, который вызывает http сервис 1С. Итак, решение:

22.11.2019    13236    Sibars    19    

Шпаргалка (БСП). Добавление в новый документ механизма печати дополнительных печатных форм

Практика программирования v8 1cv8.cf Бесплатно (free)

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

10.10.2019    32736    John_d    21    

Полезные процедуры и функции для программиста

Универсальные функции v8 1cv8.cf Россия Бесплатно (free)

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

07.10.2019    40942    HostHost    41    

Выгрузка документа по условию Промо

Практика программирования v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    18181    m-rv    3    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    55625    Yashazz    56    

[Шпаргалка] Программное создание элементов формы

Работа с интерфейсом Практика программирования v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    111435    rpgshnik    77    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    82034    ids79    56    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования v8 Бесплатно (free)

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

16.04.2019    23619    m-rv    18    

Регистры бухгалтерии. Общая информация

Математика и алгоритмы Практика программирования v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    48926    YPermitin    27    

Три костыля. Сказ про фокусы в коде

Практика программирования v8 Бесплатно (free)

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    30654    YPermitin    81    

Отслеживание выполнения фонового задания

Практика программирования v8 1cv8.cf Бесплатно (free)

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    46643    ids79    22    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    37884    m-rv    23    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    162490    ids79    77    

Фоновое выполнение кода в 1С - это просто

Практика программирования v8 1cv8.cf Бесплатно (free)

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019    64183    avalakh    27    

Разбираемся с параметрами редактирования СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    44624    json    17    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

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

05.12.2017    30974    itriot11    34    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    111828    ids79    18    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    50168    ids79    27    

Регистры сведений. За кулисами

Практика программирования v8 1cv8.cf Бесплатно (free)

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    35065    YPermitin    15    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    22845    SeiOkami    53    

Работа с настройками системы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Варианты отчетов, работа с настройками вариантов: структура группировок, поля отчета, отборы, сортировка, условное оформление, другие настройки, настройки отображения диаграмм.

02.07.2019    88721    ids79    18    

1Script.Web. Интернет-приложения на языке 1С

Практика программирования v8 Бесплатно (free)

Запросы рынка таковы, что любое современное клиент-серверное приложение должно иметь веб-интерфейс. Почему бы не писать такие приложения на языке 1С? Андрей Овсянкин расскажет о возможностях разработки веб-приложений на базе 1Script, рассмотрит перспективы этого направления и в качестве демонстрации покажет «боевое» веб-приложение на новом движке – кроссплатформенную консоль администрирования парка кластеров 1С.

20.05.2019    22654    Evil Beaver    33    

Регистры накопления. Структура хранения в базе данных

Практика программирования v8 1cv8.cf Бесплатно (free)

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    66955    YPermitin    31