Как организовать хранение общих настроек для внешней обработки в 1С:Управление торговлей 11?

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

При разработке внешних обработок для современных конфигураций на базе Библиотеки стандартных подсистем (БСП), таких как УТ 11, ERP или КА, программисты часто сталкиваются с задачей сохранения настроек. Стандартный механизм платформы ХранилищеОбщихНастроек отлично работает, когда настройки индивидуальны для каждого пользователя. Однако, если нам нужно, чтобы настройки, установленные одним коллегой, стали доступны всем остальным, мы упираемся в ограничения прав доступа и архитектурные особенности платформы.

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

Проблема стандартного хранилища настроек

Рассмотрим ситуацию: вы используете метод ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(). Платформа сохраняет эти данные в системной таблице в разрезе текущего пользователя. Когда «Пользователь 2» пытается прочитать настройки, сохраненные «Пользователем 1», система выдает ошибку доступа. Это происходит потому, что для чтения чужих настроек требуются права Администрирование данных, которых у обычных пользователей (менеджеров, бухгалтеров) нет и быть не должно.

Даже использование УстановитьПривилегированныйРежим(Истина) в коде внешней обработки не решает проблему в клиент-серверном варианте, так как внешняя обработка запускается в контексте, где этот режим не может быть активирован без наличия серверного модуля с соответствующей галочкой в самой конфигурации. Выясним, как обойти это ограничение, используя архитектурные возможности УТ 11.

Решение 1: Использование справочника Дополнительные отчеты и обработки

Поскольку мы обсуждаем внешнюю (подключаемую) обработку, она уже зарегистрирована в системе в справочнике ДополнительныеОтчетыИОбработки. Проанализируем идею хранения настроек непосредственно в этом объекте. Это наиболее логичное место, так как настройки будут жестко привязаны к конкретному экземпляру вашей обработки.

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

  1. Создание хранилища: Если конфигурация позволяет вносить небольшие изменения, можно добавить дополнительный реквизит к справочнику. Однако, если конфигурация на поддержке, мы можем использовать механизм дополнительных реквизитов (сведений), который включен почти во всех типовых решениях.
  2. Сериализация данных: Настройки формы (флажки, поля ввода, списки) лучше всего собрать в структуру или соответствие, а затем преобразовать в ХранилищеЗначения.

Пример кода для сохранения настроек в дополнительное сведение обработки:


// Сохранение настроек во внешнюю обработку
Процедура СохранитьОбщиеНастройки(СтруктураНастроек) Экспорт
    СсылкаНаОбработку = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("МояВнешняяОбработка");
    Если СсылкаНаОбработку.Пустая() Тогда
        Возврат;
    КонецЕсли;

    ОбъектНастроек = СсылкаНаОбработку.ПолучитьОбъект();
    // Предположим, мы используем механизм ДополнительныхСведений БСП
    ЗначениеНастроек = Новый ХранилищеЗначения(СтруктураНастроек, Новый СжатиеДанных(9));
    
    // Запись через стандартные процедуры БСП
    УправлениеСвойствами.ЗаписатьЗначениеСвойства(СсылкаНаОбработку, СвойствоСсылка, ЗначениеНастроек);
КонецПроцедуры

Решение 2: Регистр сведений Общие настройки узлов информационных баз

В УТ 11 существует типовой регистр сведений ОбщиеНастройкиУзловИнформационныхБаз. Несмотря на свое специфическое название, этот регистр часто используется разработчиками БСП для хранения произвольных данных, которые должны быть доступны всем узлам (или всем пользователям) без привязки к конкретному человеку. Это «легальный» способ хранить общие параметры без изменения метаданных конфигурации.

Проанализируем преимущества этого метода:

Посмотрим на пример работы с этим регистром:


// Чтение настроек из типового регистра
Функция ПрочитатьОбщуюНастройку(КлючНастройки)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	ОбщиеНастройкиУзловИнформационныхБаз.ЗначениеНастройки
        |ИЗ
        |	РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз КАК ОбщиеНастройкиУзловИнформационныхБаз
        |ГДЕ
        |	ОбщиеНастройкиУзловИнформационныхБаз.ИмяНастройки = &ИмяНастройки";
    
    Запрос.УстановитьПараметр("ИмяНастройки", "Настройки_МояОбработка_" + КлючНастройки);
    Результат = Запрос.Выполнить();
    
    Если Не Результат.Пустой() Тогда
        Выборка = Результат.Выбрать();
        Выборка.Следующий();
        Возврат Выборка.ЗначениеНастройки.Получить();
    КонецЕсли;
    
    Возврат Неопределено;
КонецФункции

Решение 3: Использование специализированных справочников БСП

В некоторых версиях УТ 11 можно встретить справочник НастройкиОтчетов или аналогичные. Хотя автор темы в обсуждении выразил сомнение в использовании подсистемы вариантов отчетов из-за её сложности, рассмотрим упрощенный подход. Мы можем создать свою запись в справочнике, который не контролируется по правам доступа Rls (Record Level Security) так жестко, как системные таблицы настроек.

Важный нюанс: При сохранении «общих» настроек всегда возникает вопрос конкуренции. Если два пользователя одновременно открыли обработку, изменили настройки и нажали «Сохранить», победит тот, кто нажал кнопку последним. Это необходимо учитывать в логике работы обработки, возможно, добавляя дату последнего изменения или имя автора правки в структуру настроек.

Решение 4: Хранение во внешнем файле (для продвинутых задач)

Если ваша база работает в клиент-серверном режиме и у сервера 1С есть доступ к определенному сетевому ресурсу, можно хранить настройки в формате JSON или XML во внешнем файле. Рассмотрим этот вариант как «запасной», если требуется хранить очень большой объем данных, который не хочется «тащить» в базу данных.

Однако, более правильным с точки зрения 1С будет использование справочника Файлы (подсистема «Работа с файлами» БСП). Вы создаете один элемент-файл, и программно обновляете его двоичные данные. Платформа сама позаботится о правах доступа и хранении (в томах на диске или в базе).

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

Для реализации общих настроек внешней обработки в УТ 11 рекомендуется придерживаться следующей иерархии выбора:

  1. Регистр сведений «Общие настройки узлов информационных баз» — самый быстрый и чистый способ для хранения небольших структур.
  2. Дополнительные сведения справочника «Дополнительные отчеты и обработки» — если настройки логически являются частью самой обработки.
  3. Свой справочник или константа — если у вас есть возможность изменять конфигурацию или использовать расширение.

Используя эти методы, вы обеспечите стабильную работу пользователей без необходимости давать им избыточные административные права, сохраняя при этом целостность и доступность общих параметров работы системы.

← На главную