Sarcini de rutină și de fundal (1Cv8). Programează lucrul cu sarcini de rutină. Crearea de metadate pentru o sarcină de rutină

S-a remarcat de mult timp că succesul este obținut doar de cei care știu la ce se străduiesc și ce fac. Pentru a vă atinge obiectivele, trebuie să finalizați cu succes sarcinile atribuite și să știți funcții specificate. Sunt aceste concepte identice sau există vreo diferență între ele? De ce este atât de important să știm valoare exacta dintre aceste categorii și ce amenință înlocuirea și confuzia lor?

Definiție

Sarcină- aceasta este o problemă care necesită rezolvare folosind mijloacele disponibile, o comandă care trebuie executată de perioada specificata. Poate fi orice întrebare cu care se confruntă o persoană, fie că este o problemă științifică complexă (un leac pentru cancer) sau o dificultate relativ minoră (construirea unui drum). Interpretul este limitat de setul de resurse pe care le are la dispoziție.

Funcţie- activitatea unei persoane sau mecanism care vizează obținerea unui anumit rezultat, rolul și scopul obiectului din interior sistem separat. Fiecare lucru are o funcție specifică: instrumentele sunt folosite pentru a produce și prelucra produse, obiectele de artă sunt folosite pentru a satisface nevoi estetice, computerele sunt folosite pentru a colecta și stoca informații.

Comparaţie

Care este diferența dintre o funcție și o sarcină? Deci, atât sarcinile, cât și funcțiile sunt atribuite unei persoane fie de către un lider, manager, fie independent. Cu toate acestea, categoriile diferă între ele în rezultatul final pe care trebuie să îl obțină o persoană. Funcția se realizează continuu sau periodic (livrarea apei către clădirile rezidențiale), iar rezultatul poate fi măsurat doar într-o anumită unitate de timp. Problemele au o cu totul altă calitate: fiecare dintre ele fie are o soluție specifică (una sau mai multe), fie nu există (o problemă de nerezolvat).

Îndeplini o anumită funcție Se poate face atât de către o persoană (repararea unei magistrale de încălzire, configurarea accesului la Internet), cât și un mecanism, un program (verificarea integrității conductei, purificarea apei). O sarcină se confruntă întotdeauna de o ființă înzestrată cu conștiință pentru a o rezolva este necesar să se folosească cunoștințele sau experiența. Obiectele și mecanismele neînsuflețite funcționează sarcini de rutină, îndeplinindu-și doar funcțiile.

O sarcină constă din elemente obligatorii precum o situație controversată, o problemă și o soluție. Dacă nu se poate răspunde unei provocări, aceasta este considerată de nerezolvat. O funcție este un proces care include reguli, un algoritm de acțiuni și un rezultat așteptat. Încălcarea secvenței date va face imposibilă implementarea. Scopul poate fi atins căi diferite, inclusiv în moduri noi.

În același timp, pentru implementarea sarcinilor și îndeplinirea funcțiilor sunt necesare resurse (materiale, forță de muncă), care pot fi suficiente, insuficiente sau excesive. Libertatea de acțiune a interpretului este limitată de anumite reguli, încălcarea cărora atrage consecințe negative. Sarcinile și funcțiile sunt necesare pentru a atinge obiectivele globale stabilite pentru o persoană, grup de lucru, societatea.

Site-ul de concluzii

  1. Rezultat. O sarcină are o soluție specifică, în timp ce o funcție nu are și trebuie să fie executată continuu.
  2. Raport. Conceptul de „sarcină” este extrem de larg: mai multe funcții pot fi folosite pentru a atinge un obiectiv.
  3. Executor testamentar. Doar o creatură înzestrată cu inteligență poate rezolva o problemă, poate îndeplini o funcție - orice mecanism.
  4. Ierarhie. Funcțiile servesc la implementarea sarcinilor atribuite indivizilor și societății.
  5. Compus. Sarcina include un complot (descrierea situației), o problemă și o soluție. Funcție – algoritm de acțiuni și rezultat.

Sarcinile programate în 1C sunt concepute pentru a efectua anumite proceduri într-un program, cu o anumită frecvență.

Sarcinile programate sunt stocate în baza de informatii, au un program de lansare. Lansarea în sine se realizează complet automat dacă modul de operare al bazei de informații este client-server. Dacă baza de date este bazată pe fișiere, atunci trebuie să efectuați următorii pași:

  • alocați un utilizator special pentru a efectua sarcini de rutină;
  • sub acest utilizator trebuie deschisă o bază de date, în care funcția trebuie executată periodic ExecuteTaskProcessing().

Crearea unei sarcini de rutină

Sarcinile programate sunt un obiect de metadate de configurare 1C. Situat în grupul General. Să luăm în considerare parametrii și proprietățile sarcinilor de rutină.

Numele metodei— calea către procedura de export în modulul general, care va fi executată conform unui program dat. Procedura trebuie executată pe server. În acest sens, sarcinile de rutină sunt oarecum asemănătoare cu un obiect Abonați-vă la eveniment.

Cheie— vă permite să creați mai multe sarcini de rutină de același tip. De exemplu, sincronizarea datelor între mai multe baze de informații poate fi implementată folosind un singur obiect de metadate Sarcină de rutină, în timp ce mai multe sarcini de rutină în sine vor fi create (în funcție de numărul de baze de date pentru schimb). Aceste sarcini de rutină vor fi diferențiate folosind proprietatea Cheie. Numai un job cu aceeași cheie poate fi executat la un moment dat.

Utilizare— un indicator care indică dacă sarcina programată este activată.

Predeterminat— aici putem face o analogie cu elemente de director predefinite. Elementele predefinite sunt create în configurator și utilizate de utilizatori în munca lor. Utilizatorul creează el însuși elemente obișnuite. La fel este și cu sarcinile de rutină: dacă este predefinit, atunci există și poate fi executat conform unui program imediat după creare în configurator. Dacă steagul Predeterminat nu este instalat, atunci utilizatorul trebuie să creeze el însuși una sau mai multe sarcini de rutină de acest tip(de exemplu, prin Job Console).

Numărul de reîncercări când un job se încheie anormal— determină de câte ori va fi efectuată o repornire job de fundal, dacă s-a completat cu o eroare.

Interval de reîncercare când jobul se încheie anormal— determină cât de des va fi repornită lucrarea de fundal dacă a fost finalizată cu o eroare.

Programează lucrul cu sarcini de rutină

În aceste exemple vom lua în considerare lucrul cu sarcini obișnuite, nepredefinite, de rutină.

Crearea programatică a unei sarcini de rutină

//Creează o sarcină
„RegularTaskName”) ;

//Setați cheia sarcina de reglementare(nu este necesar)
Exercițiu. Cheie = "TaskKey" ;

//Activați sarcina de rutină
Exercițiu. Utilizare = Adevărat;

//Scrie o sarcină de rutină
Exercițiu. Scrie() ;

Primirea programatică a unei sarcini programate pentru modificarea parametrilor

În acest exemplu, presupuneți că există o singură sarcină de rutină de un anumit tip. Dacă există mai multe sarcini, atunci, știind , nu este dificil să faceți modificările corespunzătoare la cod.


„Nume sarcină de rutină”] ) ) ;


Dacă Sarcini. Cantitate() > 0 Atunci
Job= Jobs[ 0 ] ;


In caz contrar
Task = RegularTasks. Creați sarcină de rutină( „Nume sarcină de rutină”) ;

EndIf ;

// Sarcina de rutină este în variabila Atribuire. Puteți modifica parametrii acestuia.

Apelarea casetei de dialog pentru modificarea programului unei sarcini de rutină

Există un tip special de dialog pentru lucrul cu programul unei sarcini de rutină. Încă presupunem că avem o singură sarcină de rutină de acest tip.

//Obțineți o matrice cu sarcini de rutină de tipul necesar
Sarcini = Sarcini obișnuite. Obține Sarcini de rutină(structură nouă ("Metadate", Metadate. Sarcini de rutină[ „Nume sarcină de rutină”] ) ) ;

//Dacă sarcina există, atunci prin condiție este una
Dacă Sarcini. Cantitate() > 0 Atunci
Job= Jobs[ 0 ] ;

//Dacă nu există nicio sarcină, creați-o
In caz contrar
Task = RegularTasks. Creați sarcină de rutină( „Nume sarcină de rutină”) ;

EndIf ;

Program = Sarcină. Programa;

//Creează un dialog pentru modificarea programului unei sarcini de rutină
Dialog de editare = New ScheduleDialog al RoutineTask (Schedule) ;

//Afișează dialogul utilizatorului și procesează modificările programului
DacăEditDialog. OpenModal() Apoi
Exercițiu. Program = EditDialog. Programa;
Exercițiu. Scrie() ;
EndIf ;

Mecanismul locului de muncă

Motorul de job este proiectat pentru a executa orice aplicație sau funcționalitate conform unui program sau asincron.

Mecanismul sarcinii rezolvă următoarele sarcini:

  • Capacitatea de a defini proceduri de reglementare în etapa de configurare a sistemului;
  • Executarea actiunilor specificate conform programului;
  • Efectuarea unui apel la o anumită procedură sau funcție în mod asincron, de ex. fără a aștepta finalizarea acestuia;
  • Urmărirea progresului sarcina specificași obținerea stării de finalizare a acestuia (o valoare care indică succesul sau eșecul execuției sale);
  • Obținerea unei liste de sarcini curente;
  • Abilitatea de a aștepta finalizarea uneia sau mai multor sarcini;
  • Managementul jobului (posibilitate de anulare, blocare a executiei etc.).

Mecanismul de lucru este format din următoarele componente:

  • Metadatele sarcinilor de rutină;
  • Sarcini regulate;
  • Locuri de muncă de fundal;
  • Planificator de sarcini.

Lucrările de fundal sunt concepute pentru a îndeplini sarcinile aplicației în mod asincron. Sarcinile de fundal sunt implementate folosind limbajul încorporat.

Sarcini programate - concepute pentru a efectua sarcini aplicate într-un program. Sarcinile de rutină sunt stocate în baza de informații și sunt create pe baza metadatelor definite în configurație. Metadatele unei sarcini de reglementare conțin informații precum numele, metoda, utilizarea etc.

O sarcină de rutină are un program care determină la ce momente trebuie executată metoda asociată sarcinii de rutină. Programul, de regulă, este specificat în baza de informații, dar poate fi specificat și în etapa de configurare (de exemplu, pentru sarcini de rutină predefinite).

Programatorul de sarcini este utilizat pentru a programa execuția sarcinilor de rutină. Pentru fiecare sarcină programată, planificatorul verifică periodic dacă Data curentăși timpul până la programul sarcinilor de rutină. Dacă se potrivește, planificatorul atribuie acea sarcină execuției. Pentru a face acest lucru, pentru această sarcină programată, planificatorul creează o sarcină de fundal, care realizează procesarea efectivă.

Lucrări de fundal

Lucrările de fundal sunt convenabile de utilizat pentru a efectua calcule complexe atunci când rezultatul calculului poate fi obținut prin intermediul perioadă lungă de timp. Motorul de job are mijloacele pentru a efectua astfel de calcule în mod asincron.

Asociată cu un job de fundal este o metodă care este apelată când rulează jobul de fundal. O metodă de job de fundal poate fi orice procedură sau funcție a unui modul comun non-global care poate fi apelat pe server. Parametrii jobului de fundal pot fi orice valoare care poate fi transmisă serverului. Parametrii unui job de fundal trebuie să se potrivească exact cu parametrii procedurii sau funcției pe care o apelează. Dacă metoda jobului de fundal este o funcție, valoarea returnată a acesteia este ignorată.

Un job de fundal poate avea o cheie - orice valoare de aplicație. Cheia introduce o restricție privind lansarea joburilor de fundal - doar un job de fundal poate fi executat pe unitatea de timp cu o anumită valoare a cheii și un anumit nume de metodă de job de fundal (numele metodei constă din numele modulului și numele procedurii sau funcție). Tasta vă permite să grupați joburi de fundal care au aceleași metode în conformitate cu o caracteristică specifică a aplicației, astfel încât să nu fie executată mai mult de un job de fundal într-un grup.

Lucrările de fundal sunt create și gestionate programatic din orice conexiune. Orice utilizator are voie să creeze un job de fundal. Mai mult, este executat în numele utilizatorului care l-a creat. Recepția sarcinilor, precum și așteptarea finalizării lor, este permisă de la orice conexiune către un utilizator cu drepturi administrative sau către utilizatorul care a creat aceste joburi de fundal.

Un job de fundal este un obiect pur sesiune și nu aparține nici unei sesiuni de utilizator. Pentru fiecare sarcină, este creată o sesiune specială de sistem, care rulează în numele utilizatorului care a efectuat apelul. Lucrările de fundal nu au stare persistentă.

Un job de fundal poate genera alte joburi de fundal. În versiunea client-server, acest lucru vă permite să paralelizați calcule complexe între procesele de lucru ale clusterului, ceea ce poate accelera semnificativ procesul de calcul în ansamblu. Paralelizarea este implementată prin generarea mai multor joburi de fundal copil și așteptarea ca fiecare dintre ele să se finalizeze în jobul principal de fundal.

Lucrările de fundal care se finalizează cu succes sau eșuează sunt stocate timp de 24 de ore și apoi șterse. Dacă numărul de lucrări de fundal finalizate depășește 1000, cele mai vechi lucrări de fundal sunt, de asemenea, șterse.

Sarcini programate

Sarcinile programate sunt utilizate atunci când este necesar să se efectueze anumite acțiuni periodice sau unice conform unui program.

Sarcinile programate sunt stocate în baza de informații și sunt create pe baza metadatelor sarcinii de rutină definite în configurație. Metadatele specifică astfel de parametri ai unei sarcini de rutină cum ar fi: metoda numită, nume, cheie, posibilitatea de utilizare, semn de predeterminare etc. Când creați o sarcină de rutină, puteți specifica în plus programul (poate fi specificat în metadate), valori ​a parametrilor metodei, numele utilizatorului în numele căruia efectuează sarcini de rutină etc.

Crearea și gestionarea sarcinilor programate se realizează programatic de la orice conexiune și este permisă numai utilizatorilor cu drepturi administrative.

Notă. Când lucrați în versiunea de fișier, este posibil să creați și să editați sarcini de rutină fără a lansa programatorul de activități.

Asociată cu o sarcină de rutină este o metodă care este apelată atunci când sarcina de rutină este executată. Metoda sarcinii de rutină poate fi orice procedură sau funcție a unui modul comun non-global care poate fi apelat pe server. Parametrii unei sarcini de rutină pot fi orice valoare care poate fi transmisă serverului. Parametrii unei sarcini de rutină trebuie să se potrivească exact cu parametrii procedurii sau funcției pe care o apelează. Dacă metoda sarcinii de rutină este o funcție, atunci valoarea sa returnată este ignorată.

O sarcină de rutină poate avea o cheie - orice valoare de aplicație. Cheia introduce o restricție privind lansarea sarcinilor programate, deoarece pe unitatea de timp, dintre sarcinile de rutină asociate cu același obiect de metadate, poate fi executată doar o sarcină de rutină cu o anumită valoare cheie. Tasta vă permite să grupați sarcini de rutină asociate cu același obiect de metadate în funcție de o caracteristică specifică a aplicației, astfel încât să nu fie efectuată mai mult de o sarcină de rutină într-un grup.

În timpul configurării, puteți defini sarcini de rutină predefinite. Sarcinile de rutină predefinite nu sunt diferite de sarcinile de rutină obișnuite, cu excepția faptului că nu pot fi create sau șterse în mod explicit. Dacă în metadatele sarcinii programate este setat semnul unei sarcini de rutină prestabilite, apoi la actualizarea configurației în baza de informații, o sarcină de rutină predefinită va fi creată automat. Dacă indicatorul predeterminat este șters, atunci când actualizați configurația în baza de informații, sarcina de rutină predefinită va fi ștearsă automat. Valorile inițiale ale proprietăților unei sarcini programate predefinite (de exemplu, un program) sunt setate în metadate. În viitor, atunci când aplicația rulează, acestea pot fi modificate. Sarcinile de rutină predefinite nu au parametri.

Programul sarcinilor de rutină determină la ce oră trebuie executată sarcina de rutină. Programul vă permite să setați: data și ora începerii și sfârșitului sarcinii, perioada de execuție, zilele săptămânii și lunile în care trebuie efectuată sarcina programată etc. (vezi descrierea în limbaj).

Exemple de programe de rutină a sarcinilor:

În fiecare oră, doar o zi

Perioada RepeatDays = 0, Perioada RepeatDays = 3600

În fiecare zi, o dată pe zi

Perioada RepeatDays = 1, Perioada RepeatDays = 0

O zi, o dată

PeriodRepeatDays = 0

Din două în două zile, o dată pe zi

PeriodRepeatDays = 2

În fiecare oră de la 01.00 la 07.00 în fiecare zi

PeriodRepeatDays = 1

Repetați perioada în timpul zilei = 3600

Ora de începere = 01.00

Ora de încheiere = 07.00

În fiecare sâmbătă și duminică la ora 09.00

PeriodRepeatDays = 1

Zilele săptămânii = 6, 7

Ora de începere = 09.00

În fiecare zi timp de o săptămână, sări peste o săptămână

PeriodRepeatDays = 1

PeriodWeeks = 2

O dată la ora 01.00

Ora de începere = 01.00

Ultima zi a fiecărei luni la ora 9:00.

PeriodRepeatDays = 1

DayInMonth = -1

Ora de începere = 09.00

A cincea zi a fiecărei luni la ora 9:00

PeriodRepeatDays = 1

DayInMonth = 5

Ora de începere = 09.00

A doua zi de miercuri a fiecărei luni la ora 9:00

PeriodRepeatDays = 1

DayWeekInMonth = 2

Zilele săptămânii = 3

Ora de începere = 09.00

Puteți verifica dacă o sarcină rulează pentru o dată dată (metoda RequiredExecution a obiectului ScheduleTasks). Sarcinile programate sunt întotdeauna efectuate sub numele unui anumit utilizator. Dacă utilizatorul sarcinii programate nu este specificat, atunci execuția are loc în numele utilizatorului implicit care are drepturi administrative.

Sarcinile de rutină sunt executate folosind sarcini de fundal. Când planificatorul stabilește că o sarcină programată ar trebui să fie lansată, un job de fundal este creat automat pe baza acestei sarcini programate, care efectuează toate procesările ulterioare. Dacă această sarcină de rutină rulează deja, nu va mai fi rulată, indiferent de programul său.

Sarcinile programate pot fi repornite. Acest lucru este valabil mai ales atunci când metoda sarcinii de rutină trebuie să fie garantată pentru a fi executată. O sarcină de rutină este repornită atunci când se termină anormal sau când procesul de lucru (în versiunea client-server) sau procesul client (în versiunea de fișier) pe care a fost executată sarcina de rutină este terminat anormal. În sarcina programată, puteți specifica de câte ori trebuie repornită, precum și intervalul dintre reporniri. La implementarea metodei sarcinii de rutină repornibilă, trebuie să țineți cont de faptul că, la repornire, execuția acesteia va începe de la început și nu va continua din momentul încheierii anormale.

Este important să ne amintim asta Sfârșitul timpului nu va finaliza neapărat lucrarea de fundal la ora specificată. Cateva afirmatii:

* O lucrare de fundal poate ignora anularea sa automată dacă nu este înghețată, dar continuă să ruleze, deoarece nu toate operațiunile platformei pot fi anulate. Dacă se execută codul ciclic al limbajului încorporat, atunci jobul poate fi anulat, altfel nu. Totul depinde de ceea ce face treaba. * Ora de încheiere - limita în care o sarcină poate începe mai degrabă decât să se termine? * Rezilierea forțată lucrarea derulează înapoi modificările făcute la începutul tranzacției?

Caracteristici de execuție a joburilor de fundal în variante de fișier și client-server

Mecanismele de executare a joburilor de fundal în versiunile fișier și client-server sunt diferite.

  • În versiunea de fișier, trebuie să creați un proces client dedicat care va efectua lucrări de fundal. Pentru a face acest lucru, procesul client trebuie să apeleze periodic funcția context global ExecuteJobProcessing. Doar un proces client pe bază de informații ar trebui să proceseze joburile de fundal (și, în consecință, să apeleze această funcție). Dacă nu a fost creat un proces client pentru a procesa joburi de fundal, atunci când accesați programatic motorul de joburi, va fi afișată eroarea „Managerul jobului nu este activ”. Nu este recomandat să utilizați un proces client care procesează joburi de fundal pentru alte funcții.

Odată ce procesele clientului procesează joburile de fundal, alte procese client pot acces la software la mecanismul joburilor de fundal, adică. poate rula și gestiona joburi de fundal.

În versiunea client-server, un planificator de sarcini este utilizat pentru a executa joburi de fundal, care este localizat fizic în managerul de cluster. Pentru toate joburile de fundal aflate în coadă, planificatorul primește procesul de lucru cel mai puțin încărcat și îl folosește pentru a rula jobul de fundal corespunzător. Procesul de lucru execută jobul și notifică planificatorul despre rezultatele execuției.

În versiunea client-server, este posibilă blocarea execuției sarcinilor de rutină. Executarea sarcinilor de rutină este blocată în următoarele cazuri:

  • Pe baza de informații a fost instalată o blocare explicită a sarcinilor de rutină. Blocarea poate fi setata prin consola cluster;
  • Există un bloc de conexiune în baza de informații. Blocarea poate fi setata prin consola cluster;
  • Metoda SetExclusiveMode() cu parametrul True a fost apelată din limbajul încorporat;
  • În alte cazuri (de exemplu, la actualizarea configurației bazei de date).

Crearea de metadate pentru o sarcină de rutină

Înainte de a crea în mod programatic o sarcină de rutină în baza de informații, trebuie să creați un obiect de metadate pentru aceasta.

Pentru a crea un obiect de metadate pentru o activitate de rutină în arborele de configurare din ramura „General” pentru ramura „Activități de rutină”, executați comanda „Adăugați” și completați următoarele proprietăți ale sarcinii de rutină în paleta de proprietăți:

Nume metodă - indică numele metodei sarcinii de rutină.

Cheie - specificați o valoare de șir arbitrară care va fi folosită ca cheie a sarcinii programate.

Program - indică programul sarcinii de rutină. Pentru a crea un program, faceți clic pe linkul „Deschide” și, în formularul de programare care se deschide, setați valorile necesare.

În fila „General”, sunt indicate datele de început și de sfârșit ale sarcinii și modul de repetare.

În fila „Zilnic”, este indicat programul zilnic al sarcinii.

Vă rugăm să indicați programul dvs.:

  • ora de începere și ora de încheiere a sarcinii;
  • timpul de finalizare a sarcinii, după care va fi forțat să înceteze;
  • perioada de repetare a sarcinii;
  • durata pauzei între repetări;
  • durata de executie.

Este permisă specificarea unei combinații arbitrare de condiții.

În fila „Săptămânal”, este indicat programul săptămânal al sarcinii.

Bifați casetele de selectare pentru zilele săptămânii în care va fi executată sarcina. Dacă doriți să repetați sarcina, specificați intervalul de repetare în săptămâni. De exemplu, sarcina este executată în 2 săptămâni, valoarea repetată este 2.

În fila „Lunar”, este indicat programul lunar al sarcinii.

Bifați casetele de selectare pentru lunile în care va fi executată sarcina. Dacă este necesar, puteți specifica o anumită zi (lună sau săptămână) de execuție de la începutul lunii/săptămânii sau de la sfârșit.

Utilizare - dacă este setată, sarcina va fi executată conform programului.

Predefinit - dacă este setat, sarcina este o sarcină predefinită.

Număr de reîncercări în caz de terminare anormală - indică numărul de reîncercări în caz de terminare anormală.

Interval de reîncercare la terminarea anormală - specifică intervalul de reîncercare la terminarea anormală. Exemple

Crearea unui job de fundal „Actualizare index de căutare cu text integral”:

BackgroundTasks.Run("ActualizareaIndexuluiCăutareText");

Crearea unei sarcini de rutină „Recuperarea secvențelor”:

Schedule = New ScheduleTask; Schedule.PeriodRepeatDays = 1; Schedule.RepeatPeriodDuringDay = 0;

Sarcină = RoutineTasks.CreateRoutineTask("Restaurarea secvențelor"); Job.Schedule = Program; Task.Write();

Job Console

Prelucrare cu ITS, gestionează sarcini de rutină:

Lucrul cu sarcini de rutină

Obiecte de locuri de muncă

Obiectele job nu sunt referite, dar sunt stocate în baza de date într-un spațiu de stocare special.

Dacă indicatorul „Predefinit” este activat în metadate, atunci un astfel de obiect este creat automat atunci când 1C:Enterprise este lansat și există întotdeauna într-o singură instanță. Un astfel de obiect nu poate fi șters.

Dacă indicatorul „Predefinit” nu este setat, atunci obiectele unei astfel de sarcini sunt create și șterse programatic, specificând programul și parametrii.

Obținerea unei liste de sarcini

Lista sarcinilor poate fi obținută folosind metoda Obțineți sarcini de rutină manager global de locuri de muncă Sarcini de rutină

ScheduledJobsManager

Obțineți joburi programate (GetScheduledJobs)

Sintaxă:

Obțineți sarcini de rutină(<Отбор>)

Opțiuni:

<Отбор>(optional)

Tip: Structură. Selecția care definește structura. Valorile structurii pot fi: UniqueIdentifier, Cheie, Metadate, Predefinite, Utilizare, Nume. Dacă nu este specificată selecția, se obțin toate sarcinile de rutină.

Dacă filtrați după metadate, atunci ca valoare Metadate puteți specifica fie obiectul de metadate al sarcinii de rutină, fie numele acestuia.

Valoare returnată:

Tip: matrice.

Descriere:

Primește o serie de sarcini de rutină pentru o anumită selecție. Primirea sarcinilor programate este posibilă numai pentru administrator.

Disponibilitate:

Rutina = RoutineTasks.GetRoutineTasks(Selection);

Pentru fiecare rutină a ciclului de rutină NewLine = List of RoutineTasks.Add(); NewRow.Metadata = Regular.Metadata.View(); NewLine.Name = Regular.Name; NewString.Key = Regular.Key; NewLine.Schedule = Schedule.Schedule; NewLine.User = Regular.UserName; NewString.Predefined = Regular.Predefined; NewString.Use = Regular.Use; NewString.Identifier = Regular.UniqueIdentifier;

LastTask = Regular.LastTask; Dacă LastTask<>Nedefinit Apoi NewRow.Running = LastTask.Start; NewRow.State = LastTask.State; endIf; EndCycle;

Creare

Creat prin metoda Create RoutineTask pentru managerul sarcinilor de rutină:

RoutineTask = RoutineTasks.CreateRoutineTask(MetadataSelection);

RegularTask.Name = Nume; RegularTask.Key = Cheie; RegularTask.Use = Utilizare; RoutineTask.UserName = UsersSelection; RoutineTask.Number ofRepetitionsAtEmergencyCompletion =NumberofRepetitionsAtEmergencyCompletion; ScheduledTask.RepeatIntervalAtEmergencyCompletion = RetryIntervalAtEmergencyCompletion; ScheduleTask.Schedule = Program; RegularTask.Record();

TaskObject = RoutineTasks.CreateRoutineTask("ExchangeExchange");

TaskObject.Name = Nume; JobObject.Use = Adevărat;

Obiectul de activitate are un câmp „Parametri” în care sunt specificați parametrii metodei:

Job programat

Opțiuni(Parametri)

Utilizare:

Citeste si scrie.

Descriere:

Tip: matrice. O serie de parametri pentru o sarcină programată. Numărul și compoziția parametrilor trebuie să corespundă parametrilor metodei sarcinii de rutină.

Disponibilitate:

Server, client gras, îmbinare exterioară.

Notă:

Capacitățile de citire și scriere sunt disponibile numai pentru administrator.

Îndepărtarea

Șterse folosind metoda Delete() a obiectului task:

ScheduledTask.Delete();

Obținerea unui obiect de muncă

  • listă prin metoda GetRoutineTasks:

Rutina = RoutineTasks.GetRoutineTasks(Selection);

  • prin FindByUniqueIdentifier al metodei managerului de activități:

Sarcină = ScheduledTasks.FindByUniqueIdentifier(UID);

De obicei locuri de muncă de fundalîn 1C: Întreprinderile sunt lansate de sub reglementări.

Adică, la pornire, o sarcină de rutină generează una de fundal. Dar dacă este necesar
putem rula un job de fundal și în mod programatic.
În același timp, poate folosi orice metode și proprietăți disponibile pe server, deoarece si ruleaza pe server.
De fapt, munca de fundal în sine nu efectuează nicio acțiune. Tocmai se lansează
pentru a executa o procedură dintr-un modul comun. Dacă procedura utilizează parametri,
pot fi trimise și atunci când este începută o lucrare de fundal.

Sa luam in considerare cel mai simplu exemplu. Să creăm o procesare care va rula fundalul
sarcină, care la rândul său va face o înregistrare în jurnalul de bord.

Deoarece
pentru un job de fundal avem nevoie de o procedură comună de modul, să creăm acest modul comun
cu capacitatea de a-și executa procedurile pe server.

Să creăm o procedură în acest modul general care va înregistra în jurnal
înregistrare

Procedura RecordInRegistrationLog(par_EventName, par_Comment) ExportRecordLog(par_EventName, , , , par_Comment) ; EndProcedure

După cum puteți vedea, procedura are parametri. Aceasta înseamnă că sarcina de fundal va trebui să facă ceva de genul acesta
modalitate de transfer la procedură.

Acum vom crea o procesare cu care vom lansa o sarcină de fundal.

Hai să o facem mai departe într-o formă gestionabilă, dar pentru forme regulate nu va exista nicio diferență fundamentală
se folosesc aceleasi metode. Noi creăm cea mai simpla forma cu o singură comandă:


În modulul formular scriem următorul cod:

&OnServer Procedura Scrieți JROnServer() Matrice de parametri = Matrice nouă; Matrice de parametri. Adăuga( „Eveniment. Lucrarea de fundal a fost finalizată cu succes”); Matrice de parametri. Adăuga( „Comentează. Se verifică lucrarea de fundal”); Sarcini de fundal. Alerga ( „site_RoutineTasks.RecordInRegistrationJournal”, Matrice de parametri) ; Sfârșitul procedurii &Pe client Procedura Scrieți JR (comandă) Scrieți JR pe server () ; EndProcedure

Începeți o lucrare de fundal folosind metoda Alerga()
manager de post de fundal.

Primul parametru al acestei metode este
numele modulului general și numele procedurii care va fi executată, tip - șir.
Al doilea parametru este o matrice cu valorile parametrilor pentru procedura apelată.
Ordinea elementelor din matrice trebuie să se potrivească cu ordinea parametrilor din
procedură.
Poate fi indicat și CheieȘi Nume job de fundal.

Acum să testăm procesarea. Să-l deschidem în modul 1C:Enterprise și
Să începem execuția. Apoi, deschideți jurnalul de înregistrare și vedeți că sarcina
a funcționat cu succes și a făcut o înregistrare corespunzătoare în jurnal.

Crearea unei sarcini de rutină

Să creăm o sarcină de rutină „Efectuați procesarea”.

Să dezactivăm utilizarea sarcinii programate, astfel încât la actualizarea configurației aceasta să nu ruleze automat.

Să atribuim o procedură care va fi declanșată la lansarea unei sarcini de rutină:Modulul RoutineTasks.RoutineTaskExecutionProcessing.

Procedura în sine arată astfel:

Procedură RutinăTaskExecutionProcessing(Key) Export

Parametrii lui RoutineTasks.PerformProcessingWithParameters(Key);

EndProcedure

Creăm o carte de referință pentru sarcinile de rutină

Sarcina noastră de reglementare poate genera multe procese de fundal- cate unul pentru fiecare tratament. Fiecare sarcină din platforma 1C8 are o cheie. Dar metoda jobului programat nu cunoaște cheia jobului de fundal, așa că trebuie să utilizați parametrii jobului de fundal. Ca rezultat, putem vedea jobul de fundal în consola de joburi, dar nu putem crea manual un job de fundal din această consolă, deoarece joburile cu parametri nu sunt create manual.

Carte de referință „Parametrii sarcinilor programate” :

Rechizite :

· Cod înainte de lansare- șir nelimitat - cod în limbajul 1C care trebuie executat înainte de lansare.

· Procesare din configurație - linia (100) - identificator de procesare din configurație

· Procesare din director - linia (100) - link către elementul de director „Procesare externă”, dacă există unul în configurație

· Execut prin aplicația 1C - Boolean - va fi creată cerere separată 1C și o sarcină de rutină va fi lansată în el. Creat pentru 8.1, unde nu toate metodele de aplicare sunt disponibile pe serverul pe care rulează jobul programat.

· Cod de lansare- - linie nelimitată - cod în limbajul 1C care va fi executat la lansarea unei sarcini programate.

Să creăm forma elementului :

Făcând clic pe „Creare Reg. task" o sarcină de rutină cu un cod cheie este creată programatic:

Procedură BasicActionsFormCreateReglTask(Button)

Job variabil;

Cheie = AbbrLP(Cod);

Sarcină = RoutineTasks.CreateRoutineTask("PerformProcessing");

Task.Name = Cheie;

Job.Key = Cheie;

Parametri = Noua matrice();

Parametri.Add(Key);

Task.Parameters = Parametri;

Task.Write();

EndProcedure

Pornirea unei sarcini programate

Fiecare sarcină de rutină pe care o creăm are o cheie:

Această cheie corespunde codului din directorul „Parametrii sarcinilor de rutină” este folosită pentru a căuta la pornirea unei sarcini. Dacă intrarea în director nu este găsită, sarcina nu este executată.

Apoi, dacă este dat codulCod înainte de lansare atunci acest cod va fi executat. În continuare, dacă variabila Îndeplini evaluează ca fals, sarcina nu va fi finalizată. Variabilă disponibilă pentru analiză Opțiuni, unde este stocată o legătură către elementul de director găsit „Parametrii sarcinilor de rutină”.

În funcție de valorile selectate ale detaliilor, fie va rula codul în limbajul 1C, fie va începe procesarea din configurație, fie va începe procesarea din cartea de referință standard „Procesare externă”.

Pentru 1C81, execuția este furnizată într-o aplicație nouă - astfel încât să puteți utiliza cod care este disponibil numai pe client, inclusiv utilizarea prelucrării externe. Pentru a face acest lucru, trebuie să bifați caseta de selectare „Run through 1C application”. În caz contrar, sarcina programată va fi executată pe server.

Recomand să setați un utilizator în câmpul „Utilizator” pentru o sarcină de rutină nou creată, astfel încât sarcina să fie executată sub anumite drepturi. Recomand să dai unui astfel de utilizator drepturi depline. Folosesc utilizatorul "robot».

Programul sarcinilor de rutină este creat folosind hyperlinkul „Programare” din formularul de sarcini de rutină. Puteți utiliza procesarea „Consola de activități de rutină”.