Фонови задачи: функции, възможности, настройки. Стартиране на фонова задача програмно 1s управлявани формуляри, настройване на файл на фонова задача

Вероятно всеки програмист на 1C 8.3 рано или късно трябваше да настрои изпълнението на определени задачи по график. По-долу ще дам Подробно описаниетези механизми, надявам се, че ще бъде полезна информацияза начинаещи програмисти 1с. Това е много удобно, защото не изисква човешки действия, планираната задача се конфигурира веднъж и работи според вашия график.

Подробни инструкции с пример можете да намерите по-долу.

Какво представляват планираните и фоновите задачи в 1C

  • Планирани задачие специален механизъм 1C enterprise 8.3, предназначен да изпълнява конкретно действие по даден график.
  • Фонова работа- обекти, генерирани от планирана задача, която директно изпълнява присъщото действие без участието на потребителя или програмиста 1C 8.2.

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

Настройка на фонови задачи в режим клиент-сървър на работа 1C

Като начало, нека създадем нов обект на метаданни - планирана задача. Ще кръстя задачата си „Зареждане на валутни курсове“. Помислете за палитрата със свойства на този конфигурационен обект:

Вземете 267 1C видео урока безплатно:

  • Име на метода— път до процедурата, която ще бъде изпълнена във фоновата задача според зададения график. Процедурата трябва да е в споделен модул. Препоръчително е да не използвате стандартни, а да създадете свои собствени. Не забравяйте, че фоновите задачи се изпълняват на сървъра!
  • Използване- знак за използване на планирана задача.
  • предварително определениПоказва дали планираното задание е предварително дефинирано. Ако искате планираната задача да работи веднага след поставянето й в базата данни, посочете този флаг. В противен случай ще трябва да използвате обработката на "Job Console" или да извикате заданието за програмно изпълнение.
  • Брой повторни опити при срив на задание— колко пъти е било рестартирано фоновото задание, ако е било изпълнено с грешка.
  • Интервал за повторен опит за прекратяване на задание- колко често ще се рестартира фоновата задача, ако е била завършена с грешка.

И най-интересната обстановка - График:

Тук можете да зададете интервала за стартиране на процедурата, посочен в полето "Име на метода". Нека да настроя

внимание!Не забравяйте да деактивирате блокирането на планирани и фонови задания на ниво СУБД!

Това може да се направи в помощната програма за администриране на версията клиент-сървър или при създаване на нова база данни:

Настройка на планирани задачи във файловия режим на работа 1C

Във файлов режим настройването на такива задачи е малко по-трудно. За такава задача трябва да се стартира отделна сесия на програмата 1C. Често това се решава от институцията на "техническия" потребител, чиято сесия винаги се изпълнява.

Във файловия режим инициализирането на планираното задание се извършва, когато се стартира методът "ExecuteJobProcessing()".

За конкретен потребител е възможно да конфигурирате този метод да работи с друг метод −

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

  • Име на процедурата— името на процедурата, свързана като манипулатор на изчакване. Името на експортираната процедура за управляван приложен модул (обикновен приложен модул) или глобален споделен модул. Процедурата трябва да се намира на клиента.
  • Интервал— период между изпълнение на операциите в секунди.
  • веднъж- как да изпълните задачата, веднъж или не.

ConnectWaitingHandler, 3600 );

Двуминутен видеоклип, показващ как да настроите планирана задача в конфигуратора на 1C:

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

За да редактирате планирани и фонови задачи в раздела за администриране, изберете „Редовни и фонови задачи“ отляво. Ще се появи списък със съществуващи задачи, тяхното състояние, график и друга информация.

Като щракнете няколко пъти върху някоя от задачите, ще се отвори прозорец със свойствата на тази задача. Тук можете да промените много настройки по ваш вкус, включително графика за тази задача. За да деактивирате задача, отметката в квадратчето „Активирано“ трябва да бъде премахната. Но ако задачата трябва да се изпълнява по график, изключително важно е да използвате отделен потребител с пълни права за всички фонови задачи.

Параметрите на графика на задачите са много гъвкави, но все пак е желателно да настроите всички задачи по такъв начин, че само 1 задача да се изпълнява едновременно и за предпочитане в извънработно време. Изключение може да бъде само синхронизирането на няколко свързани информационни бази, например счетоводство на предприятието + заплати и управление на персонала.

Изтегляне на банковия класификатор - неделя 4:30 сутринта
Зареждане на валутни курсове - всеки ден; 7:00 часа
Извличане на текстове – всеки ден; 6:00.
Съобщения за акаунти за работни процеси - всеки ден; на всеки 10800 сек.
Обновяване на единици - всеки ден; от 5:00:00 веднъж на ден
Актуализиране на задачите на счетоводителя - всеки ден; от 6:30:00 веднъж на ден
Актуализация на PPD индекса (пълнотекстово търсене) – всеки ден; на всеки 10800 сек.
Обновяване на агрегат - всеки ден, по дни от седмицата [събота]; от 3:00:00 веднъж на ден
Преизчисляване на текущите стойности на относителните дати на забраната за промени - всеки ден; от 7:00:00 веднъж на ден
Merge index PPD (пълнотекстово търсене) – всеки ден; от 4:00:00 веднъж на ден
Изтриване на остаряла информация за синхронизация – всеки ден; от 3:30:00 веднъж на ден
Задаване на периода на изчислените суми - всеки ден, на 5-то число от месеца; от 1:00:00 веднъж на ден

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

Концепцията за асинхронно програмиране е, че резултатът от изпълнението на функцията не е наличен веднага, а след известно време под формата на някакво асинхронно (нарушаващо нормалния ред на изпълнение) извикване.

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

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

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

Когато се изпълнява синхронно, приложението има само една нишка. С модела на асинхронно програмиране можете да изпълнявате много паралелни нишки и да отговаряте на нови потребителски действия, докато се изпълняват. След като n-нишката е готова, вие показвате резултата на екрана.

Фонови задачи в 1C:Enterprise 8

В 1C:Enterprise 8 фоновите задания са предназначени за асинхронно изпълнение на задачи на приложението. Те могат да създават дъщерни фонови задания, например, за паралелизиране на сложни изчисления в различни работещи сървъри на клъстера в режим на работа клиент-сървър.

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

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

Опция клиент-сървър

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

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

Опция за файл

Започвайки с версия 8.3.3.641 на платформата, разработчиците значително опростиха работата с фонови задания във файловата версия.

Преди това автоматичното изпълнение на задачи изискваше стартиране на отделна допълнителна сесия 1C:Enterprise, използвана като планировчик на задачи. И в тази сесия беше необходимо периодично да се изпълнява методът на вградения език ExecuteProcessingJobs().Този подход беше доста тромав, неудобен и силно ограничаваше използването на фонови и планирани задачи във файловата версия на работата.

Сега всичко стана много по-лесно. Ако стартира тънък или дебел клиент или ако уеб сървърът има клиентски връзки, тогава всяко от тези приложения автоматично стартира друга нишка с връзка към базата данни. Тези нишки са ангажирани с това, че изпълняват фонови и планирани задачи.

Всяко от тези приложения изпълнява свои собствени фонови задачи. Ако едно приложение е инициирало няколко фонови задания, тогава те се изпълняват последователно, в реда, в който са получени.

Очевидни минус 1C фонови задания: тъй като се изпълняват от страната на сървъра, няма възможност за интерактивна работа с потребителя (например не можете да показвате съобщение или друга информация; всички тези данни трябва да се съхраняват в информационната база и да се обработват допълнително по някакъв начин) .

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

Пример за изпълнение на асинхронен код в 1C:Enterprise 8

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

Нека демонстрираме цялата простота и елегантност на асинхронното изпълнение на код в 1C:Enterprise 8!

Етап 1.Нека създадем нов IB за разработка на конфигурация

Стъпка 2В конфигурацията добавете общия модул "AsynchronousHandlers"

Защо добавихме общ модул? Тук всичко е просто: за извършване на асинхронни операции в 1C: Enterprise 8 се използват фонови задачи, които имат свой собствен мениджър - „BackgroundTask Manager“. Този обект има метод "Run", с помощта на който се стартира фоновата задача.

Нека се обърнем към асистента за синтаксис.

Следователно ще ни трябва общ модул.

Стъпка 3В общия модул "AsynchronousHandlers" нека добавим процедурата за експортиране OurDurationOperation()

Процедура OurDurationOperation(Duration) Експорт // Симулация на непрекъснато действие (Продължителност сек.). OperationStartDate = CurrentDate(); Докато CurrentDate() - OperationStartDate< Длительность Цикл КонецЦикла; КонецПроцедуры

Стъпка 4Добавяме обработката „AsynchronousProgrammingConcept“ към конфигурацията (можете да създадете външна обработка)

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

Продължителност (брой)

и два отбора

Извършете дълга операция;

Изпълнете дълготрайна операция асинхронно.

Стъпка 5Според асистента за синтаксис попълнете модула за формуляр

&AtClient Процедура PerformLongOperation(Command) PerformLongOperationOnServer(); EndProcedure &OnServer Процедура PerformLongOperationOnServer() AsynchronousHandlers.OurLongOperation(Duration); EndProcedure &OnClient Процедура ExecuteLong-runningOperationAsynchronously(Command) ExecuteLong-runningOperationAsynchronouslyOnServer(); EndProcedure &AtServer Процедура PerformLong-runningOperation AsynchronouslyAtServer() Параметри = Нов масив; Parameters.Add(Duration); BackgroundJobs.Run("AsynchronousHandlers.Our LongOperation", Параметри, Нов UniqueIdentifier, "Пример за концепция за асинхронно програмиране"); EndProcedure

Стъпка 6Пускаме и проверяваме!

Резултат:

Ако щракнем върху бутона „Извършване на дълга операция“, тогава потребителският интерфейс се блокира за „Продължителност“ секунди;

Ако щракнем върху бутона „Изпълни дълготрайна операция асинхронно“, тогава потребителският интерфейс не се блокира и програмният код се изпълнява паралелно.

Можем да проверим дали програмният код работи асинхронно, като погледнем дневника.

Можем да отстраняваме грешки в програмния код, който работи на „заден план“, ако зададем подходящото свойство в опциите за отстраняване на грешки.

Пример за изпълнение на асинхронен код в 1C:Enterprise 8 с помощта на BSP

Нека разгледаме пример за внедряване на концепцията за асинхронно програмиране в 1C:Enterprise 8 в BSP, използвайки примера за обработка на Current Affairs.

Логиката е следната: по време на стартиране на програмата работното пространство се инициализира начална страница, където можете да изведете формата за обработка „Актуално“. Този формуляр се попълва с текущите дела на потребителя и отнема време за попълването му. Ако разработчиците не са имали възможността да изпълняват асинхронно код, тогава потребителският интерфейс ще бъде блокиран за времето на попълване на формуляра за обработка!

Нека анализираме програмния код на формата.

Събитието на формуляра "OnCreateOnServer" извиква процедурата "RunBackgroundJob" - това е, от което се нуждаем.

Без да се разсейваме от нюансите, анализираме тази процедура

И тук виждаме, че се използва мениджърът на фонови задачи и неговият метод Execute. Имайте предвид, че разработчиците поддържат уникален идентификатор на фоново задание.

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



В кука процедура Pluggable_CheckJobExecution()разработчиците наричат ​​функция JobCompleted(JobId)


Тази функция проверява изпълнението на фоново задание по ID.

Трябва да се отбележи, че BSP е разработила общи модули за поддържане на работата на дългосрочни сървърни операции.

По този начин асинхронната концепция за програмиране в 1C:Enterprise 8 леко увеличава сложността на решаването на проблеми за разработчика, но значително подобрява функционалността на програмата от гледна точка на потребителя.

Някои задачи в управлението на документи и счетоводството може да се наложи да се изпълняват периодично. Например на двадесетите числа. Или ежедневно.

Обикновено компанията се опитва да създаде правила за изпълнението на такива задачи – кой, кога и как трябва да изпълнява задачата, кой да я контролира.

Такива задачи се наричат ​​- регулирани, т.е. изпълнявани съгласно разпоредбите.

В ИТ мониторингът често е рутинен.

Добре известно е системен администратор- има специални програми, които периодично проверяват изправността на сървърите и мрежовата инфраструктура и изпращат SMS или електронна пощаадминистратор.

Подобни неща съществуват и за уеб администраторите - да проверяват наличността на сайта през деня.

В 1C задачите за наблюдение и всички други периодични задачи, които трябва да се изпълняват автоматично по график, се изпълняват с помощта на механизма Scheduled Tasks 1C.

Нека поговорим за тях днес.

Планирани задачи 1C

Планирани задачи 1C е тази, която ви позволява да изпълнявате, както го прави, но по график.

Самата рутинна задача на 1C в конфигуратора е начин за задаване на настройки и задаване на график. Между другото, графикът може да се променя динамично по-късно в режим 1C Enterprise.

Фоновите задачи могат да бъдат създадени от текста на програмата на езика 1C произволно без планирана задача 1C - за паралелно изчислениена сървъра.

Изпълнението на рутинни задачи 1C може да бъде временно деактивирано - в.

Добавяне на планирана задача 1C

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

В свойството на планираната задача 1C е посочено името на метода, както и в. Функцията ще бъде разположена в общ модул с отметка в квадратчето Сървър в свойствата, т.е. модулът трябва да бъде добавен предварително.

Свойството на планираната задача 1C - Име на задача - определя името, под което задачата ще се появи в инструментите за управление на задачи.

Свойството на планираната задача 1C - Ключ - ви позволява да групирате няколко различни планирани задачи 1C. Само една задача със същата стойност на ключ може да се изпълнява едновременно. Самата стойност може да бъде произволна. Празна стойност не се взема предвид по време на контрола (т.е. счита се за непопълнена).

Свойството на планираната задача 1C - Предефинирана - определя, че при стартиране на 1C Enterprise ще бъде създадена такава задача и в едно копие с графика, посочен в конфигуратора. Непредефинираните задачи се появяват програмно, когато пристигне графикът.

AT типични конфигурации, например Счетоводна версия 2.0, такива рутинни 1C задачи като Актуализация на конфигурацията и Преизчисляване на резултатите са предварително дефинирани, но като Обмен на данни или Отложени движения не са предварително дефинирани.

Използване - включва задачата (т.е. ще бъде изпълнена само ако има отметка в квадратчето Използване).

Crash retry - както лесно можете да се досетите, означава рестартиране на задачата, ако не може да бъде изпълнена успешно от първия път - указва се колко пъти да се рестартира и след колко след срива.

1C управление и наблюдение на планирани задачи

За да управлявате планираните задачи 1C, има специална типична обработка на конзолата за задачи. Може да се намери и на.

Тази обработка се отнася до така наречената универсална външна типична 1C обработка, която често не е включена в конфигурацията, но се разпространява отделно, например на ITS дискове.

С Job Console Processing можете:

  • Активирайте / деактивирайте изпълнението на планираната задача 1C
  • Присвояване / промяна на графика на планираната задача 1C (и други параметри)
  • Посочете потребителя на 1C, от чието име ще бъде изпълнена планираната задача 1C
  • Преглед - кои задачи са изпълнени кога и с какъв резултат, грешки при изпълнение на 1C задачи
  • Изпълнение на задача.

Копия на бази данни и рутинни задачи 1C

Ако се използва сървър 1C, възниква следната ситуация:

  • За собствени цели (например за програмиране) се прави копие на работната база данни
  • В копие на базата данни се работи, тества се и т.н.
  • Забравено е да изключите рутинните 1C задачи в такава тестова база.

Докато рутинните задачи на 1C изпълняват задачи, свързани само с тяхната информационна база, тогава в това няма нищо.

Въпреки това, често рутинните задачи на 1C могат да записват всякакви файлове с данни в други бази данни, да обменят, да изпращат имейли.

В този случай може да се получи интересна смес между резултата от изпълнението на рутинни 1C задачи в работната база данни и копията.

Рутинните задачи на 1C за в копия на работната база трябва да бъдат деактивирани в.

Изпълнение и неизпълнение на рутинни задачи 1C

Когато създавате планирани задачи 1C, трябва да запомните:

  • Задачите се изпълняват сами - те трябва да бъдат наблюдавани
  • Задачите се изпълняват в модул на сървъра
  • Задачите се изпълняват под друг потребител на Windows, с различни права.

Първо, трябва да проверите дали задачата се изпълнява и може да бъде изпълнена като планирана задача 1C.

Второ, сървърният модул означава, че много неща, които са налични на клиента, не са налични. Например, понякога не всички документи могат да бъдат публикувани само на сървъра, тъй като техният алгоритъм може да предвижда, че публикуването се стартира ръчно от потребителя и могат да се използват несървърни функции, напр.
Предупреждение ("Здравей!")

Трето, ако задачата се занимава с нещо извън базата на 1C, тогава правата стават важни. потребител на WindowsПод който се изпълнява заданието.

Третата точка е особено важна в развитието. Ако модулът не може да бъде изпълнен на сървъра, задачата по принцип няма да бъде изпълнена. За да проверите, трябва да стартирате задачата поне веднъж и да видите резултата „Задачата е завършена“ в обработката на конзолата за задачи.

Често, когато се водят записи, става необходимо периодично да се извършват определени действия без намесата на потребителя. Планираните и фоновите задачи в 1C са механизмите, които са предвидени за тази цел в осмата версия на програмата и позволяват:

  • Настройте навременна доставка на документи;
  • Изчисляване на салда и суми;
  • Осигурете редовно публикуване;
  • Проверете и изтрийте неподходящи данни.

Фонова и планирана задача - какво е това и къде се конфигурира

Планираната задача е механизъм, вграден в 1C, който ви позволява да конфигурирате и в съответствие с установения график и честота да изпълнявате определена последователност от действия.

Фоновата задача е действие, генерирано от планирана операция и не изисква прякото участие на потребителя.

Създава се планирана задача в режим на конфигуратор:

  • В прозореца на конфигурационното дърво намираме съответния клон (фиг. 1);
  • Щракнете върху бутона за добавяне;
  • В прозореца, който се отваря, трябва да посочите име, което ви позволява да идентифицирате обекта в конфигурацията;

Фиг.2

  • Срещу надписа "График" (фиг. 2) има надпис "Отвори", при щракване върху който се отваря прозорец за настройка на времето и честотата на изпълнение на манипулатора (фиг. 3);

Фиг.3

  • Също така е необходимо да попълните „Име на метода“ (тук ще бъде въведено името на процедурата, извикана от общия модул и описваща алгоритъма за поведение на програмата);
  • Полетата "Име" и "Ключ" ви позволяват да групирате обекти;
  • Отметнато поле „Използване“ показва активността на планираната операция;
  • „Предварително зададен“ трябва да бъде зададен, ако манипулаторът трябва да се стартира веднага след добавянето му към базата данни, в противен случай може да се стартира от съответната обработка (повече за това по-долу);
  • Параметрите Retry Count и Retry Interval описват поведението на програмата в случай на възникване на изключение по време на изпълнение на задание във фонов режим.

Така че, използвайки механизма на планираните операции, можете да зададете графика и основните действия на фоновите задания. Нека сега да разгледаме техните характеристики.

Характеристики на фоновите задачи

Основната характеристика на този механизъм е, че фоновият процес работи асинхронно.

Какво означава това. Факт е, че при синхронен работен модел, ако се изпълни някакъв алгоритъм, потребителският интерфейс се блокира. В нашия случай потребителят може да продължи да въвежда и редактира данни, дори ако процедурата се изпълнява. Моделът на асинхронно програмиране включва разделяне на изчислителни нишки.

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

Характеристики на работа в режим клиент-сървър

  • Планирането и контролът на изпълнението се извършва от планировчик от сървърния клъстер;
  • Ако се появи заявка за изпълнение, планировчикът търси клъстерни работни процеси с минимално натоварване и им разпределя задачи за изпълнение;
  • Всеки процес може да извършва множество паралелни изчисления;
  • След пристигането на задачата процесът се свързва с базата данни и изпълнява алгоритъма в нея;
  • Процесът отчита резултатите на планировчика.

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

Преди версия на платформата 8.3.3.641 работата с фонови задания във файловата версия създаваше някои трудности:

  1. Беше необходимо да се стартира отделна сесия, която да работи денонощно, заменяйки планировчика;
  2. Тази сесия трябва периодично да изпълнява метода ExecuteJobProcessing().

След актуализацията всяко стартиране на дебели и тънки клиенти, ако ключът AllowExecuteScheduledJobs е посочен в настройките за стартиране (фиг. 4) в полето "Допълнителни", инициира допълнителна нишка за свързване към базата данни, която не засяга потребителската работи по всякакъв начин, но изпълнява само фонови задачи.

Фиг.4

Трябва да се има предвид, че дори във файловата версия на работата, фоновите процеси не позволяват интерактивна работа с потребителя (няма да се показват служебни съобщения, предупреждения, въпроси). Тоест, те трябва да бъдат кодирани така, сякаш ще бъдат изпълнени от страна на сървъра.

Как да деактивирате планираните задачи

Неизползваните задачи могат да бъдат деактивирани, като просто премахнете отметката от квадратчето „Използване“ в свойствата на обекта.

Ако администраторът трябва да забрани използването на рутинни и фонови операции за цялата база данни като цяло (например на сървъра се съхраняват няколко бази данни, от които само една е основната, а останалите се използват само за разработка) , е необходимо да използвате помощната програма за администриране на база данни. Можете също да поставите отметка в полето „Задаване на блокиране на планирани задачи“ в базата данни, създадена на сървъра.

В допълнение, ITS дисковете имат специална обработка „Конзола за работа“, която ви позволява да редактирате графика на фоновите процеси и да променяте тяхната активност.