Каталог решений - Скрипт автообновления типовых конфигураций

Скрипт автообновления типовых конфигураций

Скрипт автообновления типовых конфигураций

В наличии

Батник на «языке 1С» для клиент серверных баз, скачивает с сайта ИТС нужное обновление, бекапит базу и обновляет.
На что-то новое не претендует, как рабочая заготовка для собственных «обновляторов» подойдет.
В текущем виде все работает. Надо только занести свои переменные.

Категория:

Описание

Химера из двух работ

Скрипт для автоматического обновления баз 1С (загрузка с сайта, применение и др)

//sale.itcity.ru/public/241253/

И

Как решать повседневные задачи с помощью OneScript

//sale.itcity.ru/public/327581/

—-
В итоге Батник на «языке 1С» для клиент серверных баз, скачивает с сайта ИТС нужное обновление, бекапит базу и обновляет. Подойдет как рабочая заготовка для собственных «обновляторов». В текущем виде все работает. Надо только занести свои переменные.
 

// 	Путь к обновлениям
Перем мРасположениеОбновлений;

//Параметры для подключения к серверу обновления 1С
Перем мИтсЛогин;
Перем мИтсПароль;

//****
Перем home;
Перем DumpIB;

Перем ФайлСписокОбновленийZIP;
Перем ФайлСписокОбновленийXML;

Перем КодВозврата;

// Проверка существования файла или каталога.
//
// Параметр:
//  ПутьКФайлу   - Строка - путь к файлу или каталогу, существование которого
//                 нужно проверить.
//
// Возвращаемое значение:
//  Булево - признак существования файла или каталога.
//
Функция ФайлСуществует(Знач ПутьКФайлу) Экспорт
	
	Файл = Новый Файл(ПутьКФайлу);
	Возврат Файл.Существует();
	
КонецФункции 

Процедура УстановитьКонстанты()
	каталог_tmplts = "D:\tmplts";
 	мИтсЛогин = "---";
	мИтсПароль = "---";
	
	//**Ниже можно не менять.
	мРасположениеОбновлений = каталог_tmplts + "\1c";
	home = каталог_tmplts + "\1Cupdate";
	DumpIB = home + "\DumpIB\";
	ФайлСписокОбновленийXML = home + "\v8cscdsc.xml";
	ФайлСписокОбновленийZIP = home + "\v8upd11.zip";
	
	Если НЕ ФайлСуществует(home) Тогда
		СоздатьКаталог(home); 
	КонецЕсли;
	
	Если НЕ ФайлСуществует(DumpIB) Тогда
		СоздатьКаталог(DumpIB); 
	КонецЕсли;
	
	Если НЕ ФайлСуществует(мРасположениеОбновлений) Тогда
		СоздатьКаталог(мРасположениеОбновлений); 
	КонецЕсли;

КонецПроцедуры

Функция ВернутьРелизИПлатформу(мИмяСервера,мИмяБазы,мВерсияПлатформы,мБазаЛогин,мБазаПароль)

   ПараметрыБазы = Неопределено;
 
   Попытка
        //Создаем COM-объект с идентификатором V82.COMConnector
        COMОбъект = Новый COMОбъект("V"+мВерсияПлатформы+".COMConnector");   //выйдет V82.COMConnector
   Исключение
        Сообщить("Не удалось создать COM-объект!");    
        Возврат ПараметрыБазы;
   КонецПопытки; 

    ПутьКБазе = "srvr="""+ СокрЛП(мИмяСервера) +""";" + "ref=""" + СокрЛП(мИмяБазы)  +""";";    

	СтрокаСоединения = ПутьКБазе + "Usr="""+ СокрЛП(мБазаЛогин) +""";" + "Pwd="""+ СокрЛП(мБазаПароль) + """;";    
 
	 Попытка
        //Устанавливаем внешнее соединение с информационной базой через COM-соединение
        V82 = COMОбъект.Connect(СтрокаСоединения);
    Исключение
    	Сообщить(СтрокаСоединения);
        Сообщить("Внешнее соединение не установлено!");    
        Возврат ПараметрыБазы;
    КонецПопытки;

	 ПараметрыБазы = Новый Структура;
	 ПараметрыБазы.Вставить("ТекущаяВерсия", v82.Метаданные.Версия);
	 ПараметрыБазы.Вставить("ПутьКПлатформе",v82.КаталогПрограммы() + "1cv8.exe");

	 Возврат ПараметрыБазы;
КонецФункции

Процедура УстановитьCOMСоединение(мИмяСервера,мИмяБазы,мВерсияПлатформы,мБазаЛогин,мБазаПароль) 
   Попытка
        //Создаем COM-объект с идентификатором V82.COMConnector
        COMОбъект = Новый COMОбъект("V"+мВерсияПлатформы+".COMConnector");   //выйдет V82.COMConnector
   Исключение
        Сообщить("Не удалось создать COM-объект!");    
        Возврат;
   КонецПопытки; 

    //Инициализируем строку подключения к информационной базе:    
 //   Если ФайловаяИБ Тогда
        //Файловый вариант 
   //     ПутьКБазе = "File="""+ СокрЛП(КаталогИБ) +""";";
//    Иначе
        //Серверных вариант    
        ПутьКБазе = "srvr="""+ СокрЛП(мИмяСервера) +""";"+
               "ref=""" + СокрЛП(мИмяБазы)  +""";";    
//    КонецЕсли;
                
    СтрокаСоединения = ПутьКБазе +
            "Usr="""+ СокрЛП(мБазаЛогин) +""";"+
            "Pwd="""+ СокрЛП(мБазаПароль) +""";";    
        Сообщить(СтрокаСоединения);         
    Попытка
        //Устанавливаем внешнее соединение с информационной базой через COM-соединение
        V82 = COMОбъект.Connect(СтрокаСоединения);
    Исключение
    	Сообщить(СтрокаСоединения);
        Сообщить("Внешнее соединение не установлено!");    
        Возврат;
    КонецПопытки;
             
КонецПроцедуры

		
		
		
// Загрузка списка обновлений из файла XML
// Достаем из XML файла, наибольший номер возможного обновления
Функция ВыполнитьЗагрузкуСпискаОбновлений(ИмяФайлаЗагрузки,ТекущаяВерсияКонфигурации)
	
	СообщениеОбОшибке = "Ошибка при чтении файла списка обновлений.";
	
	Если НЕ ФайлСуществует(ИмяФайлаЗагрузки) Тогда
		Сообщить("Нету XML файла (списка обновлений)");
		Возврат Неопределено;
	КонецЕсли;
	
	ВерсияДляОбновления = Неопределено;
	Попытка
//		ТаблицаЗначений = Новый ТаблицаЗначений;		
//		ТаблицаЗначений.Колонки.Добавить("Конфигурация",          Тип("Строка"));
//		ТаблицаЗначений.Колонки.Добавить("Поставщик",             Тип("Строка"));
//		ТаблицаЗначений.Колонки.Добавить("Версия",                Тип("Строка"));
//		ТаблицаЗначений.Колонки.Добавить("ВерсияДляОбновления",   Тип("Строка"));
//		ТаблицаЗначений.Колонки.Добавить("ПутьКФайлуОбновления",  Тип("Строка"));
//		ТаблицаЗначений.Колонки.Добавить("РазмерФайлаОбновления", Тип("Число"));
		
		ЧтениеXML = Новый ЧтениеXML;
		ЧтениеXML.ОткрытьФайл(ИмяФайлаЗагрузки);
		ЧтениеXML.Прочитать(); // <?xml version="1.0" encoding="UTF-8" ?> 
		
		// Дата формирования файла.
		ЧтениеXML.Прочитать();
		ЧтениеXML.Прочитать();
		ДатаФормирования = ЧтениеXML.Значение;
		ЧтениеXML.Прочитать();
		// Читаем начало элемента Update или конец элемента UpdateList.
		Пока ЧтениеXML.Прочитать() Цикл
			
			Если ЧтениеXML.Имя = "v8u:updateList" Тогда
				Прервать;					
			Иначе		
				
				Конфигурация = ЧтениеXML.ПолучитьАтрибут("configuration");
				
				Пока ЧтениеXML.Прочитать() Цикл
					
					Если ЧтениеXML.Имя = "v8u:update" Тогда
						Прервать;					
					Иначе		
						
						Если ЧтениеXML.Имя = "v8u:vendor" Тогда
							ЧтениеXML.Прочитать();
							Поставщик = ЧтениеXML.Значение;							
						ИначеЕсли ЧтениеXML.Имя = "v8u:version" Тогда
							ЧтениеXML.Прочитать();
							Версия = ЧтениеXML.Значение;
						ИначеЕсли ЧтениеXML.Имя = "v8u:file" Тогда
							ЧтениеXML.Прочитать();
							ПутьКФайлуОбновления = ЧтениеXML.Значение;
						ИначеЕсли ЧтениеXML.Имя = "v8u:size" Тогда
							ЧтениеXML.Прочитать();
							РазмерФайлаОбновления = ЧтениеXML.Значение;
						ИначеЕсли ЧтениеXML.Имя = "v8u:target" Тогда
							ЧтениеXML.Прочитать();
						//	НоваяСтрока = ТаблицаЗначений.Добавить();
						//	НоваяСтрока.Конфигурация          = Конфигурация;
						//	НоваяСтрока.Поставщик             = Поставщик;
						//	НоваяСтрока.Версия                = Версия;
						//	НоваяСтрока.ВерсияДляОбновления	  = ЧтениеXML.Значение;
						//	НоваяСтрока.ПутьКФайлуОбновления  = ПутьКФайлуОбновления;
						//	НоваяСтрока.РазмерФайлаОбновления = РазмерФайлаОбновления;
							Если ЧтениеXML.Значение = ТекущаяВерсияКонфигурации Тогда   //279 Новые в конце. на последнюю полученную и будем обновяться
								ВерсияДляОбновления = Версия;
							КонецЕсли;
						КонецЕсли;
						
						ЧтениеXML.Прочитать();
						
					КонецЕсли;
					
				КонецЦикла;
				
			КонецЕсли;
			
		КонецЦикла;
		
	Исключение
		Сообщить(СообщениеОбОшибке);
		ЧтениеXML.Закрыть();
		Возврат Неопределено;
		
	КонецПопытки;
	//Возврат ТаблицаЗначений;	
	ЧтениеXML.Закрыть();
	Возврат ВерсияДляОбновления;
	
КонецФункции // ВыполнитьЗагрузкуСпискаОбновлений()


//Входящие Сервер - База - ТипКонфигурации - ВерсияРелиза - ВерсияПлатформы-ИТС логин и пароль необязательно
Процедура ПроверитьОбновлениеКонфигурации(мИмяСервера,мИмяБазы,мТипКонфигурации,мВерсияРелиза,мВерсияПлатформы,мБазаЛогин,мБазаПароль)	
	Сообщить("----------------------------------------------------------------------");
	//удалить старые файлы
	УдалитьФайлы(ФайлСписокОбновленийXML);
	УдалитьФайлы(ФайлСписокОбновленийZIP);	

	// Качаем v8cscdsc.xml в виде v8upd11.zip	
	// Создание HTTP-соединения с сервером обновлений
	СерверОбновлений = Новый HTTPСоединение("downloads.1c.ru",,мИтсЛогин,мИтсПароль,);
	ЗапросКСерверуОбновлений = Новый HTTPЗапрос("/ipp/ITSREPV/V8Update/Configs/"+мТипКонфигурации+"/"+мВерсияРелиза+"/"+мВерсияПлатформы+"/v8upd11.zip");
	СерверОбновлений.Получить(ЗапросКСерверуОбновлений,ФайлСписокОбновленийZIP);

	// Распаковываем v8cscdsc.xml
	ФайлZip = Новый ЧтениеZipФайла(ФайлСписокОбновленийZIP); 
	ФайлZip.ИзвлечьВсе(home);
	ФайлZip.Закрыть();
	УдалитьФайлы(ФайлСписокОбновленийZIP);
	
	//+++++ Запрос версии конфигурации базы...
		ПараметрыComБазы = ВернутьРелизИПлатформу(мИмяСервера,мИмяБазы,мВерсияПлатформы,мБазаЛогин,мБазаПароль);
		
		Если ПараметрыComБазы = Неопределено Тогда 
			Возврат; 
		КонецЕсли;
		ВерсияДляОбновления = ВыполнитьЗагрузкуСпискаОбновлений(ФайлСписокОбновленийXML,ПараметрыComБазы.ТекущаяВерсия);
		ТребуетсяОбновление = Ложь;
		Если ВерсияДляОбновления = Неопределено Тогда 
			Сообщить(мИмяБазы + " ver: " +ПараметрыComБазы.ТекущаяВерсия+ " ОБНОВЛЕНИЕ НЕ ТРЕБУЕТСЯ");
			Возврат;
		КонецЕсли;
		Сообщить(мИмяБазы + " ver: " +ПараметрыComБазы.ТекущаяВерсия+ " update: " + ВерсияДляОбновления);
	//----- Запрос версии конфигурации базы...
	
	КомандаПакетногоАрхивирования = """" + ПараметрыComБазы.ПутьКПлатформе +""""+" CONFIG /S"+мИмяСервера+"\"+мИмяБазы+" /N"""+мБазаЛогин+""" /P"""+мБазаПароль+""" /DumpIB "+DumpIB + мИмяБазы + ".dt /OUT """+home+"\"+мИмяБазы+".log"" -NoTruncate";
	//NoTruncate - не очищать логи 
	//Сообщить(КомандаПакетногоАрхивирования);
	ЗапуститьПриложение(КомандаПакетногоАрхивирования,,Истина,КодВозврата);
	Если КодВозврата = 0  Тогда
		Сообщить("Резервная копия успешно создана.");
	Иначе
		Сообщить("Ошибка при создании резервной копии");
		Возврат;
	КонецЕсли;
	
	Версия_Для_Обновления = СтрЗаменить(ВерсияДляОбновления, ".", "_"); //в каталоге шаблонов через подчеркивание храняться

	//качаем новую версию, если уже не скачено
	Если НЕ ФайлСуществует(мРасположениеОбновлений +"\"+мТипКонфигурации+"\"+Версия_Для_Обновления+"\") Тогда
		//качаем новую
		// Создание HTTP-соединения с сервером обновлений
	    Заголовки = Новый Соответствие();
	    Заголовки.Вставить("User-Agent", "1C+Enterprise/8.2");     //без заголовка сайт не даст скачать.
		СерверОбновлений = Новый HTTPСоединение("downloads.v8.1c.ru",,мИтсЛогин,мИтсПароль,);
		СтрокаЗапросHTTP = "/tmplts/1c/"+мТипКонфигурации+"/"+ Версия_Для_Обновления +"/1cv8.zip";
		Сообщить(СтрокаЗапросHTTP);
		ЗапросКСерверуОбновлений = Новый HTTPЗапрос(СтрокаЗапросHTTP,Заголовки);
		СерверОбновлений.Получить(ЗапросКСерверуОбновлений, мРасположениеОбновлений+"\1cv8.zip");
		
		ФайлZip = Новый ЧтениеZipФайла(мРасположениеОбновлений+"\1cv8.zip"); 
		ФайлZip.ИзвлечьВсе(мРасположениеОбновлений+"\"+мТипКонфигурации+"\"+Версия_Для_Обновления);
		ФайлZip.Закрыть();
		
		УдалитьФайлы(мРасположениеОбновлений+"\1cv8.zip");
	КонецЕсли;
	//запускаем обновление                                                                                                                                                              
	КомандаПакетногоОбновления = """" + ПараметрыComБазы.ПутьКПлатформе +""""+" CONFIG /S"+мИмяСервера+"\"+мИмяБазы+" /N"""+мБазаЛогин+""" /P"""+мБазаПароль+""" /UpdateCfg "+мРасположениеОбновлений+"\"+мТипКонфигурации+"\"+Версия_Для_Обновления + "\1cv8.cfu /UpdateDBCfg /OUT """+home+"\"+мИмяБазы+".log"" -NoTruncate";
	//Сообщить(КомандаПакетногоОбновления);
	ЗапуститьПриложение(КомандаПакетногоОбновления,,Истина,КодВозврата);
	Если КодВозврата = 0 Тогда
		Сообщить("База Успешно обновлена");
	Иначе
		Сообщить("ОШИБКА ПРИ ОБНОВЛЕНИИ");
		Возврат;
	КонецЕсли;
	
	//Еще разок запрос версии
	//+++++ Запрос версии конфигурации базы...
		ПараметрыComБазы = ВернутьРелизИПлатформу(мИмяСервера,мИмяБазы,мВерсияПлатформы,мБазаЛогин,мБазаПароль);
		
		Если ПараметрыComБазы = Неопределено Тогда 
			Возврат; 
		КонецЕсли;
		ВерсияДляОбновления = ВыполнитьЗагрузкуСпискаОбновлений(ФайлСписокОбновленийXML,ПараметрыComБазы.ТекущаяВерсия);
		ТребуетсяОбновление = Ложь;
		Если ВерсияДляОбновления = Неопределено Тогда 
			Сообщить(мИмяБазы + " ver: " +ПараметрыComБазы.ТекущаяВерсия+ " ОБНОВЛЕНИЕ НЕ ТРЕБУЕТСЯ");
			Возврат;
		КонецЕсли;
		Сообщить(мИмяБазы + " ver: " +ПараметрыComБазы.ТекущаяВерсия+ " update: " + ВерсияДляОбновления);
	//----- Запрос версии конфигурации базы...

КонецПроцедуры
		
УстановитьКонстанты();
//ОСНОВНЫЕ

//ЗУП 2.5
ПроверитьОбновлениеКонфигурации("ka1sql1:1641","up_el","HRM","25","82","Администратор","Администратор");
ПроверитьОбновлениеКонфигурации("ka1sql1:1641","up_spb","HRM","25","82","Администратор","Администратор");


//БП 3.0
ПроверитьОбновлениеКонфигурации("ka1sql1:1741","bp_domx","Accounting","30","83","Администратор","Администратор");
ПроверитьОбновлениеКонфигурации("ka1sql1:1741","bp_el","Accounting","30","83","Администратор","Администратор");

//СВЕТЛАНЫ
//БП 3.0
ПроверитьОбновлениеКонфигурации("ka1sql1:1741","bp_ip","Accounting","30","83","Администратор","Администратор");
ПроверитьОбновлениеКонфигурации("ka1sql1:1741","bp_guild","Accounting","30","83","Администратор","Администратор");
ПроверитьОбновлениеКонфигурации("ka1sql1:1741","bp_lebedeva","Accounting","30","83","Администратор","Администратор");
//ПроверитьОбновлениеКонфигурации("ka1sql1:1741","bp_service","AccountingBase","30","83","Администратор","Администратор");
ПроверитьОбновлениеКонфигурации("ka1sql1:1741","bp_porsche","Accounting","30","83","Администратор","Администратор");

//ЗУП 2.5
ПроверитьОбновлениеКонфигурации("ka1sql1:1641","up_service","HRM","25","82","Администратор","Администратор");
has been added to your cart:
Оформление заказа