Каждый системный администратор или программист 1С рано или поздно сталкивается с ситуацией, когда учетные данные Портала 1С:ИТС (интернет-поддержки пользователей) внезапно меняются. Хорошо, если в вашем ведении находится одна или две информационные базы — в этом случае ручной ввод логина и пароля займет не более пяти минут. Но что делать, если перед вами "зоопарк" из десятков конфигураций (1С:Бухгалтерия, Управление торговлей, Зарплата и управление персоналом), развернутых как на файловых ресурсах, так и на сервере СУБД?
В этой статье мы подробно разберем, как решить проблему массовой смены данных интернет-поддержки ИТС. Мы рассмотрим внутреннюю архитектуру хранения этих данных в современных конфигурациях 1С, напишем готовую внешнюю обработку для автоматической записи новых параметров, научимся запускать ее пакетно через командную строку и рассмотрим альтернативные инструменты автоматизации.
При попытке обновить логин и пароль вручную в тридцати базах администратор гарантированно потратит несколько часов монотонного труда. Более того, возрастает риск человеческого фактора: опечатки, пропущенные базы, ошибки авторизации. Поэтому автоматизация данного процесса — это не прихоть, а производственная необходимость. Для этой задачи можно использовать обработку для обновления данных авторизации ИТС по списку баз 1С.
Для начала проанализируем ситуацию и поймем, где именно внутри базы 1С хранятся данные интернет-поддержки. В старых конфигурациях (например, на платформе 1С:Предприятие 8.2 со старыми релизами БП 2.0) логин и пароль могли храниться в открытом виде в константах или специализированных регистрах сведений. Однако в современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), подход к безопасности кардинально изменился.
В современных решениях (например, БП 3.0, УТ 11, ЗУП 3.1) логин и пароль ИТС записываются в зашифрованном (сериализованном) виде в специальный регистр сведений РегистрСведений.БезопасноеХранилищеДанных. В распределенных или облачных базах (например, во "Фреше") может использоваться его аналог — РегистрСведений.БезопасноеХранилищеДанныхОбластейДанных.
Особенности этого хранилища:
Данные, имеющее тип ХранилищеЗначения.Попытка напрямую записать логин и пароль в таблицы базы данных через SQL или простым набором записей регистра сведений не увенчается успехом, так как структура хранения защищена от прямого вмешательства. Для корректной работы нам необходимо использовать штатные методы БСП.
Посмотрим на пример программного кода, который решает задачу перезаписи логина и пароля ИТС. Мы можем создать простую внешнюю обработку (файл с расширением .epf), которая при открытии будет автоматически записывать новые учетные данные в безопасное хранилище и закрывать сеанс работы с базой.
В модуле формы нашей обработки напишем следующий код:
&НаСервере
Процедура УстановитьДанныеИТСНаСервере(НовыйЛогин, НовыйПароль)
УстановитьПривилегированныйРежим(Истина);
// Определяем идентификатор подсистемы интернет-поддержки
ИдентификаторПодсистемы = "ИнтернетПоддержкаПользователей";
Попытка
// Записываем логин в безопасное хранилище БСП
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(
ИдентификаторПодсистемы,
НовыйЛогин,
"Логин"
);
// Записываем пароль в безопасное хранилище БСП
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(
ИдентификаторПодсистемы,
НовыйПароль,
"Пароль"
);
ЗаписьЖурналаРегистрации(
"ОбновлениеДанныхИТС",
УровеньЖурналаРегистрации.Информация,
,
,
"Данные ИТС успешно обновлены программно."
);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ЗаписьЖурналаРегистрации(
"ОбновлениеДанныхИТС",
УровеньЖурналаРегистрации.Ошибка,
,
,
"Ошибка при записи данных ИТС: " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)
);
КонецПопытки;
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Параметры авторизации ИТС (укажите ваши актуальные данные)
ЛогинИТС = "ВашНовыйЛогин";
ПарольИТС = "ВашНовыйПароль";
УстановитьДанныеИТСНаСервере(ЛогинИТС, ПарольИТС);
// Завершаем работу системы после выполнения операции
ЗавершитьРаботуСистемы(Ложь);
КонецПроцедуры
Рассмотрим подробнее, как работает этот алгоритм. При запуске обработки срабатывает событие ПриОткрытии на клиенте. Оно передает управление серверной процедуре УстановитьДанныеИТСНаСервере, передавая в нее новые строковые значения логина и пароля.
На сервере мы обязательно устанавливаем привилегированный режим с помощью метода УстановитьПривилегированныйРежим(Истина). Это необходимо для того, чтобы у текущего пользователя (даже если у него временно урезаны права) была техническая возможность сделать запись в системный регистр РегистрСведений.БезопасноеХранилищеДанных.
Далее мы вызываем стандартный метод БСП ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(). Первым параметром передается имя подсистемы, вторым — записываемое значение (логин или пароль), а третьим — уникальный ключ, по которому БСП определяет назначение этих данных. В зависимости от версии БСП ключи могут называться "Логин"/"Пароль" или соотноситься со служебными идентификаторами интернет-поддержки. После успешной записи мы обязательно фиксируем это событие в Журнале регистрации, чтобы администратор мог отслеживать статус выполнения операции.
Теперь, когда у нас есть готовый файл внешней обработки (допустим, мы сохранили его по пути C:\Scripts\UpdateITS.epf), нам нужно запустить его последовательно для всего списка баз. Чтобы не делать это вручную, мы воспользуемся возможностями командной строки платформы "1С:Предприятие 8".
Для запуска файловой базы используется следующий синтаксис командного файла Windows (батника .bat):
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" ENTERPRISE /F "C:\1C_Bases\Accounting" /N "Администратор" /P "ПарольАдмина" /Execute "C:\Scripts\UpdateITS.epf" /DisableStartupMessages
Для клиент-серверного варианта базы синтаксис командной строки будет выглядеть так:
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" ENTERPRISE /S "Server1C\Accounting" /N "Администратор" /P "ПарольАдмина" /Execute "C:\Scripts\UpdateITS.epf" /DisableStartupMessages
Проанализируем ключевые параметры этого запуска:
ENTERPRISE — запускает систему в режиме "1С:Предприятие"./F или /S — указывает путь к файловой базе или адрес серверной базы./N и /P — задают имя пользователя и его пароль для авторизации в базе (у пользователя должны быть права Администратора)./Execute — указывает путь к нашей внешней обработке UpdateITS.epf, которая выполнится сразу после успешного входа в базу./DisableStartupMessages — подавляет появление стартовых всплывающих окон, предупреждений и предложений об обновлении, что критически важно для бесперебойного выполнения пакетного скрипта.Мы можем написать единый командный файл (скрипт .bat или .cmd), в который последовательно пропишем команды вызова для всех наших информационных баз. Скрипт поочередно откроет каждую базу, выполнит обработку записи новых данных ИТС и сразу же закроет сеанс благодаря вызову метода ЗавершитьРаботуСистемы(Ложь) в коде обработки. При необходимости можно воспользоваться конструктором командной строки 1С для проверки параметров запуска.
Если вы не хотите писать собственный код и заниматься отладкой скриптов командной строки, обратите внимание на готовые решения, разработанные сообществом. Одним из самых популярных и надежных инструментов для администрирования баз 1С является утилита «Обновлятор-1С».
Данная программа позволяет автоматизировать большинство рутинных операций, включая смену учетных данных ИТС во всем списке баз за несколько кликов:
Иногда возникает обратная ситуация. Кто-то из коллег уже обновил пароль ИТС на сайте и успешно ввел его в одну из рабочих баз, но затем ушел в отпуск (или, как выразился автор темы на форуме, "ушел в домик, и у него лапки"), отказавшись оперативно предоставить новые данные для остальных баз.
Если пароль уже введен и сохранен хотя бы в одной рабочей конфигурации, мы можем легко прочитать его в открытом текстовом виде, написав простейшую обработку чтения. Посмотрим на пример кода, который возвращает сохраненные данные авторизации:
&НаСервере
Функция ПолучитьПарольИТСНаСервере()
УстановитьПривилегированныйРежим(Истина);
ИдентификаторПодсистемы = "ИнтернетПоддержкаПользователей";
// Получаем данные аутентификации через стандартную функцию БСП
ДанныеАутентификации = ИнтернетПоддержкаПользователей.ДанныеАутентификацииПользователяИнтернетПоддержки();
Если ДанныеАутентификации <> Неопределено Тогда
Возврат "Логин: " + ДанныеАутентификации.Логин + Символы.ПС + "Пароль: " + ДанныеАутентификации.Пароль;
Иначе
Возврат "Данные авторизации ИТС не найдены в этой базе.";
EndIf;
КонецФункции
Запустив такую обработку в той базе, где интернет-поддержка уже успешно настроена и работает, мы мгновенно получим актуальный пароль в окне сообщений. После этого мы сможем использовать этот пароль для настройки остальных баз нашего предприятия.
Таким образом, мы детально разобрали, как устроено хранение учетных данных ИТС в современных конфигурациях 1С, изучили программные методы работы с безопасным хранилищем БСП, написали скрипт для автоматического пакетного обновления данных и рассмотрели готовые инструменты автоматизации. Выберите наиболее подходящий для вашей инфраструктуры метод и забудьте о рутинном ручном вводе параметров!