Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Erori
  • Sarcini programate în 1s 8.3. Sarcini de fundal: caracteristici, capabilități, personalizare

Sarcini programate în 1s 8.3. Sarcini de fundal: caracteristici, capabilități, personalizare

". În acesta, vom lua în considerare funcții noi care nu se referă la interfața sistemului, dar extindem semnificativ funcționalitatea oferită de platforma 1C: Enterprise 8.

Aplicabilitate

Articolul discută versiunea 8.3.4.437 a platformei 1C: Enterprise. Toate funcționalitățile descrise în articol au fost actualizate la versiunea 8.3.11.

Alte inovații în „1C: Enterprise 8.3”

Să continuăm să ne familiarizăm cu inovațiile platformei 1C: Enterprise 8.3.

Activități de fundal și programate în baza de informații pentru fișiere

În multe configurații tipice ale platformei 8.2 exista o constantă care indica utilizatorul sub care au fost efectuate sarcinile în versiunea fișierului.

Când sistemul a început să funcționeze sub acest utilizator, a fost conectat un handler de așteptare, care a numit metoda limbajului încorporat la intervale regulate RunProcessingJobs ().

Această abordare a creat dificultăți și inconveniente suplimentare pentru utilizarea joburilor programate în baza de date de fișiere.

Acest lucru ar putea fi deosebit de critic atunci când aveți de-a face cu configurații precum „Automatizare integrată” sau „Managementul întreprinderii de producție”, în care sarcinile programate joacă un rol destul de important.

Dacă este Fișierul IB, atunci
=
Constants.UserForRunningRoutineTasksÎn FileVariant.Get();
Dacă hlValueVariable(„GlCurrentUser”) =
UserForPerformanceReglTasks Atunci
// cu un interval de secunde, apelează procedura de lucru cu joburi programate
Suportă job obișnuit pentru versiunea fișierului();
Interval pentru sondaj=
Constants.IntervalFor PollingRegularJobsIn FileVariant.Get();
Dacă Interval pentru sondaj= Nedefinit
SAU Interval pentru sondaj= 0 Atunci
Interval pentru sondaj= 60 ;
EndIf;
ConnectHandler Expectations(„Support Regular JobForFileVersion”,
Interval pentru sondaj);
EndIf;
EndIf;

În platformă 8.3 a implementat munca de fundal și a joburilor programate în baza de informații de fișiere fără a utiliza un apel la metoda contextului global RunProcessingJobs ().

Lucrările de fundal și programate sunt executate direct într-una dintre aplicațiile client (client subțire, gros) sau o extensie de server web.

Un job de fundal început de o sesiune este executat de aceeași aplicație client care a inițiat-o.

Lucrările de fundal sunt executate secvenţial, de exemplu. numai o sarcină de fundal (inclusiv programată) poate fi executată pe o singură aplicație client la un moment dat.

Lucrările programate sunt efectuate de o singură aplicație client. Pentru a controla lansarea joburilor programate, utilizați tasta de linie de comandă / AllowExecuteScheduledJobs.

Sarcinile programate sunt efectuate de prima aplicație client în ordinea pornirii, care nu este interzis să efectueze sarcini programate (pentru a dezactiva sesiunea trebuie pornită cu parametrul liniei de comandă / AllowExecuteScheduledJobs -Off).

Când această sesiune se termină, execuția trece la oricare dintre sesiunile de rulare rămase.

Dacă linia de lansare a aplicației client indică în mod explicit necesitatea de a rula joburi programate (linia de comandă specifică / AllowExecuteScheduledJobs -Force), apoi încep să fie efectuate sarcinile programate pe acesta, indiferent de prezența altor sesiuni.

Lucrările programate sunt procesate o dată la 60 de secunde.

Rețineți că sarcinile programate ale soluției aplicate (în versiunea fișierului) au început să fie executate nu mai devreme de 1 minut după lansarea aplicației client. Începând cu versiunea 8.3.8, acest timp a fost dublat și, prin urmare, sarcinile programate încep să ruleze la maximum 2 minute după pornirea clientului (în versiunea de fișier).

Această decizie se datorează scăderii întârzierii la începerea cererii. În plus, versiunea 8.3.7 a adăugat capacitatea de a determina rapid dacă sesiunea curentă este o sesiune de lucru în fundal. Acest lucru este implementat prin noua metodă a contextului global GetCurrentSessionInformationBase (), precum și printr-o nouă metodă a sesiunii infobase. GetBackgroundJob ().

Mai jos este codul care ilustrează cele de mai sus:

Click pe imagine pentru marire.

Calcularea sumelor de control

Pe platformă au apărut mecanisme pentru calcularea sumelor de control ale datelor.

Reamintim că o sumă de control (hash) este o anumită valoare calculată dintr-un set de date prin aplicarea unui anumit algoritm și utilizată pentru a verifica integritatea datelor în timpul transmiterii sau stocării.

Hashe-urile pot fi utilizate pentru a verifica identitatea datelor (de exemplu, trebuie să vă asigurați că fișierul nu a fost deteriorat în timpul transferului; verificați dacă s-au făcut modificări fișierului și, dacă da, apoi încărcați-l din nou în baza de date) .

Pentru aceasta, platforma a implementat obiectul HashingData disponibil pe server, în clientul gros, conexiunea externă și, de asemenea, pe serverul de aplicații mobile.

Acest obiect are două metode: Adăuga()și Adauga fisier() care actualizează suma hash pe baza datelor transmise în parametri.

Platformă 8.3.4.437 suportă calculul următoarelor funcții hash: CRC32, MD5, SHA1, SHA256... Dar funcțiile SHA1și SHA256 nu este acceptat pe platforma mobilă.

Să aruncăm o privire la un exemplu simplu. Se presupune că pe server în directorul programului există un fișier „ ragent.exe”. Trebuie să calculezi MD5 este suma pentru acest fișier.

Pentru a face acest lucru, vom crea o prelucrare externă, pe forma căreia vom plasa comanda calculati... Handler-ul conține următorul cod:

& OnClient
Procedură Calculați (comandă)
Rezultat = CalculateOnServer();
Raport (Șir (Rezultat));
Sfârșitul procedurii
&Pe server
Funcţie CalculateOnServer()
Hash = Nou HashingData(HashFunction .MD5);
Hash.AddFile(CatalogPrograme() + „Ragent.exe”);
Returnează Hash.HashSum;
EndFunction

În platforma ediției 8.3.10+ în metoda Adăuga() obiect HashingData a devenit posibilă utilizarea unui flux de date binare, ceea ce a simplificat foarte mult utilizarea acestora în rezolvarea diverselor probleme aplicate de actualizare a sumelor hash.

Lucrul cu versiuni securizate de protocoale SMTP/POP3

În platformă 8.3 a devenit posibilă utilizarea versiunilor protejate ale protocoalelor SMTP/POP3(există termeni SMTPS / POP3S sau SSLSMTP / SSLPOP3).

Pentru obiect InternetPostalProfile implementat noi proprietăți:

  • Utilizați SSLSMTP;
  • UtilizațiSSLPOP3;
  • Doar Autentificare Securizată SMTP;
  • Doar autentificare securizată POP3.

Proprietăți AutentificareSMTPși Autentificare POP3 obiect InternetPostalProfile precum si enumerari Metoda de autentificare SMTPși Metoda de autentificare POP3 nu sunt recomandate - sunt acceptate pentru compatibilitate.

Folosind un protocol securizat SMTPS face posibilă trimiterea de e-mailuri de la 1C folosind căsuța poștală Google.

Să ne uităm la un exemplu. Pe formular vom plasa câmpurile pentru introducerea subiectului scrisorii și a adresei destinatarului, iar pentru introducerea textului scrisorii - câmpul pentru documentul formatat.

Click pe imagine pentru marire.

Prin apăsarea butonului trimite se va executa următorul cod:

& OnClient
Procedură Trimitere (comandă) Mail = Mail Internet Nou; Profil = Nou InternetPostalProfile;
Profil.SMTP ServerAddress= „Smtp.googlemail.com”;
Profil. SMTP utilizator= “[email protected]” ;
Profil.Parolă SMTP= „PAROLA”;
Profil: utilizați SSLSMTP= Adevărat;
Port Profil.SMTP = 465; Atentat, încercare
Mail.Connect(Profil);
O exceptie
Raport (DescriptionBugs ());
Întoarcere ;
Sfârșitul încercărilor; MailMessageText= “” ;
Atașamente = Structură nouă;
Text. Obține HTML(MailMessageText, Atasamente ); Mesaj de e-mail= Nou Mesaj InternetPostal;
MailMessage.Recipients.Add(La care );
Subiectul mesajului e-mail= Subiect;
Mesaj e-mail. Texte. Adăugați(MailMessageText,
MailMessageType.html); Mail. Trimite ( Mesaj de e-mail); Deconectare e-mail();
Sfârșitul procedurii

Rețineți că, în exemplul nostru, dacă serverul SMTP nu a putut trimite un mesaj de e-mail către destinatarii, atunci metoda Mail.Send (MailMessage) făcea o excepție. Acest lucru a cauzat anumite inconveniente în rândul dezvoltatorilor. motivul aruncării excepției nu era evident.

În 8.3.9, acest comportament s-a schimbat, iar acum metoda Send () returnează o potrivire, a cărei cheie este destinatarul, iar valoarea este diagnosticarea de la serverul de e-mail. Acest lucru vă permite să determinați cu exactitate motivele pentru trimiterea nereușită a mesajului e-mail către fiecare dintre destinatari. În modul de compatibilitate 8.3.8, comportamentul nu s-a schimbat.

Imprimare fata-verso

În platformă 8.2 platforma în sine nu controla imprimarea față-verso; a fost posibilă gestionarea acestei funcții doar folosind driverul de imprimantă.

În platformă 8.3 acum este posibil să gestionați imprimarea duplex pentru un document foaie de calcul, o diagramă grafică (din limbajul încorporat și interactiv) și un document text (numai interactiv).

Enumerările de sistem au apărut în limbajul încorporat:

  • Tip Imprimare față-verso(Nu, Flip Up, Flip Left);
  • (Auto, Oglindă de sus, Oglindă stânga, Nu utilizați).

Și obiectele TabularDocumentși Diagrama grafică au apărut proprietăți Imprimare fata-versoși InterleavingPage Aranjamente cu care puteți schimba poziția paginilor tipărite.

În versiunea platformei 8.3.9, sistemul enumerationTypeDouble-SidedPrint are o nouă valoare Utilizați setările imprimantei... Selectarea acestei valori a permis ca setările imprimantei să fie utilizate la tipărirea documentelor de sistem. În modul de compatibilitate versiunea 8.3.8, comportamentul nu s-a schimbat și setările corespunzătoare ale imprimantei sunt ignorate.

Dialogul pentru publicarea unei baze de informații pe un server web a fost făcut mai funcțional. Acum, publicarea din configurator vă permite să setați toți parametrii fișierului implicit.vrd.

Pentru dialogul de publicare a unui client web și a serviciilor web prin intermediul configuratorului, se implementează următoarele:

  • capacitatea de a controla disponibilitatea serviciilor Web în mod implicit (atribut pointEnableCommon element ws);
  • capacitatea de a controla execuția joburilor de fundal în versiunea fișierului (atribut permitexecutescheduledjobs element ws).

Dacă caseta de selectare „Publicați serviciile web în mod implicit” pe marcaj "De bază" este bifată, serviciile Web selectate vor fi publicate automat când publicația este actualizată.

În caz contrar, serviciile web vor fi marcate ca nepublicate. Acest steag corespunde atributului pointEnableCommon element wsîn dosar implicit.vrd pentru configurarea clientului web și a serviciilor web.

Atribut pointEnableCommon elementul ws este responsabil pentru capacitatea de a utiliza în această bază de informații servicii web care sunt publicate fără a specifica în mod explicit permisiunea de utilizare (atribut permite element punct).

Dacă atributul are o valoare Adevărat, apoi toate serviciile Web pentru care valoarea atributului nu este specificată în mod explicit permite element punct va fi permis pentru utilizare.

În caz contrar, utilizarea unor astfel de servicii web va fi interzisă.

Personalizare „Lucrări de fundal în modul fișier” se potrivește cu atributul permitexecutescheduledjobs element ws din fișier implicit.vrd.

Atribut permitexecutescheduledjobs controlează capacitatea de a executa sarcini de rutină prin extinderea serverului web pentru baza de informații bazată pe fișiere.

Atributul poate lua următoarele valori:

  • oprit- în acest caz, extensia de server web nu va efectua sarcini programate. Sarcinile programate vor fi efectuate de aplicația client (dacă există), care se conectează direct la infobază, fără a utiliza un server web.
  • forta- în acest caz, extensia de server web va efectua sarcini programate.
    Dacă nu este specificată valoarea acestui atribut, atunci sarcinile programate vor fi efectuate de aplicația care va fi folosită pentru prima conexiune la baza de informații.

Fereastra de publicare pe serviciul web în versiunea actuală a platformei a devenit și mai convenabilă și mai ergonomică. Acum, parametrii care descriu autentificarea OpenID au fost mutați într-o filă separată.

Numerotarea obiectelor bazei de informații

În platformă 8.3 a fost reproiectat mecanismul de numerotare automată a obiectelor infobazei. Controlul unicității numărului sau codului (inclusiv a celui obținut ca urmare a generării automate a numărului sau codului) se efectuează întotdeauna în timpul înregistrării obiectului.

O indicație a numărului sau codului care nu este unic a fost adăugată textului unui mesaj despre încălcarea unicității unui număr sau cod.

Utilizarea numărului sau codului eliberat s-a schimbat. Se atribuie un nou număr sau cod fără a utiliza numerele sau codurile eliberate, dacă există deja numere sau coduri emise cu un prefix mai mare (în ordine) al numărului sau codului.

Funcții agregate ale limbajului de expresie al sistemului de compunere a datelor

Noi funcții de agregare sunt implementate în limbajul de expresie al sistemului de compunere a datelor:

  • Fiecare();
  • Orice();
  • Deviație standard de colectare generală ();
  • SampleDefusion ();
  • SampleDispersion ();
  • GeneralColecție Dispersie ();
  • Covarianța generală a colecției ();
  • Covarianța eșantionului ();
  • Corelație();
  • Panta de regresie ();
  • RegressionSegment ();
  • RegressionNumber ();
  • RegresiaR2 ();
  • RegressionAverageX ();
  • RegressionAverageY ();
  • RegressionAverageSXX ();
  • RegressionAverageSYY ();
  • Media regresiei SXY ().

După cum sugerează și numele, acestea sunt funcții statistice, ceea ce înseamnă că dezvoltatorii au posibilitatea de a crea rapoarte complexe fără a recurge la elaborarea unor proceduri pentru calcularea datelor statistice.

Click pe imagine pentru marire.

După cum puteți vedea din figură, nu există funcții noi în lista derulantă, dar dacă le introduceți manual, nu va apărea niciun mesaj de eroare și va fi generat raportul:

Interesantă este și noua funcție Clasificare ABC ()... Rezultatul funcției va fi un număr de clasă, începând de la 1 (1 corespunde clasei A, 2 clasei B, 3 clasei C etc.).

Să demonstrăm cum funcționează această funcție. Să creăm un nou raport extern „Clasificarea mărfurilor” pe baza cererii:

SELECTAȚI
Consumul de bunuri,
Consumul bunurilorProduse.Cantitate
DIN
Document.Cheltuieli.Produse.Produse CUM Bunuri de consumBunuri

Să definim un nou câmp calculat Clasă:

Click pe imagine pentru marire.

Să configuram resursele după cum urmează:

Click pe imagine pentru marire.

În modul personalizat, raportul arată astfel:

În concluzie, observăm că, de la ediție la ediție în platforma 1C 8.3, mecanismul ACS este în mod constant îmbunătățit și perfecționat și nu este posibil să aducem aceste modificări în totalitate în cadrul articolului nostru „începător”. Și pare de prisos, pentru că, lucrând la versiunea actuală a platformei, poți oricând să folosești diverse sisteme de ajutor pentru a ajuta la analiza unuia sau altuia aspect al funcționării acestui mecanism.

În plus, nu uitați de cursul nostru separat Dezvoltarea profesională a rapoartelor în 1C 8.3 privind sistemul de compunere a datelor, care, până la cel mai mic detaliu, analizează toate subtilitățile și capcanele atunci când lucrați cu acest mecanism. Vedeți singur demo și.

Deci, să rezumam rezultatele intermediare. Până în acest moment, ne-am familiarizat și cu noile capabilități ale interfeței Taxi și formularele gestionate, precum și cu unele capacități indisponibile anterior ale platformei în sine. Acum este timpul să vedem ce caracteristici convenabile au devenit disponibile dezvoltatorului în configurator.

Concept de programare asincronă

Conceptul de programare asincronă este că rezultatul execuției funcției nu este disponibil imediat, ci după un timp sub forma unui apel asincron (încălcând ordinea obișnuită de execuție).

Acestea. Ideea principală a programării asincrone este de a rula apeluri separate de metodă și de a continua să faci alte lucrări în paralel fără a aștepta ca apelurile să se încheie.

Unele metode, a căror probabilitate de excepții este redusă la minimum, nu necesită o abordare asincronă, dar altele o necesită chiar la începutul dezvoltării.

După cum se poate observa din grafice, coeficientul acțiunilor interactive utile ale utilizatorului în modelul de programare sincronă este absent, deoarece sistemul blochează interfața cu utilizatorul, în timp ce în modelul asincron, utilizatorul continuă să lucreze activ în sistem.

Când rulează sincron, aplicația are un singur fir. Cu modelul de programare asincronă, puteți lansa multe fire concurente și puteți reacționa la noile acțiuni ale utilizatorului pe măsură ce rulează. După terminarea n-thread-ului, afișați rezultatul pe ecran.

Sarcini de fundal în „1C: Enterprise 8”

În 1C: Enterprise 8, joburile de fundal sunt concepute pentru a efectua sarcini aplicate în mod asincron. Ele pot genera joburi de fundal copii, de exemplu, pentru a paraleliza calculele complexe pe diferite servere de lucru ale clusterului într-un mod client-server.

Este posibilă restricționarea execuției joburilor de fundal care au aceleași metode, în funcție de un criteriu de aplicare specific. Crearea și gestionarea programatică a joburilor de fundal este posibilă de la orice conexiune de utilizator la baza de informații de sistem. Lucrarea de fundal rulează în numele utilizatorului care a creat-o.

Mecanismul sarcinilor funcționează atât în ​​modul client-server, cât și în modul de operare fișier, dar posibilitățile de administrare și executare a sarcinilor în ambele opțiuni sunt ușor diferite.

Opțiune client-server

În versiunea client-server, programarea sarcinilor este gestionată de planificatorul de sarcini, care este localizat fizic în managerul de cluster.

Programatorul verifică periodic pentru a vedea dacă există solicitări pentru joburi de fundal. Dacă există sarcini de efectuat, planificatorul identifică procesele de lucru ale clusterului cel mai puțin încărcate și atribuie secvenţial fiecăruia dintre ele propria sarcină care urmează să fie executată. Astfel, același flux de lucru poate rula mai multe joburi în paralel. După ce sarcina este primită de fluxul de lucru, fluxul de lucru stabilește o conexiune la baza de informații și execută sarcina în cadrul acestei conexiuni. După finalizarea lucrării, fluxul de lucru notifică planificatorul despre succesul sau eșecul jobului.

Opțiunea fișier

Începând cu versiunea 8.3.3.641 a platformei, dezvoltatorii au simplificat foarte mult lucrul cu joburi de fundal în versiunea de fișier.

Anterior, execuția automată a sarcinilor necesita lansarea unei sesiuni separate, suplimentare 1C: Enterprise, utilizată ca planificator de sarcini. Și în această sesiune a fost necesar să se execute periodic metoda limbajului încorporat ExecuteJobProcessing (). Această abordare a fost destul de greoaie, incomodă și a limitat sever utilizarea joburilor de fundal și programate în modul de operare fișier.

Acum totul a devenit mult mai ușor. Dacă pornește un client thin sau fat, sau dacă serverul web are conexiuni client, atunci în fiecare dintre aceste aplicații se lansează automat un alt thread cu o conexiune la baza de date. Aceste fire sunt responsabile pentru efectuarea lucrărilor de fundal și programate.

Fiecare dintre aplicațiile enumerate are propriile lucrări de fundal. Dacă aplicația a inițiat mai multe joburi de fundal, atunci acestea sunt executate secvențial, în ordinea în care sunt primite.

Un dezavantaj evident al joburilor de fundal 1C: deoarece sunt executate pe partea serverului, nu există posibilitatea de a lucra interactiv cu utilizatorul (de exemplu, nu puteți afișa un mesaj sau orice altă informație; toate aceste date trebuie să fie stocate în baza de informații și prelucrate în continuare într-un fel) .

Trebuie remarcat faptul că joburile de fundal sunt obiecte pur programatice și nu pot fi salvate în baza de date. Adică putem doar să creăm o instanță a clasei, să-i inițializam proprietățile și să o lansăm pentru execuție.

Un exemplu de execuție a codului asincron în 1C: Enterprise 8

„Scrierea de programe în care rezultatul unui apel de funcție ajunge la o dată necunoscută este mult mai dificilă decât de obicei. Apeluri imbricate, gestionarea erorilor, controlul asupra a ceea ce se întâmplă - totul devine mai complicat, ”- doar cei care nu știu să folosească în mod corespunzător capacitățile platformei vor spune asta, dar nu noi!

Să demonstrăm toată simplitatea și grația execuției codului asincron în 1C: Enterprise 8!

Pasul 1. Să creăm o nouă securitate a informațiilor pentru dezvoltarea configurației

Pasul 2.În configurație, adăugați un modul comun „AsynchronousHandlers”

De ce am adăugat un modul comun? Totul este simplu aici: pentru a efectua operațiuni asincrone în „1C: Enterprise 8” se folosesc sarcini de fundal, care au propriul manager - „BackgroundJobs Manager”. Acest obiect are metoda Run, care este folosită pentru a porni jobul de fundal.

Să trecem la ajutorul de sintaxă.

Astfel, avem nevoie de un modul comun.

Pasul 3.În modulul general „AysynchronousProcessors” vom adăuga procedura de export OurLongedOperation ()

Procedura OurLongedOperation (Durata) Export // Simulare de funcționare continuă (Durata sec.). OperationStartDate = CurrentDate (); While CurrentDate () - Data OperationStart< Длительность Цикл КонецЦикла; КонецПроцедуры

Pasul 4. Adăugați procesarea „AsynchronousProgrammingConcept” la configurație (puteți crea procesare externă)

Adăugați o recuzită la formular:

Durată (număr)

si doua echipe

Efectuați o operațiune lungă;

ExecuteLongOperationAsincron.

Pasul 5. Conform ajutorului de sintaxă, completați modulul formular

& Pe client Procedura ExecuteLongOperation (comandă) ExecuteLongOperationAtServer (); EndProcedure & AtServer Procedure ExecuteLongServerOperation () AsynchronousHandlers.OurLongOperation (Durata); EndProcedure & OnClient Procedure ExecuteLongOperationAsynchronously (Comandă) ExecuteLongOperationAsynchronouslyAtServer (); EndProcedure & AtServer Procedure ExecuteLongOperationAsynchronouslyOnServer () Parametri = New Array; Opțiuni.Adăugați (Durata); BackgroundJobs.Run ("AsynchronousHandlers.OurLongOperation", Parametri, New UniqueIdentifier, "Un exemplu de concept de programare asincronă"); Sfârșitul procedurii

Pasul 6. Hai să lansăm și să verificăm!

Rezultat:

Dacă facem clic pe butonul „Efectuați o operațiune lungă”, atunci interfața cu utilizatorul este blocată pentru secunde „Durată”;

Dacă facem clic pe butonul „Execută o operațiune lungă asincron”, atunci interfața cu utilizatorul nu este blocată, dar codul programului este executat în paralel.

Putem verifica dacă codul programului este executat asincron, analizând jurnalul.

Putem depana codul programului care este executat în „background” dacă setăm proprietatea corespunzătoare în parametrii de depanare.

Un exemplu de execuție a codului asincron în 1C: Enterprise 8 folosind BSP

Un exemplu de implementare a unui concept de programare asincronă în „1C: Enterprise 8” în BSP va fi luat în considerare pe exemplul procesării „Afacerilor curente”.

Logica este următoarea: în timpul pornirii programului, zona de lucru a paginii de start este inițializată, unde puteți afișa formularul de procesare „Afaceri curente”. Acest formular este completat cu afacerile curente ale utilizatorului și este nevoie de timp pentru a fi completat. Dacă dezvoltatorii nu ar avea posibilitatea de a executa codul asincron, atunci interfața cu utilizatorul ar fi blocată pe toată durata completării formularului de procesare!

Să analizăm codul de program al formularului.

Evenimentul din formularul „OnCreateAtServer” denumește procedura „RunBackgroundJob” - aceasta este ceea ce avem nevoie.

Fără a fi distras de nuanțe, analizăm acest procedeu

Și aici putem vedea că sunt folosite managerul de joburi de fundal și metoda Run. Rețineți că dezvoltatorii păstrează un ID unic pentru jobul de fundal.

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



Într-o procedură conectabilă Connectable_VerifyJobProcessing () dezvoltatorii apelează la o funcție Job finalizat (ID job)


Această funcție verifică execuția jobului de fundal prin identificator.

Trebuie remarcat faptul că BSP a dezvoltat module comune pentru a sprijini funcționarea operațiunilor pe termen lung pe server.

Astfel, conceptul de programare asincronă din 1C: Enterprise 8 crește ușor complexitatea rezolvării problemelor pentru dezvoltator, dar îmbunătățește vizibil funcționalitatea programului din punctul de vedere al utilizatorului.

Probabil, nici o singură configurație serioasă pe 1C 8.3 sau 8.2 nu poate face fără utilizarea joburilor programate și în fundal. Sunt foarte convenabile, deoarece vor fi executate conform unui program clar definit, fără intervenția utilizatorului sau programatorului.

De exemplu, trebuie să faceți schimb de date cu un alt program o dată pe zi. Folosind sarcini programate și de fundal, 1C va putea efectua aceste acțiuni pe cont propriu, de exemplu, în timpul orelor libere. Această metodă nu va afecta în niciun fel experiența utilizatorului și va ajuta la economisirea de timp.

Mai întâi, să ne dăm seama ce înseamnă și care este diferența lor:

  • Sarcină de rutină vă permite să executați orice acțiuni specifice într-un program preconfigurat.
  • Lucru de fundal Este un obiect care conține acțiunile de efectuat.

Să presupunem că firma noastră vinde ceva și are propriul site cu prețuri. Dorim să le descarcăm o dată pe zi pentru a le menține relevanța.

Deschideți configurația și adăugați o lucrare programată.

Setarea proprietăților

Să luăm în considerare cei mai importanți parametri care trebuie completați în proprietățile sale.

  • In camp " Numele metodei»Se selectează procedura unui anumit modul general, care va fi executat direct. Acesta va indica toate acțiunile de încărcare a prețurilor pe site-ul nostru. Rețineți că execuția va avea loc pe server. Acest lucru este logic, deoarece operațiunile de rutină sunt efectuate fără intervenția utilizatorului.
  • Lucrarea programată poate fi dezactivată sau activată după cum este necesar. Nu trebuie să-i schimbi programul de fiecare dată. Pentru a face acest lucru, setați sau debifați „ Utilizare».
  • Un alt lucru important este stabilirea dacă această sarcină programată va fi predeterminat, sau nu. Lucrările programate predefinite încep automat. Dacă acest semn nu este setat, atunci va trebui să le rulați în mod programatic sau să utilizați procesarea „sarcini de consolă” din ITS.
  • De asemenea, puteți specifica numărul de repetări și intervalul dintre ele la terminarea anormală. Terminarea anormală se referă la acele situații în care sarcinile nu au funcționat din cauza unei erori.

Configurarea programului

Pasul final este configurarea programului pentru încărcarea noastră pe site folosind hyperlinkul corespunzător din paleta de proprietăți.

Veți vedea o setare tipică de program în 1C 8.3. Nu este nimic dificil aici. Ca parte a acestui exemplu, am configurat lansarea descarcarii noastre de preturi pe site in fiecare zi de la cinci la sapte dimineata. În cazul în care sarcina programată nu are timp să se rezolve înainte de ora 7:00, aceasta va fi finalizată a doua zi.

Blocarea joburilor programate

Rulați utilitarul standard „Administrarea serverelor 1C Enterprise” și deschideți proprietățile bazei de informații în care ați creat sarcina programată (pentru versiunile client-server ale 1C).

În fereastra care se deschide (după introducerea numelui de autentificare și a parolei pentru accesarea IB), verificați dacă indicatorul de pe elementul „Blocarea sarcinilor programate este activată” nu este setat. Dacă vă confruntați cu o situație în care sarcina nu funcționează, verificați mai întâi această setare.

În același mod, puteți dezactiva complet sarcinile programate în 1C 8.3. Pentru a dezactiva anumite lucrări de fundal, puteți utiliza procesarea „Background Job Console” încorporată în cele mai recente versiuni.

Activități de fundal și programate în modul fișier

În acest mod, configurarea și rularea acestor sarcini este mult mai dificil de organizat. Cel mai adesea, se creează un cont suplimentar, a cărui sesiune va fi întotdeauna deschisă.

În acest caz, joburile programate sunt activate folosind metoda „RunJobProcessing ()”.

De asemenea, puteți utiliza următoarea construcție:

Ca nume al procedurii, trebuie să specificați numele procedurii client care urmează să fie executată. Intervalul arată câte secunde va dura execuția. Parametrul „O dată” este opțional. Acesta reflectă dacă această procedură va fi efectuată o dată sau de mai multe ori.

Urmărirea erorilor în joburile de fundal

Puteți vizualiza progresul sarcinilor de fundal, precum și prezența unor posibile erori în jurnal. În filtru, setați filtrul la aplicația „Luc de fundal” și, dacă este necesar, selectați importanța de interes, de exemplu, doar „Erori”.

Jurnalul va afișa toate intrările care se potrivesc cu selecția dvs., cu un comentariu care indică motivul erorii.

Întrebarea pe care o punem în titlul articolului este relevantă pentru mulți administratori de sistem care lucrează cu acest produs. Pe cât posibil, încercăm să vorbim despre parametrii care afectează performanța 1C și să dezmințim miturile populare. Astăzi, folosind un exemplu recent, vrem să vă vorbim despre un alt aspect care poate afecta serios productivitatea – joburile programate.

Să începem cu un caz real. Nu cu mult timp în urmă, unul dintre clienții noștri ne-a contactat cu o plângere despre „frânele” 1C de la unul dintre angajații săi. Simptomele au fost exprimate în faptul că, după o anumită perioadă de timp, configurația Trade Management 10 a început să încetinească puternic sau, mai simplu, a rămas o vreme.

Cu o analiză mai detaliată a situației, s-a dovedit că acest lucru se întâmplă doar pentru un singur angajat și la orice loc de muncă se întâmplă de mult timp, dar dacă mai devreme „frânele” au durat aproximativ o secundă, acum, după actualizate, pot dura până la 15-20 de secunde, ceea ce face munca extrem de incomodă.

În principiu, datele inițiale sunt deja suficiente pentru a trage primele concluzii. Să le mai dăm o dată:

  • „Frânele” apar în mod constant, la intervale regulate
  • Un singur utilizator „încetinește”
  • „Încetește” la orice loc de muncă

Pentru a confirma presupunerile noastre, să aruncăm o privire la Setări ale parametrilor contabili:

Într-adevăr, utilizatorul „problematic” este listat ca utilizator pentru a efectua sarcini de rutină. După cum s-a dovedit, cândva, o sarcină de schimb automat RIB rula în numele acestui utilizator. Rămâne de văzut care a fost mai exact cauza „inhibiției” episodice. Acest lucru este, de asemenea, ușor de făcut:

Și aici este „eroul zilei” - sarcina de a actualiza indexul de căutare full-text, care a fost lansat o dată la 2,5 minute. În acest caz, problema a fost rezolvată complet prin dezactivarea execuției joburilor programate sub acest utilizator, cu toate acestea, acest lucru nu este întotdeauna posibil sau recomandabil, prin urmare, mai jos vom lua în considerare modul în care puteți gestiona joburile programate și cum să vă asigurați că acestea fac. nu afectează negativ performanța.

Aplicare regulată

În configurațiile bazate pe o aplicație obișnuită, nu există un set de instrumente unic pentru gestionarea joburilor programate. Acest lucru se datorează în mare măsură faptului că, la momentul dezvoltării lor inițiale, însuși conceptul de sarcini programate era destul de slab dezvoltat.

Multe joburi programate sunt gestionate prin configurarea subsistemelor asociate. De exemplu, setările pentru sarcinile programate legate de schimbul de date ar trebui găsite în setările de schimb legate de EGAIS în setările pentru comerțul cu alcool etc.

La prima vedere, totul este destul de logic, dar absența unui singur instrument face dificilă controlul sarcinilor programate configurate și setările optime pentru acestea. Este bine dacă există una sau două sarcini și dacă sunt mai multe sau, ca în cazul nostru, există o suspiciune cu privire la oricare dintre sarcinile programate, dar habar nu ai cine și ce a fost configurat în această bază de date.

În acest caz, ar trebui să utilizați procesare externă Job Console (JobsConsole), care este inclus în setul de tratamente standard de pe discul ITS. Procesarea oferă o interfață unică pentru toate sarcinile și vă permite să efectuați configurarea centralizată a acestora, precum și să monitorizați sarcinile care rulează în prezent.

Această listă ar trebui studiată cu atenție, toate sarcinile inutile ar trebui să fie dezactivate, iar cele necesare ar trebui aduse în concordanță cu nevoile urgente și bunul simț. De exemplu, în cazul nostru, nu este nevoie să procesăm răspunsurile EGAIS o dată la 30 de secunde (această setare a fost făcută pentru testare) și în modul de funcționare va fi suficient să faceți acest lucru, să zicem, o dată la jumătate de oră.

Aplicație gestionată

În configurațiile bazate pe o aplicație gestionată, sarcinilor programate li se atribuie un rol mai semnificativ, ele pot fi folosite pentru a efectua diverse sarcini pentru menținerea bazei de informații și menținerea acesteia la zi, dar, în același timp, sunt sarcinile programate care provoacă cel mai adesea „frâne”.

Pentru a gestiona sarcinile de rutină, există un articol de hotel în meniu Administrare - Suport și Service.

Se poate observa imediat că sarcinile au crescut semnificativ (de exemplu, am luat aceeași configurație - Retail) și setarea lor competentă poate îmbunătăți semnificativ performanța bazei de informații. Setările implicite sunt realizate de 1C pe baza nevoilor unei firme sferice medii în vid și nici măcar nu sunt aproape de optime.

În primul rând, dezactivăm ceea ce este clar inutil, cu care nu lucrați. Apoi optimizăm programul funcțiilor rar utilizate, de exemplu, actualizarea clasificatorului băncilor în Retail, precum și verificarea contrapărților, se poate efectua o dată pe săptămână în afara programului de lucru sau la sfârșitul (începutul) unei zile lucrătoare.

O atenție deosebită trebuie acordată tot ceea ce are legătură cu indexul de căutare. Căutarea în text complet este cu siguranță un lucru convenabil, dar lucrul cu indexul său este o sarcină foarte, foarte intensivă în resurse. Prin urmare, nu ar trebui să mergeți la extreme și să-l abandonați, ci ar trebui să-i revizuiți serios și să-i ajustați parametrii.

Sa incepem cu extrage text, această operațiune vă permite să căutați după conținutul fișierelor atașate, deci dacă nu le folosiți, nu le căutați, sau aveți doar imagini acolo, atunci această operațiune poate fi dezactivată, în orice caz, este o exagerat evident pentru a o efectua o dată la 85 de secunde.

Actualizarea indexului RPM- una dintre cele mai intensive operațiuni de resurse, implicit este efectuată o dată pe minut.

Acum să ne gândim cât de des sunt adăugate sau actualizate informațiile pe care le cauți cel mai des în baza de date? Evident, nu în fiecare minut, așa că va fi suficient să actualizați indexul mult mai rar: o dată pe oră, o dată pe zi, sau chiar o dată pe săptămână.

Același lucru este valabil și pentru fuziunea indicelui PPD, dacă actualizați indexul o dată pe zi, atunci ar trebui să configurați îmbinarea să ruleze o dată pe săptămână, alegând în același timp cel mai puțin timp de interferență ca început al sarcinii.

Aceste operațiuni simple vă vor permite, fără prea multă deteriorare a funcționalității configurației, să ridicați confortul de a lucra cu ea la un nou nivel prin respingerea execuției frecvente a operațiunilor destul de intensive în resurse. Doar nu merge la extreme, judecă corect cât de mult ai nevoie de aceste sau acele oportunități și cât de des ar trebui să finalizezi sarcinile asociate acestora.

  • Etichete:

Vă rugăm să activați JavaScript pentru a vizualiza

Top articole similare