1С:Подсистема предопределенных значений
Подсистема для элегантного управления предопределенными настройками в конфигурациях 1С:Предприятие 8.3.
Оглавление
- Описание
- Возможности
- Архитектура
- Быстрый старт
- Установка
- Справочник по типам данных
- Справочник программного интерфейса
- Сценарии использования
- Best Practices
- Продвинутые техники
- Тестирование
- Лицензия
- Контакты
- Публикация
Описание
Подсистема для управления предопределенными настройками в конфигурациях 1С:Предприятие 8.3.
Версия: 1.0.0
Совместимость: 1С:Предприятие 8.3.19+
Язык: Русский
Введение
Данная подсистема создана в виде минималистичного набора объектов, предназначенная для очень простой интеграции в любые конфигурации на проектной работе.
Основной плюс это простота и наличие, помимо программного интерфейса еще и пользовательского.
Программное создание настроек реализовано для минимизации количества реструктуризаций.
- 7 типов данных: Строка, Булево, Дата, Ссылка, Массив, Ключ-Значение, Таблица значений
- Иерархическая структура: Группировка настроек через родительские элементы
- Автоматическое создание: Настройки создаются программно с уникальными идентификаторами
- Кеширование: Быстрый доступ благодаря повторно используемым значениям
- Типобезопасность: Автоматическое определение и валидация типов
- Права доступа: Система доступа через роли
Эта подсистема решает проблему хранения и управления конфигурационными настройками в 1С. Вместо создания множества констант или регистров, вы получаете единую систему для работы с настройками любого типа данных.
Простота использования - ключевая особенность подсистемы. Достаточно одного вызова:
ЗначениеНастройки = ПредопределенныеНастройки.Значение("ИмяНастройки");
Для добавления настройки можно использовать шаблон, который выводится в описании при создании нового элемента:

Возможности
Поддерживаемые типы данных
- Строка - текстовые значения
- Булево - логические флаги
- Дата - даты и время
- Ссылка - ссылки на объекты конфигурации
- Массив - массивы произвольных значений
- Ключ-Значение - соответствия (ключ: значение)
- Таблица значений - сложные структурированные данные
Иерархия настроек
Настройки могут иметь родительские элементы для создания логических групп:
Настройки интеграции
├── Токен подключения
├── URL сервиса
└── Таймаут
├── Таймаут подключения
└── Таймаут чтения
Автоматическое кеширование
Подсистема использует механизм повторно используемых значений для быстрого доступа к настройкам без обращения к базе данных на каждом запросе.
Архитектура
Компоненты подсистемы
Подсистема состоит из следующих компонентов:
ПредопределенныеЗначенияПодсистема
│
├── 📁 Справочники
│ └── ПредопределенныеНастройки
│ ├── Реквизиты: ИмяНастройки, ТипЗначения, Значение, Хранилище
│ ├── Форма списка
│ └── Форма элемента
│
├── 📁 Общие модули
│ ├── ПредопределенныеНастройки (основной программный интерфейс)
│ ├── ПредопределенныеНастройкиПереопределяемый (точка расширения)
│ └── ПредопределенныеНастройкиПовтИсп (кеширование)
│
├── 📁 Перечисления
│ └── ТипыЗначенияПредопределенныхЗначений
│
├── 📁 Роли
│ ├── ЧтениеПредопределенныеЗначения
│ └── ДобавлениеИзменениеПредопределенныеЗначения
│
└── 📁 Обработки
└── ПредопределенныеНастройкиТестирование
Структура справочника
Справочник ПредопределенныеНастройки содержит следующие реквизиты:
- ИмяНастройки (Строка, 100) - уникальное имя настройки для поиска
- ТипЗначения (Перечисление) - тип хранимого значения
- Значение (Любое) - значение настройки для простых типов
- Хранилище (ValueStorage) - для сложных типов (массив, таблица, соответствие)
- Описание (Строка, 1024) - описание назначения настройки
- ДатаСоздания (Дата) - дата создания настройки
- Наименование (стандартный) - наименование настройки
- Родитель - для создания иерархии
Архитектурные диаграммы
Схема ниже показывает взаимодействие компонентов:
graph TB
A["Ваша конфигурация"] --> B["Программный интерфейс"]
B --> C["Слой кеширования"]
C --> D["Справочник"]
D --> E["База данных"]
B --> F["Точка расширения"]
F --> D
style A fill:#2c3e50,stroke:#34495e,stroke-width:2px,color:#fff
style B fill:#3498db,stroke:#2980b9,stroke-width:2px,color:#fff
style C fill:#1abc9c,stroke:#16a085,stroke-width:2px,color:#fff
style D fill:#95a5a6,stroke:#7f8c8d,stroke-width:2px,color:#fff
style E fill:#34495e,stroke:#2c3e50,stroke-width:2px,color:#fff
style F fill:#e67e22,stroke:#d35400,stroke-width:2px,color:#fff
Поток работы с настройками:
sequenceDiagram
participant Dev as Разработчик
participant API as ПредопределенныеНастройки
participant Cache as Кеш
participant DB as База данных
Dev->>API: Определение настроек
Note right of API: Вызов ПриЗаполненииТаблицыПредопределенныхНастроек
API->>DB: Создание настроек с UUID
DB-->>API: Подтверждение
Dev->>API: Получение значения
API->>Cache: Поиск в кеше
alt Найдено в кеше
Cache-->>API: Возврат значения
else Не найдено
API->>DB: Запрос к базе
DB-->>API: Значение
API->>Cache: Сохранение в кеш
Cache-->>API: Кешировано
end
API-->>Dev: Результат
Быстрый старт
Шаг 1: Определение настроек
Переопределите процедуру ПриЗаполненииТаблицыПредопределенныхНастроек в модуле ПредопределенныеНастройкиПереопределяемый:
Процедура ПриЗаполненииТаблицыПредопределенныхНастроек(ТаблицаНастроек) Экспорт
// Строковая настройка
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("87548614-5423-299a-af9c-a08e5ca86056");
НоваяНастройка.ИмяНастройки = "ВерсияПодсистемы";
НоваяНастройка.Наименование = НСтр("ru ='Версия подсистемы'");
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.Строка");
НоваяНастройка.Описание = НСтр("ru ='Информация о версии текущей подсистемы.'");
НоваяНастройка.Значение = "1.0.0";
// Булева настройка
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("bfc480f2-023e-40d3-ab52-fecb853edf3c");
НоваяНастройка.ИмяНастройки = "ВключеноРегистрирование";
НоваяНастройка.Наименование = НСтр("ru ='Регистрация событий включена'");
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.Булево");
НоваяНастройка.Описание = НСтр("ru ='Разрешает регистрацию событий в системе.'");
НоваяНастройка.Значение = Ложь;
// Настройка с массивом
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("6f205348-2c73-46a8-98a6-851a40a12bbe");
НоваяНастройка.ИмяНастройки = "РазрешенныеПользователи";
НоваяНастройка.Наименование = НСтр("ru ='Разрешенные пользователи'");
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.Массив");
МассивПользователей = Новый Массив;
МассивПользователей.Добавить("Администратор");
МассивПользователей.Добавить("Аудит");
НоваяНастройка.Значение = МассивПользователей;
КонецПроцедуры
Шаг 2: Инициализация
При первом запуске создайте отсутствующие настройки:
// В модуле приложения или при старте системы
ПредопределенныеНастройки.СоздатьОтсутствующиеПредопределенныеНастройки();
Шаг 3: Использование
Получение значений настроек:
// Получение строковой настройки
Версия = ПредопределенныеНастройки.Значение("ВерсияПодсистемы");
Сообщить(Версия); // "1.0.0"
// Получение булевой настройки
Если ПредопределенныеНастройки.Значение("ВключеноРегистрирование") Тогда
ЗарегистрироватьСобытие();
КонецЕсли;
// Получение массива
РазрешенныеПользователи = ПредопределенныеНастройки.Значение("РазрешенныеПользователи");
Для Каждого Пользователь Из РазрешенныеПользователи Цикл
Сообщить(Пользователь);
КонецЦикла;
Установка
Требования
- 1С:Предприятие 8.3.19 или выше
- EDT 2023.1+ (для разработки в EDT) или Конфигуратор
- Права администратора конфигурации
Установка через EDT
Подготовка
- Создайте резервную копию вашей конфигурации
- Убедитесь, что используете EDT версии, совместимой версии
Импорт исходников подсистемы
- Скачайте исходники подсистемы из репозитория (папку
ПредопределенныеЗначенияПодсистема) - В EDT: File → Import → General → Existing Projects into Workspace
- Выберите папку с подсистемой
ПредопределенныеЗначенияПодсистема - Выберите "Import as separate project" (не объединять сразу)
Сравнение и объединение конфигураций
- Откройте вашу основную конфигурацию в EDT
- Правой кнопкой мыши на конфигурации → Сравнить/объединить
- Выберите проект подсистемы
ПредопределенныеЗначенияПодсистема - В окне сравнения:
- Просмотрите добавляемые объекты (справочник, модули, роли)
- Проверьте конфликты (если есть объекты с такими же именами)
- Нажмите "Merge" для объединения
- Выберите режим объединения:
- "Copy from source" для новых объектов
- "Three-way merge" если есть конфликты
- Подтвердите изменения
Проверка после объединения
- Проверьте структуру подсистем
- Убедитесь, что все модули на месте
- Проверьте роли в конфигурации
Установка через Конфигуратор
Установка через сравнение/объединение конфигураций
Подготовка
- Создайте резервную копию информационной базы
- Убедитесь, что находитесь в режиме "Конфигуратор"
Сравнение и объединение конфигураций
- Скачайте файл конфигурации подсистемы (.cf) из репозитория
- В вашей рабочей ИБ (режим Конфигуратор):
- Конфигурация → Сравнить, объединить с конфигурацией из файла...
- Выберите файл конфигурации подсистемы (.cf)
- В окне "Сравнение, объединение конфигураций" настройте объединение
Объединение конфигураций
- В окне сравнения нажмите кнопку "Выполнить"
- Режим обновления выберите: "Обновить конфигурацию базы данных"
- При наличии конфликтов:
- Выберите "Принять из файла" для всех объектов подсистемы
- Подтвердите объединение
- Дождитесь завершения процесса объединения
Постановка на поддержку
ВАЖНО! При объединении, конфигурацию рекомендуется ставить на поддержку:
- Конфигурация → Поддержка → Настройка поддержки
- Проверьте, что конфигурация находится на поддержке
Обновление конфигурации БД
- Конфигурация → Обновить конфигурацию базы данных
- Просмотрите список изменений в структуре БД
- Нажмите "Выполнить" для применения изменений
- Дождитесь завершения обновления
Интеграция с БСП
Для автоматического обновления настроек при обновлении информационной базы добавьте обработчики.
Добавление в обработчики обновления БСП
В модуле ОбщийМодуль.ОбновлениеИнформационнойБазы (серверный, без контекста):
// Процедура добавления обработчиков обновления
Процедура ДобавитьОбработчикиОбновления(Обработчики) Экспорт
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "1.0.0.1";
Обработчик.Процедура = "ОбновлениеИнформационнойБазы.ОбновитьПредопределенныеНастройки";
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.Комментарий = НСтр("ru = 'Создание отсутствующих предопределенных настроек'");
КонецПроцедуры
// Процедура обновления предопределенных настроек
Процедура ОбновитьПредопределенныеНастройки() Экспорт
ПредопределенныеНастройки.СоздатьОтсутствующиеПредопределенныеНастройки();
КонецПроцедуры
Добавление в начальное заполнение
В модуле ОбщийМодуль.НачальноеЗаполнениеПереопределяемый:
// При начальном заполнении информационной базы
Процедура ПриНачальномЗаполненииЭлементов(Настройки) Экспорт
Настройки.ПриДобавлении = "НачальноеЗаполнение.СоздатьПредопределенныеНастройки";
КонецПроцедуры
В модуле ОбщийМодуль.НачальноеЗаполнение (серверный):
Процедура СоздатьПредопределенныеНастройки() Экспорт
ПредопределенныеНастройки.СоздатьОтсутствующиеПредопределенныеНастройки();
КонецПроцедуры
Настройка прав доступа через профили БСП
- Роль "ЧтениеПредопределенныеЗначения" должна включаться в базовые роли.
Проверка установки
Контрольный список после установки
- Подсистема "ПредопределенныеЗначения" видна в дереве конфигурации
- Справочник "ПредопределенныеНастройки" доступен
- 3 общих модуля присутствуют
- Перечисление "ТипыЗначенияПредопределенныхЗначений" содержит 8 значений
- Обработка тестирования открывается
- Роли добавлены в систему
Функциональная проверка
Выполните код в консоли запросов для проверки:
// Создание отсутствующих настроек
ПредопределенныеНастройки.СоздатьОтсутствующиеПредопределенныеНастройки();
// Проверка создания тестовой настройки
ТаблицаНастроек = ПредопределенныеНастройки.НоваяТаблицаПредопределенныхНастроек();
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор();
НоваяНастройка.ИмяНастройки = "ТестоваяНастройка";
НоваяНастройка.Наименование = НСтр("ru ='Настройка для тестирования'");
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.Строка");
НоваяНастройка.Значение = "Тест";
ПредопределенныеНастройки.ОбновитьНастройкиВБазе(ТаблицаНастроек);
// Проверить получение
Сообщить(ПредопределенныеНастройки.Значение("ТестоваяНастройка")); // Должно вывести "Тест"
Справочник по типам данных
1. Строка (String)
Назначение: Текстовые значения, конфигурационные параметры
Пример создания:
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("...");
НоваяНастройка.Наименование = НСтр("ru ='Адрес API системы'");
НоваяНастройка.ИмяНастройки = "URL_API";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.Строка");
НоваяНастройка.Значение = "https://api.example.com";
Получение значения:
URLAPI = ПредопределенныеНастройки.Значение("URL_API");
// URLAPI = "https://api.example.com"
2. Булево (Boolean)
Назначение: Флаги включения/выключения функций
Пример создания:
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("...");
НоваяНастройка.Наименование = НСтр("ru ='Отладка включена'");
НоваяНастройка.ИмяНастройки = "РазрешенаОтладка";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.Булево");
НоваяНастройка.Значение = Ложь;
Получение значения:
РазрешенаОтладка = ПредопределенныеНастройки.Значение("РазрешенаОтладка");
Если РазрешенаОтладка Тогда
// Логика отладки
КонецЕсли;
3. Дата (Date)
Назначение: Хранение дат и времени
Пример создания:
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("...");
НоваяНастройка.Наименование = НСтр("ru ='Дата обновления'");
НоваяНастройка.ИмяНастройки = "ДатаОбновления";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.Дата");
НоваяНастройка.Значение = ТекущаяДата();
Получение значения:
ДатаОбновления = ПредопределенныеНастройки.Значение("ДатаОбновления");
4. Ссылка (Reference)
Назначение: Ссылки на объекты конфигурации
Пример создания:
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("...");
НоваяНастройка.Наименование = НСтр("ru ='Подразделение центральное'");
НоваяНастройка.ИмяНастройки = "УмолчательноеПодразделение";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.Ссылка");
НоваяНастройка.Значение = Справочники.Подразделения.НайтиПоНаименованию("Главный офис");
Получение значения:
УмолчательноеПодразделение = ПредопределенныеНастройки.Значение("УмолчательноеПодразделение");
5. Массив (Array)
Назначение: Списки значений произвольного типа
Важно: Используйте Хранилище вместо Значение для массивов!
Пример создания:
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("...");
НоваяНастройка.Наименование = НСтр("ru ='Приоритетные статусы'");
НоваяНастройка.ИмяНастройки = "ПриоритетныеСтатусы";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.Массив");
МассивСтатусов = Новый Массив;
МассивСтатусов.Добавить(Перечисления.СтатусыДокументов.ВРаботе);
МассивСтатусов.Добавить(Перечисления.СтатусыДокументов.НаСогласовании);
НоваяНастройка.Значение = МассивСтатусов;
Получение значения:
ПриоритетныеСтатусы = ПредопределенныеНастройки.Значение("ПриоритетныеСтатусы");
Для Каждого Статус Из ПриоритетныеСтатусы Цикл
Сообщить(Строка(Статус));
КонецЦикла;
6. Ключ-Значение (Key-Value / Соответствие)
Назначение: Для пары ключ-значение используется Хранилище!
Важно: Используйте Хранилище для соответствий!
Пример создания:
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("...");
НоваяНастройка.Наименование = НСтр("ru ='Настройки интеграции'");
НоваяНастройка.ИмяНастройки = "НастройкиИнтеграции";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.КлючЗначение");
СоответствиеНастроек = Новый Соответствие;
СоответствиеНастроек.Вставить("URL", "https://api.example.com");
СоответствиеНастроек.Вставить("Token", "secret123");
СоответствиеНастроек.Вставить("Timeout", 30);
НоваяНастройка.Значение = СоответствиеНастроек;
Получение значения:
НастройкиИнтеграции = ПредопределенныеНастройки.Значение("НастройкиИнтеграции");
URLAPI = НастройкиИнтеграции.Получить("URL");
ВремяОжидания = НастройкиИнтеграции.Получить("Timeout");
7. Таблица значений
Назначение: Сложные структурированные данные
Важно: Для таблиц значений используется Хранилище!
Пример создания:
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("...");
НоваяНастройка.Наименование = НСтр("ru ='Правила обработки'");
НоваяНастройка.ИмяНастройки = "ПравилаОбработки";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.ТаблицаЗначений");
ТаблицаПравил = Новый ТаблицаЗначений;
ТаблицаПравил.Колонки.Добавить("ТипДокумента", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100)));
ТаблицаПравил.Колонки.Добавить("АвтоматическиПровести", Новый ОписаниеТипов("Булево"));
ТаблицаПравил.Колонки.Добавить("ТребуетсяСогласование", Новый ОписаниеТипов("Булево"));
СтрокаПравила = ТаблицаПравил.Добавить();
СтрокаПравила.ТипДокумента = "ЗаказКлиента";
СтрокаПравила.АвтоматическиПровести = Ложь;
СтрокаПравила.ТребуетсяСогласование = Истина;
НоваяНастройка.Значение = ТаблицаПравил;
Получение значения:
ПравилаОбработки = ПредопределенныеНастройки.Значение("ПравилаОбработки");
Для Каждого Правило Из ПравилаОбработки Цикл
Если Правило.ТребуетсяСогласование Тогда
ОтправитьНаСогласование(Правило.ТипДокумента);
КонецЕсли;
КонецЦикла;
8. Группа настроек (Каталог)
Назначение: Организация иерархии настроек
Пример создания группы:
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("...");
НоваяНастройка.Наименование = НСтр("ru ='Настройки интеграции'");
НоваяНастройка.ИмяНастройки = "НастройкиИнтеграции";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.КаталогПредопределенныхНастроек");
// Группы не имеют значения
Настройки внутри группы:
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.ИмяНастройкиРодителя = "НастройкиИнтеграции"; // Указание родителя
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("...");
НоваяНастройка.Наименование = НСтр("ru ='Адрес API system'");
НоваяНастройка.ИмяНастройки = "URL_API";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.Строка");
НоваяНастройка.Значение = "https://api.example.com";
Справочник программного интерфейса
Модуль ПредопределенныеНастройки
Основной модуль для работы с настройками.
Функция Значение(ИмяНастройки, ВызыватьИсключение = Ложь)
Возвращает значение предопределенной настройки по ее имени.
Параметры:
ИмяНастройки(Строка) - имя настройкиВызыватьИсключение(Булево) - вызывать ли исключение, если настройка не найдена
Возвращаемое значение:
Произвольный- значение настройки
Примеры:
// Без исключения (вернет пустую ссылку, если не найдено)
URL = ПредопределенныеНастройки.Значение("URL_API");
// С исключением
Попытка
Token = ПредопределенныеНастройки.Значение("API_Token", Истина);
Исключение
Сообщить("Токен API не настроен!");
КонецПопытки;
Функция НастройкаПоИмени(ИмяНастройки)
Возвращает ссылку на предопределенную настройку по имени.
Параметры:
ИмяНастройки(Строка) - имя настройки
Возвращаемое значение:
СправочникСсылка.ПредопределенныеНастройки- ссылка на настройку
Пример:
Настройка = ПредопределенныеНастройки.НастройкаПоИмени("URL_API");
Если Не ЗначениеЗаполнено(Настройка) Тогда
СоздатьНастройку();
КонецЕсли;
Функция НоваяТаблицаПредопределенныхНастроек()
Возвращает новую таблицу значений с колонками для описания настроек.
Возвращаемое значение:
ТаблицаЗначений- таблица с колонками:- ИмяНастройкиРодителя
- Идентификатор
- ИмяНастройки
- Хранилище
- Наименование
- Описание
- ТипЗначения
- Значение
- Удалена
Пример:
ТаблицаНастроек = ПредопределенныеНастройки.НоваяТаблицаПредопределенныхНастроек();
НоваяНастройка = ТаблицаНастроек.Добавить();
// Заполнение настройки...
Процедура СоздатьОтсутствующиеПредопределенныеНастройки(ТаблицаОписанияПредопределенныхНастроек = Неопределено)
Создает отсутствующие предопределенные настройки в базе данных.
Параметры:
ТаблицаОписанияПредопределенныхНастроек- таблица описаний настроек (опционально)
Пример:
// При первом запуске
ПредопределенныеНастройки.СоздатьОтсутствующиеПредопределенныеНастройки();
Процедура ОбновитьНастройкиВБазе(ТаблицаНастроекВБазе)
Обновляет настройки в базе данных согласно переданной таблице.
Параметры:
ТаблицаНастроекВБазе- таблица с данными для обновления
Пример:
ТаблицаНастроек = ПредопределенныеНастройки.НоваяТаблицаПредопределенныхНастроек();
// Заполнение таблицы...
ПредопределенныеНастройки.ОбновитьНастройкиВБазе(ТаблицаНастроек);
Процедура ИнициализироватьТаблицуПредопределенныхНастроек(ТаблицаОписанияПредопределенныхНастроек)
Инициализирует таблицу предопределенных настроек.
Параметры:
ТаблицаОписанияПредопределенныхНастроек- таблица для заполнения
Пример:
ТаблицаНастроек = ПредопределенныеНастройки.НоваяТаблицаПредопределенныхНастроек();
ПредопределенныеНастройки.ИнициализироватьТаблицуПредопределенныхНастроек(ТаблицаНастроек);
Модуль ПредопределенныеНастройкиПереопределяемый
Модуль для определения настроек вашей конфигурации.
Процедура ПриЗаполненииТаблицыПредопределенныхНастроек(ТаблицаНастроек)
Процедура для определения пользовательских настроек.
Параметры:
ТаблицаНастроек- таблица для добавления описаний настроек
Пример:
Процедура ПриЗаполненииТаблицыПредопределенныхНастроек(ТаблицаНастроек) Экспорт
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("87548614-5423-299a-af9c-a08e5ca86056");
НоваяНастройка.Наименование = НСтр("ru ='Моя настройка'");
НоваяНастройка.ИмяНастройки = "МояНастройка";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.Строка");
НоваяНастройка.Значение = "Значение";
КонецПроцедуры
Сценарии использования
Сценарий 1: Хранение настроек интеграции
Задача: Хранение параметров подключения к внешним сервисам
// Определение настроек
Процедура ПриЗаполненииТаблицыПредопределенныхНастроек(ТаблицаНастроек) Экспорт
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("a1b2c3d4-e5f6-...");
НоваяНастройка.ИмяНастройки = "API_URL";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.Строка");
НоваяНастройка.Значение = "https://api.service.com";
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("b2c3d4e5-f6g7-...");
НоваяНастройка.ИмяНастройки = "API_Timeout";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.Число");
НоваяНастройка.Значение = 30;
КонецПроцедуры
// Использование
Процедура ВыполнитьЗапросКAPI()
URLAPI = ПредопределенныеНастройки.Значение("API_URL");
TimeoutAPI = ПредопределенныеНастройки.Значение("API_Timeout");
HTTPСоединение = Новый HTTPСоединение(URLAPI, , , , TimeoutAPI);
// Выполнение запроса...
КонецПроцедуры
Сценарий 2: Конфигурационные справочники выбора
Задача: Хранение списка разрешенных типов документов для выбора
// Определение настроек
Процедура ПриЗаполненииТаблицыПредопределенныхНастроек(ТаблицаНастроек) Экспорт
ТаблицаЗначений = Новый ТаблицаЗначений;
ТаблицаЗначений.Колонки.Добавить("ТипДокумента");
ТаблицаЗначений.Колонки.Добавить("Наименование");
Строка = ТаблицаЗначений.Добавить();
Строка.ТипДокумента = "ЗаказКлиента";
Строка.Наименование = "Заказ клиента";
Строка = ТаблицаЗначений.Добавить();
Строка.ТипДокумента = "СчетНаОплату";
Строка.Наименование = "Счет на оплату";
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("...");
НоваяНастройка.ИмяНастройки = "РазрешенныеДокументы";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.ТаблицаЗначений");
НоваяНастройка.Значение = ТаблицаЗначений;
КонецПроцедуры
// Использование
Функция ПроверитьРазрешенныйДокумент(ТипДокумента)
РазрешенныеДокументы = ПредопределенныеНастройки.Значение("РазрешенныеДокументы");
Для Каждого Строка Из РазрешенныеДокументы Цикл
Если Строка.ТипДокумента = ТипДокумента Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
</details>
<details>
<summary><strong>Сценарий 3: Настройки ролей и разрешений</strong></summary>
**Задача:** Хранение прав доступа для различных ролей
```bsl
// Определение настроек
Процедура ПриЗаполненииТаблицыПредопределенныхНастроек(ТаблицаНастроек) Экспорт
СоответствиеПрав = Новый Соответствие;
СоответствиеПрав.Вставить("Администратор", Новый Массив); // Все права
СоответствиеПрав.Вставить("Пользователь", Массив(["Чтение", "Создание"]));
СоответствиеПрав.Вставить("Гость", Массив(["Чтение"]));
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("...");
НоваяНастройка.Наименование = НСтр("ru ='Права доступа'");
НоваяНастройка.ИмяНастройки = "ПраваДоступа";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.КлючЗначение");
НоваяНастройка.Хранилище = СоответствиеПрав;
КонецПроцедуры
// Использование
Функция ПроверитьПраво(Роль, Право)
ПраваДоступа = ПредопределенныеНастройки.Значение("ПраваДоступа");
ПраваРоли = ПраваДоступа.Получить(Роль);
Если ПраваРоли <> Неопределено Тогда
Возврат ПраваРоли.Найти(Право) <> Неопределено;
КонецЕсли;
Возврат Ложь;
КонецФункции
</details>
<details>
<summary><strong>Сценарий 4: Настройки печатных форм</strong></summary>
**Задача:** Хранение параметров печатных форм (отступы, размеры, шрифты)
```bsl
// Определение настроек
Процедура ПриЗаполненииТаблицыПредопределенныхНастроек(ТаблицаНастроек) Экспорт
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("...");
НоваяНастройка.Наименование = НСтр("ru ='Отступ слева'");
НоваяНастройка.ИмяНастройки = "ОтступЛево";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.Число");
НоваяНастройка.Значение = 20; // мм
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.Идентификатор = Новый УникальныйИдентификатор("...");
НоваяНастройка.Наименование = НСтр("ru ='Размер шрифта печатной формы'");
НоваяНастройка.ИмяНастройки = "РазмерШрифта";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.Число");
НоваяНастройка.Значение = 10;
КонецПроцедуры
// Использование
Процедура СформироватьПечатнуюФорму()
ОтступЛевый = ПредопределенныеНастройки.Значение("ОтступЛево");
РазмерШрифта = ПредопределенныеНастройки.Значение("РазмерШрифта");
// Применение настроек к форме...
КонецПроцедуры
</details>
## Best Practices
<details>
<summary><strong>Именование настроек</strong></summary>
- ✅ Используйте понятные имена: `API_URL`, `ВключенаОтладка`, `МаксимальноеКоличествоПопыток`
- ❌ Избегайте: `setting1`, `Настройка123`, `param`
```bsl
// ✅ Хорошо
НоваяНастройка.ИмяНастройки = "EmailАдминистратора";
НоваяНастройка.ИмяНастройки = "ВключеноПротоколирование";
// ❌ Плохо
НоваяНастройка.ИмяНастройки = "Настройка1";
НоваяНастройка.ИмяНастройки = "param";
Структурирование через группы
Используйте родительские элементы для логической группировки:
// Создание группы
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.ИмяНастройки = "НастройкиИнтеграции";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.КаталогПредопределенныхНастроек");
// Элементы группы
НоваяНастройка = ТаблицаНастроек.Добавить();
НоваяНастройка.ИмяНастройкиРодителя = "НастройкиИнтеграции";
НоваяНастройка.Наименование = НСтр("ru ='Адрес сайта'");
НоваяНастройка.ИмяНастройки = "URL_API";
НоваяНастройка.ТипЗначения = ПредопределенноеЗначение("Перечисление.ТипыЗначенияПредопределенныхЗначений.Строка");
НоваяНастройка.Значение = "https://api.example.com";
</details>
## Продвинутые техники
<details>
<summary><strong>Обновление настроек при изменении конфигурации</strong></summary>
При обновлении конфигурации настройки могут требовать миграции:
```bsl
Процедура ОбновитьНастройкиПослеОбновленияКонфигурации()
ТаблицаНастроек = ПредопределенныеНастройки.НоваяТаблицаПредопределенныхНастроек();
// Изменение существующей настройки
СуществующаяНастройка = ТаблицаНастроек.Добавить();
СуществующаяНастройка.ИмяНастройки = "СтароеИмя";
СуществующаяНастройка.НовоеЗначение = "Новое значение";
// Удаление устаревших настроек
УстаревшаяНастройка = ТаблицаНастроек.Добавить();
УстаревшаяНастройка.ИмяНастройки = "УстаревшаяНастройка";
УстаревшаяНастройка.Удалена = Истина;
ПредопределенныеНастройки.ОбновитьНастройкиВБазе(ТаблицаНастроек);
КонецПроцедуры
Тестирование
Запуск тестов
Подсистема включает обработку ПредопределенныеНастройкиТестирование для проверки работоспособности.
- Откройте обработку в запущенном приложении
- Нажмите "Создать тестовые настройки"
- Проверьте, что все настройки созданы (должен появиться зеленый индикатор)
- Нажмите "Установить тестовые значения"
- Проверьте корректность значений
- Нажмите "Удалить тестовые настройки"
- Убедитесь, что настройки удалены
Лицензия
MIT License - Copyright (c) 2025 Fedor Timokhov
Контакты
Автор: Fedor Timokhov
