Весь код ограничился одной процедурой, в моем случае процедура запускалась на самом сервере 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(база);
КонецЕсли;
конецЦикла;
КонецЕсли;
конецЦикла;
Коннектор = неопределено;
КонецПроцедуры