Запуск отчета по расписанию 1с

Обновлено: 07.07.2024

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

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

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

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

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

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

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

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

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

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

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

Это право необходимо, если вы настраиваете выполнение задач расписания в фоновом режиме.

Чтобы дать это право пользователю:

Если же вам достаточно того, чтобы расписание обновлятора работало только, если за компьютером работает (произведен вход в систему) текущий пользователь:

  • в диалоге выбора пользователя (при сохранении расписания) установите галку 'Запускать только при вошедшем в систему текущем пользователе'

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

Выбор баз

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

. либо в списке баз конкретной задачи:

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

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

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

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

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

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

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

Быстрая проверка

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

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

Детальная проверка

Также мы можем зайти в расписание.

. и посмотреть историю выполнения задач вместе с отчётами:

Если ничего не помогло

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

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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

Простейший сценарий настройки 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 часов) настройка будет такой:

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

Расписание поддерживает следующие виды задач

  1. Обновление баз
  2. Архивация баз
  3. Проверка архивов
  4. Скачивание обновлений для баз
  5. Тестирование и исправление баз

Но что если нужно поставить в расписание задачу, которой ещё нет в этом списке? В этом случае:

  1. Используйте возможности пакетных и onescript скриптов. При их сохранении можно указать добавление в планировщик так и вот так.
  2. Используйте ключи командной строки обновлятора.

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

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

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

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 бесплатная и легко пробивается в яндексе.

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

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

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

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

Как содать реквизит со ссылкой на дополнительный отчет
Предполагаться, что у каждого вида отчетности будет своя печатная форма, пытаюсь это реализовать.

Программно сформировать отчет. УТ 11
Пытаюсь программно сформировать отчет с подчиненными группировками, в результате у меня не.

Можно ли программно доработать отчет по СКД?
Пытаюсь понять как в СКД создавать большие отчеты? У меня есть сложный отчет, часть отчета беру из.

Дополнительный отчет для ЗУП
кто-нибудь занимался отчетом для зуп формирующий результат начисления зп, удержание (ндфл).

Копаюсь в коде основной формы ДО .
ДО без формы - там она ни к чему.

И как это согласуется?

Что касается вопроса:
Сначала надо получитьсвою обработку

Пытаюсь говорить на языке 1С. Есть некая сущность, называемая "дополнительная обработка", а копаюсь я в основной форме ее редактирования. Рисунок прилагаю. Я родил одну из таких сущностей (у нее нет формы), нужно ее запустить на исполнение программно. vpivo, Это не форма редактирования, это форма Справочника ДополнительныеОтчетыОбработки. Вам туда вообще не надо. Какая стоит задача? Если запускать по расписанию - сделайте регламентное задание, само запустится, если запускать по требованию, то примерно так
Теперь через ВнОбработка.ВашаПроцедураЭкспорт вы достучитесь до любой экспортной процедуры вашей обработки а как вы без формы выполните команду формы?
Должна быть экспортная процедура модуля объекта в этом случае, которая вызывается по нажатию "Выполнить" и которую можно было бы вызвать при программном создании объекта, без формы. GreenkA, А почему использовала "Выполнить программно дополнительный отчет" ? Лично я прочитал ДО как дополнительная обработка ))) Спасибо всем. Для исполнения команды доп.обработки без формы (фактически вызова с ожиданием процедуры "ВыполнитьКоманду" модуля доп.обработки) накропал вот такое:

ПРОСЬБА МОДЕРАТОРУ ВЕРНУТЬ МОЙ ЗАГОЛОВОК ТЕМЫ.

Добавлено через 3 минуты
Поясните пожалуйста, зачем мне "достукиваться" до моей процедуры "ВыполнитьКоманду" модуля доп.обработки? Что Вы имели под этим ввиду?
А копался я в этой форме редактирования, потому что там есть кнопка, которая ФАКТИЧЕСКИ выполняет именно то, что мне нужно.

Добавлено через 1 минуту
А посмотрите в моем коде "как это возможно в доп.обработке без формы".

Добавлено через 1 минуту
Поясню.
У меня есть внешняя обработка, а в ней прежде чем что-то делать - нужно запустить эту доп.обработку - это синхронизация данных.

Добавлено через 3 минуты
Еще не знаю, но попытаться вызвать экспортную функцию (очень длительную) доп.обработки в конечном итоге через предлагаемый метод Выполнить как-то не сильно нравится. Хочется псевдо-асинхрона с возможностью прервать.

Все построено на обмене. Создается обмен данными, по ПРАВИЛАМ. . Добавляется правила, у которых в событии ПослеЗагрузкиПравилОбмена создается обработка и вызывается экпортная процедура. А в обработоке чего душа желает. Вот.

Теперь по порядку:

1. Добавляем настройку:

Обмен

В краце по полям:

Наименование - понятно

Узел - не принципиально

Тип обмена - Обмен через файловый ресурс (с другими не пробывал)

Все остальные поля не принципиальны.

2. Вобщем то сами правила. - В них вся соль :)

' 2.01
' 4279b494-5374-4cb7-964a-a93a7171dfcf
' Отчет По Дебиторке
' 2012-03-02T20:23:53
'<Источник ВерсияПлатформы ="8.0" ВерсияКонфигурации ="1.3.22.1" СинонимКонфигурации ="Управление производственным предприятием, редакция 1.3" > УправлениеПроизводственнымПредприятием
'<Приемник ВерсияПлатформы ="8.0" ВерсияКонфигурации ="1.3.22.1" СинонимКонфигурации ="Управление производственным предприятием, редакция 1.3" > УправлениеПроизводственнымПредприятием
'

//Способ получаения обработки выбирайте сами, кому что больше нравится. Я лично предпочитаю использовать подключенные обработки в базу (надежнее) В прикрепленных файлах - правила для загрузки обработки с диска.

Ссылка = Справочники . ВнешниеОбработки . НайтиПоКоду ( КодОбработки );

Если НЕ Ссылка . Пустая () Тогда

ДвоичныеДанные = Ссылка . ХранилищеВнешнейОбработки . Получить ();

ДвоичныеДанные . Записать ( ИмяФайла );

ВнешнаяОбработка = ВнешниеОбработки . Создать ( ИмяФайла , Ложь); // БезопасныРежим ложь, иначе файл не создаст

ВнешнаяОбработка . Тест (); //Эскпортная функция/процедура в модуле обработки


//Ответ = ВнешнаяОбработка.Тест(); - Это если необходимо, что то возвращать

//Если Ответ Тогда


// ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация, , ,"Отчет выполнен успешно.");


// ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , ,"Ошибка формирования и отправки отчета.");

ЗаписьЖурналаРегистрации ( ИмяСобытия , УровеньЖурналаРегистрации . Ошибка , , , "Ошибка запуска обработки." );

ЗаписьЖурналаРегистрации ( ИмяСобытия , УровеньЖурналаРегистрации . Ошибка , , , "Не найдена обработка с кодом " + КодОбработки );

Эти правила необходимо загрузить в обмен (кнопочка открыть и записать :))

3. Далее необходимо настроить запуск обмена:

Вкалдка "Автоматический обмен". Доавбялем настройку. Ставим расписание запуска. ВАЖНЫЙ МОМЕНТ: В выполняемых действиях (второй прямоугольник на скрине ниже) необходимо добавить выгрузку данных.

Настройка обмена


4. Про обработку: Тут никаких особенностей нет. Важно понимать, где будет выполнятся процедура сервер/клиент - Вобщем использывать провильные методы.

Данный механизм прекрасно работает в УПП (1_3_20_1 и выше) и БП (2_0_30_8 и выше). По сути будет работать в любой типовой конфе, где есть обмены.

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

Что-то криво правила разместились(пункт 2), отвались шапка и подвал хмл. Ниже все в txt. 2. Alex_Japanese_Student 443 13.09.12 15:30 Сейчас в теме Нестандартно, но интересно найдено место для запуска произвольной процедуры.
Во внешние обработки можно положить все что угодно, лишь бы были права.
Открыта дыра в защите базы.
Ждем хакеров. (3) vladismi, А нечего всем юзверям раздавать права на запуск внешних обработок/отчетов. А не из пушки ли по воробьям получается?
Ну хорошо - не подходит механизм регламентных/фоновых заданий.
Но уж планировщиком операционной системы можно воспользоваться - запускать по расписанию задание, в котором всего одна команда - старт 1С8 в режиме enterprise, и в параметрах командной строки указана обработка для запуска.
Эту обработку можно сделать таким образом, что она при открытии сделает все, что нужно, а потом закроет 1С-Предприятие. (5) Да, обычно так и делают, но, думаю, такой способ тоже не всем может подойти. У пользователя может не быть прав на открытие внешних обработок, или право COM-соединения (если через скрипт делать), или нельзя пароль хранить в скрипте. Так-то способ оригинальный, но неплохо было бы упомянуть, что запускаемая обработка или сами же правила должны чистить хотя бы периодически регистрацию изменений на этом "виртуальном" узле. А то и объем базы будет расти, да и обход в цикле "выгружаемых" измененных объектов будет все дольше и дольше (насчет последнего могу ошибаться, может до этого и не дойдет с такими "пустыми" правилами). (6) khaoos,
Так раз обмен будет происходить по произвольным правилам обмена, то никакой автоматической регистрации изменений не будет, только то, что вы сами напишите в правилах выгрузки, -а раз там нечего будет выгружать, то все "накладные" расходы по времени будут минимальны

(5) kapustinag,
1. Если у Вас нет прав на планировщик? - в больший компаниях такое есть.
2. Не предпочитаю использовать внешние обработки, т.к. сменился серв, упала сеть все обработина не запустилась. Поэтому проще запускать из обработок, загруженных в базу (просто надежнее). А как запустить Предприятие с параметром запуска обработки под кодом ХХХ я не знаю - буду рад если Вы просветите как это сделать )

Да и так, считаю, что совсем не из пушки. Т.к. все в одном месте. Надо базу перекинуть - все останется. В Вашем же варианте, надо еще и про планировщик не забыть.

(9)
1. Если нет прав на планировщик операционной системы, то довольно странно, что есть права на управление обменами в ПРОИЗВОДСТВЕННОЙ информационной базе. Так что это не аргумент, и явная недоработка службы безопасности.
2. Насчет падений сети, переездов с места на место и недоступности сетевых дисков - такое, конечно, бывает. Но и Ваше решение не 100% защищено от таких событий. Если посмотреть внимательнее на первый же скрин в публикации, то видно, что Тип обмена = Обмен через файловый ресурс, и указан локальный каталог на диске d:

3. По поводу ". А как запустить Предприятие с параметром запуска обработки под кодом ХХХ я не знаю - буду рад если Вы просветите как это сделать. " - просвещаю. Никакого волшебства. В той внешней обработке, которая находится НЕ В БАЗЕ, и которую Вы запустите через параметры командной строки 1С-Предприятия, будет Вами прописан вызов обработки из справочника "Внешние обработки", или любой другой обработки.
Вполне рабочее решение, мы использовали его, например, для запуска некоторых отчетов при входе определенных пользователей в 1С.

(21) kapustinag,
1. Правами в ОС рулят админы. Права в ИБ настраивают программисты 1С. - Поэтому ничего странного нет, наоборот :) В больших компаниях Администротор <> Программист.

. то довольно странно, что есть права на управление обменами в ПРОИЗВОДСТВЕННОЙ информационной базе.

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

3. Это понятно ) Я же имел ввиду, как запустить обработку, которая находится в базе.

Читайте также: