Internet Windows Android

1c sarcini de rutină. Sarcini de rutină și de fundal

1 Mecanism de lucru
2 Lucrări de fundal
3 Sarcini programate
4 Caracteristici de realizare a lucrărilor de fundal în versiuni de fișiere și client-server
5 Crearea de metadate pentru o sarcină de rutină
6 Job Console
7 Lucrul cu sarcini de rutină
7.1 Obiecte de muncă
7.2 Obținerea unei liste de sarcini
7.3 Creație
7.4 Dezinstalare
7.5 Obținerea unui obiect de lucru

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:

  • Abilitatea 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;
  • 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 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 job programat, planificatorul verifică periodic dacă data și ora curente se potrivesc cu programarea jobului programat. 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 dura mult 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 folosite 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 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, va fi creată automat o sarcină de rutină predefinită. 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. (a se vedea 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

La ora 01.00 o dată

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ă, 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 blocată, dar continuă să ruleze dintr-un motiv oarecare
că nu toate operațiunile platformei pot fi inversate. Dacă se execută codul ciclic al limbajului încorporat, anulați lucrarea
poate 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?
* Încetarea forțată a unei sarcini determină î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 joburi 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 procesul client care procesează joburile de fundal este pornit, alte procese client pot accesa programatic motorul jobului de fundal, de exemplu. 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 ș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.

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 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 sarcina va fi executată. 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ă sarcinile de rutină: ConsoleTasks.epf

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

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:

Pentru fiecare obișnuit al ciclului de reglementare
NewLine = Lista de sarcini programate.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 este nedefinit, atunci
NewLine.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 = UsersChoice;
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

Parametrii

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 gros, conexiune externă.

Notă:

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

Îndepărtarea

S-a șters 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);

[trebuie să vă înregistrați pentru a vedea linkul]

Ne permite să efectuăm orice calcule în sistem neobservate de utilizator, adică în fundal. Mai mult, acest mecanism ne permite să paralelizăm procesul de calcul. Putem chiar paraleliza procedura care va fi executată. Pentru a face acest lucru, jobul nostru de fundal trebuie să ruleze mai multe joburi de fundal. În acest caz, procesele sunt paralelizate și, dacă avem un sistem multiprocesor, multi-core, algoritmul nostru va funcționa eficient. După lansarea mai multor procese, putem spune sistemului că trebuie să aștepte finalizarea acestor procese pentru a combina cumva rezultatul.

De exemplu, în configurațiile tipice, în timp ce utilizatorul lucrează, sunt executate diferite tipuri de joburi de servicii de fundal. Acest lucru poate fi evidențiat de intrările de jurnal care înregistrează faptul că astfel de acțiuni au fost efectuate. Mai mult, acest lucru nu afectează în niciun fel munca utilizatorului, pur și simplu nu le observă.

În mod ideal, un job de fundal este implementat într-o versiune client-server, caz în care întreaga încărcare merge către server. În ceea ce privește versiunea fișierului, este posibilă o lucrare de fundal, dar are unele particularități.

Acesta este ceea ce va produce sistemul dacă nu luați în considerare aceste caracteristici și executați un job de fundal în versiunea de fișier a bazei de informații.


Lucrarea de fundal 1C are unele limitări. Deoarece rulează pe partea serverului, nu există posibilitatea de a lucra interactiv cu utilizatorul. De exemplu, nu puteți afișa un mesaj sau nicio informație. Toate aceste date trebuie stocate în baza de informații și procesate în continuare într-un fel.
Contactând asistentul de sintaxă, puteți obține informații mai detaliate despre joburile de fundal 1C. Trebuie remarcat aici că acest obiect este pur software și nu este în niciun fel stocat în baza de date. Adică, creăm o instanță a clasei, inițializam proprietățile și o lansăm pentru execuție.

Ce instrumente avem pentru a gestiona joburile de fundal? Această facilitate este un obiect de metadate „Manager de activități de fundal”. Acest obiect are o metodă "Alerga", folosind această metodă, se lansează jobul de fundal.

Are urmatorii parametri:
„NumeMetodă”- denumirea procedurii sau funcției de executat și trebuie să fie o procedură sau funcție a contextului serverului;

"Opțiuni"- o matrice de parametri, al căror număr de elemente trebuie să corespundă numărului de parametri ai procedurii/funcției noastre specificate în parametru „NumeMetodă”;

"Cheie"- o anumită cheie de unicitate, care este o linie prin care sistemul înțelege dacă o sarcină de fundal trebuie lansată sau dacă o astfel de sarcină rulează deja;

"Nume"- aici puteți specifica o descriere arbitrară a metodei noastre.

Valoarea returnată este un obiect „Sarcina de fundal”, care conține numele metodei curente, cheia curentă și alte câteva proprietăți și metode. O astfel de metodă este metoda „Așteptați finalizat”. Scopul său este că putem spune sistemului să nu facă nimic până la finalizarea lucrării de fundal.

Job de fundal 1C 8.2, 8.3 - Exemplu de utilizare

Să dăm un exemplu de lucru cu joburi de fundal 1C. În primul rând, vom crea un algoritm simplu care va încărca pentru scurt timp sistemul 1C în așa fel încât să nu putem face nimic în acest moment.

Pentru aceasta:

1. Să creăm un modul comun „Gestionari de sarcini de fundal”, care va fi compilat pe partea de server;


2. Vom descrie în el procedura de export „ProduceBackgroundCalculation(Parameter)”, care ia un parametru de tip șir;

Procedură PerformBackgroundCalculation(Parameter) ExportStartTime = CurrentDate() ; În timp ce CurrentDate() - Ora de începere< = 6 Цикл КонецЦикла ; КонецПроцедуры Процедура КнНажатие() ОбработчикиФоновыхЗаданий. ПроизветиФоновоеВычисление(„Ceva parametru”); EndProcedure
Gata. Acum, când începeți procesarea și apăsați un buton, sistemul îngheață câteva secunde, timp în care nu se poate face nimic. Este exact ceea ce trebuia să facem.

Acum ne vom asigura că aceste calcule sunt efectuate în fundal, adică astfel încât sarcina de fundal 1C 8.2, 8.3 să fie executată, dar să nu interfereze cu noi.

Pentru aceasta:

1. În procesare, în evenimentul butonul click, scrieți următorul cod.

Procedura KnPress() Parametri = New Array; Opțiuni. Adăuga( „Ceva parametru”); Sarcină de fundal. Alerga ( „Gestionare de sarcini de fundal. Efectuați calculul de fundal”, Parametri, Nou UniqueIdentifier, "Test"); EndProcedure

Aici trecem numele procedurii modulului comun ca prim parametru și o matrice de parametri ca al doilea. Al treilea parametru trebuie să primească o cheie unică, iar al patrulea parametru o descriere a procedurii noastre.

Cum să accelerați munca în 1C: Contabilitate 8.3 (ediția 3.0) sau dezactivați sarcinile de rutină și de fundal

2019-01-15T13:28:19+00:00

Cei dintre voi care ați trecut deja la noua ediție a 1C: Accounting 8.3 (ediția 3.0) ați observat că a devenit mai lent decât 2. Câteva încetiniri ciudate, sarcini de fundal nesfârșite de mai multe ori pe zi, pe care nimeni nu i-a cerut să le îndeplinească fără știrea noastră.

Contabilii mi-au spus imediat după tranziție că noua ediție a 1C: Contabilitatea 3.0 este de-a dreptul lentă în comparație cu cele anterioare! Și pur și simplu este imposibil să lucrezi.

Am început să mă uit și foarte curând am aflat că principala cauză a înghețurilor și a nemulțumirii ulterioare a utilizatorilor sunt sarcinile de rutină și de fundal, dintre care multe sunt activate implicit, deși pentru marea majoritate a contabililor nu este nevoie de ele.

Ei bine, de exemplu, de ce trebuie să rulăm sarcina „Extragere text” de o sută de ori pe zi dacă nu efectuăm o căutare integrală (contabili, nu vă alarmați) în toate obiectele din baza noastră de date.

Sau de ce să descarcăm constant rate valutare dacă nu avem tranzacții valutare sau le facem ocazional (și înainte de asta putem face clic pe butonul de descărcare a ratelor).

Același lucru este valabil și pentru încercarea constantă a 1C de a se conecta la site și de a verifica și actualiza clasificatoarele bancare. Pentru ce? Eu însumi voi apăsa butonul pentru a actualiza clasificatoarele dacă nu găsesc banca potrivită după BIC-ul său.

Cum se face acest lucru pas cu pas mai jos.

1. Accesați secțiunea „Administrare” și selectați „Întreținere” () în panoul de acțiuni:

2. În fereastra care se deschide, găsiți și selectați „Activități de rutină și de fundal”:

3. Deschideți fiecare sarcină care are „Activat” în coloana „Activat”. există un daw.

4. Debifați „Activat” și faceți clic pe butonul „Salvare și închidere”.

5. Faceți acest lucru cu fiecare dintre sarcinile incluse și bucurați-vă de noua ediție. În general, după părerea mea, este mult mai bine decât două.

În același timp, platforma va activa în continuare unele dintre sarcinile programate pe care le-ați dezactivat.

Când lucrați în 1C, există multe operațiuni de rutină care trebuie lansate sau programate pentru a efectua una sau alta acțiune, de exemplu: postarea documentelor sau încărcarea datelor în 1C de pe un site web.

Am postat recent un articol: E timpul să automatizăm acest lucru:

Sarcini de rutină și de fundal

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:

  • Abilitatea 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;
  • Planificator de sarcini.

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

Sarcini programate și sunt concepute pentru a îndeplini sarcinile aplicației 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 job programat, planificatorul verifică periodic dacă data și ora curente se potrivesc cu programarea jobului programat. 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ă.

Cred că este suficient cu descrierea - să trecem la implementare:

Crearea unei sarcini de rutină

Numele metodei– calea către procedura care va fi executată într-un job de fundal conform unui program dat. Procedura trebuie să fie într-un modul comun. Se recomandă să nu utilizați module comune standard, ci să vă creați propriile module. Nu uitați că joburile de fundal rulează pe server!

Utilizare– semn de utilizare a unei sarcini de rutină.

Predeterminat– indică dacă sarcina de rutină este predeterminată.

Dacă doriți ca sarcina de rutină să funcționeze imediat după ce a fost plasată în baza de date, specificați atributul Predeterminat. În caz contrar, va trebui să utilizați procesarea „Job Console” sau să declanșați ca sarcina să ruleze în mod programatic.

Numărul de reîncercări atunci când un job se încheie anormal– de câte ori a fost repornit jobul de fundal dacă a fost executat cu o eroare.

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

Stabilirea unui program

Programa finalizarea sarcinii:

În fiecare oră, doar o ziPerioada RepeatDays = 0, Perioada RepeatDays = 3600
În fiecare zi, o dată pe ziPerioada RepeatDays = 1, Perioada RepeatDays = 0
O zi, o datăPeriodRepeatDays = 0
Din două în două zile, o dată pe ziPeriodRepeatDays = 2
În fiecare oră de la 01.00 la 07.00 în fiecare ziPeriodRepeatDays = 1RepeatPeriodDuringDay = 3600StartTime = 01.00

Ora de încheiere = 07.00

În fiecare sâmbătă și duminică la ora 09.00Perioada RepeatDays = 1WeekDays = 6, 7StartTime = 09.00
În fiecare zi timp de o săptămână, săriți peste o săptămânăPeriodRepeatDays = 1PeriodWeeks = 2
La ora 01.00 o datăOra de începere = 01.00
Ultima zi a fiecărei luni la ora 9:00.PeriodRepeatDays = 1DayInMonth = -1StartTime = 09.00
A cincea zi a fiecărei luni la ora 9:00PeriodRepeatDays = 1DayInMonth = 5StartTime = 09.00
A doua zi de miercuri a fiecărei luni la ora 9:00PeriodRepeatDays = 1DayWeekMonth = 2DaysWeek = 3

Ora de începere = 09.00

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 versiune de fișier trebuie să creați un proces dedicat clientului 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 joburi 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 procesul client care procesează joburile de fundal este pornit, alte procese client pot accesa programatic motorul jobului de fundal, de exemplu. poate rula și gestiona joburi de fundal.

În versiunea client-server Pentru a executa joburi de fundal, se folosește un planificator de activități, care se află 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).

Procesarea lansării și vizualizarea sarcinilor programate poti descarca aici.

1C Enterprise are sarcini de rutină și de fundal în configurațiile sale. Aceste joburi sunt executate conform planificatorului, ținând cont de programul pentru fiecare job. Unele dintre sarcini sunt executate inițial pe un cronometru după un anumit număr de secunde, ceea ce poate afecta negativ performanța și poate interfera în mod clar cu munca în baza de informații.

Pentru a edita sarcinile de rutină și de fundal, în fila de administrare, selectați „sarcini de rutină și de fundal” din stânga. Va apărea o listă cu sarcinile existente, starea acestora, programul și alte informații.

Făcând clic de câteva ori pe oricare dintre sarcini, se va deschide o fereastră cu proprietățile acestei sarcini. Aici puteți modifica multe setări după gust, inclusiv programul pentru această sarcină. Pentru a dezactiva o sarcină, caseta de selectare „Activat” trebuie debifată. Dar dacă o sarcină trebuie să ruleze conform unui program, este extrem de important să folosiți un utilizator separat cu drepturi depline pentru toate sarcinile de fundal.

Parametrii de programare a sarcinilor sunt foarte flexibili, dar este totuși recomandabil să setați toate sarcinile în așa fel încât să fie executată o singură sarcină la un moment dat și de preferință în timpul orelor nelucrătoare. Singura excepție poate fi sincronizarea mai multor baze de date de informații conexe, de exemplu, contabilitatea întreprinderii + salarizare și managementul personalului.

Se încarcă clasificatorul bancar - duminică, ora 4:30
Încărcare cursuri valutare - în fiecare zi; 7:00
Extragerea textului - în fiecare zi; 6:00.
Schimb de mesaje între conturile de gestionare a documentelor - în fiecare zi; la fiecare 10800 sec.
Unitățile sunt actualizate în fiecare zi; de la 5:00:00 o dată pe zi
Actualizați Sarcinile Contabilului - în fiecare zi; de la 6:30:00 o dată pe zi
Actualizare a indexului PPD (căutare full text) - în fiecare zi; la fiecare 10800 sec.
Reconstrucții unități - în fiecare zi, în funcție de ziua săptămânii [sâmbătă]; de la 3:00:00 o dată pe zi
Recalcularea valorilor curente ale datelor relative de interzicere a modificărilor - în fiecare zi; de la 7:00:00 o dată pe zi
Îmbinarea indexului PPD (căutare full text) - în fiecare zi; de la 4:00:00 o dată pe zi
Eliminarea informațiilor irelevante de sincronizare - în fiecare zi; de la 3:30:00 o dată pe zi
Stabilirea perioadei pentru totalurile calculate - în fiecare zi, data de 5 a lunii; de la 1:00:00 o dată pe zi