Oscript позволяет программисту 1С делать чудеса за короткое время.
Возникла задача - нужно отслеживать статус подключения рабочей базы (списка рабочих баз) к хранилищу.
Обычно такое решается административным способом (дать по рукам тому, кто отключил базу от хранилища, и обещать при повторении ситуации оторвать руки совсем), но все же стало интересно, можно ли решить эту задачу православным oscript.
А как вообще мы понимаем, подключена база к хранилищу или нет? При запуске конфигуратора и открытии конфигурации появляется окно авторизации в хранилище. Но это руками, а как машина будет определять? Пакетный режим запуска конфигуратора точно имеет возможность работы с хранилищем, помнится, есть ключи "/ConfigurationRepositoryF". Значит, остается только выяснить, можно ли это сделать с помощью oscript.
Конечно, можно!
У oscript есть библиотека InternetMail, реализующая функционал работы с электронными письмами, отлично, воспользуемся ей.
Работать с конфигуратором помогает v8runner или v8storage. v8storage более специализированная библиотека, заточена только на работу с хранилищем. v8runner мне лично более знакома, и в ней есть команда УстановитьМеткуДляВерсииВХранилище. Заведем пользователя в хранилище с правом менять метки версий. В работе хранилища мы используем комментарии, поэтому попытка смены метки не должна повредить нам. Попробуем установить метку, если получилось - значит конфигурация подключена, нет - значит не подключена, или нам что-то помешало.
Напишем скрипт
ПутьКХранилищу = "C:\ПутьКХранилищу";
БазыДляПроверки = БазыДляПроверки();
ЕстьПроблемныеБазы = Ложь;
Для Каждого ОписаниеБазы Из БазыДляПроверки Цикл
ОписаниеБазы.ПодключеноКХранилищу = Истина;
Конфигуратор = Новый УправлениеКонфигуратором();
Конфигуратор.УстановитьКонтекст(ОписаниеБазы.СтрокаПодключения, ОписаниеБазы.Пользователь, ОписаниеБазы.Пароль);
Попытка
Конфигуратор.УстановитьМеткуДляВерсииВХранилище(ПутьКХранилищу, ОписаниеБазы.ПользовательХранилища, ОписаниеБазы.ПарольХранилища, "ПроверкаПодключенияКонфигурацииКХранилищу");
Исключение
ОписаниеБазы.ПодключеноКХранилищу = Ложь;
ЕстьПроблемныеБазы = Истина;
ОписаниеБазы.ТекстОшибки = ОписаниеОшибки();
КонецПопытки;
КонецЦикла;
Здесь мы выполняем команду УстановитьМеткуДляВерсииВХранилище в попытке для того, чтобы поймать описание ошибки и передать его дальше (если конечно будет ошибка).
В функции БазыДляПроверки() определим список баз с их свойствами. Мы сразу передаем корректно сформированную строку подключения к базе, которую затем правильно воспримет v8runner. Обратите внимание, вид строки подключения для файловой и серверной базы отличается (пример указан и для такой и для такой базы):
Функция БазыДляПроверки()
БазыДляПроверки = Новый Массив;
ОписаниеСтруктуры = "Имя,СтрокаПодключения,Пользователь,Пароль,ПользовательХранилища,ПарольХранилища,ПодключеноКХранилищу,ТекстОшибки";
БазыДляПроверки.Добавить(Новый Структура(ОписаниеСтруктуры, "Тестовая база файловая", "/FC:\ПутьКБазе", "Пользователь1С", "Пароль", "ПользовательХранилища"));
БазыДляПроверки.Добавить(Новый Структура(ОписаниеСтруктуры, "Тестовая база серверная", "/IBConnectionString""Srvr=server:port; Ref='baza'""", "Пользователь1С", "Пароль", "ПользовательХранилища"));
Возврат БазыДляПроверки;
КонецФункции
Ну и после проверки отправляем письмо с результатами. Полный скрипт прикреплен к публикации.
Запустим этот скрипт.
Все хорошо:
При этом в истории хранилища поменялась метка последней версии:
Или плохо:
Благодарности
Удивительно быстро и легко получилось. Спасибо создателям oscript и многочисленных библиотек к нему.