Ярлык на chdbfl на каждый рабочий стол в сети РИБ

В сети РИБ из 40 баз нужно было на каждом компьютере сделать ярлык для тестирования файловой БД с помощью chdbfl. Как я это сделал автоматически.

 

В файловых базах данных постоянно что-то случается и требуется запускать тестирование и исправление базы с помощью 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();

 

Описание на человеческом языке:

  1. Определяем путь к базе.
  2. Программа Check1CD.exe не работает с каталогами на русском языке. Поэтому переделываем путь в формат 8.3 – он будет строго на латинском языке.
  3. Получаем путь к папкам «Мои документы» и «Рабочий стол».
  4. Извлекаем из константы с кодом Check1CD хранимый в ней файл и записываем его в папку «Мои документы» с именем файла для выполнения.

Создаем ярлык на рабочем столе. Отдельно указываем в TargetPath расположение выполнимого файла и в Arguments его аргументы.