Каталог решений - Выгрузка в dt на сервере 1С по расписанию с завершением соединений и подключением к консоли сервера через com

Выгрузка в dt на сервере 1С по расписанию с завершением соединений и подключением к консоли сервера через com

Выгрузка в dt на сервере 1С по расписанию с завершением соединений и подключением к консоли сервера через com

В наличии

Была задача настроить по расписанию выгрузку серверной базы в dt, готового решения не нашел, делюсь, может, кому пригодится.

Категория:

Описание

Весь код ограничился одной процедурой, в моем случае процедура запускалась на самом сервере 1С из другой базы, поэтому, когда перед выгрузкой отключал все сеансы, проблемы с отключением самого себя не стояло.

Процедура делает:

1. ищет базу на сервере 1С по имени.

2. завершает все сеансы найденной базы.

3. ставит запрет регламентных заданий.

4. выгружает dt по определенному пути.

5. снимает запрет регламентных заданий.

Я сделал на сервере новую пустую базу, добавил регламентное задание с расписанием, в котором прописал свою процедуру, уже год работает без сбоев.

&НаСервере
Процедура ВыгрузитьНаСервере()
    Коннектор = Новый COMобъект("V83.ComConnector");

    Агент = Коннектор.ConnectAgent("localhost");
    Кластер = Агент.GetClusters().GetValue(0);
    Агент.Authenticate(Кластер, "", "");
    
    Процессы = Агент.GetWorkingProcesses(Кластер);
    Для каждого РабочийПроцесс Из Процессы Цикл
        Если РабочийПроцесс.Running И РабочийПроцесс.IsEnable  Тогда
            СтрокаСоединенияСРабочимПроцессом = РабочийПроцесс.HostName + ":" + Формат(РабочийПроцесс.MainPort, "ЧГ=");
            СоединениеСРабочимПроцессом = Коннектор.ConnectWorkingProcess(СтрокаСоединенияСРабочимПроцессом);
            СоединениеСРабочимПроцессом.AddAuthentication("логин", "пароль");    
            базы = СоединениеСРабочимПроцессом.GetInfoBases();
            //запрещаем запуск регламентных заданий
            для каждого база из базы цикл
                Если база.name = "unf" тогда
                    база.ScheduledJobsDenied = истина;
                    СоединениеСРабочимПроцессом.UpdateInfoBase(база);
                КонецЕсли;    
            конецЦикла;        
            
            базы = Агент.GetInfoBases(Кластер);
            
            //обрубаем все соединения с бд
            для каждого база из базы цикл
                Если база.name = "unf" тогда
                    Сеансы = Агент.GetInfoBaseSessions(Кластер, база);                
                    Для каждого Сеанс Из Сеансы Цикл
                        //Если Сеанс.AppID = "SrvrConsole" Тогда
                        //    Продолжить;
                        //КонецЕсли;
                        Агент.TerminateSession(Кластер, Сеанс);    
                        //Сообщить(Сеанс.AppID)
                    КонецЦикла;                    
                КонецЕсли;    
            КонецЦикла;    
              
        КонецЕсли        
        
    КонецЦикла;    

    
    //делаем паузу 30сек
    КомандаWindows = "Timeout /T " + Строка(30) + " /NoBreak";
    ЗапуститьПриложение(КомандаWindows,,Истина);    
    
    текДата = ТекущаяДата();
    имяВремени = строка(День(текДата))+"_"+строка(месяц(текДата))+"_"+строка(год(текДата))
    +"_"+строка(Час(текДата))+"_"+строка(минута(текДата));
    имяВремени = СтрЗаменить(имяВремени,Символы.НПП,"");
    
    //запускаем выгрузку в .dt
    ЗапуститьПриложение("""C:\Program Files\1cv8\8.3.16.1063\bin\1cv8.exe"" CONFIG /S localhost\unf /N логин /PПароль /Out C:\achiv1C\unf\base\"
    +имяВремени+"_1c.log /DumpIB C:\achiv1C\unf\base\"+имяВремени+"_unf.dt",,истина);
    
    //делаем паузу 30сек
    КомандаWindows = "Timeout /T " + Строка(30) + " /NoBreak";
    ЗапуститьПриложение(КомандаWindows,,Истина);
    
    //разрешаем в бд запуск регл. заданий
    Коннектор = Новый COMобъект("V83.ComConnector");

    Агент = Коннектор.ConnectAgent("localhost");
    Кластер = Агент.GetClusters().GetValue(0);
    Агент.Authenticate(Кластер, "", "");
    
    Процессы = Агент.GetWorkingProcesses(Кластер);
    
    Для каждого РабочийПроцесс Из Процессы Цикл
        Если РабочийПроцесс.Running И РабочийПроцесс.IsEnable  Тогда
            СтрокаСоединенияСРабочимПроцессом = РабочийПроцесс.HostName + ":" + Формат(РабочийПроцесс.MainPort, "ЧГ=");
            СоединениеСРабочимПроцессом = Коннектор.ConnectWorkingProcess(СтрокаСоединенияСРабочимПроцессом);
            СоединениеСРабочимПроцессом.AddAuthentication("backup", "911");    
            базы = СоединениеСРабочимПроцессом.GetInfoBases();
            для каждого база из базы цикл
                Если база.name = "unf" тогда
                    база.ScheduledJobsDenied = ложь;
                    СоединениеСРабочимПроцессом.UpdateInfoBase(база);
                КонецЕсли;    
            конецЦикла;            
        КонецЕсли;    
    конецЦикла;            
    
    Коннектор = неопределено;
    
КонецПроцедуры

 

has been added to your cart:
Оформление заказа