1с фоновое задание пользователь. Фоновые задания: особенности, возможности, настройка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

». В ней мы рассмотрим новые возможности, которые не касаются интерфейса системы, но существенным образом расширяют предоставляемый функционал платформы «1С:Предприятие 8».

Применимость

В статье рассматривается платформа «1С:Предприятие» версии 8.3.4.437. Вся функциональность, описанная в статье, актуализирована до редакции 8.3.11.

Прочие новшества в «1С:Предприятие 8.3»

Продолжим знакомиться с новшествами платформы «1С:Предприятие 8.3».

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

Во многих типовых конфигурациях на платформе 8.2 существовала константа, в которой указывался пользователь, под которым выполнялись задания в файловом варианте.

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

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

Это могло быть особенно критично при работе с такими конфигурациями, как “Комплексная автоматизация” или “Управление производственным предприятием” , в которых регламентные задания играют довольно важную роль.

Если ЭтоФайловаяИБ Тогда
=
Константы.ПользовательДляВыполненияРегламентныхЗаданийВФайловомВарианте.Получить ();
Если глЗначениеПеременной (“глТекущийПользователь” ) =
ПользовательДляВыполненияРеглЗаданий Тогда
// с интервалом секунд вызываем процедуру работы с регламентными заданиями
ПоддержкаРегламентныхЗаданиеДляФайловойВерсии ();
ИнтервалДляОпроса =
Константы.ИнтервалДляОпросаРегламентныхЗаданийВФайловомВарианте.Получить ();
Если ИнтервалДляОпроса = Неопределено
ИЛИ ИнтервалДляОпроса = 0 Тогда
ИнтервалДляОпроса = 60 ;
КонецЕсли ;
ПодключитьОбработчикОжидания (“ПоддержкаРегламентныхЗаданиеДляФайловойВерсии” ,
ИнтервалДляОпроса );
КонецЕсли ;
КонецЕсли ;

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

Фоновые и регламентные задания выполняются непосредственно в одном из клиентских приложений (тонкий, толстый клиент) или расширением веб-сервера.

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

Фоновые задания выполняются последовательно, т.е. на одном клиентском приложении в один момент времени может выполняться только одно фоновое задание (в том числе и регламентное).

Регламентные задания выполняются только одним клиентским приложением. Для управления запуском регламентных заданий предназначен ключ командной строки /AllowExecuteScheduledJobs .

Регламентные задания выполняются первым по порядку запуска клиентским приложением, которому не запрещено выполнение регламентных заданий (для запрещения сеанс должен быть запущен с параметром командной строки /AllowExecuteScheduledJobs -Off ).

Когда этот сеанс завершается, выполнение переходит к какому-либо из оставшихся запущенными сеансов.

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

Обработка регламентных заданий происходит один раз в 60 секунд.

Заметим, что регламентные задания прикладного решения (в файловом варианте) начинали выполняться не ранее, чем через 1 минуту после запуска клиентского приложения. Начиная с редакции 8.3.8 это время увеличили вдвое, и поэтому регламентные задания начинают выполняться максимум через 2 минуты после запуска клиента (в файловом варианте).

Такое решение обусловлено уменьшением задержки при старте приложения. Кроме того, в релизе 8.3.7 была добавлена возможность быстрого определения того, что текущий сеанс является сеансом фонового задания. Это реализовано за счет нового метода глобального контекста ПолучитьТекущийСеансИнформационнойБазы(), а также нового метода у сеанса информационной базы ПолучитьФоновоеЗадание() .

Ниже показан код, который иллюстрирует вышеописанное:

Для увеличения нажмите на изображение.

Вычисление контрольных сумм

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

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

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

Для этого в платформе был реализован объект ХешированиеДанных , доступный на сервере, в толстом клиенте, внешнем соединении, а также на сервере мобильного приложения.

Данный объект имеет два метода: Добавить() и ДобавитьФайл() , которые обновляют хеш-сумму с учетом данных, переданных в параметрах.

Платформа 8.3.4.437 поддерживает вычисление следующих хеш-функций: CRC32 , MD5 , SHA1 , SHA256 . Но функции SHA1 и SHA256 не поддерживаются на мобильной платформе.

Рассмотрим простой пример. Предполагается, что на сервере в каталоге программы есть файл “ragent.exe ”. Необходимо рассчитать MD5 -сумму для этого файла.

Для этого создадим внешнюю обработку, на форме которой разместим команду Рассчитать . Обработчик содержит следующий код:

&НаКлиенте
Процедура Рассчитать (Команда )
Результат = РассчитатьНаСервере ();
Сообщить (Строка (Результат ));
КонецПроцедуры
&НаСервере
Функция РассчитатьНаСервере ()
Хеш = Новый ХешированиеДанных (ХешФункция .MD5 );
Хеш.ДобавитьФайл (КаталогПрограммы () + “ragent.exe” );
Возврат Хеш.ХешСумма ;
КонецФункции

В платформе редакции 8.3.10+ в методе Добавить() объекта ХешированиеДанных стало возможным использовать поток двоичных данных, что значительно упростило их использование в решении различных прикладных задач по обновлению хеш-сумм.

Работа с защищенными версиями протоколов SMTP/POP3

В платформе 8.3 появилась возможность использовать защищенные версии протоколов SMTP/POP3 (встречаются термины SMTPS/POP3S или SSLSMTP/SSLPOP3 ).

Для объекта ИнтернетПочтовыйПрофиль реализованы новые свойства:

  • ИспользоватьSSLSMTP ;
  • ИспользоватьSSLPOP3 ;
  • ТолькоЗащищеннаяАутентификацияSMTP ;
  • ТолькоЗащищеннаяАутентификацияPOP3 .

Свойства АутентификацияSMTP и АутентификацияPOP3 объекта ИнтернетПочтовыйПрофиль , а также перечисления СпособSMTPАутентификации и СпособPOP3Аутентификации использовать не рекомендуется – они поддерживаются для совместимости.

Использование защищенного протокола SMTPS дает возможность отправлять почту из , пользуясь почтовым ящиком Google .

Рассмотрим пример. На форме расположим поля для ввода темы письма и адреса получателя, а для ввода текста письма – поле форматированного документа.

Для увеличения нажмите на изображение.

При нажатии на кнопку Отправить будет выполняться следующий код:

&НаКлиенте
Процедура Отправить (Команда ) Почта = Новый ИнтернетПочта ; Профиль = Новый ИнтернетПочтовыйПрофиль ;
Профиль.АдресСервераSMTP = “smtp.googlemail.com” ;
Профиль.ПользовательSMTP = “[email protected]” ;
Профиль.ПарольSMTP = “PASSWORD” ;
Профиль.ИспользоватьSSLSMTP = Истина ;
Профиль.ПортSMTP = 465 ; Попытка
Почта.Подключиться (Профиль );
Исключение
Сообщить (ОписаниеОшибки ());
Возврат ;
КонецПопытки ; ПочтовоеСообщениеТекст = “” ;
Вложения = Новый Структура ;
Текст.ПолучитьHTML (ПочтовоеСообщениеТекст , Вложения ); ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение ;
ПочтовоеСообщение.Получатели.Добавить (Кому );
ПочтовоеСообщение.Тема = Тема ;
ПочтовоеСообщение.Тексты.Добавить (ПочтовоеСообщениеТекст ,
ТипТекстаПочтовогоСообщения.HTML ); Почта.Послать (ПочтовоеСообщение ); Почта.Отключиться ();
КонецПроцедуры

Заметим, что в нашем примере в случае, если SMTP-сервер не смог отправить электронное сообщение адресату (-ам), то метод Почта.Послать(ПочтовоеСообщение) генерировал исключение. Это вызывало у разработчиков определенные неудобства, т.к. была не очевидна причина генерации исключения.

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

Двусторонняя печать

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

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

Во встроенном языке появились системные перечисления:

  • ТипДвустороннейПечати (Нет, ПереворотВверх, ПереворотВлево);
  • (Авто, ЗеркальноСверху, ЗеркальноСлева, НеИспользовать).

А у объектов ТабличныйДокумент и ГрафическаяСхема появились свойства ДвусторонняяПечать и ЧередованиеРасположенияСтраниц , при помощи которых можно изменять расположение напечатанных страниц.

В редакции платформы 8.3.9 у системного перечисления ТипДвустороннейПечати добавилось новое значение ИспользоватьНастройкиПринтера . Выбор данного значения позволил использовать настройки принтера при печати документов системы. В режиме совместимости с версией 8.3.8 поведение не изменилось и соответствующие настройки принтера игнорируются.

Диалог публикации информационной базы на веб-сервере сделан более функциональным. Теперь публикация из конфигуратора позволяет задавать все параметры файла default.vrd .

Для диалога публикации веб-клиента и Web-сервисов через конфигуратор реализована:

  • возможность управления доступностью Web-сервисов по умолчанию (атрибут pointEnableCommon элемента ws );
  • возможность управления исполнением фоновых заданий в файловом варианте (атрибут allowexecutescheduledjobs элемента ws ).

Если флажок “Публиковать Web-сервисы по умолчанию” на закладке “Основные” установлен, то при обновлении публикации выбранные Web-сервисы будут опубликованы автоматически.

В противном случае Web-сервисы будут отмечены как непубликуемые. Этому флажку соответствует атрибут pointEnableCommon элемента ws в файле default.vrd , предназначенном для настройки веб-клиента и Web-сервисов.

Атрибут pointEnableCommon элемента ws отвечает за возможность использования в данной информационной базе Web-сервисов, которые опубликованы без явного указания разрешения использования (атрибут enable элемента point ).

Если атрибут имеет значение true , то все Web-сервисы, для которых явно не указано значение атрибута enable элемента point , будут разрешены для использования.

В противном случае использование таких Web-сервисов будет запрещено.

Настройка “Фоновые задания в файловом режиме” соответствует атрибуту allowexecutescheduledjobs элемента ws в файле default.vrd .

Атрибут allowexecutescheduledjobs управляет возможностью исполнения регламентных заданий расширением веб-сервера для файлового варианта информационной базы.

Атрибут может принимать следующие значения:

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

Окно публикации на веб-сервисе в актуальном релизе платформы стало еще более удобным и эргономичным. Теперь параметры, описывающие OpenID-аутентификацию, вынесены на отдельную вкладку.

Нумерация объектов информационной базы

В платформе 8.3 переработан механизм автоматической нумерации объектов информационной базы. Контроль уникальности номера или кода (в том числе и полученного в результате автоматической генерации номера или кода) всегда производится во время записи объекта.

В текст сообщения о нарушении уникальности номера или кода добавлено указание, какой номер или код не уникален.

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

Агрегатные функции языка выражений системы компоновки данных

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

  • Каждый();
  • Любой();
  • СтандартноеОтклонениеГенеральнойСовокупности();
  • СтандартноеОтклонениеВыборки();
  • ДисперсияВыборки();
  • ДисперсияГенеральнойСовокупности();
  • КовариацияГенеральнойСовокупности();
  • КовариацияВыборки();
  • Корреляция();
  • РегрессияНаклон();
  • РегрессияОтрезок();
  • РегрессияКоличество();
  • РегрессияR2();
  • РегрессияСреднееX();
  • РегрессияСреднееY();
  • РегрессияСреднееSXX();
  • РегрессияСреднееSYY();
  • РегрессияСреднееSXY().

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

Для увеличения нажмите на изображение.

Как видно по рисунку, в выпадающем списке нет новых функций, однако если ввести их вручную, то сообщения об ошибке не будет, а отчет будет сформирован:

Также представляет интерес новая функция КлассификацияABC() . Результатом работы функции будет номер класса, начиная с 1 (1 соответствует классу А, 2 – классу B, 3 – классу C и т.д.).

Продемонстрируем работу этой функции. Создадим новый внешний отчет “Классификация товаров” на основе запроса:

ВЫБРАТЬ
РасходТовараТовары.Товар ,
РасходТовараТовары.Количество
ИЗ
Документ.РасходТовара.Товары КАК РасходТовараТовары

Определим новое вычисляемое поле Класс :

Для увеличения нажмите на изображение.

Произведем настройку ресурсов следующим образом:

Для увеличения нажмите на изображение.

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

В заключение отметим, что от редакции к редакции в платформе 1С 8.3 механизм СКД постоянно улучшается и дорабатывается, и в рамках нашей “новичковой” статьи данные изменения привести в полном виде не представляется возможным. Да это и кажется излишним, т.к., работая на актуальной версии платформы, вы всегда можете воспользоваться различными справочными системами для помощи с разбором того или иного аспекта работы данного механизма.

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

Итак, давайте подведем промежуточные итоги. До этого момента мы познакомились и с новыми возможностями интерфейса «Такси» и управляемых форм, а также с некоторыми ранее не предоставляемыми возможностями самой платформы. Теперь настало время посмотреть, какие удобные возможности стали доступны и разработчику в конфигураторе.

Концепция асинхронного программирования

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

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

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

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

При синхронном выполнении у приложения есть только один поток. С помощью асинхронной модели программирования вы можете запускать множество параллельных потоков и во время их выполнения реагировать на новые действия пользователя. После того как n-поток выполнен, вы отображаете результат на экран.

Фоновые задания в «1С:Предприятие 8»

В «1С:Предприятие 8» фоновые задания предназначены для выполнения прикладных задач асинхронно. Они могут порождать дочерние фоновые задания, например, для распараллеливания сложных вычислений по различным рабочим серверам кластера в клиент-серверном варианте работы.

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

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

Клиент-серверный вариант

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

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

Файловый вариант

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

Раньше для автоматического выполнения заданий требовалось запускать отдельный, дополнительный сеанс «1С:Предприятия», используемый в качестве планировщика заданий. И в этом сеансе нужно было периодически выполнять метод встроенного языка ВыполнитьОбработкуЗаданий(). Такой подход был довольно громоздким, неудобным и сильно ограничивал использование фоновых и регламентных заданий в файловом варианте работы.

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

Каждое из перечисленных приложений выполняет собственные фоновые задания. Если приложение инициировало несколько фоновых заданий, то выполняются они последовательно, в порядке поступления.

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

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

Пример асинхронного выполнения кода в «1С:Предприятие 8»

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

Продемонстрируем всю простоту и изящество асинхронного выполнения кода в «1С:Предприятие 8»!

Шаг 1. Создадим новую ИБ для разработки конфигурации

Шаг 2. В конфигурации добавим общий модуль «АсинхронныеОбработчики»

Почему мы добавили общий модуль? Тут все просто: для выполнения асинхронных операций в «1С:Предприяте 8» применяются фоновые задания, у которых имеется свой менеджер - «МенеджерФоновыхЗадания». У этого объекта есть метод «Выполнить», с помощью которого как раз и запускается фоновое задание.

Обратимся к синтакс-помощнику.

Таким образом, нам понадобится общий модуль.

Шаг 3. В общем модуле «АиснхронныеОбработчики» добавим экспортную процедуру НашаДлительнаяОперация()

Процедура НашаДлительнаяОперация(Длительность) Экспорт // Имитация продолжительного действия (Длительность сек.). ДатаНачалаОперации = ТекущаяДата(); Пока ТекущаяДата() - ДатаНачалаОперации < Длительность Цикл КонецЦикла; КонецПроцедуры

Шаг 4. Добавляем в конфигурацию обработку «АсинхроннаяКонцепцияПрограммирования» (можно создать внешнюю обработку)

На форму добавляем один реквизит:

Длительность (Число)

и две команды

ВыполнитьДлительнуюОперацию;

ВыполнитьДлительнуюОперациюАсинхронно.

Шаг 5. Согласно синтакс-помощнику заполняем модуль формы

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

Шаг 6. Запускаем и проверяем!

Результат:

Если мы нажимаем на кнопку «Выполнить длительную операцию», то пользовательский интерфейс на «Длительность» секунд блокируется;

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

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

Отладить программный код, который выполняется в «фоне» мы можем, если в параметрах отладки установим соответствующее свойство.

Пример асинхронного выполнения кода в «1С:Предприятие 8» с использование БСП

Пример реализации асинхронной концепции программирования в «1С:Предприятие 8» в БСП рассмотрим на примере обработки «Текущие дела».

Логика следующая: во время запуска программы инициализируется рабочая область начальной страницы, куда можно вывести форму обработки «Текущие дела». Эта форма заполняется текущими делами пользователя, а чтобы ее заполнить необходимо время. Если бы у разработчиков не было возможности асинхронно выполнять код, то на все время заполнения формы обработки пользовательский интерфейс был бы заблокирован!

Проанализируем программный код формы.

Событие формы «ПриСозданииНаСервере» вызывает процедуру «ЗапуститьФоновоеЗадание» - это то, что нам и нужно.

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

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

Для этого разработчики применяют метод ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>).



В подключаемой процедуре Подключаемый_ПроверитьВыполнениеЗадания() разработчики вызывают функцию ЗаданиеВыполнено(ИдентификаторЗадания)


Данная функция по идентификатору проверяет выполнения фонового задания.

Необходимо отметить, что в БСП разработаны общие модули поддержки работы длительных серверных операций.

Таким образом, асинхронная концепция программирования в «1С:Предприятие 8» незначительно увеличивает трудоемкость решения задач для разработчика, но заметно улучшает функциональность программы с точки зрения пользователя.


– Загрузка классификатора банков

Это регламентное задание осуществляет загрузку классификатора банков РФ с сайта РБК. Его регулярная работа поддерживает этот классификатор в актуальном состоянии. И когда мы добавляем очередной расчетный счет – больше шансов, что банк в котором он открыт будет найден нами в классификаторе по БИК.

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

– Заполнение данных для ограничения доступа

Это регламентное задание выполняет последовательное заполнение и обновление данных, необходимых для работы подсистемы “Управления доступом” в режиме ограничения доступа на уровне записей.

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

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

Задание служебное. Не нужно включать его вручную.

– Извлечение текста

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

– Обмен сообщениями по учетным записям документооборота

Регламентное задание по автоматическому обмену с контролирующими органами. Используется при сдаче регламентированной отчетности прямо из 1С.

– Обновление агрегатов

Регламентное задание выполняет обновление агрегатов. Что это за зверь такой?

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

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

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

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

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

– Обновление данных монитора руководителя

Регламентное задание вызывает обновление данных регистра сведений “ДанныеМонитораРуководителя” по всем организациям. Если монитор руководителя реально используется – задание имеет смысл.

– Обновление задач бухгалтера

Регламентное задание производит обновление и заполнение задач бухгалтера (даты сдачи различных деклараций, отчетов и тому подобное).

– Обновление индекса ППД

Обновляет индекс полнотекстового поиска. Если пользуетесь полнотекстовым поиском – задание имеет смысл. Включается автоматически, если в настройках базы включён полнотекстовый поиск.

– Обновление информации о направлениях сдачи отчетности

Речь идёт об направлениях: в ФСС, в ФНС, в ПФР. Короче, что-то связанное опять же со сдачей электронной отчетности из 1С.

– Обработка заявлений абонентов на подключение электронной подписи в модели сервиса

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

– Отложенное обновление ИБ

Задание управляет процессом выполнения отложенных обработчиков обновления. Не следует включать самостоятельно.

– Отправка отчетности абонентов

Отправка регламентированной отчетности абонентов сервиса в контролирующие органы через сервис сдачи отчетности СОС “Калуга-Астрал”. Не следует включать самостоятельно.

– Очистка устаревших версий объектов

Только для служебного использования.

– Перестроение агрегатов

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

– Пересчет текущих значений относительных дат запрета изменения

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

– Планирование извлечения текста в модели сервиса

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

– Получение результатов отправки отчетности

Получение результатов отправки отчетности абонентов сервиса в контролирующие органы от сервиса сдачи отчетности СОС “Калуга-Астрал”. Служебное.

– Проверка контрагентов

Для модели сервиса обновляет состояния контрагентов (всё ли у него ОК с реквизитами). Для локального режима обновляет состояния и записывает недостающие ИНН и КПП.

– Слияние индекса ППД

Выполняет слияние индексов полнотекстового поиска. Работа задания связана опять же с полнотекстовым поиском (куда же поиск без индекса).

– Удаление неактуальной информации синхронизации

Выполняет удаление информации синхронизации, которая не была удалена из-за сбоев в работе программы. Удалению подлежат файлы с датой размещения более суток.

– Удаление помеченных объектов программы

Удаляет помеченные объекты из регламентного задания.

– Установка периода рассчитанных итогов

Служебное задание, устанавливающее период рассчитанных итогов. По итоги писалось выше.

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

Развернутую инструкцию на примере Вы найдете далее.

Что такое регламентные и фоновые задания в 1С

  • Регламентные задания — это специальный механизм 1С предприятия 8.3, предназначенный для выполнения определенного действия по заданному расписанию.
  • Фоновое задание — объекты, порождаемые регламентным заданием, которые непосредственно выполняет заложенное действие без участия пользователя или программиста 1С 8.2.

Механизм регламентных и фоновых заданий работает в клиент-серверном режиме работы (SQL), благодаря функционалу СУБД. Если у вас файловая БД, то задание тоже можно настроить, но немного по другому принципу.

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

Для начала создадим новый объект метаданных — регламентное задание. Я назову свое задание «ЗагрузкаКурсовВалют». Рассмотрим палитру свойств данного объекта конфигурации:

Получите 267 видеоуроков по 1С бесплатно:

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

И самая интересная настройка — Расписание:

Тут настраивается интервал запуска процедуры, указанного в поле «Имя метода». Допустим я настроил

Внимание! Не забудьте отключить блокировку выполнения регламентных и фоновых заданий на уровне СУБД!

Сделать это можно в утилите администрирования клиент-серверного варианта либо при создания новой БД:

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

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

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

Для определенного пользователя можно настроить запуск этого метод, используя другой метод —

ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>).

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

ПодключитьОбработчикОжидания, 3600 ) ;

Двухминутное видео, в котором показано, как настроить регламентное задание в конфигураторе 1С: