Как сохранить константу без изменения конфигурации и использования расширений в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Использование платформенного механизма Хранилище общих настроек

Проанализируем самый "чистый" и платформенный способ решения задачи. В системе 1С:Предприятие 8 существует встроенный механизм ХранилищеОбщихНастроек. Это стандартная системная таблица в базе данных, которой управляет сама платформа. Мы можем сохранять туда любые данные программно, не добавляя новых объектов в дерево метаданных.

Разберем по шагам, как это работает на практике:

  1. Мы определяем уникальное имя группы настроек и имя самой "константы".
  2. Используем метод Сохранить для записи значения.
  3. Используем метод Загрузить для чтения значения в любом месте нашего кода.

Посмотрим на пример реализации данного подхода:


// Сохранение значения константы
ХранилищеОбщихНастроек.Сохранить("НастройкиНашейПодсистемы", "ИспользоватьОсобыйРежим", Истина);

// Чтение значения константы
ЗначениеКонстанты = ХранилищеОбщихНастроек.Загрузить("НастройкиНашейПодсистемы", "ИспользоватьОсобыйРежим");
Если ЗначениеКонстанты = Неопределено Тогда
    ЗначениеКонстанты = Ложь; // Значение по умолчанию
КонецЕсли;

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

Дополнительные сведения из библиотеки стандартных подсистем (БСП)

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

Мы можем завести свойство "Дополнительное сведение" для предопределенного элемента справочника, например, для справочника Организации. Если бизнес-логика подразумевает одну организацию, то значение булево будет привязано к ней. Пользователь сможет редактировать эту "константу" прямо из карточки организации через типовой интерфейс БСП, без необходимости писать отдельные формы.

Безопасное хранилище данных БСП

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

Рассмотрим использование программного интерфейса БСП для записи и чтения:


// Запись значения (наша имитация константы)
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище("МояГлобальнаяКонстанта", Истина);

// Чтение значения
ЗначениеКонстанты = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища("МояГлобальнаяКонстанта");

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

Использование служебных регистров БСП

Проанализируем ситуацию с регистрами, которые поставляются вместе с БСП. Практически в любой типовой конфигурации присутствует регистр сведений ОбщиеНастройкиУзловИнформационныхБаз или справочник ПараметрыРаботыПрограммы.

Регистр ОбщиеНастройкиУзловИнформационныхБаз изначально задумывался для хранения служебных флагов обмена данными, однако разработчики часто используют его как универсальное хранилище "ключ-значение". Вы можете программно добавить запись в этот регистр с нужным уникальным строковым ключом и хранить там булево значение.

Творческие решения со справочниками

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

Подведение итогов

Мы выяснили, что для решения задачи имитации константы в типовой конфигурации 1С вовсе не обязательно снимать базу с поддержки или рисковать целостностью данных из-за расширений. Если ваша задача — сохранить одно или несколько значений, лучшим выбором станет использование ХранилищеОбщихНастроек или механизма Дополнительных сведений БСП. Выбор зависит от того, нужно ли пользователю визуально редактировать это значение через интерфейс программы, или оно устанавливается исключительно программным путем.

← На главную