Проблемы при закрытии 1с в vbs скрипте
Собственно проблема из-за платформы (использую 8.2.15.289), при вызове процедуры
connection.Exit()
сеанс в 1с закрывается но процесс остается висеть.
При вызове
connection.Exit(False)
еще хуже, остается и сеанс в 1С
При вызове
connection.Terminate()
все замечательно(сеанс и процесс закрываются), но выпадает ошибка vbs
"Cбoй пpи yдaлeннoм вызoвe пpoцeдypы." (800706BE)
Подскажите как можно избавится от этих мелких неприятностей. 20 SM дам тому я ;)
Операционка WIN7
!!! Подключение к базе в файловом режиме через:
Set connection = CreateObject("V82.Application")
connection.Connect("File=...";Usr=""; Pwd="")
connection.Exit()
сеанс в 1с закрывается но процесс остается висеть.
При вызове
connection.Exit(False)
еще хуже, остается и сеанс в 1С
При вызове
connection.Terminate()
все замечательно(сеанс и процесс закрываются), но выпадает ошибка vbs
"Cбoй пpи yдaлeннoм вызoвe пpoцeдypы." (800706BE)
Подскажите как можно избавится от этих мелких неприятностей. 20 SM дам тому я ;)
Операционка WIN7
!!! Подключение к базе в файловом режиме через:
Set connection = CreateObject("V82.Application")
connection.Connect("File=...";Usr=""; Pwd="")
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) WiseSnake, тоже интересовался в свое время подобным вопросом, но ничего не нагуглил. Проблему решил так (только не на VB у меня скрипт, а из одной 1С регл. задание получает данные другой): ни зануление ни вызов в попытке методов Exit, Terminate, которых, впрочем, и нет у COM-объекта, не помогало, а помогло только оформление в отдельную процедуру подключения, выборки и зануления, так как по завершению процедуры платформа сама дестроит объекты.
(8) WiseSnake, вот из конфы выдрал:
Это кусок из выгонялки и обновления конфы.
Set ComConnector = CreateObject("V81.COMConnector")
Set connection = ComConnector.Connect("Srvr=" + ServerName + ":" + CStr(KlasterPortNumber) + ";Ref=" + InfoBaseName + ";Usr=" + InfoBasesAdminName + ";Pwd=" + InfoBasesAdminPass)
...
'Запишем всю информацию из log-файла в журнал регистрации
connection.WriteLogEvent "Регламентное обновление ИБ", connection.EventLogLevel.Information,,, Text
...
connection = Null
ComConnector = Null
ПоказатьЭто кусок из выгонялки и обновления конфы.
(12) WiseSnake, шикарно работает этот код у меня:
Dim ServerName
Dim InfoBaseName
Dim InfoBasesAdminName
Dim InfoBasesAdminPass
ServerName = "srvapp82"
InfoBaseName = "upp"
InfoBasesAdminName = "Юзеров А. И."
InfoBasesAdminPass = "123"
Set ComConnector = CreateObject("V82.COMConnector")
Set connection = ComConnector.Connect("Srvr=""" + ServerName + """;Ref=""" + InfoBaseName + """;Usr=""" + InfoBasesAdminName + """;Pwd=""" + InfoBasesAdminPass + """;")
'Запишем всю информацию из log-файла в журнал регистрации
connection.WriteLogEvent "Регламентное обновление ИБ", connection.EventLogLevel.Information,,, Text
connection = Null
ComConnector = Null
Показать
Наткнулся сразу на то что обработка (запускаемая скриптом) перестала работать:
Ошибка: {ОбщийМодуль.ОбщегоНазначения.Модуль (363)}: Невозможно обработать параметр "глОбработкаАвтоОбменДанными" для получения значения
Код: 800A03E9
Источник: 1С: Предприятие 8.2.15.289
Ошибка: {ОбщийМодуль.ОбщегоНазначения.Модуль (363)}: Невозможно обработать параметр "глОбработкаАвтоОбменДанными" для получения значения
Код: 800A03E9
Источник: 1С: Предприятие 8.2.15.289
(26) WiseSnake, вот на JavaScript'е работающий обмен:
var ServerName = 'srvapp82';
var InfoBaseName = 'upp';
var InfoBasesAdminName = 'Вася пупкин';
var InfoBasesAdminPass = '123';
var ComConnector = new ActiveXObject('V82.COMConnector');
var connection = ComConnector.Connect('Srvr="' + ServerName + '";Ref="' + InfoBaseName +
'";Usr="' + InfoBasesAdminName + '";Pwd="' + InfoBasesAdminPass + '";');
connection.WriteLogEvent('Обмен старт', connection.EventLogLevel.Information);
connection.МодульРегламентныхЗаданий.ВыполнитьОбменДаннымиДляНастройкиАвтоматическогоОбменаДанным и('000003');
connection.WriteLogEvent('Обмен финиш', connection.EventLogLevel.Information);
connection = null;
ComConnector = null;
Показать
Ошибка: {ОбщийМодуль.ПроцедурыОбменаДанными.Модуль (3664)}: {ОбщийМодуль.ПроцедурыОбменаДанными.Модуль (919)}: Ошибка при вызове конструктора (Файл): Установлен безопасный режим. Выполнение операции запрещено
Код: 800A03E9
Источник: 1С: Предприятие 8.2.15.289
Код: 800A03E9
Источник: 1С: Предприятие 8.2.15.289
Альтернативное решение - убедитесь в закрытии всех транзакций, получите PID процесса и кильните его pskill-ом имени Руссиновича или стандартным taskkill.
// первый раз от пользователя pskill нужно запускать интерактивно, дабы принять лицензионное соглашение
// первый раз от пользователя pskill нужно запускать интерактивно, дабы принять лицензионное соглашение
Dim ServerName
Dim InfoBaseName
Dim InfoBasesAdminName
Dim InfoBasesAdminPass
ServerName = "srvapp82"
InfoBaseName = "upp"
InfoBasesAdminName = "Юзеров А. И."
InfoBasesAdminPass = "123"
Set connection = CreateObject("V82.Application")
connection.Connect("Srvr=""" + ServerName + """;Ref=""" + InfoBaseName + """;Usr=""" + InfoBasesAdminName + """;Pwd=""" + InfoBasesAdminPass + """;")
'Запишем всю информацию из log-файла в журнал регистрации
connection.WriteLogEvent "Регламентное обновление ИБ", connection.EventLogLevel.Information,,, Text
connection.Exit(False)
connection = Null
Показатьэтот код работает без проблем, завершая сеанс и не оставляя процессов. Думаю с версией платформы глючок или с операционкой, не исключаю факта, что при завершении работы пользователя открывается диалоговое окно, которое и может мешать.
(40) не знаю, насколько тебе поможет это, но мы как-то сталкивались с такой же проблемой. Правда у нас платформа 8.1.
Мы, как кодеры 1с победили ее со стороны 1с.
По какой-то причине, когда ты по ком говоришь "ЗавершитьРаботуСистемы (Exit)", сеанс вроде бы завершается, но процесс остается висеть. Та же самая процедура, но выполненная со стороны клиента отрабатывала нормально. Победили мы, написав в общем модуле свою функцию, которая вызывала ЗавершитьРаботуСистемы().
т.е. примерно так где ComV8-переменная Ком-Объект,
омНочнойРобот - имя общего модуля
ЗавершитьРаботу - имя процедуры в общем модуле, в теле которой вызывается ЗавершитьРаботуСистемы().
Мы, как кодеры 1с победили ее со стороны 1с.
По какой-то причине, когда ты по ком говоришь "ЗавершитьРаботуСистемы (Exit)", сеанс вроде бы завершается, но процесс остается висеть. Та же самая процедура, но выполненная со стороны клиента отрабатывала нормально. Победили мы, написав в общем модуле свою функцию, которая вызывала ЗавершитьРаботуСистемы().
т.е. примерно так
ComV8.омНочнойРобот.ЗавершитьРаботу()
омНочнойРобот - имя общего модуля
ЗавершитьРаботу - имя процедуры в общем модуле, в теле которой вызывается ЗавершитьРаботуСистемы().
(42)Файловый режим тут не причем. Как я для себя сделал вывод, команда ЗавершитьРаботуСистемы() при каком-то стечении обстоятельств отрабатывает не корректно, именно когда она по OLE вызывается. У нас в половине магазинов работало нормально, а в половине сеанс остовался висеть. Указанное решение победило проблему.
А это исключительно необходимо через "Application"? И на вбскрипт?
Я проблему с зависанием сеансов ком соединения решал следующим образом:
$x = New-Object -ComObject "V82.Comconnector"
<куча кода по работе с базой>
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($x)
Последняя строка разрушает экземпляр ком соединения, в принципе будет работать и с файловой версией, но не тестировал.
Чуть не забыл, приведенный код написан на powershell =)
Я проблему с зависанием сеансов ком соединения решал следующим образом:
$x = New-Object -ComObject "V82.Comconnector"
<куча кода по работе с базой>
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($x)
Последняя строка разрушает экземпляр ком соединения, в принципе будет работать и с файловой версией, но не тестировал.
Чуть не забыл, приведенный код написан на powershell =)
Я бы сначала попробовал так:
и посмотрел бы как именно закрывается 1С. Может, вылетает какое-то сообщение при закрытии, которое укажет "куда копать"? Что пишется в журнале регистрации? Выход зафиксирован или нет?
Кроме того, сейчас актуальная версия платформы 8.2.15.319. С ней проблема остается?
connection.Visible = True
connection.Exit()
и посмотрел бы как именно закрывается 1С. Может, вылетает какое-то сообщение при закрытии, которое укажет "куда копать"? Что пишется в журнале регистрации? Выход зафиксирован или нет?
Кроме того, сейчас актуальная версия платформы 8.2.15.319. С ней проблема остается?
(53) 1С показывается и закрывается, но процесс остается.. выход в 1С фиксируется в журнале. Платформу пока нет возможности обновить... временно
в 1с все отрабатывает без проблем, склоняюсь все больше, что дело в созданных в скрипте объектах и их уничтожении, тогда вопрос как в vbs корректно дестроить объекты?!?
(56) в 1С нет этих сеансов
в 1с все отрабатывает без проблем, склоняюсь все больше, что дело в созданных в скрипте объектах и их уничтожении, тогда вопрос как в vbs корректно дестроить объекты?!?
(56) в 1С нет этих сеансов
Кроме того, в типовых работает настройка пользователя Запрашивать подтверждение при закрытии программы. Может она влияет на процесс закрытия? Ведь работа через V82.Application практически аналогична интерактивному режиму работы...
еще стоило бы "покопать" в направлении отладки процедур ПередЗавершениемРаботыСистемы(Отказ), ПриЗавершенииРаботыСистемы(). В них много "любопытного" кода, который теоретически может блокировать завершение процесса.
еще стоило бы "покопать" в направлении отладки процедур ПередЗавершениемРаботыСистемы(Отказ), ПриЗавершенииРаботыСистемы(). В них много "любопытного" кода, который теоретически может блокировать завершение процесса.
ЗУП, файловая база, платформа 8.2.15.289. Даже без деиницализации переменных, процесса 1С в памяти не остается.
Зубцы на графике диспетчера задач - запуски скрипта:
Зубцы на графике диспетчера задач - запуски скрипта:
Dim InfoBaseName
Dim InfoBasesAdminName
Dim InfoBasesAdminPass
InfoBaseName = "MyZar"
InfoBasesAdminName = "admin"
InfoBasesAdminPass = "admin"
Set connection = CreateObject("V82.Application")
connection.Connect("File=""" + InfoBaseName + """;Usr=""" + InfoBasesAdminName + """;Pwd=""" + InfoBasesAdminPass + """;")
set sysinfo = connection.newObject("СистемнаяИнформация")
'Запишем всю информацию из log-файла в журнал регистрации
connection.WriteLogEvent "Регламентное обновление ИБ", connection.EventLogLevel.Information,,, sysInfo.AppVersion
connection.Exit(false)
ПоказатьDim InfoBasesAdminName
Dim InfoBasesAdminPass
InfoBaseName = "MyZar"
InfoBasesAdminName = "admin"
InfoBasesAdminPass = "admin"
Set connection = CreateObject("V82.Application")
connection.Connect("File=""" + InfoBaseName + """;Usr=""" + InfoBasesAdminName + """;Pwd=""" + InfoBasesAdminPass + """;")
set sysinfo = connection.newObject("СистемнаяИнформация")
'Запишем всю информацию из log-файла в журнал регистрации
connection.WriteLogEvent "Регламентное обновление ИБ", connection.EventLogLevel.Information,,, sysInfo.AppVersion
connection.Exit(false)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот