Planirani zadaci 1s 8.2 verzija datoteke. Univerzalni regulatorni zadatak

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

Primjenjivost

U članku se govori o verziji 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 rutinski zadaci u datotečnoj infobazi

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

Kada je sistem počeo da radi pod ovim korisnikom, spojen je rukovalac čekanja, koji je pozvao metodu ugrađenog jezika sa određenom periodičnošću ExecuteTaskProcessing().

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

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

Ako je ovo datoteka IB onda
=
Constants.UserForExecutingRoutineTasksInFileVariant.Get();
Ako chValueVariable(“glCurrentUser”) =
UserTo ExecuteTaskRegl Onda
// sa intervalom od sekundi zovemo proceduru za rad sa rutinskim zadacima
SupportRegularTaskForFileVersion();
IntervalForPolling=
Constants.IntervalForPollingRoutineTasksInFileVariant.Get();
Ako IntervalForPolling= Nedefinisano
ILI IntervalForPolling= 0 Onda
IntervalForPolling= 60 ;
EndIf ;
ConnectWaitHandler(“Podrška za RoutineTaskForFileVersion”,
IntervalForPolling);
EndIf ;
EndIf ;

Na platformi 8.3 implementirao rad pozadinskih i rutinskih poslova u datotečnoj infobazi bez korištenja poziva metode globalnog konteksta ExecuteTaskProcessing().

Pozadinski i rutinski zadaci se izvode direktno u jednoj od klijentskih aplikacija (tanki, debeli klijent) ili preko ekstenzije 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, samo jedan pozadinski zadatak (uključujući rutinske) može se izvršiti istovremeno.

Rutinske zadatke izvodi samo jedna klijentska aplikacija. Za kontrolu pokretanja planiranih zadataka koristi se tipka komandne linije /AllowExecuteScheduledJobs.

Rutinske zadatke izvršava prva klijentska aplikacija u redoslijedu pokretanja, kojoj nije zabranjeno izvršavanje rutinskih zadataka (da bi se sesija zabranila, sesija mora biti pokrenuta parametrom komandne linije /AllowExecuteScheduledJobs -Off).

Kada se ta sesija završi, izvršenje se kreće na bilo koju od preostalih pokrenutih sesija.

Ako linija za pokretanje klijentske aplikacije eksplicitno ukazuje na potrebu za izvršavanjem rutinskih zadataka (u komandnoj liniji je naznačeno /AllowExecuteScheduledJobs -Force), tada na njemu počinju da se izvršavaju rutinski zadaci, bez obzira na prisustvo drugih sesija.

Rutinski zadaci se obrađuju svakih 60 sekundi.

Imajte na umu da su rutinski zadaci aplikativnog 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 rutinski zadaci počinju da se izvršavaju najviše 2 minute nakon pokretanja klijenta (u verziji datoteke).

Ova odluka je zbog smanjenja kašnjenja pri pokretanju aplikacije. Dodatno, izdanje 8.3.7 dodalo je mogućnost brzog utvrđivanja da je trenutna sesija pozadinska sesija posla. Ovo se implementira pomoću nove metode globalnog konteksta GetCurrentInfoBaseSession(), kao i nove metode za sesiju infobaze GetBackgroundTask().

Ispod je kod koji ilustruje gore navedeno:

Za uvećanje kliknite na sliku.

Obračun kontrolnih suma

Platforma sada uključuje 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.

Hashevi se mogu koristiti za provjeru identiteta podataka (na primjer, morate se uvjeriti da datoteka nije oštećena prilikom prijenosa; provjerite jesu li napravljene promjene u datoteci, i ako jeste, zatim je ponovo učitajte u bazu podataka) .

U tu svrhu u platformu je implementiran objekat HashingData, dostupno na serveru, u debelom klijentu, eksternoj vezi, kao i na serveru mobilnih aplikacija.

Ovaj objekat ima dvije metode: Dodati() I Dodaj fajl(), koji ažuriraju hash sumu uzimajući u obzir podatke proslijeđene u parametrima.

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

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

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

&OnClient
Izračunaj postupak (naredba)
Rezultat = CalculateOnServer();
Izvještaj(String(Rezultat));
Kraj procedure
&Na serveru
Funkcija CalculateOnServer()
Haš = Novo HashingData(HashFunction.MD5);
Hash.AddFile(KatalogProgrami() + “ragent.exe” );
Vrati Hash.HashSum ;
EndFunction

U izdanju platforma 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 zaštićenim verzijama protokola SMTP/POP3

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

Za objekt InternetMailProfile implementirana nova svojstva:

  • Koristite SSLSMTP;
  • UseSSLPOP3;
  • Samo SecureAuthenticationSMTP;
  • Samo POP3 sigurna autentifikacija.

Svojstva AuthenticationSMTP I POP3 autentikacija objekt InternetMailProfile, kao i transferi Metoda SMTPA autentifikacije I POP3 metoda provjere autentičnosti Ne preporučuje se njihovo korištenje - podržani su radi kompatibilnosti.

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

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

Za uvećanje kliknite na sliku.

Kada pritisnete dugme Pošalji Sljedeći kod će se izvršiti:

&OnClient
Procedura Pošalji (Command) Mail = Nova InternetMail; Profil = Novo InternetMailProfile;
Profile.SMTPServerAddress= “smtp.googlemail.com” ;
Profile.UserSMTP= “[email protected]” ;
Profile.PasswordSMTP= “LOZINKA” ;
Profile.UseSSLSMTP= Tačno ;
Profile.SMTPPort = 465 ; Pokušaj
Mail.Connect(Profil);
Izuzetak
Izvještaj(Opis greške());
Povratak ;
EndAttempt ; 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();
Kraj procedure

Imajte na umu da u našem primjeru, ako SMTP server nije mogao poslati e-poštu 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 se ponašanje promijenilo i sada metoda Send() vraća podudaranje čiji je ključ primalac i čija je vrijednost dijagnostika sa servera pošte. Ovo vam omogućava da precizno odredite razloge neuspjeha slanja e-poruke svakom primaocu. U načinu kompatibilnosti s verzijom 8.3.8, ponašanje se nije promijenilo.

Dvostrano štampanje

Na platformi 8.2 Sama platforma nije upravljala dupleksnim štampanjem;

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

Sistemske enumeracije su se pojavile na ugrađenom jeziku:

  • Duplex Printing Type(Nema, FlipUp, FlipLeft);
  • (Auto, MirrorTop, MirrorLeft, Ne koristi).

I za objekte TabularDocument I GraphicScheme pojavila svojstva Dvostrano štampanje I Izmjena rasporeda stranica, pomoću koje možete promijeniti izgled odštampanih stranica.

U verziji platforme 8.3.9, sistemsko nabrajanje DuplexPrintType ima novu dodanu vrijednost UsePrinterSettings. Odabir ove vrijednosti omogućio vam je korištenje postavki štampača prilikom štampanja sistemskih dokumenata. U režimu kompatibilnosti 8.3.8, ponašanje je nepromenjeno i odgovarajuće postavke štampača se zanemaruju.

Funkcionalniji je dijalog za objavljivanje baze podataka na web serveru. 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 allowexecutescheduledjobs element ws).

Ako polje za potvrdu “Objavi web usluge prema zadanim postavkama” na obeleživaču “Osnovno” je instaliran, tada će prilikom ažuriranja publikacije odabrani web servisi biti objavljeni automatski.

U suprotnom, web usluge će biti označene kao neobjavljive. Ova zastavica odgovara atributu pointEnableCommon element ws u fajlu default.vrd, namijenjen za postavljanje web klijenta i web servisa.

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

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

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

Postavke “Pozadinski poslovi u načinu rada datoteka” odgovara atributu allowexecutescheduledjobs ws element u datoteci default.vrd.

Atribut allowexecutescheduledjobs kontrolira mogućnost izvršavanja rutinskih 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 rutinske zadatke. Rutinske 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 rutinske zadatke.
    Ako vrijednost ovog atributa nije navedena, rutinske zadatke će obavljati aplikacija s kojom će se uspostaviti prva konekcija na infobazu.

Prozor za objavljivanje na web servisu postao je još praktičniji i ergonomičniji u trenutnom izdanju platforme. 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 baze podataka. Jedinstvenost broja ili koda (uključujući one dobijene kao rezultat automatskog generiranja broja ili koda) uvijek se provjerava prilikom snimanja objekta.

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

Upotreba slobodnog broja ili koda je promijenjena. Novi broj ili šifra se dodjeljuje bez korištenja puštenih brojeva ili kodova ako već postoje izdati brojevi ili kodovi s većim (po redu) prefiksom broja ili koda.

Agregatne funkcije jezika izraza sistema kompozicije podataka

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

  • Every();
  • Bilo koji();
  • Standardna devijacija stanovništva();
  • StandardSampleDeviation();
  • VarianceSamples();
  • VarianceofPopulation();
  • CovariancePopulation();
  • SampleCovariance();
  • Korelacija();
  • RegressionSlope();
  • RegresijaSegment();
  • RegressionCount();
  • RegresijaR2();
  • RegressionAverageX();
  • RegresijaProsjekY();
  • RegresijaProsjekSXX();
  • RegresijaProsjekSYY();
  • RegresijaAverageSXY().

Kao što nazivi govore, radi se o statističkim funkcijama, što znači da programeri imaju mogućnost kreiranja složenih izvještaja bez potrebe za razvojem procedura za izračunavanje statističkih podataka.

Za uvećanje kliknite na sliku.

Kao što možete vidjeti na slici, nema novih funkcija u padajućoj listi, ali 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. Kreirajmo novi eksterni izvještaj “Klasifikacija robe” na osnovu zahtjeva:

ODABIR
Potrošnja proizvodaProizvodi.Proizvod,
Potrošnja proizvodaProizvodi.Količina
IZ
Dokument.Potrošnja robe.Roba KAKO Potrošnja proizvodaProizvodi

Definirajmo novo izračunato polje Klasa:

Za uvećanje kliknite na sliku.

Konfigurirajmo resurse na sljedeći način:

Za uvećanje kliknite na sliku.

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 unapređuje i usavršava, a u okviru našeg članka „novače“ nije moguće ove promjene predstaviti u cijelosti. Da, ovo se čini nepotrebnim, jer kada radite na trenutnoj verziji platforme, uvijek možete koristiti različite sisteme pomoći koji će vam pomoći da analizirate ovaj ili onaj aspekt 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 razlaže na atom sve suptilnosti i zamke pri radu s ovim mehanizmom. Pogledajte sami demo.

Dakle, hajde da sumiramo međurezultate. Do sada smo se upoznali sa novim mogućnostima Taxi interfejsa i upravljanih formi, kao i sa nekim ranije nedozvoljenim mogućnostima 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 funkcije nije odmah dostupan, već nakon nekog vremena u obliku nekog asinhronog (krši normalan redoslijed izvršavanja) poziva.

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

Neke metode koje minimiziraju vjerovatnoću izuzetaka ne zahtijevaju asinhroni pristup, ali druge ga zahtijevaju na samom početku razvoja.

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

Kada se radi sinhrono, aplikacija ima samo jednu nit. Sa modelom asinhronog programiranja, možete pokrenuti više niti paralelno i reagirati na nove radnje korisnika dok se pokreću. Kada se n-nit izvrši, rezultat se prikazuje na ekranu.

Pozadinski zadaci u 1C: Enterprise 8

U 1C:Enterprise 8, pozadinski poslovi su dizajnirani da asinhrono izvršavaju zadatke aplikacije. Oni mogu generirati 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 na osnovu specifičnog kriterija aplikacije. Programsko kreiranje i upravljanje pozadinskim poslovima moguće je iz bilo kojeg korisničkog priključka na informacijsku bazu sistema. Pozadinski posao se pokreće u ime korisnika koji ga je kreirao.

Mehanizam zadataka funkcionira iu načinu rada klijent-server iu fajlu, ali su mogućnosti za administriranje i izvršavanje zadataka u obje verzije donekle različite.

Klijent-server opcija

U verziji klijent-server, raspoređivanje zadataka se vrši pomoću planera zadataka, koji se fizički nalazi u upravitelju klastera.

Planer periodično provjerava da li su primljeni neki zahtjevi za pokretanje pozadinskih poslova. Ako postoje poslovi koje je potrebno izvršiti, planer određuje najmanje opterećene radne procese u klasteru i sekvencijalno svakom od njih dodjeljuje svoj zadatak za izvršenje. Dakle, isti radnički proces može potencijalno izvršiti više poslova paralelno. Nakon što radnički proces primi posao, radni proces uspostavlja vezu sa info bazom i izvršava posao unutar te veze. Nakon što se posao završi, radni proces obavještava planer da li je posao dovršen uspješno ili neuspješno.

Opcija datoteke

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

Ranije je za automatsko izvršavanje zadataka bilo potrebno pokrenuti posebnu, dodatnu sesiju 1C: Enterprise, koja se koristila kao planer zadataka. I u ovoj sesiji je bilo potrebno periodično izvršavati ugrađenu jezičku metodu ExecuteTaskProcessing(). Ovaj pristup je bio prilično glomazan, nezgodan i uvelike je ograničavao upotrebu pozadinskih i rutinskih zadataka u verziji rada datoteke.

Sada je sve postalo mnogo lakše. Ako se pokrene tanki ili debeli klijent, a također i ako web server ima klijentske veze, tada se u svakoj od ovih aplikacija automatski pokreće druga nit sa vezom na bazu podataka. Ove niti su uključene u izvođenje pozadinskih i rutinskih zadataka.

Svaka od navedenih aplikacija obavlja svoje pozadinske zadatke. Ako je aplikacija pokrenula nekoliko pozadinskih poslova, oni se izvršavaju uzastopno, redoslijedom kojim su primljeni.

Očigledan nedostatak 1C pozadinskih poslova: budući da se izvršavaju na strani servera, ne postoji mogućnost interaktivnog rada sa korisnikom (npr. nemoguće je prikazati poruku ili neku drugu informaciju; svi ti podaci moraju biti pohranjeni u bazi podataka i dalje obrađeni u na neki način).

Treba napomenuti da su pozadinski poslovi čisto softverski objekti i ne mogu se 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 nepoznato kada je mnogo teže od običnih. Ugniježđeni pozivi, rukovanje greškama, kontrola nad onim što se dešava – sve postaje komplikovanije“, to će reći samo oni koji ne znaju kako pravilno koristiti mogućnosti platforme, ali ne i mi!

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

Korak 1. Kreirajmo novi sistem sigurnosti informacija za razvoj konfiguracije

Korak 2. U konfiguraciju ćemo dodati opći modul “Asinhroni rukovaoci”

Zašto smo dodali zajednički modul? Ovdje je sve jednostavno: za obavljanje asinhronih operacija u 1C: Enterprise 8 koriste se pozadinski poslovi, koji imaju svog upravitelja - „BackgroundTask Manager“. Ovaj objekt 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šti modul “Asinkroni rukovaoci” dodaćemo proceduru izvoza OurLongOperation()

Procedura OurLongOperation(Duration) Export // Simulacija dugoročne akcije (Trajanje sec.). OperationStartDate = CurrentDate(); Dok CurrentDate() - Datum početka operacije< Длительность Цикл КонецЦикла; КонецПроцедуры

Korak 4. Dodajte obradu „Koncept asinkronog programiranja“ u konfiguraciju (možete kreirati eksternu obradu)

Dodajte jedan atribut u obrazac:

Trajanje (broj)

i dva tima

Perform LongOperation;

Izvedite dugotrajnu operaciju asinhrono.

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

&Na klijentskoj proceduri Izvrši dugotrajnu operaciju(komanda) Izvrši dugotrajnu operaciju na serveru(); EndProcedure &OnServer Procedure ExecuteLongOperationOnServer() AsynchronousHandlers.OurLongOperation(Duration); Kraj procedure &na klijentskoj proceduri Izvrši dugotrajnu operaciju asinhrono (komanda) Izvrši dugotrajnu operaciju asinhrono na serveru (); Kraj procedure &na serverskoj proceduri Izvedite dugotrajnu operaciju asinhrono na serveru() Parametri = Novi niz; Parameters.Add(Duration); BackgroundTasks.Execute("AsynchronousHandlers.OurLongOperation", Parametri, Novi UniqueIdentifier, "Primjer koncepta asinhronog programiranja"); Kraj procedure

Korak 6. Pokrenimo i provjerimo!

rezultat:

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

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

Možemo provjeriti da se programski kod izvršava asinhrono gledajući dnevnik.

Možemo otkloniti programski kod koji radi u “pozadini” ako postavimo odgovarajuće svojstvo u parametrima 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 koristeći primjer obrade „Trenutnih poslova“.

Logika je sljedeća: kada se program pokrene, inicijalizira se radno područje početne stranice, gdje se može prikazati obrazac za obradu "Trenutni poslovi". Ovaj formular popunjava korisnikovo trenutno stanje i potrebno je vrijeme da ga ispuni. Ako programeri nisu imali mogućnost asinhronog izvršavanja koda, tada bi korisnički interfejs bio blokiran dok se obrazac za obradu popunjavao!

Analizirajmo programski kod forme.

Događaj obrasca “When CreatedOnServer” poziva proceduru “RunBackgroundTask” - to je ono što nam treba.

Bez ometanja nijansi, analizirajmo ovaj postupak

I ovdje vidimo da se koristi menadžer pozadinskog posla i njegova metoda “Run”. Imajte na umu da programeri pohranjuju jedinstveni ID za posao u pozadini.

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



U povezanoj proceduri Connectable_CheckTaskComplete() programeri pozivaju funkciju JobCompleted (TaskID)


Ova funkcija provjerava izvršenje pozadinskog posla prema identifikatoru.

Treba napomenuti da je BSP razvio opšte module za podršku dugoročnim operacijama servera.

Dakle, koncept asinkronog 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.

Upravljanje rutinskim zadacima 1C baza podataka iz ažuriranja

2018-11-20T15:18:30+00:00

U ovoj napomeni ćemo proći kroz mogućnosti ažuriranja za upravljanje rutinskim zadacima u bazama podataka.

Prije svega, u stavci “Više” -> “Upravljanje rutinskim zadacima...”:

U kontekstualnom meniju odabrane baze podataka (ili grupe baza podataka):

I konačno, u predlošcima za skupne skripte (ovo vam omogućava da izvršavate operacije na rutinskim zadacima iz skripte prema rasporedu):

Ovako izgleda dijalog za upravljanje rutinskim zadacima u bazama podataka:

Koje zadatke omogućava rješavanje u traženoj grupi baza podataka (ili jednoj bazi podataka)?

Izbor rutinskih zadataka

Imajte na umu da u nastavku možete odabrati listu rutinskih zadataka u mnogim operacijama:

Ali u dijalogu za odabir možda neće biti rutinskih zadataka posebno za vašu bazu podataka:

U tom slučaju možete navesti nazive zakazanih zadataka koji su vam potrebni u odjeljku "Vaši zadaci...", na primjer, ovako:

Nazivi za takve rutinske zadatke mogu se uzeti direktno iz izvještaja o svim rutinskim zadacima (o tome se raspravlja).

Prikazuje trenutni status zadataka

Da biste to učinili, idite na karticu "Povlačenje" i kliknite na dugme "Povuci...":

U rezultatima možemo vidjeti:

  1. Pokretanje novih zakazanih zadataka na 1C serveru je omogućeno ili onemogućeno.
  2. Lista rutinskih zadataka u bazi podataka.
  3. Njihov raspored.
  4. Poslovi su omogućeni ili onemogućeni.
  5. Ako je posljednje pokretanje zadatka imalo grešku, ova greška se prikazuje crvenom bojom pored zadatka.

Ako je potrebno, u postavkama funkcija možemo suziti listu zakazanih zadataka, a također prikazati samo omogućene zadatke:

Isključite sve ili neke zadatke

Da biste to učinili, idite na karticu "Isključi":

Za sve ili odabrane zakazane zadatke, polje za potvrdu "Koristi" će biti poništeno.

Evo rezultata za jednu bazu (kliknite za proširenje)

Uključite sve ili neke zadatke

Da biste to učinili, idite na karticu "Omogući":

Za sve ili odabrane planirane zadatke, polje za potvrdu "Koristi" će biti označeno.

Imajte na umu da je na ovoj kartici u donjem lijevom kutu dostupna zastavica "Napravi sigurnosnu kopiju baze podataka".

Evo rezultata za jednu bazu (kliknite za proširenje)

Upravljamo pokretanjem zakazanih zadataka na 1C serveru

Da biste to učinili, idite na karticu "1C server":

Odaberite "blokiraj" ili "odblokiraj" i kliknite na dugme "Pokreni".

Postavljanje rasporeda zadataka

Ali šta ako trebamo postaviti raspored za pokretanje zadatka (ili grupe zadataka) u više baza podataka odjednom?

Da biste to učinili, idite na karticu "Postavljanje rasporeda":

Postavljamo raspored (dijalog i njegove mogućnosti potpuno se podudaraju sa standardnim u samom 1C) i kliknemo "Prilagodi...".

Pokrećemo zadatke za izvršenje

Da biste to učinili, idite na karticu "Pokreni":

Odaberite tražene zadatke i kliknite na dugme "Pokreni":

Spremanje postavki zadatka u eksternu datoteku

Pretpostavimo da imamo idealno konfigurisane rutinske zadatke u jednoj od baza podataka i želimo da prenesemo ove postavke u sve ostale baze podataka.

Da bismo to učinili, prvo prenosimo sve postavke zadatka u idealnoj bazi podataka u eksterni fajl:

Vraćanje postavki zadatka iz vanjske datoteke

Zatim učitavamo ovu datoteku s postavkama zadatka u sve ostale baze podataka:

Samo imajte na umu da sam za ovaj zadatak (prijenos postavki posla iz jedne baze podataka u drugu) izabrao metodu podudaranja prema imenu posla, a ne prema internom identifikatoru.

Rastanke

Uopšte, to je sve što sam hteo da vam kažem. I lično vidim mnogo scenarija za korištenje novih funkcija, ali ovdje sam samo kratko prešao na glavne tačke.

Kreiranje rutinskog zadatka

Kreirajmo rutinski zadatak "Izvrši obradu".

Onemogućimo korištenje zakazanog zadatka kako se prilikom ažuriranja konfiguracije ne bi automatski pokrenuo.

Dodijelimo proceduru koja će se pokrenuti kada se pokrene rutinski zadatak:Modul RoutineTasks.RoutineTaskExecutionProcessing.

Sama procedura izgleda ovako:

Procedura RoutineTaskExecutionProcessing(Key) Izvoz

Parametri RoutineTasks.PerformProcessingWithParameters(Key);

Kraj procedure

Kreiramo priručnik za rutinske zadatke

Naš rutinski zadatak može pokrenuti mnoge pozadinske procese - po jedan za svaku obradu. Svaki zadatak na platformi 1C8 ima ključ. Ali metoda planiranog posla ne poznaje ključ pozadinskog posla, tako da trebate koristiti parametre pozadinskog posla. Kao rezultat toga, možemo vidjeti pozadinski posao u konzoli poslova, ali ne možemo ručno kreirati pozadinski posao iz ove konzole, jer poslovi s parametrima se ne kreiraju ručno.

Priručnik “Parametri planiranih zadataka” :

Requisites :

· CodeBefore Launch- neograničen niz - kod na 1C jeziku koji se mora izvršiti prije pokretanja.

· Obrada iz konfiguracije - red (100) - identifikator obrade iz konfiguracije

· Obrada iz direktorija - red (100) - veza do elementa direktorija “Spoljna obrada”, ako postoji u konfiguraciji

· Izvršite kroz 1C aplikaciju - Boolean - kreirat će se posebna 1C aplikacija i u njoj će se pokrenuti rutinski zadatak. Kreiran za 8.1, gdje nisu sve metode aplikacije dostupne na poslužitelju na kojem se izvodi planirani posao.

· Launch code- - neograničena linija - kod na 1C jeziku koji će se izvršiti kada se pokrene planirani zadatak.

Kreirajmo oblik elementa :

Klikom na „Kreiraj reg. zadatak" rutinski zadatak sa šifrom ključa kreira se programski:

Procedura BasicActionsFormCreateReglTask(Button)

Variable Job;

Ključ = AbbrLP(Kod);

Zadatak = RoutineTasks.CreateRoutineTask("PerformProcessing");

Task.Name = Ključ;

Job.Key = Ključ;

Parametri = Novi niz();

Parameters.Add(Key);

Task.Parameters = Parametri;

Task.Write();

Kraj procedure

Pokretanje planiranog zadatka

Svaki rutinski zadatak koji kreiramo ima ključ:

Ovaj ključ odgovara kodu u direktoriju “Parametri rutinskih zadataka” koristi se za pretraživanje pri pokretanju zadatka. Ako unos direktorija nije pronađen, zadatak se ne izvršava.

Dalje, ako je dat kodCodeBefore Launch tada će se ovaj kod izvršiti. Zatim, ako je varijabla Ispuni procijeni na false, zadatak neće biti dovršen. Varijabla dostupna za analizu Opcije, gdje je pohranjena veza do pronađenog elementa direktorija “Parametri rutinskih zadataka”.

Ovisno o odabranim vrijednostima detalja, pokrenut će se ili kod na 1C jeziku, ili će se pokrenuti obrada iz konfiguracije ili će se pokrenuti obrada iz standardne referentne knjige „Spoljna obrada“.

Za 1C81, izvršenje je omogućeno u novoj aplikaciji - tako da možete koristiti kod koji je dostupan samo na klijentu, uključujući korištenje eksterne obrade. Da biste to učinili, morate označiti potvrdni okvir "Pokreni kroz 1C aplikaciju". U suprotnom, planirani zadatak će se izvršiti na serveru.

Preporučujem da postavite korisnika u polje “Korisnik” novokreiranog rutinskog zadatka tako da se zadatak izvršava pod određenim pravima. Preporučujem da takvom korisniku date puna prava. koristim korisnika "robot».

Raspored rutinskih zadataka kreira se pomoću hiperveze “Raspored” iz obrasca rutinskog zadatka. Možete koristiti obradu "Rutinske konzole zadataka".

Povremeno brisanje registara (na primjer, registar informacija "Verzije objekta" u SCP konfiguraciji), izvođenje proračuna po rasporedu, dovršavanje dokumenata u određeno vrijeme - ovo nije potpuna lista radnji koje se mogu implementirati pomoću rutinskih zadataka 1C.

Kreirajte zadatak

Naš cilj nije da opišemo kod izvršnog modula, mi ćemo pokazati opšte principe rada i kreiranja rutinskog zadatka.

Rutinski zadatak je nezamjenjiv:

  1. Ako predmetni zadatak uključuje, kao jedan od uslova, potrebu za periodičnim izvršavanjem određenog algoritma;
  2. Ako se kod mora izvršiti bez obzira na radnje operatera i korisnika baze podataka;
  3. Ako pokretanje izvršne procedure ne zavisi od eksternih događaja koji se dešavaju sa objektima infobaze.

Da biste ga kreirali, morate otići na bazu podataka u načinu "Konfigurator". Zatim pronađite granu "Rutinski zadaci" u stablu konfiguracije, oni se nalaze na kartici "Općenito" i kliknite na dugme "Dodaj" (slika 1)

Pogledajmo pobliže prozor njegovih svojstava (slika 2):
Fig.2

  1. Naziv, sinonim i komentar - pravila i principi za popunjavanje ovih polja su slični za sve konfiguracijske objekte i nema potrebe da ih ponovo opisujemo;
  2. Naziv metode – procedura opšteg modula koja što preciznije opisuje traženi algoritam (klikom na dugme za odabir otvaraju se dostupne procedure čiji se prikaz sastoji od naziva opšteg modula i naziva procedure u različitim kolonama stola);
  3. Ključ – određuje ne toliko jedinstvenost planiranog zadatka, već jedinstvenost pozadinskog procesa koji je pokrenut na osnovu zadatka;
  4. Raspored – opisu ovog elementa posvetit ćemo poseban pasus našeg članka;
  5. Upotreba – izbor ovog polja određuje aktivnost zadatka, TRUE znači da će zadatak biti pokrenut i izvršen prema rasporedu;
  6. Unaprijed definirano – ako element ima ovaj potvrdni okvir, ovi zadaci se ne mogu izbrisati automatski kada se konfiguracija pohrani u bazu podataka;
  7. Broj ponavljanja - ako dođe do izuzetka tokom izvršavanja, biće ponovo pokrenut, da bi se izbeglo beskonačno ponavljanje, program ograničava broj ponovnih pokretanja;
  8. Interval ponovnog pokušaja – vrijeme u sekundama između ponovnih pokretanja nenormalno dovršenih poslova.

Pogledajmo pobliže raspored.

Raspored rutinskih zadataka

Fig.3

Prije svega, obratite pažnju na donji dio prozora, tu se prikazuju detaljne informacije s prikazom koliko često i u koje vrijeme će se zadatak obavljati.

Kartica "Općenito":

  • Datum početka zadatka;
  • Datum završetka obrade;
  • Učestalost ponavljanja zadataka.

Ako na ovoj kartici nisu navedeni datumi, tada se neće postaviti rok za zadatak.

Kartica “Dnevno” (slika 4)
Fig.4

Pored polja za unos za vrijeme početka i završetka zadatka i učestalost njegovog pokretanja u toku dana, sadrži i tabelarni dio za detaljnu konfiguraciju učestalosti izvršavanja.

Kartice “Dnevno” i “Nedeljno” sadrže informacije za odgovarajuće periode.

Karakteristike rada

U klijent-server verziji rada, izvršavanje rutinskih zadataka je određeno serverskim alatima. Iz administrativne konzole možete omogućiti ili onemogućiti mogućnost pokretanja zadataka za određenu bazu podataka.

Situacija je mnogo složenija s verzijom datoteke rada. Prije određenog izdanja platforme, pozadinske i rutinske procedure su se izvršavale samo ako je metoda ExecuteTaskProcessing() bila aktivirana kada je sistem pokrenut pod određenim korisnikom. U ovom slučaju, algoritmi su se periodično pokretali sve dok je korisnik koji je pokrenuo metodu bio u programu.

Trenutno je rad pozadinskih poslova u datotečnoj verziji rada ravnomjerno raspoređen među korisnicima ovlaštenim u bazi podataka ako je program pokrenut s dodatnim parametrom AllowExecuteSheduledJobs, taj proces će biti odgovoran za rutinsko održavanje.

Možete potpuno onemogućiti pozadinski i rutinski rad u bazi podataka koja radi u režimu datoteke tako što ćete izbrisati ili preimenovati datoteku DoNotCopy.txt u fascikli sa bazom podataka. Prisustvo ove datoteke govori platformi da se posao obavlja u originalu, a ne u kopiji baze podataka.

Osim toga, u standardnim 1C isporukama postalo je moguće upravljati planiranim radom direktno iz programa, bez ulaska u „Konfigurator“. U "ZUP" konfiguraciji, verzija 3.1.3.223, možete otvoriti obrazac za upravljanje iz menija Administracija->Održavanje->Rutinske operacije->Rutinski i pozadinski zadaci (slika 5)
Fig.5

Obrazac koji se otvara ima intuitivan interfejs i omogućava vam da:


Također možete započeti zadatak direktno iz obrasca.

mob_info