Меню

Как настроить выполнение обработки по расписанию

Как настроить выполнение обработки по расписанию

В процессе использования учётной системы на базе 1С:Предприятие иногда возникает необходимость выполнять какую-то однотипную операцию через определённые промежутки времени.

В системе 1С:Предприятие есть объект, позволяющий решать такие задачи. Это объект «Регламентное задание». Мы можем создать его и настроить под свои потребности. Однако, когда мы имеем дело с типовыми конфигурациями 1С, находящимися на поддержке, создание дополнительного регламентного задания повлечёт за собой невозможность обновления системы в автоматическом режиме.

Выход: сделать внешнюю обработку с возможностью запускать её по расписанию.

Возможность запускать внешнюю обработку по расписанию задаётся в модуле объекта внешней обработки. А именно в теле функции СведенияОВнешнейОбработке () .

Существует три варианта запуска внешней обработки:

  • Открытие формы
  • Вызов серверного метода
  • Вызов клиентского метода

Задаётся вариант запуска в параметрах процедуры ДобавитьКоманду () .

Настраивать расписание можно только для обработок с режимом запуска «Вызов серверного метода» и «Вызов клиентского метода».

Вариант «Вызов серверного метода» означает, что будет вызвана процедура, размещённая в модуле объекта внешней обработки.
Вариант «Вызов клиентского метода» означает, что будет вызвана процедура, размещённая в модуле формы внешней обработки.

Код в модуле объекта внешней обработки:

Программный код, который должен выполняться при запуске внешней обработке, должен находиться в теле процедуры ВыполнитьКоманду () .

После добавления обработки в систему 1С:Предприятие через механизм подключения внешних обработок, станет доступной настройка расписания.

Источник



Запуск внешней обработки по расписанию v7.7

. представляю вашему вниманию простой и достаточно дубовый способ:

1. Создаём в списке пользователей специальное имя, например АвтоEmail, набор прав минимальный – лишь бы хватило открыть общую внешнюю обработку.

2. В Глобальном модуле в процедуре ПриНачалеРаботыСистемы() описываем вызов отработки и завершение работы системы:

Если, например в торговле, обработка будет использовать значения по умолчанию пользователя, то вставку делаем после слов

глПользователь = Спр . ТекущийЭлемент ();

// Вызов и завершение работы

Если ИмяПользователя() = «АвтоEmail» Тогда
СтатусВозврата( 0 );
ОткрытьФорму( «Отчет» , «АвтоEmail» , КаталогИБ() + «ExtForms\ПродажиОстатки.ert» );
Возврат;
КонецЕсли;

3. В самой обработке при открытии выполняем все нужные действия.

4. Далее собираем команду запуска 1С с параметрами:

Пример: «C:\Program Files\1Cv77\BIN\1cv7.exe» ENTERPRISE /D»D:\DataBase\Db\» /N»АвтоEmail» /P»123″

5. Осталось лишь Создать задачу в Планировщике заданий windows, указать команду запуска в действии и расписание.

И раз уж речь была об отправке почтой, то модуль формы обработки может выглядеть примерно так:

Процедура ПриОткрытии ()
// Какой нибудь Запрос
Таб = СоздатьОбъект( «Таблица» );
Таб . ВывестиСекцию ( «Шапка» );
Пока Запрос . Группировка ( 1 ) = 1 Цикл
Таб . ВывестиСекцию ( «Строка» );
КонецЦикла;
Таб . ВывестиСекцию ( «Подвал» );
Таб . Записать (КаталогИБ()+ «ExtForms\Остатки.xls» , 1 );

Попытка
Если ЗагрузитьВнешнююКомпоненту( «ROM-Mail.dll» )= 0 Тогда
Сообщить( «Не удалось загрузить ROM-Mail.dll» );
Возврат;
КонецЕсли;
Исключение
Возврат;
КонецПопытки;
ВК = СоздатьОбъект( «AddIn.AddInMail» );
ВК . СерверОтправки = «smtp.yandex.ru» ;
ВК . ПортОтправки = 25 ;
ВК . Логин = «МойЛогин» ;
ВК . Пароль = «МойПароль» ;
ВК . АутентификацияПриОтправке = 1 ;
Если ВК . Подключиться ( «Отправка» ) = 0 Тогда
Возврат;
КонецЕсли;
ВК . АдресОтправителя = » МойЛогин@yandex.ru» ;
ВК . ИмяОтправителя = «ООО Рога и копыта» ; // можно на несколько адресов через ;
ВК . АдресПолучателя = СокрЛП( Мыло1 ) + «;» + СокрЛП( Мыло2 ) + «;» + СокрЛП( Мыло3 );
ВК . Тема = «Например, отчеты по ТМЦ на складах» ;
ВК . Кодировка = «windows-1251» ;
ВК . ТипПисьма = 2 ; // можно отправить несколько файлов через ;
ВК . Вложения = КаталогИБ()+ «ExtForms\Движения.xls;» +КаталогИБ()+ «ExtForms\Остатки.xls» ;
Если ВК . Отправить ()= 1 Тогда
Сообщить( «Отчеты успешно отправлены.» );
Иначе
Сообщить( «Не удалось отправить отчеты на почтовый сервер!» , «!» );
КонецЕсли;
ВК . Отключиться ();
КонецПроцедуры

Компонента ROM-Mail.dll бесплатная и легко пробивается в яндексе.

Возможная проблема или «запишу, чтоб не забыть».

Планировщик Windows 2008 ошибка 2147943645

Планировщику заданий не удается запустить задачу «такую-то» для пользователя «такого-то». Дополнительные сведения: значение ошибки: 2147943645.

Дело в том, что при создании задания по умолчанию оно «Выполняется только зарегистрированного пользователя», но не в смысле, что пользователь должен существовать, а в смысле, что он должен быть залогинен. В случае, если эта галка выставлена «Выполнять вне зависимости от регистрации пользователя», то задание от имени незалогиненного в момент срабатывания триггера планировщика пользователя выполняется без проблем.

Читайте также:  Как настроить иглу звукоснимателя

Предлагаемое решение – выставить вышеописанную галку и до кучи поставить галку «Выполнить с наивысшими правами», расположенную там же – мне лично сразу помогло.

Источник

Как настроить выполнение обработки по расписанию

Обновлятору не требуется быть всё время открытым или работать как служба, чтобы стал возможен запуск операций по расписанию.

Запуск по расписанию работает через стандартный механизм Windows, который называется «Планировщик задач».

И, когда пользователь задаёт настройки расписания.

. обновлятор автоматически создаёт нужные задачи в планировщике:

Чего нельзя забывать

Выбор пользователя

Нельзя забывать, что пользователь, которого мы указываем для запуска операций по расписанию.

. должен иметь права в системе на «Вход в качестве пакетного задания».

Самый простой вариант, это нажать правой кнопкой на созданном задании в планировщике и выбрать «Выполнить»:

Если после того как отработает задача результат её запуска будет успешным.

. с правами пользователя всё ок, дальше можно не читать.

Если же это не так, тогда обращаемся к системному администратору, чтобы он в политике безопасности указал (нашего пользователя или его группу) в пункте «Вход в качестве пакетного задания«, а также исключил из пункта «Отказать во входе в качестве пакетного задания«.

. должен иметь непустой пароль. Это требование безопасности Windows. Если вы столкнулись именно с этим ограничением, то самым правильным решением будет:

  • либо назначить пароль текущему пользователю, под которым вы собираетесь запускать обновлятор по расписанию
  • либо создать в системе отдельного пользователя с паролем, которого и прописать в расписании обновлятора

Ну а самым простым (но неправильным с точки зрения безопасности) решением этого ограничения будет отключить опцию «Разрешить использование пустых паролей только при консольном входе» в локальной политике безопасности компьютера.

Выбор баз

Также нельзя забывать, что в операциях, запущенных по расписанию участвуют только те базы, которые выбраны в списке баз, участвующих в расписании:

При этом не важно стоит ли отметка рядом с базой в общем списке:

Эти галки (в общем списке) предназначены только для ручного запуска операций и на запуск по расписанию никак не влияют.

Порядок запуска

И, наконец, ещё один не очевидный момент. При запуске задачи по расписанию обновлятор первым делом проверяет — не выполняется ли сейчас другая задача, запущенная по расписанию. И если выполняется — он в начале дождётся её окончания и только потом будет выполнять новую.

Это означает, что если нам, к примеру, нужно настроить, чтобы в 22-00 выполнялась архивация, а сразу после её окончания обновление баз, то достаточно для архивации указать время запуска 22-00, а для обновления, например, 22-01.

Что если нужно более сложное расписание

А что, если нам нужен не просто регулярный запуск в определенное время в определенные дни? Что если мы хотим, скажем, настроить запуск с 5 часов каждые пол часа, ну или что-то в этом роде?

В этом случае нам нужно воспользоваться всей мощью планировщика задач.

Сначала настраиваем расписание через обновлятор, указав что конкретное расписание будет настроено уже в планировщике:

А уже затем открываем свойства созданных обновлятором задач в планировщике Windows:

И на соответствующих вкладках настраиваем всё, что наша душа пожелает:

Как исключить базу из некоторых операций по расписанию

Предположим, что у нас настроено расписание для обновления и для архивации:

Но при этом мы хотим, чтобы одна база участвовала в архивации по расписанию, но при это не участвовала в обновлении по расписанию.

Как же этого добиться — ведь список баз участвующих в расписании у нас один:

А сделать это очень просто.

Зайдите в свойства той базы, которую нужно исключить из обновления по расписанию и в самом низу окна найдите пункт «Исключить некоторые операции. «:

Нажмите на него и исключите обновление этой базы из запуска по расписанию:

Должно получиться вот так:

Читайте также:  Как настроить ход маятника часов

Возможен ли запуск по расписанию с другими параметрами

Хочу обратить отдельное внимание на то, что задача в планировщике задач — это обычный запуск обновлятора с определенными параметрами командной строки:

А параметров для запуска через командную строку у обновлятора много.

Вы можете используя их настроить автоматизацию гораздо более тонко и в соответствии с вашими потребностями. Только не меняйте параметры командной строки в уже созданном задании обновлятора — иначе он всё равно сбросит их на начальные при обновлении настроек запуска по расписанию. Вместо этого скопируйте созданное задание в планировщике (чтобы у него было своё имя) и меняйте уже его.

Обо всех ключах командной строки обновлятора читайте здесь.

Как узнать запускался ли обновлятор по расписанию

Бывает так, что расписание вроде бы настроили — но что-то идёт не так.

И мы вообще не уверены — запускался ли обновлятор этой ночью.

Прежде всего я хочу обратить ваше внимание на область в главном окне обновлятора, где выводится статус операций по расписанию:

Здесь мы видим сколько дней назад запускалась соотв. операция по расписанию; сколько в ней участвовало баз и были ли ошибки. При этом если мы нажмём левой кнопкой на этих ссылках, то откроется соответствующий отчёт.

Также мы можем зайти в полный журнал отчётов обновлятора.

. и посмотреть происходило ли выполнение задач.

Но самый надёжный способ разобраться запускалась ли программа и понять причины её не запуска или внезапного завершения — это включить журнал всех заданий в планировщике Windows. По умолчанию он отключён и я советую включать его, чтобы можно было всегда разобраться в проблемных ситуациях.

Чтобы включить журнал планировщика Windows заходим в диалог «Запуск по расписанию» и нажимаем кнопку «Открыть планировщик Windows»:

Это можно сделать также и из панели управления Windows (раздел администрирование).

Здесь находим и нажимаем пункт «Включить журнал всех заданий»:

Готово! Теперь мы сможем просматривать историю работы любой задачи в планировщике.

Например, выделим одну из задач обновлятора:

Как настроить облачную систему мониторинга за запуском задач обновлятора

Сейчас я расскажу о способе как застраховать себя от ситуации — «ой, у нас оказывается уже целую неделю не архивируются (обновляются, тестируются..) базы».

Такая ситуация очень даже возможна, если мы настроили запуск архивации по расписанию, а затем:

  • другой администратор сервера отобрал права у нашей учётной записи для запуска архивации из планировщика и в этом случае обновлятор не сможет нам отправить даже уведомление на почту, ведь для этого ему нужно запуститься, а прав на это нет.
  • или произошли какие-то другие ошибки и на сервере нет интернета, чтобы обновлятор отправил нам сообщение об ошибке.
  • или мы сами ошибочно выключили в обновляторе запуск архивации по расписанию.
  • да мало ли чего может быть.

А нужно всего лишь в дополнение к настройке уведомлений об ошибках на почту настроить облачную систему мониторинга запуска нашего обновлятора. Что это и как работает?

Это, на мой взгляд, совершенно гениальная штука, которая называется healthchecks.io. У этих ребят есть и платные тарифы, но нам вполне сгодится их бесплатный тариф.

Идея следующая. Мы регистрируемся у них на сайте и в своём личном кабинете имеем возможность сказать:

  • Эй, HealthChecks, дай мне уникальный Url (адрес интернет ресурса).
  • HealthChecks, если по этому адресу никто не будет стучаться (запрашивать) в течение такого-то периода — оповести меня об этом на такую-то почту.

Затем мы укажем этот адрес в обновляторе и он будет запрашивать его, например, в конце каждой архивации, запущенной по расписанию. И если в какой-то момент он вдруг перестанет запускаться или будет аварийно завершаться, то сервис HealthChecks оповестит нас об этом. Даже если наш сервер сгорит, его украдут и разберут на винтики. мы первыми узнаем об этом от HealthChecks

Я считаю это гениальная идея. Если вы так не считаете, похоже вы не до конца поняли смысл этой штуки — пожалуйста, перечитайте мой неуклюжий текст ещё раз.

Читайте также:  Как настроить телефон zte после сброса до заводских настроек

Отдельно упомяну , что описанная система мониторинга не отменяет, а дополняет уведомления на почту об ошибках, которые также должны быть настроены в обновляторе для полного контроля за ситуацией.

Простейший сценарий настройки HealthChecks вместе с обновлятором

Пусть мы настраиваем ежедневную архивацию на сервере с именем DataServer, который принадлежит компании ООО «Ромашка»:

И хотим, чтобы HealthChecks оповестил нас, если вдруг обновлятор перестанет запускаться для архивации или такие запуски будут завершаться аварийно.

2. Нажимаем на ссылку Log In в правом верхнем углу.

3. Регистрируемся на почту, на которую хотим получать оповещения.

3. Переходим в раздел «Checks» и нажимаем большую зелёную кнопку «Add Check».

4. Добавилась новая проверка (Check) со своим уникальным адресом (Ping Url):

5. Изменим имя этой проверки на OOO «Romashka» (DataServer, archiving). Это нужно сделать, чтобы мы понимали с чем именно связана эта проверка (архивация на сервере с именем DataServer в компании ООО «Ромашка»):

6. Укажем период проверки (архивация должна запускаться 1 раз в день, сам процесс архивации может занимать до 12 часов):

Второй ползунок (grace) это как раз допустимое превышение периода, то есть время, в течении которого может длиться процесс архивации.

Дополнительный лимит в 12 часов (grace) я указал намеренно, потому что обновлятор делает запрос к системе мониторинга в конце своей работы, а время окончания может варьироваться от различных условий.

Например, если мы настраиваем обновление по расписанию на запуск в 22-00, то сегодня это обновление может закончиться в 23-00, а уже завтра (вышло много новых обновлений) будет длиться до 4 утра.

Отсюда и дополнительный запас в 12 часов, чтобы не было ложных срабатываний от HealthChecks.

Результат настройки периода будет таким:

7. Но как видите поле Last Ping пустое (Never). Оно будет обновляться по мере обращения к этому адресу обновлятором при архивации. А если обращения не будет больше чем 1 день и 12 часов, то HealthChecks забьёт тревогу и оповестит нас на почту.

8. Копируем Ping URL в настройку архивации по расписанию в обновляторе:

Вот и всё

Ради интереса запустим созданную задачу из планировщика:

Дождёмся пока она отработает, а затем заглянем на панель HealthChecks:

А вот пример письма от HealthChecks, если задача перестала запускаться:

В общем штука очень гибкая и я её рекомендую к использованию абсолютно всем.

Настройка более сложного расписания проверки

В предыдущем примере мы настраивали проверку для задачи, которая запускается каждый день и может длиться в течение 12 часов.

А что если нам нужно настроить расписание проверки чуть сложнее? Скажем у нас есть задача, которая запускается только по рабочим дням в 21-00 и может длиться также до 12 часов.

В этом случае на этапе настройки периода переключаемся с Simple на Cron:

Здесь нужно заполнить поле Cron Expression в соответствии с которым и будет рассчитано расписание:

Для нашей задачи (запуск в 21-00, по рабочим дням, работа в течение 12 часов) настройка будет такой:

Если у вас возникнут затруднения с настройкой расписания через Cron — пишите мне на helpme1c.box@gmail.com, я помогу составить правильное выражение.

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю).

Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:

Источник