Sarcini de rutină și de fundal. Diferența dintre sarcini și funcții

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 probleme:

  • 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 unei sarcini specifice și obținerea stării de finalizare a acesteia (o valoare care indică dacă a avut succes sau nu);
  • 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;
  • Programator de sarcini.

Lucrări de fundal - destinate a fi executate probleme aplicate asincron. Sarcinile de fundal sunt implementate folosind limbajul încorporat.

Sarcini programate - concepute pentru a efectua sarcini aplicate conform unui 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 pentru o lungă perioadă 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. Orice procedură sau funcție care nu este globală poate acționa ca metodă de lucru de fundal. modul comun, 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 cheie și prenume metoda jobului de fundal (numele metodei constă din numele modulului și numele procedurii sau funcției). Cheia vă permite să grupați locuri de muncă de fundal, având aceleași metode, conform unei anumite caracteristici de aplicație, astfel încât în ​​cadrul aceluiași grup nu se execută mai mult de un job de fundal.

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 la un utilizator cu drepturi administrative, sau utilizatorul care a creat aceste joburi de fundal.

Un job de fundal este un obiect pur sesiune, dar nu aparține niciunuia sesiune 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, aceasta permite paralelizarea calcule complexeîn procesele de lucru ale clusterului, ceea ce poate accelera semnificativ procesul de calcul general. 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, posibilitate de utilizare, semn de predeterminare etc. Atunci 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 se efectuează sarcină de rutină, etc.

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

Nota. 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, va fi creată automat o sarcină de rutină predefinită. Dacă marcajul 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 proprietățile unei sarcini de rutină 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ți 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ă trebuie lansată, este creată automat un job de fundal 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ă atunci când este repornită, execuția acesteia va începe de la început și nu va continua din momentul încheierii anormale.

Este important să ne amintim asta Ora de sfârșit 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 anulează 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 job, va fi afișată eroarea „Job Manager is not active”. 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

Î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 sarcină 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 - specificat arbitrar valoare șir, 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.

Specificați programul:

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

Este posibil să se specifice o combinație arbitrară 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ărul de repetări la prăbușire- 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 când este lansat 1C:Enterprise și există întotdeauna într-o singură instanță. Un astfel de obiect nu poate fi șters.

Dacă flag „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ă(<Отбор>)

Parametri:

<Отбор>(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.

Valoarea 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

Descriere:

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

Disponibilitate:

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:

  • Citește și scrie.

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

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

Sarcină = ScheduledTasks.FindByUniqueIdentifier(UID);

Curățarea periodică a registrelor (de exemplu, registrul de informații „Versiuni obiect” din configurația SCP), efectuarea de calcule conform unui program, completarea documentelor în anumit timp- nu departe lista completa acțiuni care pot fi implementate folosind sarcini de reglementare 1C.

Creați o sarcină

Nu ne propunem să descriem codul modul executabil, vom arăta principii generale funcţionarea şi crearea unei sarcini de reglementare.

Sarcina de rutină este de neînlocuit:

  1. Dacă în sarcina în cauză există o nevoie ca una dintre condiții executie periodica un algoritm specific;
  2. Dacă codul trebuie executat indiferent de acțiunile operatorilor și utilizatorilor bazei de date;
  3. Dacă executarea procedurii executabile nu depinde de evenimente externe evenimente care au loc cu obiecte de bază de informații.

Pentru ao crea, trebuie să mergeți la baza de informații în modul „Configurator”. Apoi, găsiți ramura „Activități de rutină” în arborele de configurare, acestea se află în fila „General” și faceți clic pe butonul „Adăugați” (Fig. 1).

Să aruncăm o privire mai atentă la fereastra de proprietăți (Fig. 2):
Fig.2

  1. Nume, sinonim și comentariu - regulile și principiile pentru completarea acestor câmpuri sunt similare pentru toate obiectele de configurare și nu este nevoie să le descrieți din nou;
  2. Numele metodei – o procedură a modulului general care descrie cât mai exact algoritmul necesar (făcând clic pe butonul de selectare se deschide procedurile disponibile, a căror reprezentare constă în numele modulului general și numele procedurii în diferite coloane a tabelului);
  3. Cheia determină nu atât unicitatea sarcinii de reglementare, cât unicitatea proces de fundal, lansat pe baza unui job, are o limită de lungime;
  4. Program – vom dedica un paragraf separat al articolului nostru descrierii acestui element;
  5. Utilizare – bifarea acestei casete determină activitatea sarcinii, TRUE înseamnă că sarcina va fi lansată și executată conform programului;
  6. Predefinite – dacă un element are această casetă de selectare, aceste sarcini nu pot fi șterse, acestea sunt create automat când configurația este salvată în baza de date;
  7. Număr de repetări - dacă apare o excepție în timpul execuției, aceasta va fi repornită, astfel încât să nu se producă o buclă nesfârșită, programul limitează numărul de reporniri;
  8. Interval de reîncercare – timp în secunde între repornirile lucrărilor finalizate anormal.

Să aruncăm o privire mai atentă asupra programului.

Programul sarcinilor de rutină

Fig.3

În primul rând, ar trebui să acordați atenție părții de jos a ferestrei, aici este locul informatii detaliate cu o defalcare a cât de des și la ce oră va fi îndeplinită sarcina.

Fila „General”:

  • Data începerii sarcinii;
  • Data de încheiere a procesării;
  • Frecvența repetării sarcinilor.

Dacă nu sunt specificate date în această filă, atunci nu va fi setat niciun termen limită pentru sarcină.

Fila „Zilnic” (Fig. 4)
Fig.4

Pe lângă câmpurile de introducere pentru ora de începere și de sfârșit a sarcinii și frecvența lansării acesteia în timpul zilei, conține parte tabulară Pentru setări detaliate frecventa de executie.

Filele „Zilnic” și „Săptămânal” conțin informații pentru perioadele corespunzătoare.

Caracteristici de funcționare

În versiunea de lucru client-server, execuția sarcinilor de rutină este determinată de instrumentele serverului. Din consola de administrare, puteți activa sau dezactiva capacitatea de a rula sarcini pentru o anumită bază de date.

Situația este mult mai complicată cu versiunea fișierului de lucru. Înainte de o anumită lansare a platformei, procedurile de bază și de rutină erau efectuate numai dacă, la pornirea sistemului, definit de utilizator Metoda ExecuteTaskProcessing() a fost activată. În acest caz, algoritmii erau lansați periodic atâta timp cât utilizatorul care a inițiat metoda se afla în program.

În prezent, munca joburilor de fundal în modul de funcționare fișier este distribuită uniform între utilizatorii autorizați în baza de date, dacă programul a fost lansat cu parametru suplimentar AllowExecuteSheduledJobs, acest proces va fi responsabil pentru întreținerea de rutină.

Puteți dezactiva complet munca de fundal și de rutină într-o bază de date care rulează în modul fișier, ștergând sau redenumind fișierul DoNotCopy.txt din folderul cu baza de date. Prezența acestui fișier spune platformei că munca se desfășoară în original și nu într-o copie a bazei de date.

În plus, în consumabile standard 1C, a devenit posibil să se gestioneze munca programată direct din program, fără a merge la „Configurator”. În configurația „ZUP”, versiunea 3.1.3.223, puteți deschide formularul de management din meniul Administrare->Întreținere->Operațiuni de rutină->Taricuri de rutină și de fundal (Fig. 5)
Fig.5

Forma care se deschide are un aspect intuitiv interfață clară si permite:


De asemenea, puteți începe o sarcină direct din formular.

Este posibil ca unele sarcini în managementul documentelor și contabilitate să fie efectuate periodic. De exemplu, în a douăzecea. Sau zilnic.

De obicei, o companie încearcă să creeze reguli pentru îndeplinirea unor astfel de sarcini - cine, când și cum ar trebui să finalizeze sarcina, cine ar trebui să o controleze.

Astfel de sarcini se numesc reglementate, adică efectuate în conformitate cu reglementările.

În IT, monitorizarea este adesea efectuată într-o manieră reglementată.

Este familiar administrator de sistem- Există programe speciale, care verifică periodic performanța serverelor și a infrastructurii de rețea și raportează SMS-uri sau prin email administrator.

Lucruri similare există pentru webmasteri - pentru a verifica disponibilitatea site-ului în timpul zilei.

În 1C, sarcinile de monitorizare și orice alte sarcini periodice care ar trebui efectuate automat conform unui program sunt efectuate folosind mecanismul 1C Scheduled Tasks.

Să vorbim despre ele astăzi.

Sarcini programate 1C

Sarcinile programate 1C sunt cele care vă permit să le îndepliniți așa cum o fac, dar conform unui program.

Sarcina de rutină 1C în sine din configurator este o modalitate de a specifica setările și de a stabili un program. Apropo, programul poate fi modificat dinamic mai târziu în modul 1C Enterprise.

Lucrările de fundal pot fi create din textul programului în limba 1C în mod arbitrar fără o lucrare 1C programată - pt. calcul paralel pe server.

Execuția sarcinilor de rutină 1C poate fi dezactivată temporar - în.

Adăugarea unei sarcini de rutină 1C

Sarcinile de rutină 1C sunt situate în configurația din ramura Sarcini generale/de rutină 1C. Să adăugăm o nouă sarcină de reglementare 1C și să îi indicăm numele.

În proprietatea sarcinii de rutină 1C, este indicat numele Metodei, la fel ca în. Funcția va fi localizată într-un modul comun cu caseta de selectare Server bifată în proprietăți, adică modulul trebuie adăugat în prealabil.

Proprietatea sarcinii programate 1C - Numele sarcinii - determină numele sub care sarcina va apărea în instrumentele de gestionare a sarcinilor.

Proprietatea sarcinii de rutină 1C – Cheie – vă permite să grupați mai multe sarcini de rutină 1C diferite. Numai o singură lucrare poate fi începută la un moment dat aceeași valoare cheie Valoarea în sine poate fi arbitrară. O valoare goală nu este luată în considerare în timpul controlului (adică este considerată goală).

Proprietatea unei sarcini de rutină 1C - Predefinită - determină că la lansarea 1C Enterprise, o astfel de sarcină va fi creată într-o singură copie cu programul specificat în configurator. Sarcinile nepredefinite apar programatic la momentul programării.

În configurațiile tipice, de exemplu ediția de contabilitate 2.0, sarcinile de rutină 1C precum Actualizarea configurației și Recalcularea totalurilor sunt predefinite, dar cum ar fi Schimbul de date sau Mișcările amânate nu sunt predefinite.

Utilizare – activează sarcina (adică va fi executată numai dacă caseta de validare Utilizare este bifată).

Reîncercați la terminarea anormală - după cum puteți ghici, înseamnă repornirea sarcinii dacă nu s-a finalizat cu succes prima dată - puteți specifica de câte ori să reporniți și cât timp după terminarea anormală.

1C gestionarea și monitorizarea sarcinilor de rutină

Pentru a gestiona sarcinile de rutină 1C, există o consolă de procesare standard specială. Poate fi găsit și pe.

Această procesare aparține așa-numitului standard extern universal de procesare 1C, care adesea nu este inclus în configurație, dar este distribuit separat, de exemplu, pe discuri ITS.

Folosind procesarea consolei de joburi puteți:

  • Activați/dezactivați execuția sarcinii de rutină 1C
  • Atribuiți/modificați programul unei sarcini 1C programate (și alți parametri)
  • Specificați utilizatorul 1C în numele căruia va fi efectuată sarcina de rutină 1C
  • Vedeți ce sarcini au fost finalizate când și cu ce rezultat, erori la finalizarea sarcinilor 1C
  • Finalizați sarcina.

Copii ale bazelor de date și ale sarcinilor de rutină 1C

Dacă utilizați serverul 1C, atunci apare următoarea situație:

  • Pentru propriile scopuri (de exemplu, pentru programare), se face o copie a bazei de date de lucru
  • Lucru, testare etc. într-o copie a bazei de date
  • Uitați să dezactivați sarcinile de rutină 1C într-o astfel de bază de date de testare.

În timp ce sarcinile de rutină 1C îndeplinesc sarcini legate doar de baza lor de informații, nu există nimic în ele.

Cu toate acestea, sarcinile de rutină 1C pot salva adesea orice fișiere, date în alte baze de date, pot efectua schimburi și pot trimite e-mailuri.

În acest caz, puteți obține un amestec interesant între rezultatul efectuării sarcinilor de rutină 1C în baza de date de lucru și copii.

Sarcinile de rutină 1C pentru copiile bazei de date de lucru trebuie să fie dezactivate în .

Îndeplinirea și neîndeplinirea sarcinilor de reglementare 1C

Când creați sarcini de rutină 1C, trebuie să vă amintiți:

  • Sarcinile sunt efectuate de la sine - trebuie monitorizate
  • Sarcinile sunt executate într-un modul de pe server
  • Sarcinile sunt efectuate sub un alt utilizator Windows, cu drepturi diferite.

În primul rând, trebuie să verificați dacă sarcina este efectuată și poate fi finalizată ca o sarcină de rutină 1C.

În al doilea rând, modulul server înseamnă că multe lucruri care sunt disponibile pe client nu sunt disponibile. De exemplu, uneori, nu toate documentele pot fi postate doar pe server, deoarece algoritmul lor poate prevedea ca postarea să fie începută manual de către utilizator și pot fi utilizate funcții non-server, de exemplu
Avertisment ("Bună ziua!")

În al treilea rând, dacă sarcina se ocupă de ceva din afara bazei de date 1C, atunci drepturile devin importante utilizator Windows, sub care se execută sarcina.

Al treilea punct este deosebit de important atunci când se dezvoltă. Dacă modulul nu poate fi executat pe server, sarcina nu va fi executată deloc. Pentru a verifica, trebuie să rulați sarcina cel puțin o dată și să vedeți rezultatul „Sarcina finalizată” în procesarea Task Console.

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

Sarcinile de rutină sunt stocate în baza de informații și au un program de lansare. Lansarea în sine este complet automată dacă baza de informații funcționează în modul 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, efectuarea sincronizării datelor între mai multe baze de informare 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. Elemente predefinite sunt create în configurator și utilizate de utilizatori în munca lor. Elemente obișnuite utilizatorul o creează el însuși. 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 repornită o lucrare de fundal dacă a fost finalizată 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 pentru sarcina programată (opțional)
Exercita. Cheie = "TaskKey" ;

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

//Scrie o sarcină de rutină
Exercita. 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 ] ;


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

EndIf ;

// Sarcina de rutină este în variabila Task. 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
Altfel
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
Exercita. Program = EditDialog. Programa;
Exercita. Scrie() ;
EndIf ;

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 valoarea 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 finalizată până la un termen specificat. 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ă unele de altele în rezultatul final pe care o persoană trebuie să le realizeze. 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).

O anumită funcție poate fi îndeplinită fie de către o persoană (repararea unei rețele de încălzire, configurarea accesului la Internet), fie printr-un mecanism sau program (verificarea integrității unei conducte, 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 în diverse moduri, 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.