Лекарство от зависших регламентных заданий

24.11.13

База данных - Инструменты администратора БД

Методика автоматического лечения зависших регламентных заданий

В одной внедряемой информационной системе значение регламентных заданий (РЗ) оказалось очень велико. С помощью них осуществляется автоматизированная проверка и загрузка исходных данных в систему. И надо же было такому случиться, РЗ стали иногда подвисать. Несколько раз в месяц, после перезапуска сервера 1С Предприятия, все РЗ переставали выполняться. Выяснилось, что ситуация легко локально лечится перезаписью каждого РЗ. После чего они начинают нормально работать.

Поиск в Инете показал, что мы не одиноки. Подобная проблема встречается давно, но есть нюансы. Один из хорошо известных случаев, когда сервер sql и сервер 1С стоят на одной машине. После физического перезапуска сервера сервис 1С Предприятия стартует раньше сервиса sql, и модуль обработки регламентных заданий не может ещё прочитать их из базы. И считает, что их нет. Есть даже рекомендация Микрософт для данной ситуации, которая предусматривает настройку зависимости сервиса 1С Предприятия от сервиса sql. То есть он всегда буде стартовать после. Решение! Но это был не наш случай, так как физического перезапуска сервера у нас не было. Только остановка и старт сервиса. Были проанализированы и другие аспекты. Сервер sql работает непрерывно. Базы в кластер если и добавляются, то порядком реже, чем сбоят РЗ. Разделителей нет. После перезапуска сервера 1С Предприятия РЗ стартуют независимо.

Попытка обсуждения на партнерском форуме 1С ни к чему не привела - https://partners.v8.1c.ru/forum/t/1171054/m/1171054. Не смотря на проявленное внимание со стороны сотрудников 1С, рекомендаций по решению не было.

В голове бродили идеи внешнего контроля над работой РЗ. Можно было бы использовать ЦКК, но он только информирует и не исправляет ошибки. Можно было бы запускать 1С с параметром с помощью системного планировщика раз в день, проверять и перезаписывать зависшие РЗ. Но тут на партнерском форуме попалось похожее решение от Евграфова Андрея - https://partners.v8.1c.ru/forum/t/916015/m/1103984. Суть его решения похожа на описанное выше, но метод, на мой взгляд, интереснее. Планировщик запускает vbs, а он в свою очередь запускает через COM 1С и вызывает модуль для контроля РЗ.
Модуль vbs передльно прост:

Dim v82, base
Set v82 = CreateObject("V82.ComConnector")
ConnString = "Srvr=имя_сервера;Ref=имя_базы"
Set base = v82.Connect(ConnString)
base.CheckScheduledTasks

В зависимости от настроек, в строку соединения возможно придется добавить пользователя и пароль: "usr=пользователь;pwd=пароль".

В конфигурацию я добавил процедуру в Модуль внешнего соединения, которая вызывает процедуру из Общего модуля:

Процедура CheckScheduledTasks() Экспорт
   
РегламентныеЗадания.ПроверитьПерезаписатьРегламентныеЗадания();
КонецПроцедуры

// Процедура проверяет выполнение и перезаписывает все включенные регламентные задания
Процедура ПроверитьПерезаписатьРегламентныеЗадания() Экспорт
   
мРЗ = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Новый Структура("Использование", Истина));

    Если
мРЗ.Количество() = 0 тогда
       
ЗаписьЖурналаРегистрации("Регламентные задания",УровеньЖурналаРегистрации.Информация,,,"Отсутствуют Регламентные задания с признаком Использование");
    КонецЕсли;

   
стрТекущееВремя = "00010101"+Формат(Час(ТекущаяДата()),"ЧЦ=2; ЧН=00; ЧВН=")+Формат(Минута(ТекущаяДата()),"ЧЦ=2; ЧН=00; ЧВН=")+
       
Формат(Секунда(ТекущаяДата()),"ЧЦ=2; ЧН=00; ЧВН=");
   
ТекущееВремя = Дата(стрТекущееВремя);

   
мПозже = Новый Массив;
   
фПерезаписываем = Ложь;

    Для каждого
РЗ из мРЗ цикл
        Если
РЗ.Расписание.ВремяНачала > ТекущееВремя тогда
           
мПозже.Добавить(РЗ);
        ИначеЕсли
РЗ.ПоследнееЗадание = Неопределено тогда
           
РЗ.Записать();
           
фПерезаписываем = Истина;
           
ЗаписьЖурналаРегистрации("Регламентные задания",УровеньЖурналаРегистрации.Предупреждение,РЗ.Метаданные,РЗ,"Перезаписано - "+РЗ.Метаданные.Имя);
        Иначе
           
ЗаписьЖурналаРегистрации("Регламентные задания",УровеньЖурналаРегистрации.Информация,РЗ.Метаданные,РЗ,"Нормально выполняется - "+РЗ.Метаданные.Имя);
        КонецЕсли;
    КонецЦикла;

    Если
фПерезаписываем тогда
        Для каждого
РЗ из мПозже цикл
           
РЗ.Записать();
           
ЗаписьЖурналаРегистрации("Регламентные задания",УровеньЖурналаРегистрации.Предупреждение,РЗ.Метаданные,РЗ,"Перезаписано - "+РЗ.Метаданные.Имя
);
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

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

Получилась заглушка, но, как показала практика, весьма эффективная!

Благодарность - Андрею Евграфову!!!

Регламентные задания

См. также

SALE! 15%

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7906    59    23    

69

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 18.09.2024, версия 1.2

16800 руб.

06.12.2023    8898    42    5    

74

SALE! 15%

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8500 руб.

10.11.2023    10478    36    25    

61

SALE! 35%

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3120 руб.

14.01.2013    188088    1140    0    

912

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    32717    106    152    

73

Архивирование (backup) Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней. Только для WINDOWS!

6000 руб.

06.11.2012    72812    627    45    

85

Инструменты администратора БД Системный администратор Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием Платные (руб)

Конфигурация Комплексная автоматизация 1.1 (и УПП 1.3 тоже) хранит файлы и изображения в справочнике Хранилище дополнительной информации в реквизите Хранилище типа ХранилищеЗначений. Та же история с ВложениямиЭлектроннойПочты. Но при этом присоединенные файлы в Электронном документообороте хранит в томах на диске. Эта доработка позволяет использовать стандартный механизм хранения файлов, изображений и вложений электронных писем в томах на диске. При этом можно разделить тома хранения по объектам конфигурации.

4200 руб.

10.11.2015    62845    94    59    

79

Инструменты администратора БД Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Многие сталкиваются с проблемой когда изображения, находящиеся в базе разные по объему и размерам. Менеджеры могут добавить файлы в очень высоком разрешении, объемом свыше 20 Мегабайт. База данных становится слишком большой, выгрузка на сайт идёт медленно и требуется много место на хостинге. Как сжать картинки и уменьшить размер базы 1С? Это можно сделать с помощью данной обработки. Существует возможность выбрать различные варианты для того чтобы уменьшить картинки: в разы, в процентах от первоначального объема, а также сделать картинки одинаковой ширины. В результате размер базы 1С значительно сократится (в зависимости от количества и размера картинок), а изображения станут небольшого объема, равными по ширине, почти без потери качества. Работает на управляемых формах для УТ 11, КА, ERP.

3000 руб.

21.07.2022    9849    7    4    

15
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bforce 482 24.11.13 21:43 Сейчас в теме
У нас тоже такое было. Но, кажется, на 17-й платформе. Потом это как-то самой собой разрешилось... то ли перерегистрацией базы в кластере, то ли вместе с обновлением платформы. Сейчас такой проблемы нет.

Я спрошу у коллег, может кто-то помнит.
2. i_lo 214 24.11.13 22:00 Сейчас в теме
(1) bforce, коллеги боролись с этим ещё на 8.1, а у нас ситуация была на 8.2.18.82. Поэтому не стал писать версию платформы...
Вчера переехали на 8.2.19. Понаблюдаем. Будет продолжаться, попробую перерегистрацию в кластере. Спасибо!
3. tormozit 7231 24.11.13 23:39 Сейчас в теме
У этого метода есть негативная сторона - при любой записи регламентного задания у него сбрасывается внутренний реквизит ДатаПоследнегоВыполнения и оно сразу запускается, если конечно остальные настройки расписания позволяют.
adhocprog; +1 Ответить
4. i_lo 214 25.11.13 01:45 Сейчас в теме
(3) tormozit, у РЗ есть реквизит ПоследнееЗадание, типа ФоновоеЗадание, которое в свою очередь имеет реквизит Конец, типа дата. В нашем случае прекращают формироваться фоновые задания и реквизит ПоследнееЗадание равен Неопределено! Именно на это и идет проверка. И после перезаписи РЗ начинают правильно выполняться в соответствии с настройками расписания. В чем же вы видите негативную сторону?
6. yuraos 1003 27.11.13 09:16 Сейчас в теме
(4)
я думаю, что уважаемый (3) tormozit имеет ввиду,
что если перезаписать регламентное задание с установленным флагом использования,
то оно практически всегда стартует заново (с нюансами расписания я не экспериментировал),
что может быть не совсем к месту (например, если оно только-что выполнено).
12. i_lo 214 27.11.13 11:59 Сейчас в теме
(6) yuraos, наверное, я не очень хорошо прокомментировал код... Если РЗ выполнялось, то его реквизит ПоследнееЗадание будет иметь определенное значение. И перезаписи не произойдет. А если значение Неопределено, то как раз и нужно протолкнуть РЗ. Тогда оно перезаписывается и, если расписание позволяет, выполняется.
7. yuraos 1003 27.11.13 09:33 Сейчас в теме
(3) tormozit,
можно вопрос на засыпку:
В документации сказано, что из списка фоновых заданий (всех регламентных и без расписания)
удаляются записи самых ранних неактивных (завершенных) заданий,
если общее число записей в списке превышает 1000.
---
может ли это обстоятельство "поломать" график выполнения заданий,
если расписание детально расписано по времени суток ???
...
ну например если другие фоновые задания запускаются в среднем раз 10 секунд ???
13. i_lo 214 27.11.13 12:03 Сейчас в теме
(7) yuraos, полагаю, что на выполнение это никак не повлияет. Это скорее, как очистка журнала. Где-то читал, что оперативная информация о выполненных фоновых заданиях хранится в памяти сервера. Например, если сервер 1С перезагрузить, то в консоли РЗ будут некие старые цифры...
22. yuraos 1003 27.11.13 17:18 Сейчас в теме
Резюмируя (7)(10)(13) с учетом (19)
можно ли считать верным утверждение:

что решение о запуске задания принимается только в зависимости
от значений полей "_StartTime" и "_FinishTime"
и никак не зависит от предыстории выполнения задания ???
---
так сказать запуск решения является своего рода "марковским" процессом.
23. tormozit 7231 27.11.13 17:48 Сейчас в теме
(22) Ну я уже вроде отвечал на этот вопрос (10) и пояснил в (21). История тут не используется.
10. tormozit 7231 27.11.13 10:45 Сейчас в теме
(3) История не используется при принятии решения о запуске. Я ж вроде объяснил, что используется внутренний реквизит регламентного задания ДатаПоследнегоВыполнения, который автоматически очищается при его записи.
adhocprog; yuraos; +2 Ответить
15. i_lo 214 27.11.13 12:14 Сейчас в теме
(10) tormozit, хотелось бы уточнить. Кто принимает решение о запуске? Менеджер РЗ? Реквизит ДатаПоследнегоВыполнения является внутренним и недоступным из кода? В справке его нет. Чем плохо очищать этот реквизит, если РЗ и так стоит?
19. yuraos 1003 27.11.13 16:44 Сейчас в теме
(15)
если открыть базу в руле скуля,
то можно найти табличку _ScheduledJobs (см. скриншот),
которая как я могу судить имеет отношение к нашему предмету.
Прикрепленные файлы:
adhocprog; Valet; +2 Ответить
20. yuraos 1003 27.11.13 16:47 Сейчас в теме
(19)
надо полагать,
что "ДатаПоследнегоВыполнения" - это поле "_FinishTime"
21. tormozit 7231 27.11.13 17:16 Сейчас в теме
(20) Нет. Хранятся обе даты. Про вторую (дату окончания запуска) обычно не упоминают, т.к. она реже играет роль. Но строго говоря обе этих даты очищаются при записи регламентного задания и обе же используются планировщиком при проверке "надо ли запустить фоновое задание?".
5. yuraos 1003 27.11.13 09:09 Сейчас в теме
Любопытно
....
Как раз сейчас по-крупному ковыряюсь с регламентными и фоновыми заданиями.
8. bforce 482 27.11.13 10:17 Сейчас в теме
Мы с коллегами вспомнили еще один факт, который помогал избегать проблем с регламентными заданиями.

В расписании задания на закладке Дневное расписание мы обязательно добавляли хотя бы одну строку в тч Детальное расписание дня (она добавляется с тем же расписанием). Тогда нам это помогало. После перезапуска сервера задания, в которых эта строка была, стартовали без проблем. Другие - нет.

Сейчас, когда я проверяю наши задания, то вижу, что эта строка присутствует не везде, хотя проблем с заданиями нет.
9. comol 5108 27.11.13 10:39 Сейчас в теме
А ещё в эту функцию можно добавить получение списка регламентных заданий, чтение их расписания и запуска :). Самый верный способ :).
14. i_lo 214 27.11.13 12:08 Сейчас в теме
(9) comol, я дико извиняюсь, но вот я получаю список используемых РЗ:

РегламентныеЗадания.ПолучитьРегламентныеЗадания(Новый Структура("Использование", Истина)),

потом анализирую время запуска:

Если РЗ.Расписание.ВремяНачала > ТекущееВремя тогда,

потом наличие последнего фонового задания:

ИначеЕсли РЗ.ПоследнееЗадание = Неопределено тогда

Только после этого перезаписываю...
17. comol 5108 27.11.13 14:46 Сейчас в теме
(14) так после этого можно и выполнить их уже :). Я к этому
18. yuraos 1003 27.11.13 16:36 Сейчас в теме
(14)
не все так просто с расписаниями.
они достаточно хитро устроены.
Лучше использовать объект "РасписаниеРегламентногоЗадания".
у него есть специально предназначенный метод:

РасписаниеРегламентногоЗадания (JobSchedule)
ТребуетсяВыполнение (ExecutionRequired)
Синтаксис:

ТребуетсяВыполнение(<ДатаДляПроверки>, <ДатаНачалаПоследнегоЗапуска>, <ДатаЗавершенияПоследнегоЗапуска>)
Параметры:

<ДатаДляПроверки> (необязательный)

Тип: Дата.
Дата, для которой нужно проверить расписание. Если дата не задана, используется текущая дата.
<ДатаНачалаПоследнегоЗапуска> (необязательный)

Тип: Дата.
Дата начала последнего запуска регламентного задания. Если дата задана, то используется для проверки таких условий как ПериодПовтораДней, ПериодНедель, ПериодПовтораВТечениеДня. Если дата не задана, то считается, что задание не выполнялось ни разу и проверка этих условий не производится.
<ДатаЗавершенияПоследнегоЗапуска> (необязательный)

Тип: Дата.
Дата завершения последнего запуска регламентного задания. Если дата задана, то используется для проверки условия ПаузаПовтора. Если дата не задана, то считается, что задание ни разу не завершалось, и проверка этого условия не производится.
Возвращаемое значение:

Тип: Булево.

Описание:

Проверяет, выполняется ли расписание для заданной даты.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Показать

Но тут есть нюансы:
с первым параметром вроде все ясно
а вот со вторым и третьим - уже так совсем.
:)
24. i_lo 214 27.11.13 19:29 Сейчас в теме
(18) yuraos, я соглашусь, что у меня простейший метод проверки, должно ли данное РЗ выполняться. Он работает только если РЗ начинаются утром и заканчиваются вечером. Для более универсального алгоритма правильнее было бы использовать указанный метод. Но для моего случая этого было достаточно ).
Что касается дат и предистории. Согласен, что менеджер РЗ работает по датам. Но именно в описанном в статье случае, подвисания РЗ после перезапуска сервера 1С, значение ПоследнегоЗадания оказывается Неопределенным. И после перезаписи, менеджер РЗ нормально продолжает работу. Исправление ситуации на лету!
Ещё и надеюсь, что разработчики платформы разберутся и исправят ситуацию в новых релизах )...
26. yuraos 1003 02.12.13 17:38 Сейчас в теме
(24)

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


НУ ТЫ БЛИН И ОПТИМИСТ!!!!!
27. yuraos 1003 02.12.13 17:40 Сейчас в теме
(26)
ДА У НИХ ДЛЯ КАЖДОГО РЕЛИЗА ПЛАТФОРМЫ 8.3
ПРЕДУСМОТРЕН СВОЙ РЕЖИМ СОВМЕСТИМОСТИ!!!
11. V_V_V 27.11.13 11:51 Сейчас в теме
На одной нетленке регламентные задания висли по банальной причине - криво написанный код их выполнения. После выпрямления рук проблема ушла. Может стоит глянуть в эту сторону, а не костыли ставить?
И исторически сложилось, что никогда не разделяю сервера 1C и SQL (около десятка машин по всем филиалам). Ни разу не довелось столкнуться с проблемой позднего зажигания SQL...
16. i_lo 214 27.11.13 12:34 Сейчас в теме
(11) V_V_V, занятно. В месяце 22 рабочих дня. 20 из низ 10 РЗ выполняются без проблем, а 2 дна все 10 подвисают, причем именно после перезапуска сервера 1С. И замечательно продолжают работать после перезаписи!!! Не верится ), но я посмотрю первое задание, которое выполняется после перезапуска сервера...
25. maclen_mmv 27.11.13 19:33 Сейчас в теме
Очень интересная тема...
28. AlexO 135 26.03.21 11:14 Сейчас в теме
Как успехи с борьбой зависания РЗ сейчас?
29. Fynjy2 22.09.22 00:47 Сейчас в теме
Искал решение проблемы поиска. Связывал проблему с невыполненным заданием.

Помогло переподключение базы на кластере 1с. Проблему контекстного поиска решило.
Оставьте свое сообщение