Контакти

Аварійно завершився робочий процес фонового завдання. Аварійно завершився процес фонового завдання. Отримання об'єкта завдання

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


Всім доброго дня та гарного тижня!)
Бухгалтерія підприємства, редакція 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С 8.3 рано чи пізно доводилося налаштовувати виконання певних завдань за розкладом. Нижче я дам докладний опис даних механізмів, сподіваюся, це буде корисною інформацією для програмістів-початківців 1С. Це дуже зручно, адже не вимагає дій від людини, регламентне завдання налаштовується 1 раз і працює за Вашим розкладом.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Наприклад, вам потрібно раз на добу вам потрібно здійснювати обмін даними з іншою програмою. Використовуючи регламентні та фонові завдання, 1С зможе робити дані дії самостійно, наприклад, у неробочий час. Такий спосіб ніяк не вплине на роботу користувачів та допоможе заощадити час.

Для початку розберемося, що ж вони позначають і в чому їхня відмінність:

  • Регламентне завданнядозволяє запускати на виконання будь-які конкретні дії за заздалегідь налаштованим розкладом.
  • Фонове завдання- Це об'єкт, в якому містяться дії, що виконуються.

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

Відкрийте конфігурацію та додайте регламентне завдання.

Налаштування властивостей

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

  • В полі " Ім'я методу» вибирається та процедура якогось певного загального модуля, яка безпосередньо виконуватиметься. В ній будуть вказані всі дії щодо розвантаження цін на наш сайт. Зверніть увагу, що виконання відбуватиметься на сервері. Це логічно, адже регламентні операції виконуються без участі користувача.
  • Регламентне завдання можна відключати або вмикати за потребою. Не потрібно щоразу правити його розклад. Для цього на панелі властивостей встановіть або зніміть прапор « Використання».
  • Ще одним важливим є налаштування, чи буде це регламентне завдання зумовленим, чи ні. Обумовлені регламентні завдання запускаються автоматично. Якщо ця ознака не встановлена, вам потрібно буде запускати їх програмно, або скористатися обробкою «Консоль завдань» з ІТС.
  • Також ви можете вказати кількість повторів та інтервал між нимипри аварійному завершенні. Під аварійним завершенням маються на увазі ті ситуації, коли завдання не відпрацювали через виникнення помилки.

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

Завершальним кроком ми налаштуємо розклад нашого вивантаження на сайт за відповідним гіперпосиланням на панелі властивостей.

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

Блокування регламентних завдань

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

У вікні (після введення логіну та пароля для доступу до ІБ) перевірте, щоб не було встановлено прапор на пункті «Блокування регламентних завдань увімкнено». Якщо ви зіткнулися ситуацією, коли завдання не відпрацьовує, насамперед перевіряйте це налаштування.

Так само можна повністю відключити регламентні завдання 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С 8.2, 8.3 – Приклад використання

Наведемо приклад роботи з фоновими завданнями 1С. Спочатку створимо простий алгоритм, який ненадовго завантажуватиме систему 1С таким чином, щоб ми нічого не могли в цей час робити.

Для цього:

1. Створимо загальний модуль "Обробники фонових завдань", який компілюватиметься на стороні сервера;


2. Опишемо в ньому експортну процедуру "ВисловиФоновеОбчислення(Параметр)"яка приймає один параметр рядкового типу;

Процедура ВідповідіФоновеОбчислення(Параметр) Експорт ЧасівНач = ПоточнаДата() ; Поки ПоточнаДата() - ЧасНач< = 6 Цикл КонецЦикла ; КонецПроцедуры Процедура КнНажатие() ОбработчикиФоновыхЗаданий. ПроизветиФоновоеВычисление("Якийсь параметр"); КінецьПроцедури
Готово. Тепер при запуску обробки та натискання на кнопку відбувається підвисання системи на кілька секунд, у процесі якої нічого не можна зробити. Це саме те, що нам треба було зробити.

Тепер забезпечимо добуток цих обчислень у фоні, тобто щоб фонове завдання 1С 8.2, 8.3 виконувалося, але нам не заважало.

Для цього:

1. В обробці, у натисканні кнопки пропишемо наступний код.

Процедура КнНатискання Параметри = Новий Масив; Параметри. Додати( "Якийсь параметр"); Фонове Завдання. Виконати ( "Оброблювачі фонових завдань., Параметри, Новий УнікальнийІдентифікатор, "Тестове завдання"); КінецьПроцедури

Тут першим параметром передаємо ім'я процедури загального модуля, а другим - масив параметрів. Третім параметром потрібно передати унікальний ключ і четвертим опис нашої процедури.



Сподобалася стаття? Поділіться їй