В процессе сопровождения информационных баз 1С возникают ситуации, когда необходимо сбросить или изменить данные авторизации в сервисе интернет-поддержки (ИТС). В типовых конфигурациях, таких как «1С:ERP Управление предприятием», «Комплексная автоматизация» или «Управление торговлей 11», для этого предусмотрена специальная кнопка Отключить в разделе настроек интернет-поддержки. Однако из-за ошибок в правах доступа, особенностей доработки конфигурации или сбоев кэша эта кнопка может исчезнуть из интерфейса. В таких случаях программисту приходится прибегать к программным методам решения задачи.
Разберем подробно, как работает механизм хранения данных авторизации, как правильно извлечь текущие данные и какими методами их можно очистить или перезаписать, используя возможности Библиотеки стандартных подсистем (БСП).
Данные для входа в ИТС (логин и пароль) не хранятся в обычных реквизитах справочников или константах в открытом виде. Для обеспечения безопасности 1С использует механизм Безопасного хранилища. Это специальная системная таблица, содержимое которой зашифровано. Прямой доступ к ней через консоль запросов невозможен, а чтение данных допустимо только в контексте сервера под пользователем с достаточными правами (обычно это полные права или роль «Администрирование системы»).
Для взаимодействия с этими данными в составе БСП существует подсистема ИнтернетПоддержкаПользователей. Рассмотрим основные шаги по программному управлению этими настройками.
Прежде чем что-то удалять, проанализируем текущую ситуацию. Чтобы понять, какие данные сейчас сохранены в базе, мы можем воспользоваться методом программного интерфейса подсистемы. Это полезно для диагностики, например, если вы подозреваете, что в базе сохранен некорректный логин.
Рассмотрим пример кода, который выводит текущий логин и пароль (пароль в целях безопасности обычно возвращается в виде замаскированной строки или не возвращается вовсе в зависимости от версии БСП):
&НаСервере
Процедура ПолучитьДанныеИТСНаСервере()
// Получаем структуру с данными авторизации
ДанныеАвторизации = ИнтернетПоддержкаПользователей.ДанныеАутентификацииПользователяИнтернетПоддержки();
Если ДанныеАвторизации = Неопределено Тогда
Сообщить("Данные интернет-поддержки не найдены в базе.");
Возврат;
КонецЕсли;
Для Каждого Элемент Из ДанныеАвторизации Цикл
// Ключи в структуре обычно: "Логин" и "Пароль"
Сообщить(Элемент.Ключ + ": " + Элемент.Значение);
КонецЦикла;
КонецПроцедуры
Обратите внимание, что метод ДанныеАутентификацииПользователяИнтернетПоддержки() возвращает структуру. Если интернет-поддержка никогда не подключалась, результат будет пустым или вызовет исключение, которое следует обрабатывать через конструкцию Попытка...Исключение.
Если в интерфейсе отсутствует кнопка Отключить, мы можем имитировать ее нажатие программно. Просто записать пустую строку в хранилище недостаточно — это может привести к некорректной работе механизмов проверки подписки. Правильным решением будет полное удаление соответствующих ключей из безопасного хранилища.
Выясним причину, почему это важно: система 1С проверяет само наличие ключа в хранилище. Если ключ существует (даже с пустым значением), система считает, что попытка подключения была произведена. Полное удаление заставляет подсистему перейти в статус «Не подключено».
Для реализации удаления выполним следующий код:
&НаСервере
Процедура ОчиститьДанныеАвторизацииИТС()
// Получаем идентификатор подсистемы, который служит владельцем настроек
ИдентификаторПодсистемы = ИнтернетПоддержкаПользователей.ИдентификаторПодсистемы();
// Используем общий модуль для работы с безопасным хранилищем
// Удаляем логин
ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(ИдентификаторПодсистемы, "Логин");
// Удаляем пароль
ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(ИдентификаторПодсистемы, "Пароль");
Сообщить("Данные интернет-поддержки успешно удалены из безопасного хранилища.");
КонецПроцедуры
После выполнения этого кода при открытии любого сервиса (например, «1С:Контрагент» или «Загрузка курсов валют») программа снова предложит ввести логин и пароль.
Иногда задача стоит иначе: нужно не просто удалить старые данные, а программно прописать новые (например, при массовом развертывании баз или централизованной смене паролей). Для этого в подсистеме предусмотрен высокоуровневый метод, который сам заботится о правильной записи в безопасное хранилище.
Проанализируем пример записи данных:
&НаСервере
Процедура ЗаписатьНовыеДанныеИТС(НовыйЛогин, НовыйПароль)
Попытка
// Метод выполняет сохранение данных и обновление внутренних флагов системы
ИнтернетПоддержкаПользователей.СохранитьДанныеАутентификации(НовыйЛогин, НовыйПароль);
Сообщить("Новые данные авторизации успешно сохранены.");
Исключение
ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
Сообщить("Не удалось сохранить данные: " + ТекстОшибки);
КонецПопытки;
КонецПроцедуры
Использование СохранитьДанныеАутентификации предпочтительнее прямой записи в хранилище через ОбщегоНазначения, так как этот метод гарантирует соблюдение логики БСП и корректное оповещение других модулей о смене учетных данных.
Даже при правильном коде вы можете столкнуться с тем, что данные «не сбрасываются» или «не обновляются». Рассмотрим основные причины:
ИнтернетПоддержкаПользователейСлужебный.СброситьКэшНастроекПользователя() (если он доступен в вашей версии конфигурации)."Логин" и "Пароль" не срабатывают, следует изучить содержимое общего модуля ИнтернетПоддержкаПользователей, чтобы найти точные строковые константы, используемые в качестве ключей.Таким образом, мы рассмотрели комплексный подход к управлению данными интернет-поддержки. Использование методов УдалитьДанныеИзБезопасногоХранилища и СохранитьДанныеАутентификации позволяет гибко управлять подключением к сервисам 1С даже в тех случаях, когда стандартный пользовательский интерфейс оказывается недоступен или работает некорректно.