Отдельный рабочий процесс для фоновых заданий. Регламентные и фоновые задания. Концепция асинхронного программирования

Вопрос: Аварийно завершился процесс фонового задания...


Всем доброго дня и хорошей недели!)
Бухгалтерия предприятия, редакция 3.0 (3.0.46.11).
Платформа 8.3.9.2033.
При групповом проведении документов возникает ошибка "Аварийно завершился процесс фонового задания". Никаких причин не выдаётся...
Перезагрузка сервера SQL, сервера 1С (мало ли) не помогает... Может, кто сталкивался с подобной проблемой??? Даже сложно сказать после чего появилась данная ошибка ибо групповым проведением (закрытием месяца) давно не пользовались...

Ответ: () () Ещё раз добрый день) Включил технологический журнал и обнаружил вот такие интересные вещи (может в курсе с чем проблема?):
Сделана попытка выполнить операцию на объекте, не являющемся сокетом...
Процесс завершается. Исходящий вызов запрещен...
Не найдено ни одного сервера с размещенным сервисом...

Вопрос: Фоновые задания


Платформа 1С:Предприятие 8.3 (8.3.9.2170), конфа БП 3.0.
В конфигурации настроена интеграция через внешние источники данных (тип СУБД - OracleDatabase). Добавлен ряд таблиц, из которых идет загрузка НСИ, проводок. Т.к. данных очень много было решено сделать пакетную загрузку через фоновые задания. Размер порции - 100 000, размер пакета - 10 000, количество проводок в документе - 1000, количество одновременно работающих фоновых заданий - 8.
Запускаю, гружу, все ок. Но если ставлю на ночь, то такое ощущение, что 1с уходит в спящий режим, т.е. через какое-то время, как показывает лог, фоновые задания запускаются, но не завершаются. В итоге получилось, что задания запустились в 12 ночи, а были завершены в 8 утра (когда я пошурудил мышкой) и после этого продолжили выполняться далее в нормальном режиме. Запускал и в тонком и в толстом клиенте. В параметрах стоит настройка - время засыпания в пассивном сеансе 1200, но это разве не только на тонкий клиент распространяется и может ли быть в этом проблема? Отключать это не хочу, т.к. пользователи не выходят из программы, пусть засыпают. Может кто-то сталкивался с подобной проблемой? Как решили?

Ответ:

Нет такой возможности.

Смысл запускать фоновое задание и ждать его завершения?
чтобы не наплодить больше 8-ми фоновых заданий?

Перетащите "менеджер" фоновых заданий на сторону сервера и пусть контролирует....

Запускал на Pentuim D840 40-50 фоновых заданий - полет нормальный, дальше уже упирается в процессор/память.

Вопрос: Как передать файл в фоновое задание


Платформа 8.3.6.2152
Нужно из УФ передать файл в фоновое задание для последующей обработки.
Делал так:
&НаКлиенте
Процедура Команда1(Команда) ФайлДД = Новый ДвоичныеДанные(ИмяФайла); АдресХранилищаДляФонового = ПоместитьВоВременноеХранилище(ФайлДД, УникальныйИдентификатор); ЗапуститьВыгрузкуЗагрузкуНаСервере(АдресХранилищаДляФонового) КонецПроцедуры &НаСервере Функция ЗапуститьВыгрузкуЗагрузкуНаСервере(АдресХранилищаДляФонового) ПараметрыМетода = Новый Массив; ПараметрыМетода.Добавить(АдресХранилищаДляФонового); Задание = ФоновыеЗадания.Выполнить("МойОбщийМодуль.МоеФоновое", ПараметрыМетода); КонецФункции
В общем модуле:

Процедура МоеФоновое(АдресХранилища) Экспорт ФайлДД = ПолучитьИзВременногоХранилища(АдресХранилища); Если ТипЗнч(ФайлДД) = Тип("ДвоичныеДанные") Тогда ЗаписьЖурналаРегистрации ЗаписьЖурналаРегистрации ("Отладка","Нет ДД"); КонецЕсли ; КонецПроцедуры Пробовал так: ПомещаемыеФайлы = Новый Массив; ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла)); ПомещенныеФайлы = Новый Массив; Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, Ложь , УникальныйИдентификатор) Тогда Возврат ; КонецЕсли ; АдресХранилищаДляФонового = ПомещенныеФайлы.Хранение; Пробовал так: АдресХранилищаДляФонового = ПоместитьВоВременноеХранилище(Неопределено , УникальныйИдентификатор); ПоместитьФайл(АдресХранилищаДляФонового, ИмяФайла, Ложь );
Из фонового на клиент через временное хранилище нормально передается, а вот с клиента в фоновое - никак почему-то.

Ответ: В общем все оказалось довольно просто. Получается можно тупо передавать ДвоичныеДанные как параметр к фоновому заданию. Для неквалифицированных любителей цитировать справку и рассказывать что "так и задумано" рабочий код:
&НаКлиенте
Процедура Команда1(Команда) ЗапуститьВыгрузкуЗагрузкуНаСервере(Новый ДвоичныеДанные(ИмяФайла)) КонецПроцедуры
&НаСервере Функция ЗапуститьВыгрузкуЗагрузкуНаСервере(ДД) ПараметрыМетода = Новый Массив; ПараметрыМетода.Добавить(ДД); Задание = ФоновыеЗадания.Выполнить("МойОбщийМодуль.МоеФоновое", ПараметрыМетода); КонецФункции Процедура МоеФоновое(ФайлДД) Экспорт Если ТипЗнч(ФайлДД) = Тип("ДвоичныеДанные") Тогда ЗаписьЖурналаРегистрации ("Отладка","Есть ДД"); Иначе ЗаписьЖурналаРегистрации ("Отладка","Нет ДД"); КонецЕсли ; КонецПроцедуры

Вопрос: Запуск фонового задания под нужным пользователем


Здравствуйте!
Есть 1С:Предприятие 8.3 (8.3.11.2924), УТ 11.3.4.93 клиент - сервер.
В этой конфигурации движения по регистру "Расчеты с клиентами по документам " выполняется не в момент проведения документа, а регламентным заданием "Выполнение отложенных движений по расчетам с клиентами\поставщиками".
При этом иногда регламентное задание выдавало ошибку, т.к. пыталось сделать движения в закрытом периоде (Ранее даты запрета редактирования). В настройках регламентного задания прописали специального пользователя, у которого дата запрета открыта, после этого все стало работать.
Однако, есть необходимость сделать, чтобы данные движения по регистрам делались в момент проведения документа, а не тогда, когда запустится фоновое задание по расписанию.
Если запускать сам код, который выполняет регламентное задание при проведении документа, то возникает та же ошибка - закрыт период. И если программно запускать фоновое задание запускающее этот же код в момент проведения документа, то оно вызывает точно ту же ошибку, т.к. период закрыт, а фоновое задание, запускаемое программно, запускается под именем текущего пользователя, а у него дата запрета закрыта. Однако, когда запускается фоновое задание по расписанию, у которого установлен "правильный" пользователь в планировщике, то все проходит на ура. Вот как это сделать программно, как программно запустить фоновое задание под нужным пользователем "через планировщик" как это делают стандартные регламентные задания, подскажите пожалуйста?

Ответ:

Разве не под тем, под которым настроено?
Это должно быть глюк конфигурации

Lis2007 сказал(а):

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

Нажмите, чтобы раскрыть...

Вопрос: Отладка фонового задания


Фоновое задание выполняется с ошибкой. Решил отладить.
запускаю через внешнюю обработку с одной строкой:
ФоновыеЗадания.Выполнить("МойМодуль.МоеЗадание");
На точку останова в модуле не выходит.
Отладка на сервере разрешена, галка в отладке, автоматическое подключение, фоновые задания - стоит. В чем может быть ещё проблема?

Ответ: В общих модулях было обращение к функциям требующих клиентского а не серверного выполнения. Пришлось посадить их в скобки #Если Клиент Тогда. Отработало и фоновое.

Вопрос: Ошибка при выполнении обмена


Добрый день Подскажите, куда копать:
выполняю обмен в бухгалтерской базе. Из УТ-шки выгружается порядка трех десятков документов через типовой обмен. Долго думат (около часа) и завершается с сообщением:
аварийно завершился процесс фонового задания

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

Регламентные задания хранятся в информационной базе, имеют расписание запуска. Сам запуск производится полностью автоматически, если режим работы информационной базы клиент-серверный. Если же база файловая, то необходимо выполнить следующие действия:

  • выделить специального пользователя для выполнения регламентных заданий;
  • должна быть открыта база под этим пользователем, в которой периодически должна выполняться функция ВыполнитьОбработкуЗаданий().

Создание регламентного задания

Регламентные задания — объект метаданных конфигурации 1С. Находится в группе Общие. Рассмотрим параметры и свойства регламентных заданий.

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

Ключ — позволяет создать несколько регламентных заданий одного типа. Например, выполнение синхронизации данных между несколькими информационными базами может быть реализовано с помощью одного объекта метаданных РегламентноеЗадание , при этом самих регламентных заданий будет создано несколько (по количеству баз для обмена). Различаться эти регламентные задания будут с помощью свойства Ключ. Одновременно может выполняться только одно задание с одинаковым ключом.

Использование — флаг, показывающий, включено ли регламентное задание.

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

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

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

Программная работа с регламентными заданиями

В данных примерах будем рассматривать работу с обычными, не предопределенными, регламентными заданиями.

Программное создание регламентного задания

//Создаем задание
"ИмяРегдаментногоЗадания" ) ;

//Устанавливаем ключ регламентного задания (не обязательно)
Задание. Ключ = "КлючЗадания" ;

//Включаем регламентное задание
Задание. Использование = Истина ;

//Записываем регламентное задание
Задание. Записать() ;

Программное получение регламентного задания для изменения параметров

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


"ИмяРегламентногоЗадания" ] ) ) ;


Если Задания. Количество() > 0 Тогда
Задание= Задания[ 0 ] ;


Иначе
Задание = РегламентныеЗадания. СоздатьРегламентноеЗадание("ИмяРегламентногоЗадания" ) ;

КонецЕсли ;

//Регламентное задание находится в переменной Задание. Можно изменять его параметры.

Вызов диалога изменения расписания регламентного задания

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

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

//Если задание существует, то по условию оно одно
Если Задания. Количество() > 0 Тогда
Задание= Задания[ 0 ] ;

//Если задания нет, создадим его
Иначе
Задание = РегламентныеЗадания. СоздатьРегламентноеЗадание("ИмяРегламентногоЗадания" ) ;

КонецЕсли ;

Расписание= Задание. Расписание;

//Создаем диалог изменения расписания регламентного задания
ДиалогРедактирования= Новый ДиалогРасписанияРегламентногоЗадания (Расписание) ;

//Показываем диалог пользователю и обрабатываем изменения расписания
Если ДиалогРедактирования. ОткрытьМодально() Тогда
Задание. Расписание = ДиалогРедактирования. Расписание;
Задание. Записать() ;
КонецЕсли ;

Регламентные задания 1С - это специальный механизм системы, предназначенный для выполнения определенного действия автоматически в фоновом режиме и по определенному расписанию (например, рассылка отчетов, отложенное проведение , загрузка курсов валют и др.).

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

Фоновое задание 1С:

  1. выполняется под пользователем Windows, под которым работает процесс программы сервера 1С.
  2. можно создавать на языке 1С произвольно без регламентного задания (для параллельных вычислений на сервере).

ВАЖНО! Фоновые задания исполняются на сервере.

Отличие регламентного задания от подписки на событие:

  • позволяет выполнять обработчик не при наступлении события (как это делает ), а по расписанию.

Механизм регламентных и фоновых заданий работает:

  • автоматически - в клиент-серверном режиме работы (благодаря функционалу СУБД);
  • интерактивно - при использовании файловой БД, выполнением команды ВыполнитьОбработкуЗаданий() из сеанса в режиме 1С:Предприятие.

Особенности регламентных и фоновых заданий 1С:

  1. Экземпляр регламентного задания может быть создан программно. Если регламентное задание предопределенное (в свойствах стоит флаг "Предопределенное"), то задание будет создано в единственном экземпляре с указанным в конфигураторе расписанием. Экземпляры НЕ предопределенных заданий появляются по расписанию, заданному в режиме Предприятие программно.
  2. Одновременно выполняться может любое количество регламентных заданий , но не будут выполняться два задания (во избежание коллизий) :
    • с одинаковым ключом (ключ - свойство регламентного задания, которое позволяет сгруппировать несколько однотипных заданий) ;
    • связанные с одним и тем же объектом метаданных.
  3. В качестве метода регламентного задания может использоваться процедура , у которой может быть любое количество параметров. Число параметров метода регламентного задания соответствует числу параметров самого регламентного задания.
  4. Для создания регламентного задания пользователь должен обладать правами администратора.
  5. Если регламентное задание определено в конфигураторе (в соответствующем объекте ) как предопределенное , то предопределенный экземпляр регламентного задания нельзя пометить на удаление и удалить (но можно изменять, также они всегда будут доступны в списке шаблонов регламентных заданий).
  6. Если в качестве метода регламентного задания используется функция, то возвращаемое функцией значение игнорируется.
  7. Для обеспечения работы регламентных и фоновых заданий как в файловом, так и в клиент-серверном вариантах нет необходимости в запуске экземпляра 1С:Предприятие.

    Замечание

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

    [свернуть]

  8. Фоновые задания позволяют выполнять процедуру асинхронно.
  9. Одновременно может быть запущено любое количество фоновых заданий , но нельзя запустить два задания с одинаковым ключом и именем метода.
  10. Завершившиеся фоновые задания являются сеансовыми объектами, хранятся некоторое время (в информационной базе не сохраняются). Фоновое задание - это объект встроенного языка, который существует только во время сеанса.
  11. Настройка регламентного задания в клиент-серверном режиме работы 1С

    Настройка регламентного задания осуществляется в палитре свойств данного объекта конфигурации.

    Рисунок палитры свойств объекта 1С "Регламентные задания"

    [свернуть]

    Палитра свойств объекта "Регламентные задания":

  • Имя метода - путь к процедуре, которая находится в общем и будет выполняться в фоновом задании по заданному расписанию. Рекомендуется не использовать типовые , а создать свой.
  • Наименование – определяет название, отображаемое в средствах управления заданиями.
  • Ключ – позволяет сгруппировать несколько разных регламентных заданий 1С, при этом дновременно может быть запущено только одно задание с одинаковым значением ключа. Само значение может быть произвольным. Пустое значение не учитывается при контроле (то есть считается незаполненным).
  • Использование - флаг использования регламентного задания.
  • Предопределенное - флаг указывает, является ли регламентное задание предопределенным, т.е. работающим сразу после помещения в БД (задание будет создано в единственном экземпляре с указанными в конфигураторе расписанием). Не предопределенные задания появляются в момент наступления расписания программно (необходимо использовать обработку «Консоль заданий» или вызывать запуск задания программно).
  • Количество повторов при аварийном завершении задания - сколько раз выполнен перезапуск фонового задания, если оно было выполнено с ошибкой.
  • Интервал повтора при аварийном завершении задания - периодичность выполнения перезапуска фонового задания, если оно было выполнено с ошибкой.
  • Расписание - настройка интервала запуска процедуры, указанной в поле «Имя метода».

Для управления фоновыми заданиями можно использовать обработку с диска ИТС " ", которая позволяет:

  • выполнять мониторинг работы регламентных и фоновых заданий;
  • удалять и создавать новые фоновые задания средствами встроенного языка;
  • временно отключать регламентные задания (?).

Особенности настройки регламентных заданий 1С:

    Задачи выполняются автоматически – их необходимо проверять (мониторить).

    [свернуть]

Настройка регламентных заданий в файловом режиме работы 1С

В файловом режиме для регламентного задания должна быть запущена отдельная сессия программы 1С. Часто это решается определением «технического» пользователя, чей сеанс всегда запущен.

Инициализация регламентного задания происходит:

  1. в общем случае - при запуске метода ВыполнитьОбработкуЗаданий();
  2. для конкретного пользователя - при запуске метода ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>) (работает на клиенте).
  • ИмяПроцедуры - имя экспортируемой процедуры модуля (модуля обычного приложения) или глобального общего модуля, подключаемой в качестве обработчика ожидания. Процедура должна располагаться на клиенте.
  • Интервал - период между выполнениями операций в секундах.
  • Однократно - количество выполниний задания (один раз или нет).

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

Например, вам нужно раз в сутки вам нужно совершать обмен данными с другой программой. Используя регламентные и фоновые задания, 1С сможет производить данные действия самостоятельно, например, в нерабочее время. Такой способ никак не повлияет на работу пользователей и поможет сэкономить время.

Для начала разберемся, что же они обозначают и в чем их отличие:

  • Регламентное задание позволяет запускать на выполнение какие-либо конкретные действия по заранее настроенному расписанию.
  • Фоновое задание – это объект, в котором содержатся выполняемые действия.

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

Откройте конфигурацию и добавьте регламентное задание.

Настройка свойств

Рассмотрим самые важные параметры, которые необходимо заполнить в его свойствах.

  • В поле «Имя метода » выбирается та процедура какого-то определенного общего модуля, которая будет непосредственно выполняться. В ней будут указаны все действия по выгрузке цен на наш сайт. Обратите внимания, что выполнение будет происходить на сервере. Это логично, ведь регламентные операции выполняются без участия пользователя.
  • Регламентное задание можно отключать или включать по необходимости. Не нужно каждый раз править его расписание. Для этого в палитре свойств установите или снимите флаг «Использование ».
  • Еще одной немаловажной является настройка, будет ли являться данное регламентное задание предопределенным , или нет. Предопределенные регламентные задания запускаются автоматически. Если данный признак не установлен, то вам будет нужно запускать их программно, либо воспользоваться обработкой «Консоль заданий» с ИТС.
  • Так же вы можете указать количество повторов и интервал между ними при аварийном завершении. Под аварийным завершением подразумеваются те ситуации, когда задания не отработали по причине возникновения ошибки.

Настройка расписания

Завершающим шагом мы настроим расписание нашей выгрузки на сайт по соответствующей гиперссылке в палитре свойств.

Перед вами откроется типовая настройка расписания в 1С 8.3. Здесь нет ничего сложного. В рамках данного примера мы настроили запуск нашей выгрузки цен на сайт ежедневно с пяти до семи утра. В том случае, если регламентное задание не успеет отработать до 7:00, оно будет выполнено уже на следующий день.

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

Запустите стандартную утилиту «Администрирование серверов 1С Предприятия» и откройте свойства той информационной базы, где вы создали регламентное задание (для клиент-серверных версий 1С).

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

Таким же образом можно полностью отключить регламентные задания в 1С 8.3. Для отключения конкретных фоновых заданий можно воспользоваться встроенной в последние релизы обработкой «Консоль фоновых заданий».

Фоновые и регламентные задания в файловом режиме

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

Активация регламентных заданий в данном случае производится при использовании метода «ВыполнитьОбработкуЗаданий()».

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

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

Отслеживание ошибок в фоновых заданиях

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

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