При работе с восстановленными копиями информационной базы 1С:Предприятие часто возникает системное окно с предупреждением «Это копия информационной базы». Этот механизм встроен в платформу для защиты от случайного выполнения регламентных заданий или обменов данными, которые могут нанести вред реальной «боевой» системе. Однако при автоматизации тестирования или ежедневной работе с копиями это окно может мешать пользователям. Рассмотрим, как решить эту задачу профессионально.
Многие разработчики начинают с попыток использовать Wscript.Shell или SendKeys для имитации нажатия клавиши ESC. Мы проанализировали этот подход и пришли к выводу, что он является крайне ненадежным по следующим причинам:
Самый правильный и «чистый» способ решения задачи — использование функционала Библиотеки стандартных подсистем (БСП). В типовых конфигурациях 1С логика работы с внешними ресурсами в копиях баз вынесена в отдельный общий модуль. Нам достаточно программно зафиксировать, что работа с внешними ресурсами в данной базе запрещена, либо подтвердить статус копии.
Рассмотрим, как это реализовать в коде вашей внешней обработки или при запуске системы:
Для предотвращения появления окна и корректной обработки статуса базы используйте следующий метод:
// Вызов метода общего модуля для подтверждения статуса базы
БлокировкаРаботыСВнешнимиРесурсами.ЗапретитьРаботуСВнешнимиРесурсами();
Этот метод переводит базу в состояние, при котором она «осознает», что является копией, и снимает необходимость интерактивного подтверждения со стороны пользователя.
Если вы хотите, чтобы ваши собственные обработки были защищены от запуска в копиях баз (например, чтобы случайно не отправить почту клиентам из тестовой базы), мы рекомендуем всегда проверять состояние блокировки в коде ваших модулей. Для этого используйте следующую конструкцию:
Функция РаботаСВнешнимиРесурсамиЗаблокирована() Экспорт
// Проверяем параметр сеанса, установленный платформой или БСП
Возврат ПараметрыСеанса.РаботаСВнешнимиРесурсамиЗаблокирована;
КонецФункции
// Пример использования в обработке
Если БлокировкаРаботыСВнешнимиРесурсами.РаботаСВнешнимиРесурсамиЗаблокирована() = Истина Тогда
// Заблокируем выполнение опасных действий
Возврат;
КонецЕсли;
/AllowExecuteScheduledJobs -Off полезен для запрета фоновых заданий, но он не отменяет работу интерактивного диалога при входе администратора в систему. Поэтому основным методом остается программное обращение к модулю БлокировкаРаботыСВнешнимиРесурсами.Используя предложенный подход, вы сможете полностью автоматизировать процесс работы с копиями баз, избавив себя и пользователей от необходимости совершать лишние клики при каждом входе в систему.