Установить обновление на базу можно с помощью параметров командной строки /DisableStartupDialogs, /UpdateCfg, /UpdateDBCfg.
Пример батника для запуска:
echo off
cd /d "%~dp0"
Set user=User
REM пароль вводится в командной строке через пробел первым параметром
Set password=%1
REM Надо задать путь до исполняемого файла 1С, для последовательного выполнения
REM Можно указать и "C:\Program Files\1cv8\common\1cestart.exe", но тогда все базы запустятся одновременно
SET path1C="C:\Program Files\1cv8\8.3.25.1374\bin\1cv8.exe"
for %%i in (%bases%) do (
start "" /wait %path1C% CONFIG /S"srv1s\%%i" /N"%user%" /P"%password%" /DisableStartupDialogs /UpdateCfg %file_cfu% /UpdateDBCfg /Out %%i.log
)
Командную строку можно сформировать в 1с и запустить с помощью метода ЗапуститьПриложение().
Пример:
&НаКлиенте
Функция ОбновитьРелизБазы(СтрокаНастроек)
Перем Результат;
Результат = "";
ПутьКФайлу1С = КаталогПрограммы()+ "1cv8.exe";
ИмяБазы = СтрокаНастроек.ИмяБазы; //берем только имя базы
СтрокаКоманды = ПутьКФайлу1С + " CONFIG /S""srv1s\" + ИмяБазы + """ /N""" + Объект.ИмяПользователя +""" /P""" + Объект.Пароль+ """ /DisableStartupDialogs /UpdateCfg " + ОБъект.ИмяФайлаОбновления + " /UpdateDBCfg";
Если ЗначениеЗаполнено(Объект.ПапкаВыгрузкиЛогов) Тогда //можно вывести файлы логов выполнения обновления в папку
СтрокаКоманды = СтрокаКоманды + " /Out " + ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Объект.ПапкаВыгрузкиЛогов) + ИмяБазы + ".log";
КонецЕсли;
КодВозврата = Неопределено;
ЗапуститьПриложение(СтрокаКоманды,,Истина, КодВозврата);
Результат = "Код завершения обновления: " + Строка(КодВозврата);
Если Объект.ПринятьОбновленияПослеОбновления Тогда
РезультатПодтвреждения = ПодтвердитьЛегальностьОбновленияНаСервере(СтрокаНастроек);
Результат = Результат + Символы.Таб + РезультатПодтвреждения;
КонецЕсли;
Возврат Результат;
КонецФункции
//После того, как установили обновление надо запустить клиента, указать, что обновление получено легально и запустить обновление. Это можно сделать программно, но надо учесть, что вся эта байда запускается при запуске клиента. Поэтому есть смысл легализовать обновление через COM-соединение.
&НаСервере
Функция ПодтвердитьЛегальностьОбновленияНаСервере(СтрокаНастроек)
Перем Результат;
Результат = "";
ПодключениекБазе = ПодключитьсяКБазе(СтрокаНастроек); //подключаемся через COM. Функция здесь не указывается.
Если ПодключениекБазе = Неопределено Тогда
Возврат "";
КонецЕсли;
Результат = ПодтвердитьЛегальность(ПодключениекБазе);
ПодключениекБазе = Неопределено;
Возврат Результат;
КонецФункции
&НаСервере
Функция ПодтвердитьЛегальность(ПодключениекБазе)
Перем Результат;
Результат = Неопределено;
Попытка
ПодключениекБазе.УстановитьПривилегированныйРежим(Истина);
ПодключениекБазе.ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений();
ПодключениекБазе.ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы();
Результат = "Легальность установлена, база обновлена.";
Исключение
Результат = "Ошибка обновления обработки: " + ОписаниеОшибки();
КонецПопытки;
Возврат Результат;
КонецФункции
|