Завершити фонове завдання 1С 8.3. Універсальне регламентне завдання. Розклад регламентного завдання

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

Нещодавно я розмістив статтю: настав час це автоматизувати:

Регламентні та фонові завдання

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

Механізм завдань вирішує такі завдання:

  • Можливість визначення регламентних процедур на етапі конфігурування системи;
  • Виконання заданих дій за розкладом;
  • Здійснення виклику заданої процедури чи функції асинхронно, тобто. без очікування її завершення;
  • Відстеження ходу виконання певного завдання та отримання його статусу завершення (значення, що вказує на успішність або не успішність його виконання);
  • отримання списку поточних завдань;
  • Можливість очікування завершення одного чи кількох завдань;
  • Управління завданнями (можливість скасування, блокування виконання та ін.).

Механізм завдань складається з наступних компонентів:

  • Метаданих регламентних завдань;
  • Регламентні завдання;
  • фонових завдань;
  • Планувальник завдань.

Фонові завдання & призначені для виконання прикладних завдань асинхронно. Фонові завдання реалізуються засобами інтегрованої мови.

Регламентні завдання & призначені для виконання прикладних завдань за розкладом. Регламентні завдання зберігаються в інформаційній базі та створюються на основі метаданих, що визначаються у конфігурації. Метадані регламентного завдання містять таку інформацію як найменування, метод, використання тощо.

Регламентне завдання має розклад, який визначає, у які часи потрібно виконувати пов'язані з регламентним завданням метод. Розклад, як правило, задається в інформаційній базі, але може бути заданий і на етапі конфігурування (наприклад, для визначених регламентних завдань).

Планувальник завдань використовується для планування виконання регламентних завдань. Для кожного регламентного завдання планувальник періодично перевіряє, чи поточна дата і час відповідає розкладу регламентного завдання. Якщо відповідає, планувальник призначає таке завдання виконання. Для цього за цим регламентним завданням планувальник створює фонове завдання, яке виконує реальну обробку.

З описом, гадаю, вистачить - приступимо до реалізації:

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

Ім'я методу– шлях до процедури, яка виконуватиметься у фоновому завданні за розкладом. Процедура повинна знаходитись у загальному модулі. Рекомендується не використовувати загальні типові модулі, а створити свій. Не забудьте, що фонові завдання виконуються на сервері!

Використання- Ознака використання регламентного завдання.

Зумовлене- Вказує, чи є регламентне завдання зумовленим.

Якщо хочете, щоб регламентне завдання запрацювало відразу після приміщення в БД, вкажіть ознаку Зумовлене. В іншому випадку вам необхідно буде використовувати обробку Консоль завдань або викликати запуск завдання програмно.

Кількість повторів при аварійному завершенні завдання- Скільки разів виконано перезапуск фонового завдання, якщо воно було виконане з помилкою.

Інтервал повтору при аварійному завершенні завдання- З якою періодичністю буде виконано перезапуск фонового завдання, якщо воно було виконане з помилкою.

Налаштування розкладу

Розкладвиконання завдання:

Щогодини, тільки один деньПеріодПовторуДнів = 0, ПеріодПовторуНа протязіДня = 3600
Щодня один раз на деньПеріодПовторуДнів = 1, ПеріодПовторуНа протязіДня = 0
Один день, один разПеріодПовторуДнів = 0
Через день один раз на деньПеріодПовторуДнів = 2
Щогодини з 01.00 до 07.00 щодняПеріодПовторуДнів = 1ПеріодПовторуВПлин Дня = 3600 ЧасПочатку = 01.00

ЧасКінця = 07.00

Щосуботи та неділі о 09.00ПеріодПовторуДнів = 1ДніТижня = 6, 7ЧасПочатку = 09.00
Щодня один тиждень, тиждень перепусткиПеріодПовторуДнів = 1ПеріодТижень = 2
О 01.00 один разЧасПочатку = 01.00
Останнє число кожного місяця о 9:00.ПеріодПовторуДнів = 1ДеньВМісяці = -1ЧасПочатку = 09.00
П'яте число кожного місяця о 9:00ПеріодПовторуДнів = 1ДеньВмісяці = 5ЧасПочатку = 09.00
Друге середа кожного місяця о 9:00ПеріодПовторуДнів = 1ДеньТижняВМісяці = 2ДніТижня = 3

ЧасПочатку = 09.00

Особливості виконання фонових завдань файловому та клієнт-серверному варіантах

Механізми виконання фонових завдань у файловому та клієнт-серверному варіантах різняться.

У файловому варіантінеобхідно створити виділений клієнтський процес, який займатиметься виконанням фонових завдань. Для цього в клієнтському процесі має періодично викликатись функція глобального контексту Виконати Обробку Завдань. Тільки один клієнтський процес на інформаційну базу має виконувати обробку фонових завдань (і, відповідно, викликати цю функцію). Якщо клієнтського процесу для обробки фонових завдань не створено, при програмному доступі до механізму завдань буде видана помилка «Менеджер завдань не активний». Не рекомендується використовувати клієнтський процес, який виконує обробку фонових завдань, для інших функцій.

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

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

У клієнт-серверному варіанті є можливість блокування виконання регламентних завдань. Блокування виконання регламентних завдань відбувається у таких случаях:

  • На інформаційну базу встановлено явне блокування регламентних завдань. Блокування може бути встановлене через консоль кластера;
  • На інформаційну базу встановлено блокування з'єднання. Блокування може бути встановлене через консоль кластера;
  • Зі вбудованої мови викликаний метод ВстановитиМонопольнийРежим() з параметром Істина;
  • У деяких інших випадках (наприклад, при оновленні конфігурації бази даних).

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

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

Розгорнуту інструкцію на прикладі Ви знайдете далі.

Що таке регламентні та фонові завдання у 1С

  • Регламентні завдання- Це спеціальний механізм 1С підприємства 8.3, призначений для виконання певної дії за заданим розкладом.
  • Фонове завдання- об'єкти, що породжуються регламентним завданням, які безпосередньо виконує закладену дію без участі користувача або програміста 1С 8.2.

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

Налаштування фонових завдань у клієнт-серверному режимі роботи 1С

Спочатку створимо новий об'єкт метаданих — регламентне завдання. Я назву своє завдання «ЗавантаженняКурсовВалют». Розглянемо палітру властивостей даного об'єкта конфігурації:

Отримайте 267 відеоуроків з 1С безкоштовно:

  • Ім'я методу— шлях до процедури, яка виконуватиметься у фоновому завданні за розкладом. Процедура повинна знаходитись у загальному модулі. Рекомендується не використовувати типові, а створити свій. Не забудьте, що фонові завдання виконуються на сервері!
  • Використання- Ознака використання регламентного завдання.
  • Зумовлене- Вказує, чи є регламентне завдання зумовленим. Якщо хочете, щоб регламентне завдання запрацювало відразу після приміщення в БД, вкажіть цю ознаку. В іншому випадку вам необхідно буде використовувати обробку Консоль завдань або викликати запуск завдання програмно.
  • Кількість повторів при аварійному завершенні завдання- Скільки разів виконано перезапуск фонового завдання, якщо воно було виконано з помилкою.
  • Інтервал повтору при аварійному завершенні завдання— з якою періодичністю буде виконано перезапуск фонового завдання, якщо його було виконано з помилкою.

І найцікавіше налаштування Розклад:

Тут налаштовується інтервал запуску процедури, вказаної у полі «Ім'я методу». Допустимо я налаштував

Увага!Не забудьте вимкнути блокування виконання регламентних та фонових завдань на рівні СУБД!

Зробити це можна в утиліті адміністрування клієнт-серверного варіанта або під час створення нової БД:

Налаштування регламентних завдань у файловому режимі роботи 1С

У файловому режимі налаштування таких завдань дещо складніше. Для такого завдання має бути запущено окрему сесію програми 1С. Найчастіше це вирішується закладом «технічного» користувача, сеанс якого завжди запущений.

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

Для певного користувача можна налаштувати запуск цього методу, використовуючи інший метод.

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

  • Ім'я процедури- Ім'я процедури, що підключається як обробник очікування. Ім'я процедури, що експортується, модуля керованого додатка (модуля звичайної програми) або глобального загального модуля. Процедура повинна розташовуватись на клієнті.
  • Інтервал- Період між виконаннями операцій в секундах.
  • Одноразовояк виконувати завдання, один раз чи ні.

ПідключитиОбробникОчікування, 3600);

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

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

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

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

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

Регламентні завдання - об'єкт метаданих конфігурації 1С. Знаходиться у групі Загальні. Розглянемо параметри та властивості регламентних завдань.

Ім'я методу— шлях до експортної процедури у загальному модулі, яка виконуватиметься за розкладом. Процедура має виконуватися на сервері. У цьому регламентні завдання чимось схожі на об'єкт Передплата на подію.

Ключ- дозволяє створити кілька регламентних завдань одного типу. Наприклад, виконання синхронізації даних між кількома інформаційними базами може бути реалізовано за допомогою одного об'єкта метаданих РегламентнеЗавдання, у своїй самих регламентних завдань буде створено кілька (за кількістю баз обміну). Розрізнятимуться ці регламентні завдання за допомогою властивості Ключ.Одночасно може виконуватись лише одне завдання з однаковим ключем.

Використання- Прапор, що показує, чи включено регламентне завдання.

Зумовлене— тут можна здійснити аналогію з визначеними елементами довідника. Обумовлені елементи створюються в конфігураторі та застосовуються користувачами в роботі. Звичайні елементи користувач створює сам. З регламентними завданнями так само: якщо воно зумовлене, воно існує і може виконуватися за розкладом відразу після створення в конфігураторі. Якщо ж прапор Зумовленене встановлено, то користувачеві потрібно самому створити одне або кілька регламентних завдань даного типу (наприклад, через Консоль завдань).

Кількість повторів при аварійному завершенні завдання- Визначає, скільки разів буде виконано перезапуск фонового завдання, якщо воно було завершено з помилкою.

Інтервал повтору при аварійному завершенні завдання- Визначає, з якою періодичністю буде виконано перезапуск фонового завдання, якщо воно було завершено з помилкою.

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

У цих прикладах розглядатимемо роботу із звичайними, не зумовленими, регламентними завданнями.

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

//Створюємо завдання
"Ім'яРегдаментногоЗавдання") ;

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

//Включаємо регламентне завдання
Завдання. Використання = Істина;

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

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

У цьому прикладі припустимо, що є лише одне регламентне завдання цього типу. Якщо завдань кілька, то, знаючи, неважко внести до коду відповідні зміни.


"Ім'яРегламентногоЗавдання"] ) ) ;


Якщо завдання. Кількість() > 0 Тоді
Завдання = Завдання [0];


Інакше
Завдання = Регламентні завдання. СтворитиРегламентнеЗавдання( "Ім'яРегламентногоЗавдання") ;

КінецьЯкщо ;

//Регламентне завдання перебуває у змінній Завдання. Ви можете змінити його параметри.

Виклик діалогу зміни розкладу регламентного завдання

p align="justify"> Для роботи з розкладом регламентного завдання існує особливий тип діалогу. Все ще припускаємо, що ми маємо лише одне регламентне завдання даного типу.

//Отримуємо масив із регламентними завданнями потрібного типу
Завдання = Регламентні Завдання. ОтриматиРегламентніЗавдання(новий Структура("Метадані" , Метадані. РегламентніЗавдання[ "Ім'яРегламентногоЗавдання"] ) ) ;

//Якщо завдання існує, то за умовою воно одне
Якщо завдання. Кількість() > 0 Тоді
Завдання = Завдання [0];

//Якщо завдання немає, створимо його
Інакше
Завдання = Регламентні завдання. СтворитиРегламентнеЗавдання( "Ім'яРегламентногоЗавдання") ;

КінецьЯкщо ;

Розклад = Завдання. Розклад;

//Створюємо діалог зміни розкладу регламентного завдання
ДіалогРедагування = Новий ДіалогРозкладиРегламентногоЗавдання (Розклад) ;

//Показуємо діалог користувачеві та обробляємо зміни розкладу
Якщо ДіалогРедагування. ВідкритиМодально()
Завдання. Розклад = ДіалогРедагування. Розклад;
Завдання. Записати() ;
КінецьЯкщо ;

Фонові завдання в «1С» можуть запускатись автоматично за розкладом (тобто є примірниками регламентних завдань), або розробник сам може ініціювати запуск фонового завдання для виконання довільного алгоритму (яскравий приклад формування звітів у фоні).
ВАЖЛИВО!Для файлових баз, починаючи з версії платформи 8.3.3.641, не потрібно запускати окремий сеанс, у якому будуть виконуватися фонові завдання. Тобто. раніше у файлових базах для запуску фонових завдань потрібно виконувати метод глобального контексту «Виконати Обробку Задань()». Подробиці за цим посиланням.

Процедура запуску довільного алгоритму у фоновому завданні

Для запуску нашого алгоритму в окремому фоновому завданні ми будемо використовувати метод «Виконати()»менеджера фонових завдань: Синтаксис:Виконати (<ИмяМетода>, <Параметры>, <Ключ>, <Наименование>)
  • <ИмяМетода>(обов'язковий); Тип: Рядок
    Ім'я процедури, що експортується або функції неглобального загального модуля, який може бути виконаний на сервері, у формі Ім'яМодуля.ІмяМетода.
  • <Параметры>(Необов'язковий); Тип: Масив
    Масив параметрів, що передаються методом. Кількість та типи параметрів повинні відповідати параметрам методу. (Докладніше в Сінтакс-помічнику)
  • <Ключ>(Необов'язковий); Тип: Рядок
    Якщо ключ заданий, він має бути унікальним серед ключів активних фонових завдань, мають таке саме ім'я методу, як і в даного фонового завдання.
  • <Наименование>(Необов'язковий); Тип: Рядок.
    Опис завдання.

Процедура виконання фонового завдання

У нашому випадку ми будемо використовувати експортну процедуру, розташовану в загальному модулі «Загальний МодульСервер»(думаю зайво пояснювати що модуль повинен бути серверним) Процедура ЗаписатиІнформаціюОтовариВФоні(ПараметрФоновогоЗавдання) Експорт ЗапитДаних = Новий Запит("ВИБРАТИ | Товари.Посилання ЯК Номенклатура |З | Довідник.Номенклатура ЯК Товари"); Вибірка = Запит Даних. Виконати (). Вибрати (); Поки Вибірка.Наступний() Цикл МОЗ = РеєстриДовідок.ДаніДотовари.СтворитиМенеджерЗапису(); МЗ.Період = ПоточнаДата(); МОЗ.Номенклатура = Вибірка.Номенклатура; МЗ.Інформація = ПараметрФоновогоЗавдання; МОЗ.Записати(); КінецьЦикл; КінецьПроцедури З метою демонстрації роботи фонового завдання ми формуватимемо записи в нашому регістрі відомостей для кожної номенклатури, при цьому параметр буде передаватися з форми в якій відбувається запуск фонового завдання.

Команда запуску фонового завдання

Параметр, який передаватимемо в процедуру виконання, будемо брати з реквізиту керованої форми (реквізит з типом «Рядок»):

Код модуля керованої форми буде виглядати наступним чином: &НаКлієнті Процедура ЗапускФоновогоЗавдання(Команда) ЗапускФоновогоЗавданняНаСервері(); КінецьПроцедури &НаСервере Процедура ЗапускФоновогоЗавданняНаСервере() // Формуємо масив з параметрами ПараметрыЗадания = Новий Масив; ПараметрыЗадания.Добавить(ПараметрЗадания); // Запускаємо фонове виконання алгоритму Фонові Завдання. "); КінецьПроцедури

Результат виконання

В результаті виконання фонового завдання будуть сформовані записи в регістрі відомостей (що нам і потрібно).

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

Асинхронна концепція програмування полягає в тому, що результат виконання функції доступний не відразу ж, а через деякий час у вигляді деякого асинхронного виклику, що порушує звичайний порядок виконання.

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

Деякі методи, ймовірність винятків яких зведена до мінімуму, не потребують асинхронного підходу, але інші вимагають його на самому початку розробки.

Як видно з графіків, коефіцієнт корисних інтерактивних дій користувача при синхронній моделі програмування відсутня, так як система блокує інтерфейс користувача, в той час як при асинхронній моделі, користувач продовжує активну роботу в системі.

При синхронному виконанні програма має лише один потік. За допомогою асинхронної моделі програмування можна запускати безліч паралельних потоків і під час їх виконання реагувати на нові дії користувача. Після того, як 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» незначно збільшує трудомісткість вирішення завдань для розробника, але помітно покращує функціональність програми з погляду користувача.