
Привет, Хабр!
С вами снова Илья Вязников, инженер сопровождения SOFROS. Продолжаю делиться практическими приёмами, которые упрощают жизнь при эксплуатации и доработке интеграций.
Не так давно я рассказывал, как вынести повторяющуюся логику в C# функции, но в любом серьёзном проекте со временем накапливаются не только функции, но и куча параметров: адреса сервисов, таймауты и т.д. Сначала их прописывают прямо в коде, но очень быстро это превращается в проблему.
Сегодня расскажу про глобальные константы — один из полезных инструментов платформы для централизованного хранения таких параметров.
Когда глобальные константы особенно полезны
Глобальные константы стоит использовать, если значение применяется более чем в одном месте.
Типичные кейсы:
-
Параметры интеграций
-
URL внешних API
-
Пути к файловым каталогам
-
Порты и адреса серверов
-
-
Технические лимиты и retry-политики
-
Максимальное количество попыток
-
Таймауты
-
Размер батча обработки
-
-
Справочные значения
-
ИНН организации
-
Коды филиалов
-
Идентификаторы систем-источников
-
Вместо того чтобы писать в коде:
const int MAX_RETRY = 3;
const string CRM_URL = «https://crm.company.local/api»;
гораздо удобнее вынести это в глобальные константы и обращаться к ним централизованно.
Создание набора глобальных констант
-
В Центре настройки перейдите: Обработка данных — Глобальные константы
-
Нажмите + и создайте новый набор.

-
Укажите Название и Имя (обычно они совпадают).
Пример: MessageProcessing, ExternalServices, OrganizationSettings.
-
Перейдите на вкладку Переменные и добавьте нужные параметры.

Пример переменных:
|
Название |
Тип |
Значение |
|
RetryCount |
int |
3 |
|
EnableArchiveRestore |
Boolean |
true |
|
MessageProperty |
String |
Example |
Поддерживаемые типы: string, int, boolean. Также можно использовать массивы и разрешить null-значения.
Использование в Схемах обработки:
Обращение к константам очень простое:
Синтаксис: ГлобальныйНабор.Переменная
Пример использования в алгоритме:
var retryCount = MessageProcessing.RetryCount;if (retryCount > 0){ Logger.Info($"Количество попыток: {retryCount}");}if (MessageProcessing.EnableArchiveRestore){ Logger.Info("Повторная обработка архива включена");}
Это особенно удобно, когда нужно быстро изменить поведение системы (увеличить retry, отключить какой-то сценарий, поменять batch size) без правок алгоритмов.
Аналогично можно обращаться к константам в условиях.
Использование в конфигурации объектов:
В наборы констант можно добавить и адреса серверов, а затем обращаться к ним в соответствующих объектах, например Внешних системах, сервисах.
В ряде объектов конфигурации значения можно задавать через специальный синтаксис:
[[НаборКонстант.Адрес]]
Важно:
-
Двойные квадратные скобки обязательны;
-
Константа должна существовать и быть сохранена;
-
Тип константы должен совпадать с типом параметра.
Пример:

Если константа не создана, но указана в конфигурации, выводится соответствующая ошибка (Не удалось сохранить: Не существует константы с таким именем)

Так можно задавать адреса в коннекторах, настройках хранилищ, email-сервисах и т.д.
Ограничения и важные нюансы
-
В обработчиках 1С глобальные константы платформы недоступны.
-
В конфигурации объектов поддерживаются только string, int и Boolean.
-
Секретные данные (пароли, токены) хотя технически можно хранить, стоит учитывать внутреннюю политику безопасности и разграничение доступа. Такие данные лучше хранить другими механизмами (об этом будет отдельная статья).
Полезные советы
-
Разделяйте константы по смыслу
Хорошая практика:-
ExternalServices
-
MessageProcessing
-
OrganizationSettings
-
RetryPolicies
-
-
Не выносите в константы значения, которые используются только в одном месте — это только усложнит конфигурацию.
-
Используйте понятные имена — в будущем это сильно облегчит поддержку.
Заключение
Глобальные константы — простой, но эффективный инструмент, который помогает держать интеграционное решение в чистоте и упрощает его сопровождение.
На небольших конфигурациях польза может быть не так заметна, но в проектах с несколькими интеграциями и десятками процессов такой подход заметно упрощает сопровождение: параметры не размазываются по алгоритмам и конфигурации, а изменения вносятся централизованно.
А как вы работаете с переменными в ваших интеграционных проектах? Если есть вопросы не стесняйтесь писать комментарии, а если интересно узнать больше о нашей компании, новости, вебинары, специальные предложения подписывайтесь на наш канал в Telegram
Для тех кто хочет подробнее ознакомиться с функционалом описанным в статье — полезные ссылки:
ссылка на оригинал статьи https://habr.com/ru/articles/1043508/