В файловых базах данных постоянно что-то случается и требуется запускать тестирование и исправление базы с помощью chdbfl.
У меня был клиент с 40 файловыми базами-узлами РИБ. Раз в 2 дня требовалось запускать chdbfl.
Когда мне надоело по телефону рассказывать сотрудникам, как запускать эту программу (где ее найти, как выбрать каталог базы, поставить галочку исправлять), я решил создать каждому пользователю ярлык на эту программу.
Известно, что программа chdbfl не управляется через командную строку, но добрый программист coder1cv8 написал утилиту, которая позволяет запустить chdbfl автоматически, параметры передаются в командной строке.
Осталось только создать ярлык к этой программе Check1CD.exe.
Чтобы не мучаться с каждой базой отдельно – подключаться, настраивать ярлык и т.п., я написал скрипт на языке 1С. В этой системе уже существовала система удаленного запуска скриптов по расписанию, скрипт запускался раз в день и создавал ярлык.
В результате получался ярлык вида:
При запуске выглядит так:
Вот текст скрипта:
//Источник вдохновения: http://www.askit.ru/custom/progr_admin/m10/10_shortcuts.htm
ИмяИсполнимогоФайла = "Check1CD.exe"; //Имя стартера программы chdbfl
ИмяИсполнимогоФайла = "chdbfl.exe"; //Можно использовать другое имя файла, если есть ограничения на запуск
//Получаем каталог базы
СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();//File="C:\1cv8\Base".
СтрокаСоединения = СтрЗаменить(СтрокаСоединения, "File=", "");
СтрокаСоединения = СтрЗаменить(СтрокаСоединения, ";", "");
СтрокаСоединения = СокрЛП(СтрокаСоединения);
Если Лев(СтрокаСоединения, 1) = """" Тогда
СтрокаСоединения = Сред(СтрокаСоединения, 2);
КонецЕсли;
Если Прав(СтрокаСоединения, 1) = """" Тогда
СтрокаСоединения = Сред(СтрокаСоединения, 1, СтрДлина(СтрокаСоединения) - 1);
КонецЕсли;
//Получаем короткий путь
СтрокаСоединения = СокрЛП(СтрокаСоединения);
Сообщить(СтрокаСоединения);
fso = Новый ComObject ("scripting.filesystemobject");
ОбъектФайл = fso.GetFolder(СтрокаСоединения);
СтрокаСоединения = ОбъектФайл.ShortPath;
Сообщить(СтрокаСоединения);
oShell = Новый ComObject ("WScript.Shell");
ПапкаМоиДокументы = oShell.RegRead("HKCU\software\microsoft\windows\currentversion\explorer\shell folders\personal");
ПапкаДесктоп = oShell.RegRead("HKCU\software\microsoft\windows\currentversion\explorer\shell folders\desktop");
Команда = """" + ПапкаМоиДокументы + "\" + ИмяИсполнимогоФайла + """";
Аргументы = " 1 """ + СтрокаСоединения + "\1Cv8.1CD""";
//Для отладки
Сообщить(ПапкаМоиДокументы);
Сообщить(ПапкаДесктоп);
Сообщить(Команда);
//Извлекаем сохраненный в базе EXE-файл и копируем его в мои документы
ДвДанФайла = Справочники.СапКонстанты.НайтиПоКоду("Check1CD").ЗначениеХранилище.Получить();
ДвДанФайла.Записать(ПапкаМоиДокументы + "\" + ИмяИсполнимогоФайла + "");
//Создаем ярлык на рабочий стол
oShortCut = oShell.CreateShortcut(ПапкаДесктоп + "\Проверить базу данных 1С на ошибки.lnk");
oShortCut.TargetPath = Команда;
oShortCut.Arguments = Аргументы;
oShortCut.Save();
Описание на человеческом языке:
- Определяем путь к базе.
- Программа Check1CD.exeне работает с каталогами на русском языке. Поэтому переделываем путь в формат 8.3 – он будет строго на латинском языке.
- Получаем путь к папкам «Мои документы» и «Рабочий стол».
- Извлекаем из константы с кодом Check1CD хранимый в ней файл и записываем его в папку «Мои документы» с именем файла для выполнения.
Создаем ярлык на рабочем столе. Отдельно указываем в TargetPathрасположение выполнимого файла и в Argumentsего аргументы.