При внедрении внешних обработок, таких как инструменты для электронного документооборота (например, СБИС или Контур.Диадок), системные администраторы и программисты часто сталкиваются с проблемой индивидуальных настроек. Когда пользователей десятки, а работа ведется через терминальный сервер, ручная настройка путей обмена, каталогов и флагов в интерфейсе каждого сотрудника превращается в трудоемкую задачу. Рассмотрим, как автоматизировать этот процесс и обеспечить единые настройки для всей информационной базы.
По умолчанию платформа 1С сохраняет настройки форм и обработок в разрезе конкретного пользователя. Эти данные попадают в ХранилищеНастроекДанныхФормы или ХранилищеОбщихНастроек, где ключом выступает имя пользователя. Если обработка СБИС является внешней или встроенной через справочник Дополнительные отчеты и обработки, она ведет себя так же: каждый, кто открыл ее впервые, видит пустые поля.
Проанализируем ситуацию: нам необходимо переопределить стандартное поведение системы так, чтобы при первом запуске или принудительно для всех считывался некий «эталонный» набор параметров. Выясним, какие инструменты предоставляет платформа и библиотека стандартных подсистем (БСП) для решения этой задачи.
Один из самых быстрых способов — настроить обработку «под собой» (под учетной записью администратора), а затем программно размножить эти настройки всем остальным. Платформа 1С имеет встроенный метод ХранилищеОбщихНастроек.Копировать(). Рассмотрим пример кода, который можно запустить в консоли кода или оформить в виде маленькой служебной обработки.
// Пример переноса настроек от эталонного пользователя всем остальным
Процедура КопироватьНастройкиПользователей(ИмяЭталонногоПользователя)
// Получаем список всех пользователей информационной базы
ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ТекущийПользователь Из ПользователиИБ Цикл
Если ТекущийПользователь.Имя = ИмяЭталонногоПользователя Тогда
Продолжить;
КонецЕсли;
// Копируем настройки конкретного объекта (обработки)
// Нужно знать ключ объекта, под которым сохраняются настройки
ХранилищеОбщихНастроек.Копировать(
"ОбщаяНастройкаСБИС",
ИмяЭталонногоПользователя,
ТекущийПользователь.Имя
);
КонецЦикла;
Сообщить("Настройки успешно скопированы всем пользователям.");
КонецПроцедуры
Этот метод эффективен, если структура настроек обработки сохраняется в ХранилищеОбщихНастроек. Однако стоит помнить, что если пользователь уже что-то изменил у себя, этот скрипт перезапишет его данные.
Если ваша конфигурация построена на БСП (версии 2.3 и выше), проанализируем возможность использования Безопасного хранилища данных. Это специальный механизм, предназначенный для хранения паролей, ключей доступа и других конфиденциальных настроек. Разберем по шагам, как это реализовать:
ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить().Посмотрим на пример логики инициализации настроек при открытии формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Сначала пытаемся загрузить персональные настройки
Настройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбработкаСБИС_Настройки", "");
// Если персональных настроек нет, загружаем общие (под пустой строкой пользователя)
Если Настройки = Неопределено Тогда
Настройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбработкаСБИС_Настройки", "ОБЩИЕ_ДЛЯ_ВСЕХ");
КонецЕсли;
Если Настройки <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(ЭтаФорма, Настройки);
КонецЕсли;
КонецПроцедуры
Многие версии СБИС хранят свои настройки в файлах формата .xml или .ini, которые располагаются в профиле пользователя Windows (обычно это путь %AppData%\Roaming\Saby...). Рассмотрим ситуацию в среде терминального сервера.
Когда вы настраиваете обработку, в вашем профиле создается файл, например sbis_settings.xml. Чтобы не заходить под каждым пользователем, мы можем настроить один раз «эталонный» профиль и использовать Групповые политики (GPO) или Logon-скрипты. Проанализируем алгоритм:
.bat или .ps1 скрипт, который при входе пользователя в систему проверяет наличие файла настроек в его профиле и, если его нет (или он старый), копирует файл из сетевой папки.Важный момент: в путях внутри XML-файла часто используются абсолютные ссылки. Убедитесь, что пути к каталогам обмена (например, C:\Exchange\SBIS\) одинаково доступны для всех пользователей терминала.
Чтобы не изменять код самой обработки (что важно для последующих обновлений от разработчика СБИС), лучше всего создать небольшое Расширение конфигурации. Рассмотрим, как это работает. Мы можем перехватить событие открытия формы обработки и принудительно подставить нужные значения реквизитов.
Используем аннотацию &После для процедуры ПриСозданииНаСервере формы обработки:
&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Если это первый запуск или нам нужно принудительно установить пути
Если ПустаяСтрока(Объект.ПутьККаталогуОбмена) Тогда
Объект.ПутьККаталогуОбмена = "T:\SbisExchange\";
Объект.ИспользоватьЭДО = Истина;
// И так далее для всех важных флагов
КонецЕсли;
КонецПроцедуры
Этот метод наиболее гибкий, так как он не ломает основную логику обработки и позволяет централизованно управлять настройками через код расширения.
Если вы встроили СБИС через БСП в справочник дополнительных обработок, выясним, как использовать функционал «Дополнительных реквизитов». Мы можем добавить к самой записи справочника (где хранится файл обработки) дополнительный реквизит типа «Строка» или «ХранилищеЗначения», в который поместим структуру настроек в формате XML или JSON.
Процедура внутри обработки может считывать эти данные «сама о себе», обращаясь к владельцу (ссылке на элемент справочника). Это позволяет администратору один раз изменить настройки в карточке обработки в интерфейсе 1С, и они мгновенно вступят в силу для всех пользователей.
Подведем итог. Выбор метода зависит от ваших навыков и архитектуры системы:
ХранилищеОбщихНастроек.Копировать().Проанализируйте, какой объем изменений вы готовы внести. Если вы только начинаете свой путь в разработке 1С, как автор вопроса, наиболее безопасным и «прокачивающим» методом будет работа с механизмами БСП или создание расширения. Это позволит избежать «замусоривания» основного кода обработки и упростит поддержку системы в будущем.