Автоматическое получение справочника БИК (Москва)
Скачать (zip-файл; Размер - 239363)Обсудить в форуме
Описание
Для автоматического получения справочника БИК в МЦИ, написан скрипт (JS), который с компьютера, подключенного к интернету (обязательно) по дате получает полную базу, раскрывает архив в каталог.
Ведется лог, и в случае нештатный ситуация отсылается сообщение по емейл. В случае штатной работы - только пишется в лог.
Под Win7 можно можно этот скрипт подключить к шедулеру C:\Windows\System32\taskschd.msc.
Остается только в АБС обновить справочники.
С уважением,
Измайлов Ф.В.
Ведется лог, и в случае нештатный ситуация отсылается сообщение по емейл. В случае штатной работы - только пишется в лог.
Под Win7 можно можно этот скрипт подключить к шедулеру C:\Windows\System32\taskschd.msc.
Остается только в АБС обновить справочники.
С уважением,
Измайлов Ф.В.
Текст примера
var fso = new ActiveXObject("Scripting.FileSystemObject"); var wsh = new ActiveXObject("WScript.Shell"); var ForReading = 1, ForWriting = 2, ForAppending = 8; var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0; function sendMess(mess){ var cdo = new ActiveXObject("CDO.Message"); with(cdo){ from="bik@mci.cbr.ru"; to="<name@domen.ru>"; subject=mess; configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver")="IP or namedomen"; configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing")=2; configuration.fields.update(); } cdo.send(); cdo = null; } var currPath = WScript.ScriptFullName.substr(0,WScript.ScriptFullName.lastIndexOf("\\")); /* Если сущесвует прошлый файл - удаляем */ if(fso.FileExists(currPath+"\\bik.zip")){ fso.DeleteFile(currPath+"\\bik.zip"); } /* Заводим файл протокола работы */ var logName = currPath+"\\getBIK.log"; if(!fso.FileExists(logName)){ fso.CreateTextFile(logName); } var d = new Date(); try{logFile = fso.OpenTextFile(logName,8);}catch(e){} try{logFile.WriteLine("--------------------------");}catch(e){} try{logFile.WriteLine(d.toLocaleString()+" - старт");}catch(e){} strDay = ((d.getDate())<10)? "0"+(d.getDate()):(d.getDate()); strMonth = ((d.getMonth()+1)<10)? "0"+(d.getMonth()+1):(d.getMonth()+1); fName = "bik_db_"+strDay.toString()+strMonth.toString()+d.getYear().toString()+".zip"; //fName = "bik_db_27112011.zip"; var oXMLHTTP = new ActiveXObject("MSXML2.XMLHTTP"); //подключение oXMLHTTP.Open("GET","http://www.cbr.ru/mcirabis/BIK/"+fName, 0); //получение файла oXMLHTTP.send(); var oADOStream = new ActiveXObject("ADODB.Stream"); oADOStream.Mode = 3; //разрешение на чтение и запись oADOStream.Type = 1; //тип данных - Binary oADOStream.Open(); oADOStream.Write(oXMLHTTP.responseBody); //сохранение (с перезаписью файла при необходимости) oADOStream.SaveToFile(currPath+"\\bik.zip", 2); /* Получаем объект ФАЙЛ */ try{f = fso.getFile(currPath+"\\bik.zip");} /* Если не получилось - то, Скорее всего - нет связи */ catch(e){ logFile.WriteLine(d.toLocaleString()+" - НЕ УДАЛОСЬ получить файл "+fName); sendMess("Не удалось получить файл - "+fName); WScript.quit(); } try{logFile.WriteLine(d.toLocaleString()+" - записан "+fName+" - "+f.Size+" байт");}catch(e){} try{ts = f.OpenAsTextStream(ForReading, TristateUseDefault); s = ts.Read(6); if(s=="<html>"){ logFile.WriteLine(d.toLocaleString()+" - Попытка получить файл за несуществующую дату "+fName); sendMess("Попытка получить файл за несуществующую дату - "+fName); WScript.quit(); } ts.Close(); } catch(e){ logFile.WriteLine(d.toLocaleString()+" - НЕ УДАЛОСЬ прочитать файл "+fName); sendMess("Не удалось прочитать файл - "+fName); WScript.quit(); } try{ ret = wsh.Run(currPath+"\\7za.exe e -y -bd "+f.path+" -oПутьДляРаскрытияАрхива-кПримеру c:\\sparav.mfo\\dat\\",0,true); if(ret==0){ logFile.WriteLine(d.toLocaleString()+" - Разархивировали файлы из - "+fName); }else{ logFile.WriteLine(d.toLocaleString()+" - НЕ УДАЛОСЬ раскрыть архив (ошибка работы архиватора ) - "+ret); sendMess("НЕ УДАЛОСЬ раскрыть архив - (ошибка работы архиватора ) - "+ret); WScript.quit(); } } catch(e){ logFile.WriteLine(d.toLocaleString()+" - НЕ УДАЛОСЬ раскрыть архив "+fName); sendMess("НЕ УДАЛОСЬ раскрыть архив - "+fName); WScript.quit(); }