1c cum să depanați o sarcină de rutină. Depanarea lucrărilor de fundal

Uneori este nevoie să depanați o lucrare de fundal (de rutină). Tocmai aici apare adesea problema.

Uneori este nevoie să depanați o lucrare de fundal (de rutină). Tocmai aici apare adesea problema. Și această problemă este că depanatorul nu se poate conecta la procesul care rulează pe partea serverului.

Pentru a rezolva această problemă trebuie să rezolvăm două probleme:

1. Activați depanarea pe serverul 1C. În mod implicit, depanarea pe server este dezactivată și pentru a o activa, trebuie să: Executați Registrul Windows, scriind în „ A executa"comandă REGEDIT. Găsiți linia

„C:\Program Files\1cv81\bin\ragent.exe” -srvc -agent

(luat din parametrii de pornire ai serviciului 1C:Enterprise 8.1 Server Agent). (acesta este pentru versiunea 8.1 a platformei)

Adăugați cheia până la sfârșit - depanare (Nu uitați să puneți un spațiu înaintea tastei -debug)

Exemplu
. „ImagePath”= a fost "C:\Program Files\1cv81\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv81\server" a pune „C:\Program Files\1cv81\bin\ragent.exe” -srvc -agent -regport 1541 -port 1540 -interval 1560:1591 - depanare-d „C:\Program Files\1cv81\server”

Reporniți agentul server. Gata. Acum putem depana firele de executie ale serverului.

2. Cazul literelor numelui serverului și al bazei de date din conexiunea client la serverul 1C trebuie să se potrivească exact.

Conexiunea corectă:
Lucru de fundal Client - Srvr="SERVER-NAME";Ref="Base_Name";
Conexiune incorectă:
Lucru de fundal - Srvr="SERVER-NAME";Ref="Base_Name"; Client - Srvr="Server-name";Ref="Base_Name";

Cum poți afla cu ce parametri se conectează jobul de fundal la baza de date? Vă puteți gândi la diferite moduri, dintre care una este să înregistrați acești parametri în timp ce rulează un job de fundal.

Codul este următorul:

Procedură WriteConnectionWithBase() Export
Înregistrare în jurnal(,InformationBaseConnectionString());
Sfârșitul procedurii

În timp ce un job de fundal rulează, o linie cu parametrii de conexiune la baza de date utilizați de jobul de fundal va fi scrisă în jurnal.


Acum indicam conexiune automată la joburi de fundal.

După efectuarea unor astfel de manipulări, puteți depana joburile de fundal.


Nu l-ai citit încă? S-ar putea sa te intereseze...

Depanare 1C- un mecanism foarte puternic și funcțional al platformei 1C 8.3, care vă permite să găsiți rapid erori în codul programului (în alte limbaje de programare, acesta se numește „debug”, din engleză „debug”).

Mai jos vom lua în considerare principalele metode de utilizare a mecanismului de depanare sub formă de instrucțiuni practice folosind un exemplu specific.

Atenţie! Dacă utilizați modul client-server (pe server), aveți nevoie.

Cea mai ușoară modalitate de a începe depanarea în 1C este să deschideți 1C în mod și de la acesta să începeți modul de depanare în modul dorit lucru (subțire/gros, controlat/regulat):

Depanarea lucrărilor de fundal 1C

Pentru a putea depana joburile de fundal, trebuie să mergeți la meniul „Depanare - Conexiune”. În fereastra care se deschide, faceți clic pe butonul „Conexiune automată”:

În această fereastră puteți seta steag-ul corespunzător.

Pe lângă joburile de fundal, în această fereastră puteți activa depanarea conexiunilor externe, http și .

Stabilirea unui punct de întrerupere

Al doilea pas în depanare este setarea unui punct de întrerupere (în alte limbaje de programare - punct de întrerupere).

De exemplu, am selectat handlerul „La modificare” pe formularul de document pentru depanare:

Pentru a seta un punct de întrerupere, trebuie să găsiți codul de program dorit și să faceți dublu clic pe câmpul din stânga câmpului de introducere a codului (sau apăsați butonul F9):

Pentru a vedea o listă cu toate cele instalate, trebuie să accesați meniul Depanare - Lista punctelor de întrerupere (alt + F9):

Obțineți 267 de lecții video pe 1C gratuit:

Punct de întrerupere 1C cu condiție (albastru)

Pe lângă punctul de întrerupere obișnuit din 1C, există un alt tip de punct de întrerupere - cu o condiție. Grafic, un astfel de punct este afișat cu albastru. Acest punct de întrerupere este foarte util atunci când trebuie să prindeți o anumită iterație în timp ce parcurgeți o buclă. Depanarea se va porni atunci când este îndeplinită o anumită condiție.

De exemplu, să oprim bucla la linia numărul 25:

Punct de întrerupere inactiv (gri)

Un punct de întrerupere gri înseamnă că nu este activ și sistemul nu se va opri la acel punct de întrerupere. Îl puteți face inactiv făcând clic pe butonul special din panoul „Dezactivați punctul de întrerupere” (shift+ctrl+F9):

Punct de întrerupere de eroare

Sistemul se poate opri din cauza unei erori; pentru a face acest lucru, trebuie să setați indicatorul corespunzător în meniul Debug - Stop by error:

De asemenea, o oprire de eroare are o funcționalitate similară cu un punct de întrerupere condiționat - vă permite să filtrați excepțiile cu un text de eroare specific.

Mișcare pas cu pas prin codul de program 1C

După setarea unui punct de întrerupere, trebuie să inițiați execuția dorită codul programului astfel încât sistemul să intre în execuția pas cu pas a codului. Afișarea unei săgeți indică începutul modului de execuție a codului pas cu pas:

Pentru a face un pas la următoarea linie, trebuie să apăsați butonul „F11” (Pas în).

Dacă parcurgeți liniile de cod de program și există o procedură sau o funcție pe linie, atunci veți „cădea” în această procedură (sau funcție).

Pentru a nu „eșua”, este suficient să săriți prin linii în loc de F11 (Step into) cu butonul F10 (Step through); acest buton vă permite să parcurgeți procedurile din codul programului.

Pentru a trece de la poziția curentă a cursorului la cea dorită, ocolind liniile intermediare de cod, trebuie să plasați cursorul pe linia dorită și să apăsați shift + F10 (Mergeți la cursor).

Analiza valorilor în modul de depanare 1C

Puteți vedea semnificațiile anumitor valori căi diferite:

Afișează valoarea la trecerea cursorului

Când treceți cu mouse-ul peste o variabilă, sistemul „evidențiază” valorile variabilei:

Folosind Evaluate Expression sau Tableau

  • Formă Evaluează expresia poate fi apelat folosind meniul contextual sau apăsând taste de comandă rapidă- (Shift + F9) sau meniu (Depanare - Evaluare expresie).
  • Tabloul de bord apelat folosind tastele de comandă rapidă Ctrl + Alt + W sau din meniu (Depanare - Tableau).

Aceste două metode de analiză sunt foarte asemănătoare, principalele diferențe sunt în interfață. Este mai convenabil să folosiți un tablou de bord pentru un grup de indicatori și expresii pentru un singur indicator.

Aceste metode sunt foarte ușor de utilizat. Este suficient să introduceți numele variabilei dorite în tabel. Un mare plus al calculelor arbitrare este că puteți adăuga propriile date la expresie.

De exemplu:

Este foarte util să utilizați evaluarea expresiei și să rulați o interogare, să o încărcați într-un tabel de valori și să o priviți.

Cum să aflați de unde este apelată o procedură în depanare - stiva de apeluri

Foarte des trebuie să înțelegeți de unde a fost apelată o anumită procedură sau funcție și cu ce parametri. În acest scop, 1C prevede functie speciala- „Stiva de apeluri”. Pentru a lansa Call Stack, trebuie să apăsați tastele rapide - Ctrl + Alt + C sau prin meniu (Debugging - Call Stack).

Folosind-o, puteți afla în detaliu de unde a fost apelată procedura și cu ce parametri:

Dacă sunteți interesat să evaluați performanța în timpul depanării - .

Vedeți și un videoclip de prezentare generală a depanării în 1C:

În configurațiile moderne 1C:Enterprise, joburile de fundal sunt utilizate pe scară largă.

În special, în toate configurațiile standard, multe rapoarte sunt generate în fundal, care vă permite să continuați să lucrați în aceeași sesiune 1C în timpul generării raportului fără a aștepta finalizarea execuției raportului. Și desigur că este nevoie cod de depanare în timp ce lucrările de fundal rulează. Pentru a începe cu succes depanarea joburilor de fundal, trebuie îndeplinite mai multe condiții.

Activați modul de depanare pe serverul 1C:Enterprise.

Primul lucru pe care trebuie să-l faceți este să vă asigurați că serverul 1C:Enterprise rulează în modul de depanare. Dacă depanarea nu este activată pe server, trebuie să opriți serviciul furioasăși rulați din nou cu parametrul /debug

Configurați conexiunea automată a joburilor de fundal în configurator

Deoarece jobul de fundal nu are o parte client, configuratorul configurează conexiunea automată la joburile de fundal. Pentru a face acest lucru, selectați elementul din meniu Depanare -> Conexiune

În caseta de dialog care se deschide, faceți clic pe butonul Conexiune automată iar în fereastra următoare bifați caseta Lucrări de fundal

Introduceți corect șirul de conexiune la baza de date 1C

Teoretic, cele două puncte enumerate mai sus ar trebui să fie suficiente pentru a declanșa puncte de întrerupere atunci când rulează un job de fundal. Dar, în practică, mulți se confruntă cu faptul că conexiunea automată la joburile de fundal nu are loc. Aceasta este legată de șirul de conexiune la baza de informații.

Ideea este că șirul de conexiune pentru lansarea configuratorului trebuie să se potrivească exact cu șirul de conexiune al jobului de fundal. Mai mult, potrivirea trebuie să fie personaj cu caracter. Chiar și cazul literelor este luat în considerare. La urma urmei, atunci când adăugăm o bază de date la lista de infobaze, putem înregistra un cluster de servere pentru aceeași bază de date în mai multe moduri diferite: folosind o adresă IP, prin numele serverului, cu sau fără specificarea unui port. Și toate aceste șiruri de conexiune diferite pot funcționa la fel de bine. Dar la depanarea joburilor de fundal, pot apărea probleme. Deci, de exemplu, m-am confruntat cu faptul că în lista bazelor de date aveam un șir de conexiune folosind portul

Srvr="Server1C:1541";Ref="Test";

Și din anumite motive, sarcina de fundal a fost lansată fără a specifica portul

Srvr="Server1C";Ref="Test";

Prin urmare, a trebuit să schimb corespunzător șirul de conexiune din lista bazelor de date.
Dar aici apare imediat o întrebare. Cum să aflați șirul de conexiune al unui job de fundal? Aici e locul . La urma urmei, în timp ce se execută un job de fundal, putem face intrări în mod programatic în jurnal. Și folosind procedura InformationBaseConnectionString() putem obține șirul de conexiune.

Astfel, o facem într-un modul general adecvat (pentru mine va fi BackgroundTasksServer) iată procedura

Procedură LogConnectionString() ExportConnectionString = InformationBaseConnectionString() ; LogRegistration(ConnectionString) ; Sfârșitul procedurii

Acum să executăm această procedură rulând:

&OnServer Procedura WriteConnectionStringOnServer() BackgroundTasks. Alerga ( „BackgroundTasksServer.WriteConnectionStringToLog”); Sfârșitul procedurii

Deschidem jurnalul de înregistrare, ne uităm la intrarea cu șirul de conexiune și înregistrăm setările pentru conectarea la baza de date prin analogie cu jobul de fundal.

Probabil, nici o singură configurație serioasă pe 1C 8.3 sau 8.2 nu poate face fără utilizarea sarcinilor de rutină și de 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 de rutină și de fundal, 1C va putea efectua aceste acțiuni în mod independent, de exemplu, în timpul orelor de lucru. 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:

  • Activitate programata vă permite să lansați orice acțiuni specifice conform unui program preconfigurat.
  • Lucru de fundal este un obiect care conține acțiunile de efectuat.

Să presupunem că compania noastră vinde ceva și are propriul site pe care se află prețurile. Dorim să le încărcăm o dată pe zi pentru a menține relevanța.

Deschideți configurația și adăugați sarcină de rutină.

Setarea proprietăților

Să luăm în considerare cel mai mult parametri importanti, care trebuie completat în proprietățile sale.

  • In camp " Numele metodei» este selectată o anumită procedură modul comun, care se va executa direct. Acesta va indica toți pașii pentru încărcarea prețurilor pe site-ul nostru. Vă rugăm să rețineți că execuția va avea loc pe server. Acest lucru este logic, deoarece operațiunile de rutină sunt efectuate fără participarea utilizatorului.
  • Sarcina programată poate fi dezactivată sau activată după cum este necesar. Nu este nevoie să-i editezi programul de fiecare dată. Pentru a face acest lucru, în paleta de proprietăți, setați sau ștergeți steagul " Utilizare».
  • Un alt lucru important este să stabiliți dacă această sarcină de rutină va fi predeterminat, sau nu. Activitățile programate predefinite sunt lansate automat. Dacă această caracteristică nu este instalată, atunci va trebui să le lansați în mod programatic sau să utilizați procesarea „Consola de activități” cu ITS.
  • De asemenea, puteți specifica numărul de repetări și intervalul dintre eleîn caz de încetare anormală. Încetarea anormală se referă la acele situații în care lucrările nu au fost finalizate din cauza unei erori.

Stabilirea unui program

Pasul final este să stabilim un program 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 complicat aici. În acest exemplu Am stabilit lansarea încărcării noastre de prețuri pe site zilnic de la cinci la șapte dimineața. În cazul în care sarcina programată nu are timp să fie finalizată înainte de ora 7:00, aceasta va fi finalizată chiar a doua zi.

Blocarea sarcinilor programate

Alerga utilitate standard„Administrarea serverelor 1C Enterprise” și deschideți proprietățile acestuia baza de informatii, unde ați creat o sarcină de rutină (pentru versiunile client-server ale 1C).

În fereastra care se deschide (după ce ați introdus datele de conectare și parola pentru a accesa securitatea informațiilor), verificați dacă caseta de selectare „Blocarea sarcinilor de rutină este activată” nu este bifată. Dacă întâmpinați 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 de rutină î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 lansarea acestor sarcini este mult mai dificil de organizat. Cel mai adesea, suplimentar Cont, a cărui sesiune va fi mereu deschisă.

În acest caz, sarcinile de rutină sunt activate folosind metoda „RunTaskProcessing()”.

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

Ca nume de procedură, trebuie să specificați numele procedurii client care va fi executată. Intervalul arată câte secunde mai târziu va avea loc execuția. Parametrul „O singură dată” nu este necesar. Acesta reflectă dacă această procedură va fi efectuată o dată sau de mai multe ori.

Urmărirea erorilor în joburile de fundal

Vizualizați progresul sarcinilor de fundal, precum și disponibilitatea posibile erori poate fi găsit în jurnalul de bord. În filtru, selectați aplicația „Lucră de fundal” și, dacă este necesar, selectați importanța interesului, de exemplu, doar „Erori”.

Jurnalul va afișa toate intrările care se potrivesc cu selecția dvs., împreună cu un comentariu care vă va ajuta să înțelegeți motivul erorii.

Acțiune