Проблемы при закрытии 1с в vbs скрипте

1. WiseSnake 1521 20.06.12 12:13 Сейчас в теме
Собственно проблема из-за платформы (использую 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="")
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. sai_NT 20.06.12 17:27 Сейчас в теме
(1) WiseSnake, тоже интересовался в свое время подобным вопросом, но ничего не нагуглил. Проблему решил так (только не на VB у меня скрипт, а из одной 1С регл. задание получает данные другой): ни зануление ни вызов в попытке методов Exit, Terminate, которых, впрочем, и нет у COM-объекта, не помогало, а помогло только оформление в отдельную процедуру подключения, выборки и зануления, так как по завершению процедуры платформа сама дестроит объекты.
6. WiseSnake 1521 20.06.12 17:37 Сейчас в теме
(5) Мне надо скрипт по расписанию вызывать, я не могу написать процедуру запуска в 1с. Процедуру закрытия 1с я пытался написать в самой вызываемой обработке - результат аналогичен вызову завершения из vbs
7. sai_NT 20.06.12 17:44 Сейчас в теме
(6) WiseSnake, а что если как-то так:
sub connectTo1c(argument1, argument2)
  ' весь код тут: инициализация коннектора, коннект, прочие действия, зануление
end sub

connectTo1c("dbsrv", "upp");
8. WiseSnake 1521 20.06.12 17:48 Сейчас в теме
(7) Угу, уже попробовал после поста 5. Та же петрушка...
9. sai_NT 20.06.12 18:05 Сейчас в теме
(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
Показать

Это кусок из выгонялки и обновления конфы.
10. WiseSnake 1521 20.06.12 18:28 Сейчас в теме
(9) А что за скрипт vbs не понимает таких записей, на 2 ю строчку ругается(работает только без set) и на Null ругается
Ну я по аналогии Nothing использовал... процесс висит
11. sai_NT 20.06.12 18:51 Сейчас в теме
(10) WiseSnake, надо добавить перед тем кодом
Dim ComConnector
Dim connector
12. WiseSnake 1521 20.06.12 20:08 Сейчас в теме
(11) Ничего не изменилось
13. sai_NT 20.06.12 20:53 Сейчас в теме
(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
Показать
69. user5300 1063 16.12.19 16:59 Сейчас в теме
(1) удалось решить проблему ?)
2. WiseSnake 1521 20.06.12 16:59 Сейчас в теме
Что, так все плохо )))??. Никто даже пофлудить не хочет на эту тему(шутка)??
3. DenisCh 20.06.12 17:07 Сейчас в теме
Ээээ...
А объекты базы все занулены перед выходом?
4. WiseSnake 1521 20.06.12 17:27 Сейчас в теме
14. WiseSnake 1521 21.06.12 10:38 Сейчас в теме
Моя вина! НЕ всю нужную инфу выдал. Сейчас поправлю шапку.
15. sai_NT 21.06.12 11:01 Сейчас в теме
(14) WiseSnake, важно именно V82.Application юзать? И если да, то чем?
16. WiseSnake 1521 21.06.12 11:04 Сейчас в теме
(15) Проще использовать, имеется полный доступ к базе.
17. sai_NT 21.06.12 11:14 Сейчас в теме
(16) WiseSnake, На сколько помню, то Application нужен для интерактива в основном, попробуй все же переписать на COMConnector!
18. WiseSnake 1521 21.06.12 11:16 Сейчас в теме
(17) Новый объект 1с овский (новый элемент справочника) мне как в ком коннекторе создать?
19. sai_NT 21.06.12 11:20 Сейчас в теме
(18) WiseSnake,
Запрос = Connection.NewObject("Запрос");
ДокументОбъект = Connection.Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();

со справочниками, списками значений и т.д. по аналогии.
20. WiseSnake 1521 21.06.12 12:02 Сейчас в теме
Наткнулся сразу на то что обработка (запускаемая скриптом) перестала работать:
Ошибка: {ОбщийМодуль.ОбщегоНазначения.Модуль (363)}: Невозможно обработать параметр "глОбработкаАвтоОбменДанными" для получения значения
Код: 800A03E9
Источник: 1С: Предприятие 8.2.15.289
25. sai_NT 21.06.12 15:24 Сейчас в теме
(20) WiseSnake, не знаю что за конфа у вас и нет возможности сейчас проверить на 8.2, но получение значения глОбработкаАвтоОбменДанными можно получить и так:
Обработки.АвтоОбменДанными.Создать();
26. WiseSnake 1521 21.06.12 15:31 Сейчас в теме
(25) я просто запускаю типовой обмен РИБ. уже в этом обмене выпадают ошибки. конфигурация любая. Обмен РИБ везде есть. В данный момент я экспериментирую на ЗУП(типовой)
Вообщем возвращаемся к использованию Application...
27. sai_NT 21.06.12 17:25 Сейчас в теме
(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;
Показать
33. WiseSnake 1521 22.06.12 10:58 Сейчас в теме
(27) Я JavaScript шифровать не умею... Но надо подумать над этим вариантом...
И возможно это Вариант работает только для SQL потому что отличий по запуску от скрипта на vbs я особых не вижу...
34. sai_NT 22.06.12 11:02 Сейчас в теме
(33) WiseSnake, думаю это дело поправимое с помощью современных технологий поиска ))
35. WiseSnake 1521 22.06.12 11:05 Сейчас в теме
(34) На это время надо, чтобы все переписать (и неизвестно не будет ли это работать точно так же криво, дело то в платформе 1С!). Пока жду еще предложений.
29. asved.ru 36 21.06.12 22:11 Сейчас в теме
я просто запускаю типовой обмен РИБ

(26) WiseSnake, а зачем вообще огород с vbscript городить? Делаем маааахонькую конфу, вся задача которой - при запуске выполнить соответствующие обмены и самоубиться. И запускаем ее через планировщик.
30. sai_NT 21.06.12 22:14 Сейчас в теме
(29) asved.ru, причем можно и в родной конфе настроить обмен РИБ на регламентных задачах и не нужны внешние поанировщики и скрипты.
31. asved.ru 36 21.06.12 22:30 Сейчас в теме
(30) sai_NT, это при условии наличия сервера. Иначе приходится держать регламентный сеанс.

WiseSnake, а действительно, в честь чего возникла задача гонять обмены из vbscript?
32. WiseSnake 1521 22.06.12 10:56 Сейчас в теме
(29) Вот это огород. У меня и так все с махоньким скриптом все работало, пока обновления не вышли, да и сейчас все работает, просто хочу от глюков избавится.
(30) Нельзя. Сервера нет. Регламентный сеанс держать некрасиво.
(31) Удобно. Эффективно. Безопасно (относительно конечно).
21. WiseSnake 1521 21.06.12 12:04 Сейчас в теме
Ошибка: {ОбщийМодуль.ПроцедурыОбменаДанными.Модуль (3664)}: {ОбщийМодуль.ПроцедурыОбменаДанными.Модуль (919)}: Ошибка при вызове конструктора (Файл): Установлен безопасный режим. Выполнение операции запрещено
Код: 800A03E9
Источник: 1С: Предприятие 8.2.15.289
23. asved.ru 36 21.06.12 12:11 Сейчас в теме
(21) WiseSnake, в модуле внешнего соединения ПривилегированныйРежим не бывает. для этого нужно передать исполнение на сервер. Только ComОбъект на сервер не передается, ибо мутабелен, соответственно его нужно переинициализировать в элементарные типы.
22. asved.ru 36 21.06.12 12:06 Сейчас в теме
Альтернативное решение - убедитесь в закрытии всех транзакций, получите PID процесса и кильните его pskill-ом имени Руссиновича или стандартным taskkill.

// первый раз от пользователя pskill нужно запускать интерактивно, дабы принять лицензионное соглашение
24. WiseSnake 1521 21.06.12 12:16 Сейчас в теме
(22) я убить процесс могу и без киллеров. Только вот как определить надо убивать процесс или нет...
Хотелось бы более грамотное решение.
(23) И я об этом же... Выше почитайте.
База в файловом режиме.
28. asved.ru 36 21.06.12 22:06 Сейчас в теме
connection = null;
ComConnector = null;

Ловко.
WiseSnake, ждем :)
36. sai_NT 22.06.12 11:28 Сейчас в теме
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
Показать

этот код работает без проблем, завершая сеанс и не оставляя процессов. Думаю с версией платформы глючок или с операционкой, не исключаю факта, что при завершении работы пользователя открывается диалоговое окно, которое и может мешать.
37. WiseSnake 1521 22.06.12 11:34 Сейчас в теме
(36) Это из-за платформы(на сколько я понимаю). Я написал версию платформы. Такой глючек у всех. 1С обещали давно исправить, но воз и ныне там.
И еще раз обращаю Ваше внимание что пробовать надо в файловом варианте
40. WiseSnake 1521 06.07.12 11:03 Сейчас в теме
Апну, идей больше ни у кого нет?
41. aspiid 8 06.07.12 16:45 Сейчас в теме
(40) не знаю, насколько тебе поможет это, но мы как-то сталкивались с такой же проблемой. Правда у нас платформа 8.1.
Мы, как кодеры 1с победили ее со стороны 1с.
По какой-то причине, когда ты по ком говоришь "ЗавершитьРаботуСистемы (Exit)", сеанс вроде бы завершается, но процесс остается висеть. Та же самая процедура, но выполненная со стороны клиента отрабатывала нормально. Победили мы, написав в общем модуле свою функцию, которая вызывала ЗавершитьРаботуСистемы().
т.е. примерно так
ComV8.омНочнойРобот.ЗавершитьРаботу()
где ComV8-переменная Ком-Объект,
омНочнойРобот - имя общего модуля
ЗавершитьРаботу - имя процедуры в общем модуле, в теле которой вызывается ЗавершитьРаботуСистемы().
42. WiseSnake 1521 07.07.12 10:33 Сейчас в теме
(41) Файловый режим, завершение работы выполняется в любом случае со стороны клиента.
43. aspiid 8 09.07.12 08:23 Сейчас в теме
(42)Файловый режим тут не причем. Как я для себя сделал вывод, команда ЗавершитьРаботуСистемы() при каком-то стечении обстоятельств отрабатывает не корректно, именно когда она по OLE вызывается. У нас в половине магазинов работало нормально, а в половине сеанс остовался висеть. Указанное решение победило проблему.
51. WiseSnake 1521 23.07.12 12:08 Сейчас в теме
(43) файловый режим тут притом, что я писал свою функцию завершения (в 1с) и она в любом случае выполнялась со стороны клиента, но это не помогло.
52. logos 214 23.07.12 12:23 Сейчас в теме
(51) WiseSnake, Каким образом разрушал? При определенных случаях простого присвоения переменной "ничему" недостаточно, именно поэтому я и писал про вариант с принудительным Dispose
44. Владимир Зайцев 09.07.12 14:43 Сейчас в теме
Повторюсь.этот код работает без проблем, завершая сеанс и не оставляя процессов.
45. aspiid 8 09.07.12 15:00 Сейчас в теме
(44) этот, это какой?
Если он работает у Вас, это не значит, что он работает везде. Я, к примеру вполне допускаю, что у нас просто криво DCOM настроен был в некоторых магазинах. Но локализовать проблему не получилось, пришлось со стороны 1с обходить.
46. logos 214 11.07.12 16:32 Сейчас в теме
А это исключительно необходимо через "Application"? И на вбскрипт?
Я проблему с зависанием сеансов ком соединения решал следующим образом:
$x = New-Object -ComObject "V82.Comconnector"
<куча кода по работе с базой>
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($x)
Последняя строка разрушает экземпляр ком соединения, в принципе будет работать и с файловой версией, но не тестировал.

Чуть не забыл, приведенный код написан на powershell =)
49. WiseSnake 1521 23.07.12 12:03 Сейчас в теме
(46) да по Application(читать выше) vbs мне наиболее удобен, возможны варианты.
47. logos 214 11.07.12 16:42 Сейчас в теме
Так же проблема может быть в том, что остаются активными, порожденные в процессе работы кода скрипта, дочерние объекты. Их тоже рекомендуется изничтожать подобным образом.
50. WiseSnake 1521 23.07.12 12:05 Сейчас в теме
(47) все уничтожал, тотально
53. gavlexx 39 24.07.12 17:04 Сейчас в теме
Я бы сначала попробовал так:
connection.Visible = True
connection.Exit()

и посмотрел бы как именно закрывается 1С. Может, вылетает какое-то сообщение при закрытии, которое укажет "куда копать"? Что пишется в журнале регистрации? Выход зафиксирован или нет?

Кроме того, сейчас актуальная версия платформы 8.2.15.319. С ней проблема остается?
57. WiseSnake 1521 26.07.12 12:22 Сейчас в теме
(53) 1С показывается и закрывается, но процесс остается.. выход в 1С фиксируется в журнале. Платформу пока нет возможности обновить... временно
в 1с все отрабатывает без проблем, склоняюсь все больше, что дело в созданных в скрипте объектах и их уничтожении, тогда вопрос как в vbs корректно дестроить объекты?!?
(56) в 1С нет этих сеансов
58. shiaju 25 26.07.12 12:30 Сейчас в теме
(57)
вопрос как в vbs корректно дестроить объекты?!?
Set connection = Nothing
Хотя странно как-то, вроде бы при терминэйте должна закрываться 1с еще.
А процесс wscript.exe после отработки участка кода, использующего VBS, в памяти остается?
60. WiseSnake 1521 27.07.12 00:10 Сейчас в теме
(58)
>> Set connection = Nothing
Пробовал, не катит
>> А процесс wscript.exe после отработки участка кода, использующего VBS, в памяти остается?
нет
(59) каким макаром?
54. gavlexx 39 24.07.12 17:12 Сейчас в теме
Кроме того, в типовых работает настройка пользователя Запрашивать подтверждение при закрытии программы. Может она влияет на процесс закрытия? Ведь работа через V82.Application практически аналогична интерактивному режиму работы...

еще стоило бы "покопать" в направлении отладки процедур ПередЗавершениемРаботыСистемы(Отказ), ПриЗавершенииРаботыСистемы(). В них много "любопытного" кода, который теоретически может блокировать завершение процесса.
55. v.l. 435 24.07.12 20:38 Сейчас в теме
В модуле внешнего подключения завершать 1С при выполнении определенных условий.

Если ВсеЗаданияВыполнены ТОгда
ЗавершитьРаботуСистемы
56. shiaju 25 25.07.12 13:31 Сейчас в теме
(0) Могу предложить в свойствах кластера серверов 8.2 выставить вменяемое время ожидания "зависших" процессов. То есть чтобы процесс, не проявляющий активности через некоторое время отрубался.
59. daho 8 26.07.12 13:31 Сейчас в теме
Так просто убить процесс не катит?
61. webv@mail.ru 27.07.12 09:52 Сейчас в теме
Удалось решить проблему?
63. WiseSnake 1521 30.07.12 12:17 Сейчас в теме
(61)(62) Нет, проблема осталась. Видимо никто не заморачивается по таким пустякам ))
64. VNSh 01.08.12 16:54 Сейчас в теме
(63) Видимо, не у всех есть такая проблема.
У меня она не воспроизводится.
Наверное корень проблемы в Windows.
67. WiseSnake 1521 01.08.12 19:07 Сейчас в теме
(64)
Наверное корень проблемы в Windows

Возможно. Еще бы знать где найти этот корень. Буду тестировать на других компах. Спасибо.
62. Скиминок 27.07.12 15:32 Сейчас в теме
Блин, такая интересная ветка загнулась! Проблема решена? Ау
65. VNSh 01.08.12 17:24 Сейчас в теме
ЗУП, файловая база, платформа 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)
Показать
66. VNSh 01.08.12 17:28 Сейчас в теме
Только информация о завершении работы почему то не каждый раз записывается в журнал регистрации...
68. MaxFakc 29.08.12 11:41 Сейчас в теме
Попробуй переустановить платформу! У меня такая же проблема была только на XP! Все начало работать нормально! Если и в этом случае не поможет то удали полностью 1с с компа и с реестра! Возможно просто виряк засел!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот