Имя: Пароль:
1C
1С v8
Скрипт для обновления ИБ
0 val245
 
25.11.11
17:04
Имеется распределенная ИБ. Клиент хотел бы,чтоб загрузка происходил всего одним нажатием на кнопку. При этом если конфигурация была обновлена она должна обновляться автоматически. Вот обработака нажатия кнопки агрузки

Попытка    
       Каталог = КаталогОбменаИнформацией;
       
       // Сформировать имя файла
       ИмяФайла = Каталог + ?(Прав(Каталог, 1) = "\","", "\") + "Message" +
       СокрЛП(КонтрУзел.Код) + "_" + СокрЛП(ПланыОбмена.Полный.ЭтотУзел().Код) + ".xml";
       Файл = Новый Файл(ИмяФайла);
       
       Если Не Файл.Существует() Тогда
           Сообщить("Фал не найден!");
           Возврат;
       КонецЕсли;
       
       // Создать и проинициализаровать объект ЧтениеХМL
       ЧтениеXML = Новый ЧтениеXML;
       ЧтениеXML.ОткрытьФайл(Файл.Имя);
       
       // Создать объект ЧтениеСообшенияОбмена и начать чтение сообщения
       ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
       ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
       
       // Прочитать содержимое тела сообщения
       ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения);
       
       // Закончить чтение сообщения и чтение XML
       ЧтениеСообщения.ЗакончитьЧтение();
       ЧтениеXML.Закрыть();
   Исключение
       СтрОписания="Обновление может быть выполнено в режиме Конфигуратор.";
       Если Прав(ОписаниеОшибки(),СтрДлина(СтрОписания))=СтрОписания Тогда
           ОбновитьКонфигурацию();  // процедура обновления конфигурации  
       Иначе
           Сообщить(ОписаниеОшибки());
       КонецЕсли;
       
   КонецПопытки;
   Предупреждение("Чтение изменений завершено.");

Ниже представлен текст процедуры ОбновитьКонфигурацию()


Процедура ОбновитьКонфигурацию()
   ОтключитьОбработчикОжидания("АвтообменДанными");  // отключим наш обработчик, в котором происходит обмен сообщениями
   ПодключитьОбработчикОжидания("ОбновлениеКонфигурацииИБ",10);
КонецПроцедуры

Вот текст процедцры, создающий и запускающей скрипт (все происходит в онопольном режиме, информацию нашел по след. ссылке http://coder1cv8.narod.ru/Publication2.html)

Процедура ОбновлениеКонфигурацииИБ() Экспорт
   МассивСоединений=ПолучитьСоединенияИнформационнойБазы();
   Если МассивСоединений.Количество()>1 Тогда
     Возврат; // ждем дальше...
   КонецЕсли;
   СтрокаСоединения=СтрокаСоединенияИнформационнойБазы();
   ПутьКСкрипту=КаталогВременныхФайлов()+"exchange.vbs";
   Скрипт=Новый ЗаписьТекста(ПутьКСкрипту,КодировкаТекста.ANSI);
   Скрипт.ЗаписатьСтроку("WScript.Sleep 5000"); // на всякий случай
   Скрипт.ЗаписатьСтроку("Set WshShell=CreateObject(""WScript.Shell"")");
   Команда=""""""+КаталогПрограммы()+"1CV8.EXE"""" CONFIG"+?(НСтр(СтрокаСоединения,"File")<>""," /F "+НСтр(СтрокаСоединения,"File")," /S "+НСтр(СтрокаСоединения,"Srvr")+"\"+НСтр(СтрокаСоединения,"Ref"))+" /N Exchange /P Exchange /UpdateDBCfg";
   Скрипт.ЗаписатьСтроку("ReturnCode=WshShell.Run("""+Команда+""",1,1)");
   Скрипт.ЗаписатьСтроку("If ReturnCode=0 Then"); // если обновились удачно, то пытаемся дочитать сообщение
   Команда=""""""+КаталогПрограммы()+"1CV8.EXE"""" ENTERPRISE"+?(НСтр(СтрокаСоединения,"File")<>""," /F "+НСтр(СтрокаСоединения,"File")," /S "+НСтр(СтрокаСоединения,"Srvr")+"\"+НСтр(СтрокаСоединения,"Ref"))+" /N Exchange /P Exchange";
   Скрипт.ЗаписатьСтроку("WshShell.Run """+Команда+""",1,0");
   Скрипт.ЗаписатьСтроку("End If");
   Скрипт.ЗаписатьСтроку("Set FSO=CreateObject(""Scripting.FileSystemObject"")");
   Скрипт.ЗаписатьСтроку("Set File=FSO.GetFile(WScript.ScriptFullName)");
   Скрипт.ЗаписатьСтроку("File.Delete");
   Скрипт.Закрыть();
   ЗапуститьПриложение(ПутьКСкрипту);
   ЗавершитьРаботуСистемы(Ложь);
КонецПроцедуры

Происходит обмен. Идет загрузка, но конфигурация не обновляется. Может кто подскажет, в чем может быть проблема?
1 ПиН
 
25.11.11
17:10
а потом будет ветка - не та конфа скриптом обновлиась и слетели все таблицы...
2 val245
 
25.11.11
17:11
то есть? обмен происходит, данные переходят, но сама конфа не обновляется.. в конфигураторе кнопка обновления активна.
3 val245
 
25.11.11
17:28
вверх
4 val245
 
25.11.11
17:38
---->
5 val245
 
25.11.11
17:57
выше