Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Greške
  • Planirani zadaci u 1s 8.3. Pozadinski poslovi: karakteristike, mogućnosti, postavke

Planirani zadaci u 1s 8.3. Pozadinski poslovi: karakteristike, mogućnosti, postavke

". U njemu ćemo razmotriti nove karakteristike koje se ne odnose na sistemski interfejs, ali značajno proširuju funkcionalnost platforme 1C:Enterprise 8.

Primjenjivost

Članak se bavi verzijom platforme 1C:Enterprise 8.3.4.437. Sve funkcionalnosti opisane u članku ažurirane su na verziju 8.3.11.

Ostale inovacije u 1C: Enterprise 8.3

Nastavimo se upoznati s inovacijama platforme 1C:Enterprise 8.3.

Pozadinski i zakazani zadaci u datotečnoj infobazi

U mnogim tipičnim konfiguracijama platforme 8.2 postojala je konstanta koja je označavala korisnika pod kojim su se zadaci izvršavali u verziji datoteke.

Kada je sistem počeo da radi pod ovim korisnikom, spojen je rukovalac čekanja, koji je na određenoj frekvenciji nazvao metodu ugrađenog jezika ExecuteProcessingJobs().

Ovaj pristup je stvorio dodatne poteškoće i neugodnosti za korištenje zakazanih zadataka u bazi datoteka.

Ovo bi moglo biti posebno kritično kada radite sa konfiguracijama kao što su “Sveobuhvatna automatizacija” ili "Upravljanje proizvodnim preduzećem" u kojoj rutinski zadaci igraju prilično važnu ulogu.

Ako je ovoFileIB Onda
=
Constants.UserForPerformingRegularTasksInFileVariant.Get();
Ako a glValueVariable(“gCurrentUser”) =
UserToPerformRegularJobs Onda
// sa intervalom od sekunde, pozivamo proceduru za rad sa zakazanim zadacima
SupportRegularTaskForFileVersion();
IntervalFor Polling=
Constants.IntervalForPollingRegularTasksInFileVariant.Get();
Ako a IntervalFor Polling= Nedefinisano
ILI IntervalFor Polling= 0 Onda
IntervalFor Polling= 60 ;
EndIf ;
ConnectHandlerWaiting(“SupportRegularAssignmentForFileVersion”,
IntervalFor Polling);
EndIf ;
EndIf ;

Na platformi 8.3 Implementiran rad pozadinskih i zakazanih zadataka u datotečnoj infobazi bez korištenja poziva metode globalnog konteksta ExecuteProcessingJobs().

Pozadinski i planirani zadaci se izvršavaju direktno u jednoj od klijentskih aplikacija (tanki, debeli klijent) ili ekstenzijom web servera.

Pozadinski posao koji je pokrenula sesija izvršava ista klijentska aplikacija koja ga je pokrenula.

Pozadinski poslovi se izvršavaju sekvencijalno, tj. na jednoj klijentskoj aplikaciji istovremeno, može se izvršiti samo jedan pozadinski zadatak (uključujući planirane).

Planirane zadatke izvodi samo jedna klijentska aplikacija. Taster komandne linije koristi se za kontrolu pokretanja zakazanih zadataka. /AllowExecuteScheduledJobs.

Planirane zadatke izvršava prva klijentska aplikacija po redoslijedu pokretanja, kojoj nije zabranjeno izvršavanje zakazanih zadataka (da biste onemogućili sesiju, sesija mora biti pokrenuta parametrom komandne linije /AllowExecuteScheduledJobs -Off).

Kada se ova sesija završi, izvršenje skače na bilo koju od preostalih pokrenutih sesija.

Ako linija za pokretanje klijentske aplikacije eksplicitno navodi potrebu za pokretanjem planiranih zadataka (komandna linija navodi /AllowExecuteScheduledJobs -Force), tada na njemu počinju da se izvršavaju zakazani zadaci, bez obzira na prisustvo drugih sesija.

Planirani zadaci se obrađuju svakih 60 sekundi.

Imajte na umu da su planirani zadaci primijenjenog rješenja (u verziji datoteke) počeli da se izvršavaju ne ranije od 1 minute nakon pokretanja klijentske aplikacije. Počevši od verzije 8.3.8, ovo vrijeme je udvostručeno i stoga planirani zadaci počinju da se izvode najviše 2 minute nakon pokretanja klijenta (u verziji datoteke).

Ova odluka je zbog smanjenja kašnjenja na početku prijave. Dodatno, u izdanju 8.3.7, dodana je mogućnost brzog utvrđivanja da li je trenutna sesija pozadinska sesija posla. Ovo se implementira kroz novu metodu globalnog konteksta GetCurrentInfobaseSession(), kao i novu metodu za sesiju infobaze GetBackgroundTask().

Ispod je kod koji ilustruje gore navedeno:

Kliknite na sliku za povećanje.

Kalkulacija kontrolne sume

Platforma sada ima mehanizme za izračunavanje kontrolnih suma podataka.

Podsjetimo da je kontrolni zbroj (heš) vrijednost koja se izračunava iz skupa podataka primjenom određenog algoritma i koristi se za provjeru integriteta podataka tokom prijenosa ili skladištenja.

Haševi se mogu koristiti za provjeru identiteta podataka (na primjer, potrebno je osigurati da datoteka nije oštećena tokom prijenosa; provjerite da li su promjene napravljene u datoteci, i ako jeste, zatim je ponovo učitajte u bazu podataka) .

Da bi to uradila, platforma je implementirala objekat HashingData, dostupno na serveru, debelom klijentu, eksternoj vezi i serveru mobilnih aplikacija.

Ovaj objekat ima dvije metode: Dodati() i Za dodavanje fajla(), koji ažuriraju hash sumu na osnovu podataka proslijeđenih u parametrima.

Platforma 8.3.4.437 podržava izračunavanje sljedećih hash funkcija: CRC32, MD5, SHA1, SHA256. Ali funkcije SHA1 i SHA256 nije podržano na mobilnoj platformi.

Razmotrimo jednostavan primjer. Pretpostavlja se da na serveru u programskom direktoriju postoji datoteka “ agent.exe". Treba izračunati MD5-zbir za ovaj fajl.

Da bismo to uradili, kreiraćemo eksternu obradu na kojoj ćemo postaviti naredbu Izračunati. Rukovalac sadrži sljedeći kod:

&AtClient
Izračunaj postupak (naredba)
Rezultat = CalculateOnServer();
Izvještaj(String(Rezultat));
EndProcedure
&Na serveru
Funkcija CalculateOnServer()
Haš = Novo HashingData(HashFunction .MD5 );
Hash.AddFile(KatalogProgrami() + "ragent.exe" );
Vrati Hash.HashSum ;
EndFunctions

U reviziji platforme 8.3.10+ u metodi Dodati() objekt HashingData postalo je moguće koristiti tok binarnih podataka, što je uvelike pojednostavilo njihovu upotrebu u rješavanju različitih primijenjenih problema ažuriranja hash suma.

Rad sa sigurnim verzijama protokola SMTP/POP3

Na platformi 8.3 postalo je moguće koristiti sigurne verzije protokola SMTP/POP3(postoje termini SMTPS/POP3S ili SSLSMTP/SSLPOP3).

Za objekt InternetPostalProfile implementirana nova svojstva:

  • UseSSLSMTP;
  • UseSSLPOP3;
  • OnlySecuredAuthenticationSMTP;
  • OnlySecuredAuthenticationPOP3.

Svojstva SMTP autentifikacija i POP3 autentikacija objekt InternetPostalProfile, kao i nabrajanja Metoda SMT autentikacije i POP3 metoda provjere autentičnosti upotreba je zastarjela - podržani su zbog kompatibilnosti.

Korištenje sigurnog protokola SMTPS omogućava vam slanje pošte sa 1C koristeći poštansko sanduče Google.

Razmotrimo primjer. Na formular ćemo postaviti polja za unos predmeta pisma i adrese primaoca, a za unos teksta pisma - formatirano polje dokumenta.

Kliknite na sliku za povećanje.

Pritiskom na dugme Pošalji sljedeći kod će se izvršiti:

&AtClient
Procedura Pošalji (Command) Mail = Nova InternetMail ; Profil = Novo InternetPostalProfile;
Profile.SMTPServerAddress= "smtp.googlemail.com" ;
Profil.SMTP korisnik= “[email protected]” ;
Profil.SMTP lozinka= "PASSWORD" ;
Profile.UseSSLSMTP= istina ;
Profil.SMTP Port = 465 ; Pokušaj
Mail.Connect(Profil );
Izuzetak
Izvještaj(Opis greške());
Povratak ;
EndTry ; MailMessageText= “” ;
Prilozi = Nova struktura ;
Text.GetHTML(MailMessageText, Prilozi ); MailMessage= Novo InternetMailMessage;
MailMessage.Recipients.Add(Kome );
MailMessage.Subject= Predmet ;
MailMessage.Texts.Add(MailMessageText,
MailMessageTextType.HTML); Mail.Send ( MailMessage); Mail.Disconnect();
EndProcedure

Imajte na umu da u našem primjeru, ako SMTP server nije mogao poslati e-poruku primaocu(ima), tada će metoda Mail.Send(MailMessage) ubacio izuzetak. To je izazvalo određene neugodnosti za programere, jer. razlog za izbacivanje izuzetka nije bio očigledan.

U verziji 8.3.9 ovo ponašanje se promijenilo i sada metoda Send() vraća podudaranje, čiji je ključ adresat, a vrijednost je dijagnostika sa servera pošte. Ovo vam omogućava da precizno odredite razloge neuspješnog slanja e-mail poruke svakom od primatelja. U načinu kompatibilnosti verzije 8.3.8, ponašanje se nije promijenilo.

Dvostrano štampanje

Na platformi 8.2 Sama platforma nije kontrolisala dvostrano štampanje; ovu funkciju je bilo moguće kontrolisati samo pomoću drajvera štampača.

Na platformi 8.3 postalo je moguće kontrolisati dvostrano štampanje za tabelarni dokument, grafičku šemu (iz ugrađenog jezika i interaktivno) i tekstualni dokument (samo interaktivno).

Sistemske enumeracije su se pojavile na ugrađenom jeziku:

  • VrstaDouble SidedPrinting(Nema, FlipUp, FlipLeft);
  • (Auto, MirrorUp, MirrorLeft, Ne koristi).

I objekti SpreadsheetDocument i GraphicScheme pojavila svojstva Dvostrano štampanje i InterleavingPage Arrangements, pomoću koje možete promijeniti izgled odštampanih stranica.

U reviziji platforme 8.3.9, sistemsko nabrajanje DuplexType ima novu vrijednost Koristite postavke štampača. Odabir ove vrijednosti omogućio je korištenje postavki štampača prilikom štampanja sistemskih dokumenata. U režimu kompatibilnosti verzije 8.3.8, ponašanje se nije promenilo i odgovarajuće postavke štampača se zanemaruju.

Dijalog za objavljivanje baze podataka na web serveru je učinjen funkcionalnijim. Sada objavljivanje iz konfiguratora omogućava vam da postavite sve parametre datoteke default.vrd.

Za dijalog za objavljivanje web klijenta i web servisa kroz konfigurator implementirano je sljedeće:

  • mogućnost kontrole dostupnosti web usluga prema zadanim postavkama (atribut pointEnableCommon element ws);
  • mogućnost kontrole izvršavanja pozadinskih poslova u verziji datoteke (atribut dozvoli izvršavanje zakazanih poslova element ws).

Ako polje za potvrdu “Objavi web usluge prema zadanim postavkama” na obeleživaču “Osnovno” je postavljen, onda kada se publikacija ažurira, odabrani web servisi će biti objavljeni automatski.

U suprotnom, web servisi će biti označeni kao neobjavljeni. Ova zastavica odgovara atributu pointEnableCommon element ws u fajlu default.vrd za konfiguraciju web klijenta i web servisa.

Atribut pointEnableCommon ws element je odgovoran za mogućnost korištenja web servisa u ovoj bazi podataka koji su objavljeni bez eksplicitnog navođenja dozvole za korištenje (atribut omogućiti element tačka).

Ako atribut ima vrijednost tačno, zatim sve Web usluge za koje vrijednost atributa nije eksplicitno specificirana omogućiti element tačka, biće dozvoljena upotreba.

U suprotnom će korištenje takvih web usluga biti zabranjeno.

Podešavanje “Pozadinski poslovi u načinu rada datoteka” odgovara atributu dozvoli izvršavanje zakazanih poslova ws element u datoteci default.vrd.

Atribut dozvoli izvršavanje zakazanih poslova kontrolira mogućnost izvršavanja zakazanih zadataka ekstenzijom web servera za verziju datoteke infobaze.

Atribut može imati sljedeće vrijednosti:

  • isključeno– u ovom slučaju ekstenzija web servera neće obavljati zakazane zadatke. Planirane zadatke će obavljati klijentska aplikacija (ako postoji) koja se direktno povezuje na infobazu, bez korištenja web servera.
  • sila– u ovom slučaju ekstenzija web servera će obavljati zakazane zadatke.
    Ako vrijednost ovog atributa nije postavljena, tada će planirane zadatke obavljati aplikacija koja će se koristiti za prvo povezivanje s info bazom.

Prozor za objavljivanje na web servisu u trenutnom izdanju platforme postao je još praktičniji i ergonomičniji. Sada su parametri koji opisuju OpenID autentifikaciju stavljeni na posebnu karticu.

Numeracija objekata infobaze

Na platformi 8.3 redizajniran je mehanizam za automatsko numerisanje objekata infobaze. Jedinstvenost broja ili koda (uključujući i onaj dobijen kao rezultat automatskog generisanja broja ili koda) se uvijek kontroliše tokom snimanja objekta.

U tekst poruke o povredi jedinstvenosti broja ili koda dodana je naznaka koji broj ili kod nije jedinstven.

Upotreba ispražnjenog broja ili koda je promijenjena. Novi broj ili šifra se dodjeljuje bez korištenja praznih brojeva ili kodova, ako već postoje izdati brojevi ili kodovi sa velikim (po redu) brojem ili kodnim prefiksom.

Zbirne funkcije jezika izraza sistema za kompoziciju podataka

Nove agregatne funkcije implementirane su u jeziku izraza sistema za sastavljanje podataka:

  • Svaki();
  • Bilo koji();
  • Standardna devijacija stanovništva();
  • Standardna devijacija uzorka();
  • VarianceSampling();
  • Varijanca populacije();
  • Kovarijansa stanovništva();
  • SampleCovariance();
  • Korelacija();
  • RegressionSlope();
  • RegresijaSegment();
  • RegressionCount();
  • RegresijaR2();
  • RegressionMeanX();
  • RegresijaMeanY();
  • RegresijaMeanSXX();
  • RegresijaMeanSYY();
  • RegresijaMeanSXY().

Kao što možete vidjeti iz naziva, radi se o statističkim funkcijama, što znači da programeri imaju priliku kreirati složene izvještaje bez pribjegavanja razvoju procedura za izračunavanje statističkih podataka.

Kliknite na sliku za povećanje.

Kao što možete vidjeti na slici, nema novih funkcija u padajućoj listi, međutim, ako ih unesete ručno, neće biti poruke o grešci, a izvještaj će biti generiran:

Zanimljiva je i nova funkcija KlasifikacijaABC(). Rezultat funkcije će biti broj klase, počevši od 1 (1 odgovara klasi A, 2 klasi B, 3 klasi C, itd.).

Hajde da demonstriramo kako ova funkcija radi. Kreirajte novi eksterni izvještaj “Klasifikacija robe” na osnovu zahtjeva:

ODABIR
ConsumptionGoodsGoods.Goods,
Potrošnja robe Roba Količina
OD
Dokument. Troškovi robe. Roba KAKO ConsumptionGoodsGoods

Definirajte novo izračunato polje Klasa:

Kliknite na sliku za povećanje.

Konfigurirajmo resurse na sljedeći način:

Kliknite na sliku za povećanje.

U korisničkom modu izvještaj izgleda ovako:

U zaključku, napominjemo da se od izdanja do izdanja na platformi 1C 8.3 ACS mehanizam stalno poboljšava i usavršava, te da ove promjene nije moguće u cijelosti unijeti u okvire našeg članka „novače“. Da, ovo izgleda suvišno, jer, radeći na trenutnoj verziji platforme, uvijek možete koristiti različite sisteme pomoći kako biste pomogli u analizi jednog ili drugog aspekta rada ovog mehanizma.

Osim toga, ne zaboravite na naš poseban kurs Profesionalni razvoj izvještaja u 1C 8.3 o sistemu za sastavljanje podataka, koji analizira do atoma sve suptilnosti i zamke pri radu sa ovim mehanizmom. Pogledajte sami demo.

Dakle, hajde da sumiramo međurezultate. Do sada smo se upoznali sa novim karakteristikama Taxi interfejsa i upravljanih formi, kao i sa nekim do sada nedozvoljenim karakteristikama same platforme. Sada je vrijeme da vidimo koje su zgodne funkcije postale dostupne programeru u konfiguratoru.

Koncept asinhronog programiranja

Koncept asinhronog programiranja je da rezultat izvršenja funkcije nije dostupan odmah, već nakon nekog vremena u obliku nekog asinhronog (krši normalan redoslijed izvršavanja) poziva.

One. Glavna ideja asinhronog programiranja je pokretanje pojedinačnih poziva metoda i nastavak obavljanja drugog posla paralelno bez čekanja da se pozivi završe.

Nekim metodama, čija je vjerovatnoća izuzetka minimizirana, nije potreban asinhroni pristup, ali drugi ga zahtijevaju na samom početku razvoja.

Kao što se vidi iz grafikona, u modelu sinhronog programiranja nema koeficijenta korisnih interaktivnih radnji korisnika, jer sistem blokira korisnički interfejs, dok u asinhronom modelu korisnik nastavlja da aktivno radi u sistemu.

Kada se izvršava sinhrono, aplikacija ima samo jednu nit. Sa modelom asinhronog programiranja, možete pokrenuti mnoge paralelne niti i odgovoriti na nove radnje korisnika dok se pokreću. Nakon što je n-nit završen, rezultat prikazujete na ekranu.

Pozadinski zadaci u 1C: Enterprise 8

U 1C:Enterprise 8, pozadinski poslovi su dizajnirani za asinhrono izvršavanje zadataka aplikacija. Oni mogu pokrenuti podređene pozadinske poslove, na primjer, da paraleliziraju složene proračune na različitim radnim serverima klastera u klijent-server načinu rada.

Moguće je ograničiti izvršavanje pozadinskih poslova koji imaju iste metode, prema određenom atributu aplikacije. Programsko kreiranje i upravljanje pozadinskim poslovima moguće je iz bilo kojeg korisničkog priključka na informacijsku bazu sistema. Pozadinski posao se izvodi kao korisnik koji ga je kreirao.

Mehanizam zadataka funkcioniše iu klijent-server i fajl verziji rada, ali su mogućnosti za administriranje i izvršavanje zadataka u obe verzije donekle različite.

Klijent-server opcija

U verziji klijent-server, planer zadataka je odgovoran za zakazivanje izvršenja zadataka, koji se fizički nalazi u upravitelju klastera.

Planer periodično provjerava da li postoje zahtjevi za pokretanje pozadinskih poslova. Ako postoje poslovi koji se trebaju izvršiti, planer određuje najmanje opterećene radničke procese klastera i sekvencijalno dodjeljuje zadatak svakom od njih za izvršenje. Dakle, isti tok posla potencijalno može pokrenuti više poslova paralelno. Nakon što tok posla primi zadatak, tok posla uspostavlja vezu sa bazom podataka i izvršava zadatak unutar te veze. Nakon što se posao pokrene, tok posla obavještava planer o uspjehu ili neuspjehu posla.

Opcija datoteke

Počevši od verzije 8.3.3.641 platforme, programeri su uvelike pojednostavili rad sa pozadinskim poslovima u verziji datoteke.

Ranije je automatsko izvršavanje zadataka zahtijevalo pokretanje zasebne, dodatne sesije 1C:Enterprise koja se koristila kao planer zadataka. I u ovoj sesiji je bilo potrebno periodično izvršavati metodu ugrađenog jezika ExecuteProcessingJobs(). Ovaj pristup je bio prilično glomazan, nezgodan i ozbiljno je ograničavao upotrebu pozadinskih i zakazanih zadataka u verziji rada datoteke.

Sada je sve postalo mnogo lakše. Ako se pokrene tanki ili debeli klijent, ili ako web server ima klijentske veze, onda svaka od ovih aplikacija automatski pokreće drugu nit sa vezom na bazu podataka. Ove niti su uključene u to da obavljaju pozadinske i zakazane zadatke.

Svaka od ovih aplikacija pokreće svoje pozadinske poslove. Ako je aplikacija pokrenula nekoliko pozadinskih poslova, oni se izvršavaju uzastopno, redoslijedom kojim su primljeni.

Očigledno minus 1C pozadinski poslovi: budući da se izvršavaju na strani servera, ne postoji mogućnost interaktivnog rada sa korisnikom (npr. ne možete prikazati poruku ili bilo koju drugu informaciju; svi ti podaci moraju biti pohranjeni u infobazi i dalje na neki način obrađeni) .

Treba napomenuti da su poslovi u pozadini čisto programski objekti i da se ne mogu pohraniti u bazu podataka. To jest, možemo samo kreirati instancu klase, inicijalizirati njena svojstva i pokrenuti je za izvršenje.

Primjer izvršavanja asinhronog koda u 1C:Enterprise 8

„Pisanje programa u kojima rezultat poziva funkcije stiže u nepoznato vrijeme mnogo je teže od običnih programa. Ugniježđeni pozivi, rukovanje greškama, kontrola nad onim što se dešava - sve postaje složenije, ”to će reći samo oni koji ne znaju kako pravilno koristiti mogućnosti platforme, ali ne i mi!

Hajde da demonstriramo svu jednostavnost i eleganciju asinhronog izvršavanja koda u 1C:Enterprise 8!

Korak 1. Kreirajmo novi IB za razvoj konfiguracije

Korak 2 U konfiguraciji dodajte opći modul "AsynchronousHandlers"

Zašto smo dodali zajednički modul? Ovdje je sve jednostavno: za obavljanje asinhronih operacija u 1C: Enterprise 8 koriste se pozadinski zadaci, koji imaju svog upravitelja - „BackgroundTask Manager“. Ovaj objekat ima metodu "Run" uz pomoć koje se pokreće pozadinski zadatak.

Okrenimo se pomoćniku za sintaksu.

Dakle, trebat će nam zajednički modul.

Korak 3 U opći modul "AsynchronousHandlers" dodajmo proceduru izvoza OurDurationOperation()

Procedura OurDurationOperation(Duration) Export // Simulacija kontinuirane akcije (Trajanje sek.). OperationStartDate = CurrentDate(); Dok CurrentDate() - OperationStartDate< Длительность Цикл КонецЦикла; КонецПроцедуры

Korak 4 U konfiguraciju dodajemo obradu “AsynchronousProgrammingConcept” (možete kreirati eksternu obradu)

Dodajte jedan atribut u obrazac:

Trajanje (broj)

i dva tima

Izvedite dugu operaciju;

Izvrši dugotrajnu operaciju asinhrono.

Korak 5 Prema pomoćniku za sintaksu, ispunite modul obrasca

&AtClient procedura PerformLongOperation(Command) PerformLongOperationOnServer(); EndProcedure &OnServer Procedure PerformLongOperationOnServer() AsynchronousHandlers.OurLongOperation(Duration); EndProcedure &OnClient Procedure ExecuteLong-runningOperationAsynchronously(Command) ExecuteLong-runningOperationAsynchronouslyOnServer(); EndProcedure &AtServer Procedure PerformLong-RunningOperation AsynchronouslyAtServer() Parametri = New Array; Parameters.Add(Duration); BackgroundJobs.Run("AsynchronousHandlers.Our LongOperation", Parametri, Novi jedinstveni identifikator, "Primjer koncepta asinhronog programiranja"); EndProcedure

Korak 6 Pokrećemo i provjeravamo!

rezultat:

Ako kliknemo na dugme "Izvrši dugu operaciju", tada je korisnički interfejs blokiran na "Trajanje" sekundi;

Ako kliknemo na dugme "Izvrši dugotrajnu operaciju asinhrono", tada se korisnički interfejs ne blokira, a programski kod se izvršava paralelno.

Možemo provjeriti da li programski kod radi asinhrono gledajući dnevnik.

Možemo otkloniti greške u programskom kodu koji radi u "pozadini" ako postavimo odgovarajuće svojstvo u opcijama za otklanjanje grešaka.

Primjer izvršavanja asinhronog koda u 1C:Enterprise 8 koristeći BSP

Razmotrimo primjer implementacije koncepta asinhronog programiranja u 1C:Enterprise 8 u BSP-u na primjeru obrade Tekućih poslova.

Logika je sljedeća: prilikom pokretanja programa inicijalizira se radni prostor početne stranice gdje se može prikazati obrazac za obradu "Aktuelno". Ovaj formular je ispunjen trenutnim poslovima korisnika i potrebno je vrijeme da se popuni. Ako programeri nisu imali mogućnost asinhronog izvršavanja koda, tada bi korisnički interfejs bio blokiran za vrijeme trajanja popunjavanja obrasca za obradu!

Analizirajmo programski kod forme.

Događaj obrasca "OnCreateOnServer" poziva proceduru "RunBackgroundJob" - to je ono što nam treba.

Ne ometajući se nijansama, analiziramo ovu proceduru

I ovdje vidimo da se koristi pozadinski upravitelj poslova i njegova metoda Execute. Imajte na umu da programeri zadržavaju jedinstveni ID pozadinskog posla.

Da bi to učinili, programeri koriste metodu ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>).



U proceduri kuke Pluggable_CheckJobExecution() programeri pozivaju funkciju JobCompleted (JobId)


Ova funkcija provjerava izvršenje pozadinskog posla prema ID-u.

Treba napomenuti da je BSP razvio zajedničke module koji podržavaju rad dugoročnih serverskih operacija.

Dakle, asinhroni koncept programiranja u 1C:Enterprise 8 neznatno povećava složenost rješavanja problema za programera, ali značajno poboljšava funkcionalnost programa sa stanovišta korisnika.

Vjerovatno ni jedna ozbiljna konfiguracija na 1C 8.3 ili 8.2 ne može bez upotrebe zakazanih i pozadinskih zadataka. Veoma su zgodne, jer će se izvršavati po jasno definisanom rasporedu bez intervencije korisnika i programera.

Na primjer, trebate razmjenjivati ​​podatke sa drugim programom jednom dnevno. Koristeći rutinske i pozadinske zadatke, 1C će moći samostalno obavljati ove radnje, na primjer, tokom neradnog vremena. Ova metoda ni na koji način neće utjecati na rad korisnika i uštedjet će vrijeme.

Prvo, hajde da shvatimo šta oni znače i po čemu se razlikuju:

  • Planirani zadatak omogućava vam da pokrenete bilo koje specifične radnje prema unaprijed konfiguriranom rasporedu.
  • Pozadinski posao je objekt koji sadrži radnje koje treba izvršiti.

Pretpostavimo da naša kompanija nešto prodaje i ima svoju web stranicu sa cijenama. Jednom dnevno želimo da ih rasteretimo kako bismo održali relevantnost.

Otvorite konfiguraciju i dodajte zakazani zadatak.

Postavljanje svojstava

Razmotrite najvažnije parametre koji se moraju ispuniti u njegovim svojstvima.

  • u polju" Naziv metode» odabire se procedura nekog konkretnog opšteg modula koji će se direktno izvršavati. Naznačit će sve radnje za postavljanje cijena na našu web stranicu. Imajte na umu da će se izvršenje odvijati na serveru. Ovo je logično, jer se rutinske operacije izvode bez intervencije korisnika.
  • Planirani zadatak se može onemogućiti ili omogućiti po potrebi. Nema potrebe da mu svaki put mijenjate raspored. Da biste to učinili, u paleti svojstava označite ili poništite " Upotreba».
  • Još jedna važna postavka je da li će ovaj zakazani zadatak biti unaprijed određeno, ili ne. Unaprijed definirani zakazani poslovi se pokreću automatski. Ako ova zastavica nije postavljena, morat ćete ih pokrenuti programski ili koristiti obradu "Job Console" sa ITS-om.
  • Također možete odrediti broj ponavljanja i interval između njih nakon sudara. Abnormalni završetak odnosi se na situacije kada zadaci nisu završeni zbog greške.

Podešavanje rasporeda

Posljednji korak je postavljanje rasporeda za naše otpremanje na stranicu pomoću odgovarajuće hiperveze u paleti svojstava.

Vidjet ćete tipičnu postavku rasporeda u 1C 8.3. Nema tu ništa komplikovano. U ovom primjeru, postavili smo pokretanje našeg upload-a cijena na stranicu svakodnevno od pet do sedam ujutro. U slučaju da planirani zadatak nema vremena da se odradi prije 7:00 sati, bit će završen sljedećeg dana.

Blokiranje planiranih zadataka

Pokrenite standardni uslužni program 1C Enterprise Server Administration i otvorite svojstva baze podataka u kojoj ste kreirali zakazani zadatak (za verzije 1C klijent-server).

U prozoru koji se otvori (nakon unosa login i lozinke za pristup IB) provjerite da nije postavljena zastavica na stavci „Blokiranje planiranih zadataka je omogućeno“. Ako naiđete na situaciju u kojoj zadatak ne radi, prvo provjerite ovu postavku.

Na isti način možete potpuno onemogućiti zakazane zadatke u 1C 8.3. Da biste onemogućili određene pozadinske poslove, možete koristiti obradu "Background Jobs Console" ugrađenu u nedavna izdanja.

Pozadinski i zakazani poslovi u načinu rada datoteka

U ovom načinu rada, postavljanje i pokretanje ovih poslova je mnogo teže organizirati. Najčešće se kreira dodatni nalog čija će sesija uvijek biti otvorena.

Aktivacija zakazanih zadataka u ovom slučaju se vrši metodom "PerformProcessingTasks()".

Također možete koristiti sljedeću konstrukciju:

Ime procedure mora biti ime klijentske procedure koja će se izvršiti. Interval pokazuje koliko sekundi će izvršenje trajati. Parametar "Jednom" nije obavezan. Odražava da li će se dati postupak izvršiti jednom ili više puta.

Praćenje grešaka u poslovima u pozadini

Možete vidjeti napredak pozadinskih poslova, kao i prisustvo mogućih grešaka u evidenciji registracije. U filteru postavite odabir na aplikaciju "Pozadinski zadatak" i, ako je potrebno, odaberite značaj koji vas zanima, na primjer samo "Greške".

Dnevnik će prikazati sve unose koji odgovaraju vašem odabiru s komentarom koji možete koristiti da shvatite uzrok greške.

Pitanje koje smo postavili u naslovu članka relevantno je za mnoge sistemske administratore koji rade s ovim proizvodom. Koliko je to moguće, pokušavamo razgovarati o parametrima koji utječu na performanse 1C i razotkriti popularne mitove. Danas, koristeći primjer jednog nedavnog slučaja, želimo vam reći o još jednom aspektu koji može ozbiljno utjecati na performanse - zakazanim zadacima.

Počnimo sa pravim slučajem. Ne tako davno jedan od naših klijenata nam se obratio sa pritužbom na "kočnice" 1C od jednog od njegovih zaposlenika. Simptomi su se izražavali u činjenici da je nakon određenog vremena konfiguracija Trade Management 10 počela dosta usporavati, odnosno, visila je neko vrijeme.

Detaljnijom analizom situacije pokazalo se da se to dešava samo jednom zaposlenom, i to na bilo kom radnom mestu, to se dešava duže vreme, ali ako su ranije „kočnice“ trajale oko sekundu, sada, nakon ažuriranja, mogu trajati i do 15-20 sekundi, što čini rad izuzetno neugodnim.

U principu, početni podaci su već dovoljni za donošenje prvih zaključaka. Uzmimo ih ponovo:

  • "Kočnice" se javljaju stalno, sa određenom frekvencijom
  • "Usporava" samo za jednog korisnika
  • "Usporava" na bilo kom radnom mestu

Da bismo potvrdili naše pretpostavke, pogledajmo Postavke računovodstva:

Zaista, "problematični" korisnik je naveden kao korisnik za obavljanje rutinskih zadataka. Kako se ispostavilo, nekada je u ime ovog korisnika radio zadatak RIB auto-razmjene. Ostaje da se vidi šta je tačno bio uzrok epizodnog "kočenja". Ovo je takođe lako uraditi:

A evo i "heroja prilike" - zadatak ažuriranja indeksa pretraživanja punog teksta, koji se pokretao svakih 2,5 minuta. U ovom slučaju problem je u potpunosti riješen onemogućavanjem izvršavanja zakazanih zadataka kod ovog korisnika, međutim, to nije uvijek moguće niti preporučljivo, pa ćemo u nastavku razmotriti kako se može upravljati zakazanim zadacima i kako osigurati da oni nemaju negativan uticaj na performanse.

Opća primjena

U konfiguracijama zasnovanim na redovnoj aplikaciji, ne postoji jedinstveni komplet alata za upravljanje planiranim zadacima. To je uglavnom zbog činjenice da je u vrijeme njihovog početnog razvoja sam koncept proceduralnih zadataka bio prilično slabo razvijen.

Mnogim planiranim zadacima upravlja se kroz konfiguraciju podsistema povezanih s njima. Na primjer, postavke za rutinske zadatke vezane za razmjenu podataka treba tražiti u postavkama razmjene koje se odnose na Jedinstveni državni automatizovani informacioni sistem u postavkama trgovine alkoholom itd.

Na prvi pogled sve je sasvim logično, ali nedostatak jednog alata otežava kontrolu konfiguriranih zakazanih zadataka i optimalnost njihovih postavki. Pa, ako ima jedan ili dva zadatka, a ako ih ima više ili, kao u našem slučaju, postoji sumnja na bilo koji od zakazanih zadataka, ali nemate pojma ko je i šta postavio u ovu bazu.

U ovom slučaju, trebali biste koristiti eksternu obradu ConsoleQuests (JobsConsole), koji je uključen u skup standardne obrade na ITS disku. Obrada pruža jedinstven interfejs za sve poslove i omogućava vam da ih centralno konfigurišete, kao i da kontrolišete trenutno pokrenute poslove.

Ovu listu treba pažljivo proučiti, isključiti sve nepotrebne poslove, a potrebne rasporediti u skladu sa hitnim potrebama i zdravim razumom. Na primjer, u našem slučaju nema potrebe da se EGAIS odgovori obrađuju svakih 30 sekundi (ova postavka je napravljena za testiranje), a u radnom načinu će to biti dovoljno da se to radi, recimo, jednom u pola sata.

Upravljana aplikacija

U konfiguracijama baziranim na upravljanoj aplikaciji, zakazani zadaci imaju značajniju ulogu, mogu se koristiti za obavljanje različitih zadataka za održavanje baze podataka i ažuriranje, ali u isto vrijeme, to su zakazani zadaci koji najčešće uzrokuju " kočnice".

Za upravljanje rutinskim zadacima, postoji hotelska stavka u meniju Administracija - podrška i održavanje.

Odmah se može primijetiti da su zadaci značajno povećani (na primjer, uzeli smo istu konfiguraciju - Maloprodaja) i njihova kompetentna konfiguracija može značajno poboljšati performanse baze podataka. Podrazumevana podešavanja su napravljena od strane 1C na osnovu potreba prosečne sferne firme u vakuumu i nisu ni blizu optimalne.

Prije svega, onemogućavamo ono što je očigledno nepotrebno, s čime ne radite. Zatim optimiziramo raspored funkcija koje se rijetko koriste, na primjer, ažuriranje klasifikatora banaka u maloprodaji, kao i provjera ugovornih strana, može se vršiti jednom tjedno u neradnom vremenu ili na kraju (početku) radnog dana .

Posebnu pažnju treba obratiti na sve što se odnosi na indeks pretraživanja. Pretraživanje cijelog teksta je svakako zgodna stvar, ali rad s njegovim indeksom je vrlo, vrlo intenzivan zadatak. Stoga ne treba ići u krajnost i odustati od toga, već treba ozbiljno pregledati i prilagoditi njegove parametre.

Počnimo sa ekstrakcija teksta, ova operacija vam omogućava da pretražujete sadržaj priloženih datoteka, pa ako ih ne koristite, ne pretražujete po njima ili tamo imate samo slike, onda se ova operacija može onemogućiti, u svakom slučaju, izvodite je jednom svakih 85 sekundi - eksplicitno nabrajanje.

Ažuriranje PPA indeksa- jedna od najzahtjevnijih operacija, po defaultu se izvodi jednom u minuti.

Sada razmislimo o tome koliko često se informacije dodaju ili ažuriraju u bazi podataka koju najčešće tražite? Očigledno ne svake minute, pa će biti dovoljno ažurirati indeks mnogo rjeđe: jednom na sat, jednom dnevno ili čak jednom sedmično.

Isto važi i za spajanje PPD indeksa, ako ažurirate indeks jednom dnevno, tada biste trebali postaviti spajanje da se izvodi jednom tjedno, dok birate najmanje ometajuće vrijeme kao početak posla.

Ove jednostavne operacije omogućit će vam da podignete udobnost rada s njim na novi nivo bez puno štete po funkcionalnost konfiguracije odbijanjem da često izvodite operacije koje zahtijevaju velike resurse. Samo ne idite u krajnosti, ispravno procijenite koliko su vam potrebne određene funkcije i koliko često biste trebali izvršavati zadatke povezane s njima.

  • Tagovi:

Molimo omogućite JavaScript da vidite

Top Related Articles