1. Sherdrada 27.12.16 15:29 Сейчас в теме

Как автоматически закрывать 1С по расписанию?

Как автоматически закрыть 1С?
Пробовала обработкой, которая запускается при запуске 1С,но почему-то не срабатывает.

Перем Тайм;

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    ПодключитьОбработчикОжидания("Таймер",1);
КонецПроцедуры

Процедура Таймер()
    Тайм = Тайм - 1;
    Если Тайм = 0 Тогда
        ЗавершитьРаботуСистемы(Ложь);
    КонецЕсли; 
    
    ЭлементыФормы.Надпись1.Заголовок = "1с будет закрыта через: " + Строка(Тайм) + " секунд";
КонецПроцедуры

Процедура ОсновныеДействияФормыОтменитьЗакрытие(Кнопка)
    ОтключитьОбработчикОжидания("Таймер");
    ЭлементыФормы.Надпись1.Заголовок = "";
КонецПроцедуры

Тайм = 18000;//Секунд
Показать
Ответы
Сортировка: Древо
2. pvvpvv 10 27.12.16 16:21 Сейчас в теме
(1) Может не работать, если у Вас в момент обнуления счетчика открыто модальное окно.
3. Sherdrada 27.12.16 17:53 Сейчас в теме
(2) как обойти эту ситуацию?
4. pvvpvv 10 27.12.16 22:01 Сейчас в теме
(3) Если Вы уверены, что модальное окно закроется самостоятельно, достаточно написать

Если Тайм <= 0 Тогда

В противном случае надо избавиться от появления модального окна или обеспечить его закрытие.
5. pvvpvv 10 27.12.16 22:22 Сейчас в теме
+(4) Забыл. Есть метод глобального контекста ПрекратитьРаботуСистемы() - закрывает сеанс при наличии модальных окон.
6. Sherdrada 29.12.16 09:43 Сейчас в теме
(5) этот метод тоже не сработал
7. pvvpvv 10 29.12.16 09:55 Сейчас в теме
(6) Т.е. Вы запустили обработку (для отладки установили 30 сек.), а она не закрыла сеанс? Не верю. Есть еще какие то факторы. Опишите их.
9. Sherdrada 29.12.16 10:11 Сейчас в теме
(7) вот это написано в бат файле, который запускается через планировщик заданий

@Echo off
chcp 1251 >nul
"C:\Program Files (x86)\1cv8\8.3.9.1818\bin\1cv8.exe" ENTERPRISE /F"D:\Base\БП\" /N"Администратор"/P"0987"/RunModeOrdinaryApplication/Execute­"D:\Для выгрузки УТ-БП\Close1c2.epf"


обработка Close1c2.epf - это код, описанный выше.
после запуска начинается автоматический обмен данными. Который заканчивается раньше таймера.
На отладке срабатывает, а вот утром я захожу и смотрю что сеанс как был запущен ночью, так и висит, хотя все задания по обмену завершены.
11. pvvpvv 10 29.12.16 10:19 Сейчас в теме
(9) Вместо "/RunModeOrdinaryApplication" написать "/RunModeManagedApplication"
12. pvvpvv 10 29.12.16 10:21 Сейчас в теме
+(11) Вы запускаете обычное приложение, в котором обработка работать не будет. Будет ли работать обмен? Или написать обработку для обычного приложения.
16. Sherdrada 29.12.16 13:57 Сейчас в теме
(12) обмен работает 100%
(14) не знаю как посмотреть, через удаленный доступ захожу, процесс висит под моим пользователем, а самой 1с я не вижу на панели инструментов. запускала через планировщика для отладки, завершался процесс нормально сам
18. pvvpvv 10 29.12.16 14:02 Сейчас в теме
(16) 1С у Вас закрылась, процесс на сервере 1С может висеть. Он в спящем режиме.
19. Sherdrada 29.12.16 14:27 Сейчас в теме
(18) так если посмотреть в пользователях, то висит там сеанс
20. pvvpvv 10 29.12.16 14:31 Сейчас в теме
(19) Вы имеете ввиду посмотреть из другого сеанса список активных пользователей. Да, сеанс там будет виден. Так сейчас работает 1С. На различных сайтах много обсуждений на тему "спящих сеансов". Посмотрите.
21. Sherdrada 29.12.16 15:51 Сейчас в теме
(20) хм. а как убрать этот спящий сеанс?
22. Sherdrada 29.12.16 15:54 Сейчас в теме
(20) в парметрах информационной базы стоит время отключения сеанса через сутки. Но сеанс не отключается через сутки, а висит так же.
я потестирую в течение двух дней, но сомневаюсь что это "спящий сеанс", потому как это было не только на платформе 8.3, но и на платформе 8.2
14. pvvpvv 10 29.12.16 10:33 Сейчас в теме
(9) И обработка висит и таймер отсчитывает в минус?
17. Sherdrada 29.12.16 13:58 Сейчас в теме
(14) т.е. в теории обработка запускается и срабатывает нормально
8. minarenko 29.12.16 10:10 Сейчас в теме
Процедура Закрываем() Экспорт
	ПрекратитьРаботуСистемы();
КонецПроцедуры

Процедура ПередНачаломРаботыСистемы()
	ПодключитьОбработчикОжидания("Закрываем", 1);
КонецПроцедуры
10. Sherdrada 29.12.16 10:14 Сейчас в теме
(8) извините, но этот код куда и зачем?
13. pvvpvv 10 29.12.16 10:30 Сейчас в теме
Извините, у Вас обычное приложение.
15. vipetrov2 29.12.16 12:26 Сейчас в теме
Можно в наглую завершить процесс.
WshShell=СоздатьОбъект("WScript.Shell");
WshShell.Run("taskkill /f /IM 1cv8.exe");

Но это плохой вариант.
Можно написать на VBScript скрипт, который через функции WinAPI найдет процесс 1С, по нему найдет все хандлеры окон и пошлет сообщение на закрытие или разрушение.
А этот скрипт можно будет запускать откуда угодно.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии



Ведущий программист 1С
Москва
зарплата от 150 000 руб. до 180 000 руб.
Полный день

Руководитель проектов 1С
Москва
Полный день

Консультант-аналитик 1С: ЗУП
Санкт-Петербург
Полный день