Uporabnik rutinskih opravil 1c. Rutinska opravila in opravila v ozadju. Ozadje in načrtovano opravilo – kaj je to in kje je konfigurirano?

Upravljanje rutinskih nalog baz podatkov 1C iz posodobitve

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

V tej opombi bomo preučili zmožnosti posodobitvenega programa za upravljanje rutinskih opravil v bazah podatkov.

Najprej v točki »Več« -> »Upravljanje rutinskih opravil ...«:

V kontekstnem meniju izbrane baze (ali skupine baz):

In končno, v predlogah za paketne skripte (to vam omogoča izvajanje operacij na rutinskih opravilih iz skripta po urniku):

Takole izgleda pogovorno okno za upravljanje rutinskih opravil v bazah podatkov:

Katere naloge omogoča reševanje v zahtevani skupini baz podatkov (ali eni bazi podatkov)?

Izbor rutinskih opravil

Upoštevajte, da lahko spodaj izberete seznam rutinskih opravil v številnih operacijah:

Toda v izbirnem pogovornem oknu morda ne bo rutinskih opravil posebej za vašo bazo podatkov:

V tem primeru lahko navedete imena načrtovanih opravil, ki jih potrebujete v razdelku »Vaša opravila ...«, na primer takole:

Imena za takšna rutinska opravila lahko vzamete neposredno iz poročila o vseh rutinskih opravilih (o tem razpravljamo).

Prikaže trenutno stanje opravil

Če želite to narediti, pojdite na zavihek "Dvigni" in kliknite gumb "Dvigni ...":

V rezultatih lahko vidimo:

  1. Zagon novih načrtovanih nalog na strežniku 1C je omogočen ali onemogočen.
  2. Seznam rutinskih opravil v bazi podatkov.
  3. Njihov urnik.
  4. Delovna mesta so omogočena ali onemogočena.
  5. Če je pri zadnjem zagonu opravila prišlo do napake, je ta prikazana rdeče poleg opravila.

Po potrebi lahko v nastavitvah funkcije zožimo seznam načrtovanih opravil in prikažemo samo omogočena opravila:

Izklopite vsa ali nekatera opravila

Če želite to narediti, pojdite na zavihek »Izklopi«:

Za vsa ali izbrana načrtovana opravila bo potrditveno polje »Uporabi« počiščeno.

Tukaj je rezultat za eno bazo (kliknite za razširitev)

Vključite vse ali nekatere naloge

Če želite to narediti, pojdite na zavihek »Omogoči«:

Za vsa ali izbrana načrtovana opravila bo izbrano potrditveno polje »Uporaba«.

Upoštevajte, da je na tem zavihku v spodnjem levem kotu na voljo zastavica »Varnostno kopiraj bazo podatkov«.

Tukaj je rezultat za eno bazo (kliknite za razširitev)

Upravljamo zagon načrtovanih opravil na strežniku 1C

Če želite to narediti, pojdite na zavihek »1C Server«:

Izberite »blokiraj« ali »odblokiraj« in kliknite gumb »Zaženi«.

Nastavitev urnika opravil

Kaj pa, če moramo nastaviti urnik za zagon naloge (ali skupine nalog) v več zbirkah podatkov hkrati?

Če želite to narediti, pojdite na zavihek »Nastavitev urnika«:

Nastavimo urnik (dialog in njegove zmožnosti popolnoma sovpadajo s standardnim v samem 1C) in kliknemo »Prilagodi ...«.

Zaženemo naloge za izvedbo

Če želite to narediti, pojdite na zavihek »Zaženi«:

Izberite zahtevana opravila in kliknite gumb »Zaženi«:

Shranjevanje nastavitev opravila v zunanjo datoteko

Predpostavimo, da imamo idealno konfigurirane rutinske naloge v eni od baz podatkov in želimo te nastavitve prenesti v vse druge baze podatkov.

Če želite to narediti, najprej naložimo vse nastavitve nalog v idealni bazi podatkov v zunanjo datoteko:

Obnovitev nastavitev naloge iz zunanje datoteke

Nato to datoteko z nastavitvami nalog naložimo v vse druge baze podatkov:

Upoštevajte le, da sem za to nalogo (prenos nastavitev opravila iz ene zbirke podatkov v drugo) izbral metodo ujemanja po imenu opravila in ne po notranjem identifikatorju.

Ločilne besede

Na splošno je to vse, kar sem vam hotel povedati. Sam vidim veliko scenarijev za uporabo novih funkcij, a tukaj sem le na kratko preletel glavne točke.

Pri vzdrževanju evidenc je pogosto treba občasno izvajati določena dejanja brez posredovanja uporabnika. Rutinska in ozadna opravila v 1C so tisti mehanizmi, ki so v ta namen predvideni v osmi različici programa in omogočajo:

  • Nastavite pravočasno dostavo dokumentov;
  • Izračunajte stanja in vsote;
  • Zagotovite pogostost pošiljanja;
  • Preverite in izbrišite nepomembne podatke.

Ozadje in načrtovano opravilo – kaj je to in kje je konfigurirano?

Rutinska naloga je mehanizem, vgrajen v 1C, ki vam omogoča, da konfigurirate in v skladu z določenim urnikom in pogostostjo izvedete določeno zaporedje dejanj.

Opravilo v ozadju je dejanje, ki ga ustvari rutinska operacija in ne zahteva neposredne udeležbe uporabnika.

V načinu konfiguratorja se ustvari rutinsko opravilo:

  • V oknu konfiguracijskega drevesa najdemo ustrezno vejo (slika 1);
  • Kliknite gumb za dodajanje;
  • V oknu, ki se odpre, morate določiti ime, ki vam omogoča identifikacijo predmeta v konfiguraciji;

Slika 2

  • Nasproti napisa »Urnik« (slika 2) je napis »Odpri«, s klikom na katerega se odpre okno za nastavitev časa in pogostosti izvajanja obdelovalca (slika 3);

Slika 3

  • Prav tako je potrebno izpolniti "Ime metode" (tu bo vneseno ime procedure, ki se kliče iz splošnega modula in opisuje algoritem obnašanja programa);
  • Polji »Ime« in »Ključ« omogočata združevanje predmetov v skupine;
  • Odkljukano potrditveno polje »Uporabi« označuje aktivnost načrtovane operacije;
  • “Preddefined” je treba nastaviti, če naj se upravljalnik zažene takoj po dodajanju v bazo podatkov, sicer se zagon lahko izvede iz ustrezne obdelave (več o tem spodaj);
  • Parametra »Število ponovnih poskusov« in »Interval ponovnih poskusov« opisujeta vedenje programa, če med izvajanjem opravila v ozadju pride do izjeme.

Tako lahko z uporabo mehanizma rutinskih operacij nastavite urnik in glavna dejanja opravil v ozadju. Poglejmo zdaj njihove značilnosti.

Značilnosti opravil v ozadju

Glavna značilnost tega mehanizma je, da proces v ozadju teče asinhrono.

Kaj to pomeni? Dejstvo je, da je pri modelu sinhronega dela, če se izvede kakršen koli algoritem, uporabniški vmesnik blokiran. V našem primeru lahko uporabnik nadaljuje z vnašanjem in urejanjem podatkov, tudi če se postopek izvaja. Model asinhronega programiranja vključuje ločevanje računalniških niti.

Tako lahko opravila v ozadju v 1C sprožijo svoje lastne procese in porazdelijo izračune po različnih strežnikih, vključenih v isto gručo.

Značilnosti dela v načinu odjemalec-strežnik

  • Načrtovanje in nadzor izvajanja izvaja planer iz strežniške gruče;
  • Če se pojavi zahteva za izvedbo, razporejevalnik poišče delovne procese gruče z minimalno obremenitvijo in jim razdeli naloge za izvedbo;
  • Vsak proces lahko izvede več vzporednih izračunov;
  • Ko naloga prispe, se proces poveže z bazo podatkov in v njej izvede algoritem;
  • Proces sporoči rezultate razporejevalniku.

Opravila v ozadju v datotečnem načinu

Pred različico platforme 8.3.3.641 je delo z opravili v ozadju v različici datoteke predstavljalo nekaj težav:

  1. Treba je bilo zagnati ločeno sejo, ki bi delovala 24 ur na dan in nadomestila razporejevalnik;
  2. Ta seja bi morala občasno izvajati metodo RunJobProcessing().

Po posodobitvi vsak zagon debelega in tankega odjemalca, če je v nastavitvah zagona (slika 4) v polju »Dodatno« naveden ključ AllowExecuteScheduledJobs, sproži dodatno nit, ki se povezuje z bazo podatkov, kar pa ne vpliva na uporabnikovo deluje na kakršen koli način, ampak izvaja samo naloge v ozadju.

Slika 4

Upoštevati je treba, da tudi v datotečni različici dela procesi v ozadju ne omogočajo interaktivnega dela z uporabnikom (servisna sporočila, opozorila in vprašanja ne bodo prikazana). To pomeni, da morajo biti kodirani, kot da bi se izvajali na strani strežnika.

Kako onemogočiti načrtovana opravila

Neuporabljene naloge lahko onemogočite tako, da preprosto počistite potrditveno polje »Uporabi« v lastnostih objekta.

V primeru, ko mora skrbnik prepovedati uporabo rutinskih operacij in operacij v ozadju za celotno bazo podatkov kot celoto (na primer, na strežniku je shranjenih več baz podatkov, od katerih je samo ena glavna, ostale pa se uporabljajo le za razvoj), je potrebno uporabiti pripomoček za upravljanje baze podatkov. Prav tako lahko označite potrditveno polje »Nastavi blokiranje rutinskih opravil« v bazi podatkov, ustvarjeni na strežniku.

Poleg tega imajo diski ITS posebno obdelavo »Task Console«, ki vam omogoča urejanje urnika procesov v ozadju in spreminjanje njihove dejavnosti.

Omogoča, da izvajamo poljubne izračune v sistemu neopazno za uporabnika, torej v ozadju. Poleg tega nam ta mehanizem omogoča paralelizacijo procesa izračuna. Postopek, ki se bo izvajal, lahko celo vzporedimo. Da bi to naredili, mora naše opravilo v ozadju izvajati več drugih opravil v ozadju. V tem primeru so procesi vzporedni in, če imamo večprocesorski, večjedrni sistem, bo naš algoritem deloval učinkovito. Po zagonu več procesov lahko sistemu povemo, da mora počakati na zaključek teh procesov, da nekako združi rezultat.

Na primer, v tipičnih konfiguracijah se med delom uporabnika izvajajo različne vrste opravil storitev v ozadju. To je mogoče dokazati z vnosi v dnevnik, ki beležijo dejstvo, da so bila takšna dejanja izvedena. Poleg tega to na noben način ne vpliva na uporabnikovo delo, preprosto jih ne opazi.

V idealnem primeru je opravilo v ozadju implementirano v različici odjemalec-strežnik, v tem primeru gre celotno breme na strežnik. Kar zadeva različico datoteke, je možno delo v ozadju, vendar ima nekaj posebnosti.

To bo sistem proizvedel, če ne boste upoštevali teh lastnosti in zagnali opravila v ozadju v datotečni različici informacijske baze.


Delo v ozadju 1C ima nekaj omejitev. Ker deluje na strani strežnika, ni možnosti interaktivnega dela z uporabnikom. Na primer, ne morete prikazati sporočila ali kakršne koli informacije. Vse te podatke je treba shraniti v informacijsko bazo in jih na nek način nadalje obdelati.
Če se obrnete na pomočnika za sintakso, lahko dobite podrobnejše informacije o opravilih v ozadju 1C. Tukaj je treba opozoriti, da je ta objekt izključno programska oprema in ni na noben način shranjen v bazi podatkov. To pomeni, da ustvarimo primerek razreda, inicializiramo lastnosti in ga zaženemo za izvajanje.

Katera orodja imamo za upravljanje opravil v ozadju? Ta pripomoček je metapodatkovni objekt "Upravitelj opravil v ozadju". Ta objekt ima metodo "teči", s to metodo se zažene opravilo v ozadju.

Ima naslednje parametre:
"Ime metode"- ime procedure ali funkcije, ki se izvaja, in mora biti procedura ali funkcija konteksta strežnika;

"Opcije"- niz parametrov, katerega število elementov mora ustrezati številu parametrov našega postopka/funkcije, podanega v parametru "Ime metode";

"Ključ"- določen ključ unikatnosti, ki je vrstica, po kateri sistem razume, ali je treba zagnati opravilo v ozadju ali pa se tako opravilo že izvaja;

"ime"- tukaj lahko določite poljuben opis naše metode.

Povratna vrednost je objekt "Opravilo v ozadju", ki vsebuje ime trenutne metode, trenutni ključ in več drugih lastnosti in metod. Ena takih metod je metoda "Počakaj dokončano". Njegov namen je, da lahko sistemu rečemo, naj ne naredi ničesar, dokler opravilo v ozadju ni končano.

Posel v ozadju 1C 8.2, 8.3 - Primer uporabe

Dajmo primer dela z ozadnimi opravili 1C. Najprej bomo ustvarili preprost algoritem, ki bo za kratek čas naložil sistem 1C tako, da trenutno ne moremo storiti ničesar.

Za to:

1. Ustvarimo skupni modul "Rukovalci opravil v ozadju", ki bo preveden na strani strežnika;


2. V njem bomo opisali postopek izvoza "ProduceBackgroundCalculation(Parameter)", ki sprejme en parameter tipa niz;

Procedure PerformBackgroundCalculation(Parameter) ExportStartTime = CurrentDate() ; Medtem ko CurrentDate() - začetni čas< = 6 Цикл КонецЦикла ; КонецПроцедуры Процедура КнНажатие() ОбработчикиФоновыхЗаданий. ПроизветиФоновоеВычисление("Nek parameter") ; EndProcedure
pripravljena Zdaj, ko začnete obdelavo in pritisnete gumb, sistem zamrzne za nekaj sekund, med katerimi ni mogoče storiti ničesar. Točno to smo morali narediti.

Zdaj bomo zagotovili, da se ti izračuni izvajajo v ozadju, to je, da se naloga v ozadju 1C 8.2, 8.3 izvaja, vendar nas ne moti.

Za to:

1. Pri obdelavi v dogodku klika gumba zapišite naslednjo kodo.

Postopek KnPress() Parametri = Nova matrika; Opcije. Dodaj( "Nek parameter") ; BackgroundTask. Zaženi ( "Obravnavalniki opravil v ozadju. Izvedite računanje v ozadju", Parametri, Nov UniqueIdentifier, "test") ; EndProcedure

Tukaj posredujemo ime skupne procedure modula kot prvi parameter in niz parametrov kot drugi. Tretjemu parametru je treba posredovati unikaten ključ, četrtemu parametru pa opis našega postopka.

" V njem si bomo ogledali nove funkcije, ki se ne nanašajo na sistemski vmesnik, vendar bistveno razširijo ponujeno funkcionalnost platforme 1C:Enterprise 8.

Uporabnost

Članek obravnava platformo 1C:Enterprise različice 8.3.4.437. Vse funkcionalnosti, opisane v članku, so posodobljene na različico 8.3.11.

Druge novosti v 1C:Enterprise 8.3

Nadaljujmo s seznanitvijo z novostmi platforme 1C:Enterprise 8.3.

Ozadja in rutinska opravila v podatkovni bazi datotek

V številnih tipičnih konfiguracijah platforme 8.2 obstajala je konstanta, ki je označevala uporabnika, pod katerim so bile naloge izvedene v različici datoteke.

Ko se je sistem začel izvajati pod tem uporabnikom, je bil povezan upravljalnik čakanja, ki je klical metodo vgrajenega jezika z določeno periodičnostjo ExecuteTaskProcessing().

Ta pristop je povzročil dodatne težave in nevšečnosti pri uporabi rutinskih opravil v zbirki podatkov datotek.

To je lahko še posebej kritično pri delu s konfiguracijami, kot je npr "Celovita avtomatizacija" oz "Upravljanje proizvodnega podjetja", pri čemer imajo regulativne naloge precej pomembno vlogo.

Če je to datoteka IB, potem
=
Constants.UserForExecutingRoutineTasksInFileVariant.Get();
če chValueVariable(“glCurrentUser”) =
UserTo ExecuteTaskRegl Potem
// z intervalom sekund pokličemo proceduro za delo z rutinskimi opravili
SupportRegularTaskForFileVersion();
IntervalForPoll=
Constants.IntervalForPollingRoutineTasksInFileVariant.Get();
če IntervalForPoll= Nedefinirano
ALI IntervalForPoll= 0 Potem
IntervalForPoll= 60 ;
EndIf ;
ConnectWaitHandler(»Podpora za RoutineTaskForFileVersion«,
IntervalForPoll);
EndIf ;
EndIf ;

Na peronu 8.3 implementiral delo ozadja in rutinskih opravil v datotečni informacijski bazi brez uporabe klica metode globalnega konteksta ExecuteTaskProcessing().

Ozadja in rutinska opravila se izvajajo neposredno v eni od odjemalskih aplikacij (tanek, debel odjemalec) ali prek razširitve spletnega strežnika.

Opravilo v ozadju, ki ga začne seja, izvede ista odjemalska aplikacija, ki ga je sprožila.

Opravila v ozadju se izvajajo zaporedno, tj. Na eni odjemalski aplikaciji se lahko naenkrat izvaja le ena naloga v ozadju (vključno z rutinskimi).

Rutinska opravila izvaja samo ena odjemalska aplikacija. Za nadzor zagona načrtovanih opravil se uporablja tipka ukazne vrstice /AllowExecuteScheduledJobs.

Rutinska opravila izvaja prva odjemalska aplikacija po vrstnem redu zagona, ki ji izvajanje rutinskih opravil ni prepovedano (za prepoved seje mora biti seja zagnana s parametrom ukazne vrstice /AllowExecuteScheduledJobs -Izklopljeno).

Ko se ta seja konča, se izvajanje premakne na katero koli od preostalih sej v teku.

Če zagonska vrstica odjemalske aplikacije izrecno označuje potrebo po zagonu rutinskih opravil (v ukazni vrstici je navedeno /AllowExecuteScheduledJobs -Vsili), potem se na njem začnejo izvajati rutinske naloge, ne glede na prisotnost drugih sej.

Rutinska opravila se obdelajo enkrat na 60 sekund.

Upoštevajte, da so se rutinske naloge aplikacijske rešitve (v datotečni različici) začele izvajati ne prej kot 1 minuto po zagonu odjemalske aplikacije. Od različice 8.3.8 se ta čas podvoji, zato se rutinska opravila začnejo izvajati največ 2 minuti po zagonu odjemalca (v datotečni različici).

Ta odločitev je posledica zmanjšanja zamude pri zagonu aplikacije. Poleg tega je izdaja 8.3.7 dodala možnost hitrega ugotavljanja, ali je trenutna seja seja opravila v ozadju. To se izvaja z uporabo nove metode globalnega konteksta GetCurrentInfoBaseSession() in nove metode za sejo informacijske baze GetBackgroundTask().

Spodaj je koda, ki ponazarja zgornje:

Za povečavo kliknite na sliko.

Izračun kontrolnih vsot

Platforma zdaj vključuje mehanizme za izračun kontrolnih vsot podatkov.

Naj spomnimo, da je kontrolna vsota (hash) vrednost, izračunana iz nabora podatkov z uporabo določenega algoritma in se uporablja za preverjanje celovitosti podatkov med prenosom ali shranjevanjem.

Z zgoščevanjem lahko preverite istovetnost podatkov (prepričati se morate na primer, da datoteka pri prenosu ni bila poškodovana; preverite, ali je bila datoteka spremenjena, in če je, jo znova naložite v bazo podatkov) .

V ta namen je bil v platformo implementiran objekt HashingData, na voljo na strežniku, v debelem odjemalcu, zunanji povezavi in ​​tudi na strežniku mobilnih aplikacij.

Ta objekt ima dva načina: Dodaj() in Dodaj datoteko(), ki posodabljajo zgoščeno vsoto ob upoštevanju podatkov, posredovanih v parametrih.

Platforma 8.3.4.437 podpira izračun naslednjih zgoščevalnih funkcij: CRC32, MD5, SHA1, SHA256. Toda funkcije SHA1 in SHA256 niso podprte na mobilni platformi.

Poglejmo preprost primer. Predpostavlja se, da je na strežniku v imeniku programa datoteka " ragent.exe" Treba je izračunati MD5-sum za to datoteko.

Za to bomo ustvarili zunanjo obdelavo, na obrazcu katere bomo postavili ukaz Izračunaj. Obravnavalnik vsebuje naslednjo kodo:

&OnClient
Postopek Izračun (ukaz)
Rezultat = CalculateOnServer();
Poročilo(niz(rezultat));
EndProcedure
&Na strežniku
funkcija CalculateOnServer()
Hash = Novo HashingData(HashFunction.MD5);
Hash.AddFile(KatalogProgrami() + “ragent.exe” );
Vrni Hash.HashSum;
EndFunction

V izdaji platforme 8.3.10+ v metodi Dodaj() predmet HashingData Postala je možna uporaba toka binarnih podatkov, kar je močno poenostavilo njihovo uporabo pri reševanju različnih aplikativnih problemov posodabljanja zgoščenih vsot.

Delo z zaščitenimi različicami protokolov SMTP/POP3

Na peronu 8.3 postala je možna uporaba zaščitenih različic protokolov SMTP/POP3(obstajajo pogoji SMTPS/POP3S oz SSLSMTP/SSLPOP3).

Za objekt InternetMailProfile implementirane nove lastnosti:

  • Uporabite SSLSMTP;
  • Uporabite SSLPOP3;
  • Samo SecureAuthenticationSMTP;
  • Samo POP3 Secure Authentication.

Lastnosti Preverjanje pristnosti SMTP in Preverjanje pristnosti POP3 predmet InternetMailProfile, kot tudi transferji Metoda preverjanja pristnosti SMTPA in Metoda preverjanja pristnosti POP3 uporaba ni priporočljiva - podprti so zaradi združljivosti.

Uporaba varnega protokola SMTPS omogoča pošiljanje pošte iz 1C uporabo poštnega predala Google.

Poglejmo si primer. Na obrazcu bomo postavili polja za vnos predmeta pisma in naslova prejemnika ter za vnos besedila pisma - polje oblikovanega dokumenta.

Za povečavo kliknite na sliko.

Ko pritisnete gumb Pošlji Izvedena bo naslednja koda:

&OnClient
Postopek Pošlji (ukaz) pošte = Nova internetna pošta; Profil = Novo InternetMailProfile;
Profile.SMTPServerAddress= “smtp.googlemail.com” ;
Profil.UporabnikSMTP= “[e-pošta zaščitena]” ;
Profil.GesloSMTP= “GESLO” ;
Profil.UporabiSSLSMTP= res;
Profile.SMTPPort = 465 ; Poskus
Mail.Connect(Profil);
Izjema
Poročilo(Opis napake());
Vrnitev ;
EndAttempt ; MailMessageText= “” ;
Priloge = Nova struktura;
Text.GetHTML(MailMessageText, priloge); MailMessage= Novo InternetMailMessage;
MailMessage.Recipients.Add(Komu);
MailMessage.Subject= Predmet;
MailMessage.Texts.Add(MailMessageText,
MailMessageTextType.HTML); Mail.Send ( MailMessage); Pošta. Prekini povezavo();
EndProcedure

Upoštevajte, da v našem primeru, če strežnik SMTP ni mogel poslati e-pošte prejemniku(-om), potem metoda Mail.Send(MailMessage) vrgel izjemo. To je razvijalcem povzročilo določene neprijetnosti, ker ... Razlog za uvedbo izjeme ni bil očiten.

V različici 8.3.9 se je to vedenje spremenilo in zdaj metoda Send() vrne ujemanje, katerega ključ je prejemnik in katerega vrednost je diagnostika iz poštnega strežnika. To vam omogoča, da natančno določite razloge za neuspešno pošiljanje e-poštnega sporočila vsakemu prejemniku. V načinu združljivosti z različico 8.3.8 se vedenje ni spremenilo.

Dvostranski tisk

Na peronu 8.2 Sama platforma ni upravljala dvostranskega tiskanja; to funkcijo je bilo mogoče nadzorovati samo z gonilnikom tiskalnika.

Na peronu 8.3 postalo je mogoče nadzorovati obojestransko tiskanje za preglednico, grafični diagram (iz vgrajenega jezika in interaktivno) in tekstovni dokument (samo interaktivno).

Sistemska oštevilčenja so se pojavila v vgrajenem jeziku:

  • Vrsta dvostranskega tiskanja(Brez, FlipUp, FlipLeft);
  • (Auto, MirrorTop, MirrorLeft, Ne uporabljaj).

In za predmete TabularDocument in Grafična shema pojavile lastnosti Dvostranski tisk in Menjava razporeditve strani, s katerim lahko spremenite postavitev natisnjenih strani.

V različici platforme 8.3.9 ima sistemsko oštevilčenje DuplexPrintType dodano novo vrednost UsePrinterSettings. Če izberete to vrednost, lahko uporabite nastavitve tiskalnika pri tiskanju sistemskih dokumentov. V načinu združljivosti 8.3.8 je vedenje nespremenjeno in ustrezne nastavitve tiskalnika so prezrte.

Bolj funkcionalen je dialog za objavo informacijske baze na spletnem strežniku. Zdaj vam objava iz konfiguratorja omogoča nastavitev vseh parametrov datoteke privzeto.vrd.

Za pogovorno okno za objavo spletnega odjemalca in spletnih storitev preko konfiguratorja je implementirano naslednje:

  • možnost privzetega nadzora razpoložljivosti spletnih storitev (atribut pointEnableCommon element ws);
  • zmožnost nadzora nad izvajanjem opravil v ozadju v različici datoteke (atribut dovoli izvajanje načrtovanih opravil element ws).

Če potrditveno polje »Privzeto objavi spletne storitve« na zaznamku “Osnovno” nameščen, potem bodo ob posodabljanju objave izbrane spletne storitve samodejno objavljene.

V nasprotnem primeru bodo spletne storitve označene kot neobjavljive. Ta zastavica ustreza atributu pointEnableCommon element ws v datoteki privzeto.vrd, namenjen nastavitvi spletnega odjemalca in spletnih storitev.

Atribut pointEnableCommon element ws je odgovoren za možnost uporabe v tej informacijski bazi spletnih storitev, ki so objavljene brez izrecne navedbe dovoljenja za uporabo (atribut omogočiti element točka).

Če ima atribut vrednost prav, nato vse spletne storitve, za katere vrednost atributa ni izrecno podana omogočiti element točka, bodo dovoljeni za uporabo.

V nasprotnem primeru bo uporaba tovrstnih spletnih storitev prepovedana.

nastavitve »Opravila v ozadju v datotečnem načinu« ujema se z atributom dovoli izvajanje načrtovanih opravil ws v datoteki privzeto.vrd.

Atribut dovoli izvajanje načrtovanih opravil nadzira zmožnost izvajanja rutinskih nalog s končnico spletnega strežnika za datotečno različico informacijske baze.

Atribut ima lahko naslednje vrednosti:

  • izklopljeno– v tem primeru razširitev spletnega strežnika ne bo izvajala rutinskih nalog. Rutinska opravila bo izvajala odjemalska aplikacija (če ta obstaja), ki se na informacijsko bazo poveže neposredno, brez uporabe spletnega strežnika.
  • sila– v tem primeru bo razširitev spletnega strežnika opravljala rutinske naloge.
    Če vrednost tega atributa ni navedena, bo rutinska opravila izvajala aplikacija, s katero bo vzpostavljena prva povezava z informacijsko bazo.

Okno za objavljanje na spletni storitvi je v trenutni izdaji platforme postalo še bolj priročno in ergonomsko. Zdaj so parametri, ki opisujejo avtentikacijo OpenID, postavljeni na ločen zavihek.

Oštevilčenje objektov informacijske baze

Na peronu 8.3 Prenovljen je mehanizem za samodejno oštevilčenje objektov informacijske baze. Edinstvenost številke ali kode (vključno s tistimi, pridobljenimi kot rezultat samodejnega generiranja številke ali kode) se vedno preverja pri snemanju predmeta.

V besedilo sporočila o kršitvi enoličnosti številke ali kode je dodana navedba, katera številka ali koda ni unikatna.

Spremenila se je uporaba proste številke ali kode. Nova številka ali koda se dodeli brez uporabe sproščenih številk ali kod, če obstajajo že izdane številke ali kode z večjo (po vrstnem redu) predpono številke ali kode.

Agregatne funkcije izraznega jezika sistema za sestavo podatkov

Nove agregatne funkcije so implementirane v izraznem jeziku sistema za sestavljanje podatkov:

  • Vsak();
  • Kaj();
  • Standardni odklon populacije();
  • Standardni odklon vzorca();
  • VarianceSamples();
  • VariancePopulacije();
  • CovariancePopulation();
  • Vzorčna kovarianca();
  • Korelacija();
  • Naklon regresije();
  • RegressionSegment();
  • RegressionCount();
  • RegresijaR2();
  • RegresijskopovprečjeX();
  • RegresijaPovprečjeY();
  • RegresijskopovprečjeSXX();
  • RegressionAverageSYY();
  • RegresijskopovprečjeSXY().

Kot pove že ime, gre za statistične funkcije, kar pomeni, da imajo razvijalci možnost ustvarjanja kompleksnih poročil, ne da bi morali razvijati postopke za izračun statističnih podatkov.

Za povečavo kliknite na sliko.

Kot je razvidno iz slike, na spustnem seznamu ni novih funkcij, vendar če jih vnesete ročno, ne bo sporočila o napaki in poročilo bo ustvarjeno:

Zanimiva je tudi nova funkcija RazvrstitevABC(). Rezultat funkcije bo številka razreda, začenši z 1 (1 ustreza razredu A, 2 razredu B, 3 razredu C itd.).

Pokažimo, kako ta funkcija deluje. Ustvarimo novo zunanje poročilo "Klasifikacija blaga" na podlagi zahteve:

IZBERI
Poraba izdelkaIzdelki.Izdelek,
Poraba izdelkaIzdelki.Količina
OD
Dokument. Poraba blaga. Blago KAKO Poraba izdelkaIzdelki

Definirajmo novo izračunano polje Razred:

Za povečavo kliknite na sliko.

Konfigurirajmo vire na naslednji način:

Za povečavo kliknite na sliko.

V uporabniškem načinu je poročilo videti takole:

Na koncu ugotavljamo, da se od izdaje do izdaje na platformi 1C 8.3 mehanizem ACS nenehno izboljšuje in izpopolnjuje in v okviru našega članka o novincih teh sprememb ni mogoče predstaviti v celoti. Da, to se zdi nepotrebno, saj lahko pri delu na trenutni različici platforme vedno uporabite različne sisteme pomoči, ki vam bodo pomagali analizirati ta ali oni vidik delovanja tega mehanizma.

Poleg tega ne pozabite na naš ločen tečaj Profesionalni razvoj poročil v 1C 8.3 o sistemu za sestavo podatkov, ki do atoma razčleni vse tankosti in pasti pri delu s tem mehanizmom. Oglejte si predstavitev sami.

Torej, povzamemo vmesne rezultate. Do te točke smo se seznanili z novimi zmožnostmi Taxi vmesnika in upravljanih obrazcev ter z nekaterimi doslej neomogočenimi zmožnostmi same platforme. Zdaj je čas, da vidimo, katere priročne funkcije so postale na voljo razvijalcu v konfiguratorju.

Koncept asinhronega programiranja

Koncept asinhronega programiranja je, da rezultat funkcije ni na voljo takoj, ampak čez nekaj časa v obliki nekega asinhronega (ki krši običajni vrstni red izvajanja) klica.

Tisti. Glavna ideja asinhronega programiranja je izdati posamezne klice metod in vzporedno nadaljevati z drugim delom, ne da bi čakali, da se klici končajo.

Nekatere metode, ki zmanjšujejo verjetnost izjem, ne potrebujejo asinhronega pristopa, druge pa ga zahtevajo na samem začetku razvoja.

Kot je razvidno iz grafov, pri sinhronem modelu programiranja ni koeficienta uporabnih interaktivnih dejanj uporabnika, saj sistem blokira uporabniški vmesnik, pri asinhronem modelu pa uporabnik nadaljuje z aktivnim delom v sistemu.

Ko se izvaja sinhrono, ima aplikacija samo eno nit. Z modelom asinhronega programiranja lahko izvajate več niti vzporedno in se odzivate na nova uporabniška dejanja, ko se izvajajo. Ko je n-nit izvedena, prikažete rezultat na zaslonu.

Naloge v ozadju v 1C:Enterprise 8

V 1C:Enterprise 8 so opravila v ozadju zasnovana za asinhrono izvajanje aplikacijskih nalog. Ustvarijo lahko podrejena opravila v ozadju, na primer za vzporedno izvajanje kompleksnih izračunov v različnih delujočih strežnikih gruče v načinu delovanja odjemalec-strežnik.

Možno je omejiti izvajanje opravil v ozadju, ki imajo enake metode na podlagi določenega merila aplikacije. Programsko ustvarjanje in upravljanje opravil v ozadju je možno iz katerekoli uporabniške povezave s sistemsko informacijsko bazo. Opravilo v ozadju se izvaja v imenu uporabnika, ki ga je ustvaril.

Mehanizem nalog deluje tako v načinu delovanja odjemalec-strežnik kot tudi v datotečnem načinu delovanja, vendar so zmožnosti za upravljanje in izvajanje nalog v obeh različicah nekoliko drugačne.

Možnost odjemalec-strežnik

V različici odjemalec-strežnik razporejanje opravil izvaja razporejevalnik opravil, ki se fizično nahaja v upravljalniku gruče.

Razporejevalnik občasno preveri, ali so bile prejete zahteve za izvajanje opravil v ozadju. Če obstajajo opravila, ki jih je treba izvesti, razporejevalnik določi najmanj obremenjene delovne procese v gruči in vsakemu izmed njih zaporedno dodeli svojo nalogo za izvedbo. Tako lahko isti delovni proces potencialno izvaja več opravil vzporedno. Ko delovni proces prejme opravilo, ta vzpostavi povezavo z informacijsko bazo in izvede opravilo znotraj te povezave. Ko je opravilo končano, delovni proces obvesti načrtovalca, ali je opravilo uspešno ali neuspešno zaključeno.

Možnost datoteke

Od različice platforme 8.3.3.641 so razvijalci bistveno poenostavili delo z opravili v ozadju v datotečni različici.

Prej je bilo za samodejno izvajanje nalog potrebno zagnati ločeno dodatno sejo 1C:Enterprise, ki se uporablja kot načrtovalec opravil. In v tej seji je bilo treba občasno izvajati vgrajeno jezikovno metodo ExecuteTaskProcessing(). Ta pristop je bil precej okoren, nepriročen in je močno omejeval uporabo ozadja in rutinskih opravil v datotečni različici dela.

Zdaj je vse postalo veliko lažje. Če se zažene tanek ali debel odjemalec in tudi če ima spletni strežnik povezave odjemalca, se v vsaki od teh aplikacij samodejno zažene druga nit s povezavo do baze podatkov. Te niti se ukvarjajo z izvajanjem opravil v ozadju in rutinskih nalog.

Vsaka od naštetih aplikacij opravlja svoje naloge v ozadju. Če je aplikacija sprožila več opravil v ozadju, se ta izvajajo zaporedno v vrstnem redu, kot so bila prejeta.

Očitna pomanjkljivost delovnih mest v ozadju 1C: ker se izvajajo na strani strežnika, ni možnosti interaktivnega dela z uporabnikom (npr. nemogoče je prikazati sporočilo ali kakšno drugo informacijo; vsi ti podatki morajo biti shranjeni v informacijski bazi in nadalje obdelani v na nek način).

Upoštevati je treba, da so opravila v ozadju izključno programski objekti in jih ni mogoče shraniti v bazo podatkov. To pomeni, da lahko samo ustvarimo primerek razreda, inicializiramo njegove lastnosti in ga zaženemo za izvajanje.

Primer izvajanja asinhrone kode v 1C:Enterprise 8

»Pisanje programov, v katerih pride rezultat klica funkcije neznano kdaj, je veliko težje od navadnih. Ugnezdeni klici, obravnavanje napak, nadzor nad dogajanjem - vse postane bolj zapleteno,« bodo to rekli le tisti, ki ne znajo pravilno uporabljati zmogljivosti platforme, ne pa tudi mi!

Pokažimo preprostost in eleganco izvajanja asinhrone kode v 1C:Enterprise 8!

Korak 1. Ustvarimo nov sistem informacijske varnosti za razvoj konfiguracije

2. korak V konfiguraciji bomo dodali splošni modul »Asinhroni upravljalniki«

Zakaj smo dodali skupni modul? Tukaj je vse preprosto: za izvajanje asinhronih operacij v 1C:Enterprise 8 se uporabljajo opravila v ozadju, ki imajo svojega upravitelja - »BackgroundTask Manager«. Ta objekt ima metodo »Zaženi«, s pomočjo katere se zažene naloga v ozadju.

Obrnimo se k pomočniku za sintakso.

Zato bomo potrebovali skupni modul.

3. korak V splošnem modulu “Asinhroni upravljalniki” bomo dodali izvozni postopek OurLongOperation()

Procedure OurLongOperation(Duration) Export // Simulacija dolgoročne akcije (Duration sec.). Začetni datum operacije = Trenutni datum (); Medtem ko CurrentDate() - Začetni datum operacije< Длительность Цикл КонецЦикла; КонецПроцедуры

4. korak V konfiguracijo dodajte obdelavo »Koncept asinhronega programiranja« (ustvarite lahko zunanjo obdelavo)

V obrazec dodajte en atribut:

Trajanje (število)

in dve ekipi

Izvedite dolgo operacijo;

Izvedite dolgo-dolgo operacijo asinhrono.

5. korak V skladu s pomočnikom za sintakso izpolnite modul obrazca

&Na odjemalskem postopku Izvedi dolgotrajno operacijo (ukaz) ExecuteLong-RunningOperationOnServer(); EndProcedure &OnServer Procedure ExecuteLongOperationOnServer() AsynchronousHandlers.OurLongOperation(Duration); Konec postopka &Na odjemalskem postopku Izvedi dolgotrajno operacijo asinhrono (ukaz) Izvedi dolgotrajno operacijo asinhrono na strežniku (); Konec postopka &Na strežniku Postopek Izvedi dolgotrajno operacijo asinhrono na strežniku() Parameters = New Array; Parameters.Add(Duration); BackgroundTasks.Execute("AsynchronousHandlers.OurLongOperation", Parameters, New UniqueIdentifier, "Primer koncepta asinhronega programiranja"); EndProcedure

6. korak Zaženimo in preverimo!

rezultat:

Če kliknemo na gumb »Izvedi dolgo operacijo«, je uporabniški vmesnik blokiran za »Trajanje« sekund;

Če kliknemo na gumb “Izvedi dolgotrajno operacijo asinhrono”, potem uporabniški vmesnik ni blokiran in programska koda se izvaja vzporedno.

Ali se programska koda izvaja asinhrono, lahko preverimo tako, da pogledamo dnevnik.

Programsko kodo, ki teče v “ozadju”, lahko razhroščimo, če nastavimo ustrezno lastnost v parametrih za odpravljanje napak.

Primer izvajanja asinhrone kode v 1C:Enterprise 8 z uporabo BSP

Oglejmo si primer implementacije koncepta asinhronega programiranja v 1C:Enterprise 8 v BSP na primeru obdelave »Tekoče zadeve«.

Logika je naslednja: ko se program zažene, se inicializira delovno področje začetne strani, kjer se lahko prikaže obrazec za obdelavo »Tekoče zadeve«. Ta obrazec se izpolni po trenutnih zadevah uporabnika, izpolnjevanje pa traja nekaj časa. Če razvijalci ne bi imeli možnosti asinhronega izvajanja kode, bi bil uporabniški vmesnik blokiran ves čas izpolnjevanja obrazca za obdelavo!

Analizirajmo programsko kodo obrazca.

Dogodek obrazca "When CreatedOnServer" pokliče proceduro "RunBackgroundTask" - to je tisto, kar potrebujemo.

Ne da bi nas motili nianse, analizirajmo ta postopek

In tukaj vidimo, da sta uporabljena upravitelj opravil v ozadju in njegova metoda »Zaženi«. Upoštevajte, da razvijalci shranijo edinstven ID za opravilo v ozadju.

Za to razvijalci uporabljajo metodo ConnectWaitHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>).



V povezanem postopku Connectable_CheckTaskComplete() razvijalci imenujejo funkcijo Opravilo dokončano (ID opravila)


Ta funkcija preverja izvajanje opravila v ozadju po identifikatorju.

Opozoriti je treba, da je BSP razvil splošne module za podporo dolgoročnih operacij strežnika.

Tako koncept asinhronega programiranja v 1C:Enterprise 8 nekoliko poveča kompleksnost reševanja problemov za razvijalca, vendar bistveno izboljša funkcionalnost programa z vidika uporabnika.