Зависание 1С. Запуск BAT-ником внешней обработки с последующем закрытием
Есть BAT-ник запускающий 1с и обработку автоматически, после выполнения 1с закрывается.
Если батник запустить вручную все срабатывает и закрывается нормально.
Если сделать из планировщика задания, процедура отрабатывает, но остается зависший сеанс 1с. В планировщике выполняю под тем же пользователем, с наивысшими правами, вне зависимости от регистрации пользователя.
Появляется эта история раз в пару-тройку месяцев. Из-за чего может быть?
Если батник запустить вручную все срабатывает и закрывается нормально.
Если сделать из планировщика задания, процедура отрабатывает, но остается зависший сеанс 1с. В планировщике выполняю под тем же пользователем, с наивысшими правами, вне зависимости от регистрации пользователя.
Появляется эта история раз в пару-тройку месяцев. Из-за чего может быть?
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
БАТНИК:
chcp 1251
"C:\Program Files (x86)\1cv8\8.3.6.1977\bin\1cv8s.exe" ENTERPRISE /F "D:\new" /N "Администратор" /P "123" /Execute "C:\Users\uuserr\Desktop\ntest1112.epf" /DisableStartupMessages
chcp 866
ntest1112.epf:
Фодуль формы:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ЗавершитьРаботуСистемы(Ложь);
КонецПроцедуры
Убрал вообще всё что можно, тупо открываю 1с, и сразу закрываю.
chcp 1251
"C:\Program Files (x86)\1cv8\8.3.6.1977\bin\1cv8s.exe" ENTERPRISE /F "D:\new" /N "Администратор" /P "123" /Execute "C:\Users\uuserr\Desktop\ntest1112.epf" /DisableStartupMessages
chcp 866
ntest1112.epf:
Фодуль формы:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ЗавершитьРаботуСистемы(Ложь);
КонецПроцедуры
Убрал вообще всё что можно, тупо открываю 1с, и сразу закрываю.
Попробуйте прописать в планировщике не запуск вашего батника, а запуск самой обработки:
"C:\Program Files (x86)\1cv8\8.3.6.1977\bin\1cv8s.exe" ENTERPRISE /F "D:\new" /N "Администратор" /P "123" /Execute "C:\Users\uuserr\Desktop\ntest1112.epf" /DisableStartupMessages
У меня регулярный автообмен происходит таким образом.
"C:\Program Files (x86)\1cv8\8.3.6.1977\bin\1cv8s.exe" ENTERPRISE /F "D:\new" /N "Администратор" /P "123" /Execute "C:\Users\uuserr\Desktop\ntest1112.epf" /DisableStartupMessages
У меня регулярный автообмен происходит таким образом.
хммм, и правда работает, рубится 1с. Ниче не пойму, что из-за чего может быть, что там висеть может???
Сижу под пользователем Пользователь1, в планировщике задание под этого-же пользователя. Но при запуске задания, оно выполняется где-то непонятно где, окон никаких нет, в диспетчере задач КодСеанса = 0 (не такой какой у тек.пользователя). Как можно подглядеть?
Сижу под пользователем Пользователь1, в планировщике задание под этого-же пользователя. Но при запуске задания, оно выполняется где-то непонятно где, окон никаких нет, в диспетчере задач КодСеанса = 0 (не такой какой у тек.пользователя). Как можно подглядеть?
(9) x2z7yy, очень не советую использовать для запуска по расписанию пользователя 1С, который активен в этот момент. Как раз из-за этого может выводить модальное окно, которое и будет мешать выполнению процедуры ЗавершитьРаботуСистемы. В этом окне , похоже, выводится предупреждение о том что данный пользователь уже находится в системе. Именно это предупреждение и блокирует завершение программы. При этом окно этой программы в системе не отображается. Это происходит потому, что на него не передаётся фокус операционной системы. Слышали выражение "дескрипторы окна"? Те кто сталкивался с переключениями между окнами программы 1С и других программ, сворачиванием/разворачиванием окон 1С, в которые вывелось предупреждение, наверняка сталкивались с проблемами отображения окна в котором выдалось это предупреждение. Иногда даже приходится выполнять переключение на такое окно в диспетчере задач.
(10) Подцепился отладчиком к этому процессу который зависает, так вот он строку ЗавершитьРаботуСистемы(Ложь) просто проходит, ничего не происходит. Через ПолучитьОкна() (с фокусом окон в своё время имел дело), посмотрел список - ничего не увидел. Пользователь не активен под которым происходит запуск.
(11) x2z7yy, а что обработка делает то ?
Если зависания не имеют закономерностей и происходят изредка. То причиной может быть вызов каких то процедур, завернутых попытка в попытке..а если еще и на сервере происходит, то вообще отладить и отловить крайне проблематично, т.к. оно явно проявляется на правильных строках кода, или объектах - пройдя косячные.
С такой частотой, вообще забей, сеанс зависший сам отвалится через какое то время.
Если зависания не имеют закономерностей и происходят изредка. То причиной может быть вызов каких то процедур, завернутых попытка в попытке..а если еще и на сервере происходит, то вообще отладить и отловить крайне проблематично, т.к. оно явно проявляется на правильных строках кода, или объектах - пройдя косячные.
Появляется эта история раз в пару-тройку месяцев
С такой частотой, вообще забей, сеанс зависший сам отвалится через какое то время.
(14)
К тому что из-за каких-то неясностей не верно отрабатывает программа. Прекратить работу - я так понимаю, это тоже самое что диспетчером грохнуть сеанс, по вашему грохать рабочие сеансы 1с хорошая затея? Давно на ошибки типа "ошибка компоненты dbeng8" не смотрели?
Так к чему эти изыскания?
К тому что из-за каких-то неясностей не верно отрабатывает программа. Прекратить работу - я так понимаю, это тоже самое что диспетчером грохнуть сеанс, по вашему грохать рабочие сеансы 1с хорошая затея? Давно на ошибки типа "ошибка компоненты dbeng8" не смотрели?
(15) x2z7yy, где вы прочитали про "грохание" сеанса в диспетчере? С чего вы это взяли?
Глобальный контекст (Global context)
ПрекратитьРаботуСистемы (Terminate)
Синтаксис:
ПрекратитьРаботуСистемы(<ПерезапуститьПриЗавершении>, <ДополнительныеПараметрыКоманднойСтроки>)
Параметры:
<ПерезапуститьПриЗавершении> (необязательный)
Тип: Булево.
Указывает необходимость выполнения запуска нового сеанса с текущими установками после прекращения работы системы.
Значение по умолчанию: Ложь.
<ДополнительныеПараметрыКоманднойСтроки> (необязательный)
Тип: Строка.
Содержит дополнительные параметры, которые будут переданы новому сеансу. Если такие параметры уже есть среди текущих установок, переданные заменят текущие.
Параметр указывается, если значение параметра <ПерезапуститьПриЗавершении>=Истина.
Описание:
Завершает работу системы независимо от наличия модальных диалогов, открытых редактируемых форм документов и справочников и т.д. При этом не вызываются процедуры-обработчики событий завершения работы системы.
Доступность:
Тонкий клиент, веб-клиент, толстый клиент.
Примечание:
Если параметр <ПерезапуститьПриЗавершении>=Истина, то после завершения работы системы будет открыт новый сеанс 1С:Предприятия.
С помощью параметров можно запустить новый сеанс 1С:Предприятия путем задания соответствующих параметров.
ПоказатьПрекратитьРаботуСистемы (Terminate)
Синтаксис:
ПрекратитьРаботуСистемы(<ПерезапуститьПриЗавершении>, <ДополнительныеПараметрыКоманднойСтроки>)
Параметры:
<ПерезапуститьПриЗавершении> (необязательный)
Тип: Булево.
Указывает необходимость выполнения запуска нового сеанса с текущими установками после прекращения работы системы.
Значение по умолчанию: Ложь.
<ДополнительныеПараметрыКоманднойСтроки> (необязательный)
Тип: Строка.
Содержит дополнительные параметры, которые будут переданы новому сеансу. Если такие параметры уже есть среди текущих установок, переданные заменят текущие.
Параметр указывается, если значение параметра <ПерезапуститьПриЗавершении>=Истина.
Описание:
Завершает работу системы независимо от наличия модальных диалогов, открытых редактируемых форм документов и справочников и т.д. При этом не вызываются процедуры-обработчики событий завершения работы системы.
Доступность:
Тонкий клиент, веб-клиент, толстый клиент.
Примечание:
Если параметр <ПерезапуститьПриЗавершении>=Истина, то после завершения работы системы будет открыт новый сеанс 1С:Предприятия.
С помощью параметров можно запустить новый сеанс 1С:Предприятия путем задания соответствующих параметров.
(17) x2z7yy, есть подозрение, что вы его не правильно понимаете, вот я и предлагаю его внимательно прочитать. Что касается выполнения транзакций, то у меня вопрос: какие транзакции будут выполняться в сеансе, если вы запускаете его для выполнения своей обработки. Завершение сеанса происходит после выполнения всех необходимых действий для которых и предназначена эта обработка? Откуда возьмутся другие транзакции? И потом вы как-то пропустили моё замечание по поводу запуска обработки от имени пользователя, который уже используется в активном сеансе. Но это уже ваше дело. Я не настаиваю на том чтобы вы использовали ту или иную процедуру в вашем коде. Как и в каких обстоятельствах вам пользоваться тем или иным механизмом 1С решать вам.
(18), на счет транзакции, наверное, вы правы. Закрытие 1С происходит после выполнения всех функций, никаких транзакций по идее не должно быть.
На счет др.пользователя, я пробовал под другим пользователем - та же история. Если стоит "делать вне зависимиости от регистрации пользователя" - процесс запускается под ИД сеанс - 0 (я так понимаю это системный сеанс) и не закрывается, если стоит "делать при регистрации пользователя" - все нормально отрабатывается, но ИД сеанса уже именно то который присвоен пользователю, когда тот вошел в систему.
На счет др.пользователя, я пробовал под другим пользователем - та же история. Если стоит "делать вне зависимиости от регистрации пользователя" - процесс запускается под ИД сеанс - 0 (я так понимаю это системный сеанс) и не закрывается, если стоит "делать при регистрации пользователя" - все нормально отрабатывается, но ИД сеанса уже именно то который присвоен пользователю, когда тот вошел в систему.
(20) да, в винде создал. Не помогло. Единственно, не попробовал в 1С другого пользователя создать. Теперь не получится пробовать, пришлось перезагрузить сервер, всё стало работать нормально, ктоб сомневался. :( Придется ждать еще полгода, чтобы продолжить тесты.:)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот