Имя: Пароль:
1C
1С v8
Скрипт обновления ИБ
0 val245
 
29.11.11
12:36
У нас распределенная информационная база. Конфигурация часто изменяется. Для сотрудников некоторых филиалов почему-то сложно запомнить, что нужно зайти в конфигуратор и обновить базу, поэтому они потребовали, чтоб загрузка и обновление осуществлялись нажатием лишь одно кнопки. В интернете нашел инфу по написанию скрипта http://coder1cv8.narod.ru/Publication2.html

Вот процедуры загрузки и обновления конфигурации

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


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

   ПодключитьОбработчикОжидания("ОбновлениеКонфигурацииИБ",10);
КонецПроцедуры

А здесь процедура создающая и запускающая скрипт (запускается в монопольном режиме).

Процедура ОбновлениеКонфигурацииИБ() Экспорт
    МассивСоединений=ПолучитьСоединенияИнформационнойБазы();
   Если МассивСоединений.Количество()>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 Aleksey
 
29.11.11
12:39
хм, а у меня в БП это сделано без изменения когда.

Строго говоря кусок автообновления есть в типовой, а вот как его запустить я так и не нашел (да и не искал). Так что сделал через передачу параметров
2 Aleksey
 
29.11.11
12:41
и кстати, вместо анализа строки не проще ли

   Если Не КонфигурацияИзменена() Тогда
       Возврат;
   КонецЕсли;


Глобальный контекст.КонфигурацияИзменена (Global context.ConfigurationChanged)
Глобальный контекст (Global context)
КонфигурацияИзменена (ConfigurationChanged)
Синтаксис:

КонфигурацияИзменена()
Возвращаемое значение:

Тип: Булево.
Истина - основная конфигурация отличается от конфигурации базы данных, Ложь - в противном случае.
Описание:

Определяет факт отличия основной конфигурации от конфигурации базы данных.

Доступность:

Сервер, толстый клиент, внешнее соединение.
3 Axel2009
 
29.11.11
12:41
ну после того как завершилось, попробуй запустить свой батник вручную.
4 Ткачев
 
29.11.11
20:58
Стыдно создавать тему...
Помогите написать скрипт: Надо сделать чтобы скрипт запускал 1с, а когда 1с закроют архивировал базу, база файловая, 1 пользователь, 1с7.7 и 1с8.1
5 Ткачев
 
30.11.11
19:53
(4)Set WshShell = CreateObject("Wscript.Shell")
RerRet = WshShell.Run("c:\Progra~2\1cv82\8.2.14.540\bin\1cv8.exe", 1, True)
dim d,m,y
d = day(date())
if d < 10 then
d = "0" & d
end if
m = month(date())
if m < 10 then
m = "0" & m
end if
y = year(date())
h = Hour(Time())
if h < 10 then
h = "0" & h
end if
Min = Minute(Time())
if Min < 10 then
Min = "0" & Min
end if
S = Second(Time())
if S < 10 then
S = "0" & S
end if
s = y & m & d & h & Min & S
WshShell.Run("c:\Progra~1\7-Zip\7z.exe a D:\Archiv\" & s & ".7z d:\1C\CTO\1Cv8.1CD")