Закрыть 1с по расписанию
Начиная с версии 8.3.8 фирма 1С изменила подход к завершению работы и закрытию приложения. Новомодные веяния – ли, ошибки при работе с WEB интерфейсом – ли, но теперь со всех обработчиков событий, используемых нами при закрытии – «ПередЗавершениемРаботыСистемы» и «ПриЗавершенииРаботыСистемы», сервер не доступен. Рассмотрим, как теперь работают данные обработчики.
Обработчик: ПередЗавершениемРаботыСистемы(Отказ, ТекстПредупреждения)
Как мы помним возникает перед завершением программы, до закрытия главного окна. Если «Отказ» равен «Ложь», то программа просто закрывается, не выдавая никаких вопросов. В нем можно сделать всяческие проверки, все функции должны быть только клиентские (В процессе завершения работы приложения запрещены серверные вызовы и открытие окон.) и может быть установлен отказ от выхода из программы. И вот тут появляется первый подвох. Установление «Отказ» в Истина не отменяет выход из системы, а только указывает, что нужно выдать платформенный диалог, в котором будет предложено выйти или остаться с текстом из параметра «ТекстПредупреждения»:
Диалог завершения программы
И если пользователь нажмет «Завершить работу», все ваши проверки идут лесом. Платформа просто закрывает приложение не зависимо ни от чего. Отловить этот момент в коде нельзя, это все происходит на уровне платформы.
Если же пользователь нажмет на «Продолжить работу», то возможны два варианта событий:
-
Если вы внутри вызова функций из данной процедуры подключали обработчик ожидания
Ответ на первый глобальный русский вопрос «кто виноват?» понятен. Я постараюсь ответить на второй «что делать?». Если нам надо что то зафиксировать в базе, например информацию о работе пользователей в системе. Кто когда заходил, кто когда вышел.
Решение однако лежит вообще в другой плоскости, а именно, в регламентном задании которое периодически будет опрашивать систему на активных пользователей, и фиксировать что такой то пользователь уже отсутствует в списке активных.
Для опроса системы у нас есть функция ПолучитьСеансыИнформационнойБазы(), которая возвращает массив сеансов. А для фиксации, что пользователя в сеансах уже нет нужно создавать новый регистр. Я предлагаю периодический (в пределах секунды) РС с двумя измерениями «Пользователь» и «НомерСеанса», в ресурсах же должно быть как минимум поле «ЗавершениеСеанса» по которому мы будем понимать что пользователь нами не обработан или обработан но активен.
Структура регистра
Обработчик: ПриЗавершенииРаботыСистемы()
Привожу полный текст справки:
Возникает перед завершением работы в режиме управляемого приложения после закрытия главного окна. В данной процедуре могут быть выполнены действия, необходимые при выходе из программы.
В данной процедуре не допускаются:
- открытие форм и других окон,
- использование серверных вызовов,
- использование асинхронных вызовов.
Вот честно, не понимаю вообще какие действия можно осуществить в данной процедуре? Да мы можем написать кучу кода, что-то сделать с файлами, но ничего сообщить пользователю, что то сделать с базой – мы уже не можем.
Резюме
Резюмируя данную статью хочу поблагодарить фирму 1С, что не дает нам соскучиться и всегда на страже нашего свободного времени.
Есть робот, которые запускает 1с по расписанию и что-то там делает. Вопрос: можно ли закрыть сеанс 1с так же в какое-то вполне конкретное время, но не тупо остановив сервис, а пользуясь параметрами запуска из командной строки?
А робот, закончив что-то там делать, почему не хочет закрывать?
ммм. если мы про запущенный по расписанию сервис, то килять процесс как-то не очень корректно, мне кажется.
(2) Нененене. По окончании "что-то там делает" поставить ЗавершитьРаботуСистемы.
(3) не хотца типовую рушить. да и время проверять надо. система тормозить будет. иначе никак, да?
(4) работает. я по утрам сплю. и ловить мессаги от всех филиальских 1с как-то не очень хочу
(6) О_О
А зачем вообще конфу трогать? Есть у меня пара обработин, запускаю виндовым шедулером через параметр /execute, в конце ЗавершитьРаботуСистемы.
(8) да крутятся типовые фоновые задания. обработин пока и в помине нет:) потому и конфу
(9) как?
+(11) Ваще запутала ты всех, Нюра! Роботы, фоновые задания - определись уж.
(12) робот - это некоторые действия, выполняющиеся без вмешательства пользователя. так? да. у меня запускается по шедулеру процесс под юзером, который является основным для запуска фоновых заданий. и он их крутит все время. по расписанию. САМ:) вот мне надо, чтоб как только он их открутил, за собой рабочее место убрал:) где кого я запутала?
(16) А ты его не выключай пусть постоянно крутит. Просто запусти с невидимым окном.
ок. тогда другой вопрос, как в 1с отследить изменение даты?:)
+20 автоматом дата запрета редактирования меняться должна
(20) Ты скажи зачем может проще можно. А вобще подключаешь обработчик ожидания и периодически проверяешь сменилась или нет.
(21) Если будешь отслеживать изменение даты, там же можешь и работу систем завершить
(28) надо, чтоб работало с минимальными изменениями конфы?
+30 чтоб период закрыть, я модуль свой общий создам и вызову процедурку только. а чтоб закрывать, мне надо в регламентные задания еще залезть, чтоб отследить, когда время перевалило за нужную отметку. разница есть?
это по изменениям. а по загрузке еще?:)) обработку ожидания лишнюю крутить.
(34) ну я думаю что поможет.. правдо сам для этого дела не пользовал..
попробуй.
(37) Вот, глумилась, издевалась. Давай, теперь фотку выкладывай.
(38) да ты что, друг мой старинный?:) столько лет общаемси, а тебе все фотка моя нужна?:)
(39) угу. можно еще прерывания клавиатуры последнего работающего пользователя ловить:)))
Наведи порядок в своей работе используя конфигурацию 1C "Управление IT-отделом 8"
Надоело делать резервную копию 1с вручную? Сейчас расскажем, как можно делать резервную копию автоматически – по расписанию.
Вариант для серверной базы данных.
1. Создаем файл с расширением bat приблизительно следующего содержания:
Расшифровка кода операторов командной строки:
set kat=C:Program Files (x86)1cv88.3.9.2170 – устанавливаем путь к исполняемым файлам 1с
set serv=192.168.0.1 – указываем ip или имя сервера 1с
set base=Base – указываем имя базы данных на сервере
set user=Администратор – логин Администратора 1с
set pass=Пароль – Пароль Администратора
set passblok=КодРазрешения – пароль для снятия блокировки работы пользователей в 1с. По умолчанию равен = КодРазрешения
Этот пароль можно посмотреть(и/или) поменять в консоле Администрирования баз данных 1с
set pathexport=“f:Backup1c82_%date%.dt” – указываем путь куда будет выгружаться резервная копия (имя файла будет иметь вид 1с82_01.01.2001.dt на текущую дату)
“%kat%in1cv8.exe” ENTERPRISE /S %serv%\%base% /N %user% /P %pass% /DisableStartupMessages /C ЗавершитьРаботуПользователей
-завершение работы пользователей (через 1 минуту) и установка блокировки на вход новых пользователей
“%kat%in1cv8.exe” CONFIG /S %serv%\%base% /DisableStartupMessages /DumpIB %pathexport% /N %user% /P %pass% -NoTruncate /UC %passblok%
-непосредственно выгрузка резервной копии
“%kat%in1cv8.exe” ENTERPRISE /S %serv%\%base% /N %user% /P %pass% /DisableStartupMessages /C РазрешитьРаботуПользователей /UC %passblok%
-снятие блокировки на вход пользователей
2. Запуск этого bat файла по расписанию через планировщик заданий Windows
Планировщик заданий находится: Панель управления Windows- Администрирование-Планировщик заданий
- Переходим на вкладку триггеры – создаем новый триггер с расписанием
- Переходим на вкладку действия и создаем новое действие “Запуск программы”, указав путь к bat файлу. Жмем ОК – все выгрузка БД 1с по расписанию настроена
P.S. Если выгрузка занимает длительное время целесообразно создать несколько задач отличных по времени к примеру
- Заблокировать базу в 02:50
- Выполнить выгрузку базы 1с в 03:00
- Разблокировать базу в 05:00
Похожие записи
Резервное копирование баз 1с через командную строку : 2 комментария
Блокировка не работает =(
Что конкретно не работает? Не завершается работа пользователей или новые могут входить? База какая серверная или файловая?
Отключение или Завершение работы пользователей:
Разрешить работу пользователей:
Для успешного выполнения резервного копирования в информационной базе не должно быть активных сеансов пользователей. Чтобы автоматически завершить работу пользователей, перед выполнением бэкапа, в Effector Saver предусмотрен соответствующий механизм.
Для настройки завершения работы пользователей 1С:Предприятия перейдите на вкладку «Отключение пользователей».
Обратите внимание: в бесплатной редакции Effector Saver данный функционал не реализован. В момент запуска бэкапа пользователям нужно покинуть базу 1С:Предприятия, иначе выгрузка базы не произойдет.
Установите флаг «Завершить работу пользователей 1С:Предприятия». Из выпадающего меню выберете один из вариантов:
- «Завершить сеансы на сервере 1С:Предприятие»;
- «Вызвать штатное завершение работы пользователей».
В случае выбора «Завершить сеансы на сервере 1С:Предприятие» — отключение пользователей происходит путем принудительного завершения сеансов на сервере 1С:Предприятия. Этот вариант подходит только для клиент-серверных баз 1С:Предприятия.
Если Вы изменяли стандартные настройки сервера 1С, возможно потребуется изменить параметры, которые идут ниже.
Если в кластере 1С:Предприятия создан пользователь «Администратор кластера», установите флаг «Кластер требует авторизации». Заполните поля: «Имя администратора кластера:» и «Пароль администратора кластера:».
Важно: не путайте данного пользователя с пользователем базы 1С:Предприятия и пользователем «Администратор центрального сервера».
В консоли администрирования сервера 1С:Предприятия администраторы кластера расположены по пути:
«Console Root» — «1C:Enterprise 8.3 Central Servers» — «(*)имя компьютера» — «Кластеры» — «Локальный кластер» — «Администраторы».
Если порт подключения к агенту сервера отличный от стандартного, установите флаг «Используется нестандартный порт агента сервера». Заполните поле «Порт агента сервера:», по умолчанию — 1540.
Для определения порта агента сервера зайдите в консоль администрирования сервера 1С. При клике правой кнопкой мыши на имя компьютера из выпадающего меню выберете «Свойства» — «Параметры центрального сервера 1С:Предприятия» — «IP порт:».
Второй вариант, откройте «Службы». Выберите «Агент сервера 1С:Предприятия…» и откройте окно «Свойства», строка «Исполняемый файл:».
В случае выбора «Вызвать штатное завершение работы пользователей» — отключение пользователей происходит путем вызова встроенного в типовые конфигурации механизма завершения работы пользователей. Данный механизм основан на использовании процедуры «Блокировка установки соединений с информационной базой».
Надоело делать резервную копию 1с вручную? Сейчас расскажем, как можно делать резервную копию автоматически – по расписанию.
Вариант для серверной базы данных.
1. Создаем файл с расширением bat приблизительно следующего содержания:
Расшифровка кода операторов командной строки:
set kat=C:Program Files (x86)1cv88.3.9.2170 – устанавливаем путь к исполняемым файлам 1с
set serv=192.168.0.1 – указываем ip или имя сервера 1с
set base=Base – указываем имя базы данных на сервере
set user=Администратор – логин Администратора 1с
set pass=Пароль – Пароль Администратора
set passblok=КодРазрешения – пароль для снятия блокировки работы пользователей в 1с. По умолчанию равен = КодРазрешения
Этот пароль можно посмотреть(и/или) поменять в консоле Администрирования баз данных 1с
set pathexport=“f:Backup1c82_%date%.dt” – указываем путь куда будет выгружаться резервная копия (имя файла будет иметь вид 1с82_01.01.2001.dt на текущую дату)
“%kat%in1cv8.exe” ENTERPRISE /S %serv%\%base% /N %user% /P %pass% /DisableStartupMessages /C ЗавершитьРаботуПользователей
-завершение работы пользователей (через 1 минуту) и установка блокировки на вход новых пользователей
“%kat%in1cv8.exe” CONFIG /S %serv%\%base% /DisableStartupMessages /DumpIB %pathexport% /N %user% /P %pass% -NoTruncate /UC %passblok%
-непосредственно выгрузка резервной копии
“%kat%in1cv8.exe” ENTERPRISE /S %serv%\%base% /N %user% /P %pass% /DisableStartupMessages /C РазрешитьРаботуПользователей /UC %passblok%
-снятие блокировки на вход пользователей
2. Запуск этого bat файла по расписанию через планировщик заданий Windows
Планировщик заданий находится: Панель управления Windows- Администрирование-Планировщик заданий
- Переходим на вкладку триггеры – создаем новый триггер с расписанием
- Переходим на вкладку действия и создаем новое действие “Запуск программы”, указав путь к bat файлу. Жмем ОК – все выгрузка БД 1с по расписанию настроена
P.S. Если выгрузка занимает длительное время целесообразно создать несколько задач отличных по времени к примеру
- Заблокировать базу в 02:50
- Выполнить выгрузку базы 1с в 03:00
- Разблокировать базу в 05:00
Похожие записи
Резервное копирование баз 1с через командную строку : 2 комментария
Блокировка не работает =(
Что конкретно не работает? Не завершается работа пользователей или новые могут входить? База какая серверная или файловая?
Отключение или Завершение работы пользователей:
Разрешить работу пользователей:
Для успешного выполнения резервного копирования в информационной базе не должно быть активных сеансов пользователей. Чтобы автоматически завершить работу пользователей, перед выполнением бэкапа, в Effector Saver предусмотрен соответствующий механизм.
Для настройки завершения работы пользователей 1С:Предприятия перейдите на вкладку «Отключение пользователей».
Обратите внимание: в бесплатной редакции Effector Saver данный функционал не реализован. В момент запуска бэкапа пользователям нужно покинуть базу 1С:Предприятия, иначе выгрузка базы не произойдет.
Установите флаг «Завершить работу пользователей 1С:Предприятия». Из выпадающего меню выберете один из вариантов:
- «Завершить сеансы на сервере 1С:Предприятие»;
- «Вызвать штатное завершение работы пользователей».
В случае выбора «Завершить сеансы на сервере 1С:Предприятие» — отключение пользователей происходит путем принудительного завершения сеансов на сервере 1С:Предприятия. Этот вариант подходит только для клиент-серверных баз 1С:Предприятия.
Если Вы изменяли стандартные настройки сервера 1С, возможно потребуется изменить параметры, которые идут ниже.
Если в кластере 1С:Предприятия создан пользователь «Администратор кластера», установите флаг «Кластер требует авторизации». Заполните поля: «Имя администратора кластера:» и «Пароль администратора кластера:».
Важно: не путайте данного пользователя с пользователем базы 1С:Предприятия и пользователем «Администратор центрального сервера».
В консоли администрирования сервера 1С:Предприятия администраторы кластера расположены по пути:
«Console Root» — «1C:Enterprise 8.3 Central Servers» — «(*)имя компьютера» — «Кластеры» — «Локальный кластер» — «Администраторы».
Если порт подключения к агенту сервера отличный от стандартного, установите флаг «Используется нестандартный порт агента сервера». Заполните поле «Порт агента сервера:», по умолчанию — 1540.
Для определения порта агента сервера зайдите в консоль администрирования сервера 1С. При клике правой кнопкой мыши на имя компьютера из выпадающего меню выберете «Свойства» — «Параметры центрального сервера 1С:Предприятия» — «IP порт:».
Второй вариант, откройте «Службы». Выберите «Агент сервера 1С:Предприятия…» и откройте окно «Свойства», строка «Исполняемый файл:».
В случае выбора «Вызвать штатное завершение работы пользователей» — отключение пользователей происходит путем вызова встроенного в типовые конфигурации механизма завершения работы пользователей. Данный механизм основан на использовании процедуры «Блокировка установки соединений с информационной базой».
Внимание! Данный форум является модерируемым.
Для получения к нему доступа необходимо зарегистрироваться или авторизоваться на сайте.
Пытаюсь настроить выполнение внешней обработки для АА5 через пакетный файл и планировщик windows. Все замечательно отрабатывает при открытом сеансе windows. Как только в планировщике windows устанавливаю параметр "Выполнять вне зависимости от регистрации пользователя" запускается процесс 1cv8.exe, в журнале регистрации АА5 появляются записи о регистрации пользователя, и больше ничего не происходит. Нашел, что при таком запуске АА5 в процедуру и происходит зацикливание. Как можно обойти проверку инициализации внешних компонент, или как возможно запустить внешнюю обработку по расписанию не изменяя конфигурации? Добрый день.
В данном случае мы рекомендуем пользоваться механизмом фоновых заданий. Все необходимое в конфигурации для этого присутствует. А нельзя ли поподробнее? Я нигде не нашел ответ как запустить внешнюю обработку, через фоновые задания, не изменяя конфигурации. Напишите, пожалуйста, как это сделать, или где это подробно описано. Ответа так и не будет? Я видел несколько похожих тем на форуме, с теми же проблемами - ни в одной нет решения. В моем понимании пакетный запуск - это стандартная функция 1С Предприятие. Если конфигурация АА5 не запускается в данном режиме, то это ошибка конфигурации. Если можно как-то запустить внешнюю обработку через фоновые задания, не изменяя конфигурации - напишите как, или дайте ссылку где это описано. Добрый день, Николай. АРМ Администратор - закладка "Фоновые задания" - Добавить Регламентное задание - Вид задания: произвольная обработка - на закладке "Параметры" подтягивается обработка, которая ранее была добавлена в справочник "Внешние печатные формы" - в контекстном меню "расписание" настраивается расписание данного задания Здравствуйте, способ предложенный Светланой не работает. После запуска задания возникает ошибка - Добрый день, Николай. А данная обработка запускается отдельно без регламентного задания? Здравствуйте, Светлана. Обработка без регламентного задания запускается и работает. Насколько я понял из описания регламентного задания "Произвольная обработка" - "Произвольная обработка" вызывает методы, которые прописаны в общем модуле "фзФоновыеЗадания". Как возможен запуск обработки без указания метода в регламентном задании? Какой метод должен быть указан? Нужно использовать регламентное задание "Произвольная обработка". В произвольной обработке указываете созданную Вами процедуру, которая выполняет определенные действия в Вашем случае это запуск внешней обработки. Процедуру можно прописать в любом глобальном модуле. лучше создайте собственный модуль.
Обсуждения про использование произвольной обработки есть на форуме. Например Здесь.
Николай, правильно ли мы понимаем, что:
1) есть файловая база (фоновые задания на которой запущенного 1С не заработают)
2) есть windows
3) в windows есть планировщик задач
4) Вы хотите настроить планировщик windows, чтобы он например ежедневно в 4:00 запускал Альфу и в Альфе при этом автоматически запускалась некая обработка
Здравствуйте!
Вы правы, автоматически запустить внешнюю обработку по расписанию, без изменений конфигурации - нельзя.
Зафиксировали требование: "Должна быть возможность автоматического запуска внешней обработки при запуске программы пользователем в интерактивном режиме, в режиме OLE, в режиме com-соединения". Подумаем как его реализовать.
ситуация как-нибудь поменялась.
интересует вопрос
"как автоматически запустить внешнюю обработку по расписанию без изменений конфигурации?"
ААА 5,0,11,06
А что мешает фоновым заданием "Произвольная обработка" запустить?
В параметрах имя метода пишем как
ВнешниеОбработки.Создать("C:\МояВнешняяОбработка.epf",Истина).ВыполнитьМоиДействия
Но надо учитывать что при работе в серверном режиме путь к обработке должен быть указан относительно сервера предприятия.
Аналогично можно воспользоваться планировщиком из справочника пользователей (работа в пользовательском контексте).
а можно ли каким-то образом запустить обработку из справочника внешних отчетов.В принципе можно. Но это не сильно будет отличаться от написанного выше. Т.к. все равно потребуется файл на диске. По другому платформа не может создать объект обработки (чтобы сразу в памяти).
А так .
Справочники.ВнешниеПечатныеФормы.НайтиПоНаименованию("Имя обработки в справочнике").Хранилище.Получить().Записать("C:\temp\МояВнешняяОбработка.epf"); ВнешниеОбработки.Создать("C:\temp\МояВнешняяОбработка.epf",Истина).ВыполнитьМоиДействия
В параметрах имя метода пишем как
ВнешниеОбработки.Создать("C:\МояВнешняяОбработка.epf",Истина).ВыполнитьМоиДействия
Но надо учитывать что при работе в серверном режиме путь к обработке должен быть указан относительно сервера предприятия.
клиент-серверный вариант использования..
прописан вариант типа ВнешниеОбработки.Создать("C:\МояВнешняяОбработка.epf",Истина).ВыполнитьМоиДействия.
задание выполняется без ошибок, но и результата нет никакого..
так же пробовался вариант в собственном общем модуле..
свойМодуль.Действие1
задание выполняется без ошибок, но и результата нет никакого..
при ручном запуске обработки результат обработки есть.
1. У пользователя, под которым работает сервер 1С:Предприятия должен быть доступ к самой обработке на диске. Но судя по всему раз не возникает ошибки, то все нормально. Но стоит перепроверить.
2. А какой результат должен быть? Что хочется в результате получить? Следует иметь ввиду что в рамках фонового задания доступен исключительно серверный контекст работы.
выполнение запроса и на его основании формирование файл на диске..Может кто-нибудь что-то посоветует:
та же ситуация, что и у Николая. Есть bat файл, который запускает 1С:Предприятие под определенным пользователем, у пользователя на закладке "Планировщик задач" добавлено выполнение произвольной обработки(запуск обменов). Так вот если для задачи планировщика задач windows НЕ указан признак "Выполнять вне зависимости от регистрации пользователя", то все отлично отрабатывает. Если флаг указан, то кроме авторизации пользователя ничего не происходит.
На другом сервере(где находится периферийная база) все отрабатывает вне зависимости от этой галки. Конфигурация серверов одинаковая - windows server 2008R2. Обе базы файловые, АА 5.0.06.07.
Читайте также:
- Навигационные программы для андроид с топографическими картами
- Что делать если зависла программа на компьютере
- Ng не является внутренней или внешней командой исполняемой программой или пакетным файлом
- Сайт vorenosteps открывается сам в браузере
- 2146959355 0x80080005 ошибка при выполнении приложения сервера 1с