Rutinski i pozadinski zadaci. Rutinski i pozadinski zadaci Kreirajte rutinski zadatak za 1s 8.2

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 poslužiteljima 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 izvodi 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 konfiguraciji ć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(naredbu) 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 pozadinski upravitelj poslova 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.

Kako ubrzati rad u 1C: Accounting 8.3 (izdanje 3.0) ili onemogućiti rutinske i pozadinske zadatke

2019-01-15T13:28:19+00:00

Oni od vas koji su već prešli na novo izdanje 1C: Računovodstva 8.3 (izdanje 3.0) primijetili su da je postalo sporije od 2. Neka čudna usporavanja, beskrajni pozadinski zadaci nekoliko puta dnevno, za koje niko nije tražio od nje bez našeg znanja.

Računovođe su mi odmah nakon tranzicije rekli da je novo izdanje 1C: Računovodstva 3.0 potpuno sporo u odnosu na prethodne! I jednostavno je nemoguće raditi.

Počeo sam to istraživati ​​i vrlo brzo otkrio da su glavni uzrok zamrzavanja i naknadnog nezadovoljstva korisnika rutinski i pozadinski zadaci, od kojih su mnogi uključeni po defaultu, iako za ogromnu većinu računovođa za njima nema potrebe.

Pa, na primjer, zašto trebamo pokretati zadatak „Izvlačenje teksta“ stotinu puta dnevno ako ne izvršimo potpunu pretragu (računovođe, ne brinite) po svim objektima u našoj bazi podataka.

Ili zašto stalno preuzimati kurseve ako nemamo valutne transakcije ili ih radimo povremeno (a prije toga sami možemo kliknuti na dugme download rates).

Isto važi i za stalni pokušaj 1C da se poveže sa sajtom i proveri i ažurira bankarske klasifikatore. Za što? I sam ću pritisnuti dugme da ažuriram klasifikatore ako ne pronađem pravu banku po njenom BIC-u.

Kako to učiniti korak po korak u nastavku.

1. Idite na odjeljak "Administracija" i odaberite "Održavanje" () na akcijskoj ploči:

2. U prozoru koji se otvori pronađite i odaberite “Rutinski i pozadinski zadaci”:

3. Otvorite svaki zadatak koji ima "Uključeno" u koloni "Uključeno". tu je zura.

4. Poništite izbor "Omogućeno" i kliknite na dugme "Sačuvaj i zatvori".

5. Uradite to sa svakim od uključenih zadataka i uživajte u novom izdanju. Sve u svemu, po mom mišljenju, mnogo je bolji od dva.

Istovremeno, platforma će i dalje omogućiti neke od zakazanih zadataka koje ste onemogućili.

Vjerovatno je svaki 1C 8.3 programer prije ili kasnije morao postaviti izvršavanje određenih zadataka po rasporedu. U nastavku ću dati detaljan opis ovih mehanizama, nadam se da će ovo biti korisne informacije za početnike 1C programera. Ovo je vrlo zgodno, jer ne zahtijeva ljudsku akciju, rutinski zadatak se konfigurira jednom i radi prema vašem rasporedu.

Naći ćete detaljne upute koristeći primjer u nastavku.

Šta su rutinski i pozadinski zadaci u 1C

  • Planirani zadaci je poseban mehanizam 1C Enterprise 8.3 dizajniran da izvrši određenu radnju prema datom rasporedu.
  • Pozadinski posao- objekti generirani rutinskim zadatkom koji izravno izvode namjeravanu radnju bez sudjelovanja korisnika ili 1C 8.2 programera.

Mehanizam zakazanih i pozadinskih poslova radi u klijent-server modu (SQL), zahvaljujući funkcionalnosti DBMS-a. Ako imate bazu podataka, zadatak se također može konfigurirati, ali po malo drugačijem principu.

Postavljanje pozadinskih poslova u 1C klijent-server načinu rada

Prvo, napravimo novi objekat metapodataka - rutinski zadatak. Svoj zadatak ću nazvati “Učitavanje kurseva valuta”. Pogledajmo paletu svojstava ovog konfiguracijskog objekta:

Nabavite 267 video lekcija na 1C besplatno:

  • Naziv metode— putanja do procedure koja će se izvršiti u pozadinskom poslu prema datom rasporedu. Procedura mora biti u zajedničkom modulu. Preporučuje se da ne koristite standardne, već da kreirate svoje. Ne zaboravite da se poslovi u pozadini pokreću na serveru!
  • Upotreba— znak korištenja rutinskog zadatka.
  • Unaprijed određeno— označava da li je rutinski zadatak unaprijed određen. Ako želite da rutinski zadatak radi odmah nakon postavljanja u bazu podataka, navedite ovu zastavicu. U suprotnom, morat ćete koristiti obradu Konzole posla ili uzrokovati programsko pokretanje posla.
  • Broj ponovnih pokušaja kada se posao nenormalno završava— koliko je puta pozadinski posao ponovo pokrenut ako je izvršen s greškom.
  • Interval ponovnog pokušaja kada se posao završi nenormalno— koliko često će se pozadinski posao ponovo pokretati ako je dovršen s greškom.

A najzanimljivija postavka je Raspored:

Ovdje konfigurirate interval pokretanja procedure naveden u polju „Naziv metode“. Recimo da sam konfigurisao

Pažnja! Ne zaboravite da onemogućite blokiranje izvršavanja rutinskih i pozadinskih poslova na nivou DBMS-a!

To se može učiniti u administrativnom uslužnom programu klijent-server verzije ili prilikom kreiranja nove baze podataka:

Postavljanje rutinskih zadataka u načinu 1C datoteke

U načinu rada datoteke, postavljanje takvih poslova je nešto teže. Za takav zadatak mora se pokrenuti zasebna sesija 1C programa. Ovo se često rješava kreiranjem "tehničkog" korisnika čija je sesija uvijek pokrenuta.

U režimu datoteke, rutinski posao se inicijalizira kada se pokrene metoda “RunTaskProcessing()”.

Za određenog korisnika, možete konfigurirati ovu metodu za pokretanje pomoću druge metode −

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

  • Naziv procedure— naziv procedure povezane kao rukovalac čekanja. Ime izvezene procedure modula upravljane aplikacije (obični modul aplikacije) ili globalnog zajedničkog modula. Procedura se mora nalaziti na klijentu.
  • Interval— period između izvođenja operacija u sekundama.
  • Jednom- kako izvršiti zadatak, jednom ili ne.

ConnectWaitHandler, 3600 ) ;

Dvominutni video koji pokazuje kako postaviti rutinski zadatak u 1C konfiguratoru:

Kada radite u 1C, postoji mnogo rutinskih operacija koje se moraju pokrenuti ili formirati prema rasporedu za obavljanje jedne ili druge radnje, na primjer: objavljivanje dokumenata ili učitavanje podataka u 1C s web stranice.

Nedavno sam objavio članak: Vrijeme je da se ovo automatizira:

Rutinski i pozadinski zadaci

Mehanizam poslova je dizajniran da izvodi bilo koju aplikaciju ili funkcionalnost prema rasporedu ili asinhrono.

Mehanizam zadataka rješava sljedeće probleme:

  • Sposobnost definisanja regulatornih procedura u fazi konfiguracije sistema;
  • Izvođenje navedenih radnji prema planu;
  • Pozivanje date procedure ili funkcije asinhrono, tj. bez čekanja na njegov završetak;
  • Praćenje napretka određenog zadatka i dobijanje statusa njegovog završetka (vrijednost koja pokazuje da li je bio uspješan ili ne);
  • Dobivanje liste tekućih zadataka;
  • Sposobnost čekanja da se završi jedan ili više zadataka;
  • Upravljanje poslom (mogućnost otkazivanja, blokada izvršenja, itd.).

Mehanizam posla sastoji se od sljedećih komponenti:

  • Metapodaci rutinskih zadataka;
  • Redovni zadaci;
  • Pozadinski poslovi;
  • Task Scheduler.

Pozadinski poslovi & dizajnirani su za asinhrono izvršavanje zadataka aplikacije. Pozadinski zadaci se implementiraju pomoću ugrađenog jezika.

Planirani zadaci & su dizajnirani da izvršavaju zadatke aplikacije prema rasporedu. Rutinski zadaci su pohranjeni u informacijskoj bazi i kreirani su na osnovu metapodataka definiranih u konfiguraciji. Metapodaci regulatornog zadatka sadrže informacije kao što su naziv, metoda, upotreba itd.

Rutinski zadatak ima raspored koji određuje u koje vrijeme mora biti izvršena metoda povezana s rutinskim zadatkom. Raspored je, po pravilu, određen u bazi podataka, ali se može odrediti i u fazi konfiguracije (na primjer, za unaprijed definirane rutinske zadatke).

Planer zadataka se koristi za planiranje izvršavanja rutinskih zadataka. Za svaki zakazani posao, planer periodično provjerava da li se trenutni datum i vrijeme podudaraju s rasporedom zakazanog posla. Ako se podudara, planer dodjeljuje taj zadatak izvršenju. Da bi to uradio, za ovaj zakazani zadatak, planer kreira pozadinski zadatak, koji obavlja stvarnu obradu.

Mislim da je dovoljno sa opisom - prijeđimo na implementaciju:

Kreiranje rutinskog zadatka

Naziv metode– put do procedure koja će se izvršiti u pozadinskom poslu prema datom rasporedu. Procedura mora biti u zajedničkom modulu. Preporučuje se da se ne koriste standardni zajednički moduli, već da se kreiraju sopstveni. Ne zaboravite da pozadinski poslovi rade na serveru!

Upotreba– znak korištenja rutinskog zadatka.

Unaprijed određeno– označava da li je rutinski zadatak unaprijed određen.

Ako želite da rutinski zadatak radi odmah nakon postavljanja u bazu podataka, navedite atribut Unaprijed određeno. U suprotnom, morat ćete koristiti obradu “Job Console” ili programski pokrenuti posao.

Broj ponovnih pokušaja kada se posao nenormalno završava– koliko je puta pozadinski posao ponovo pokrenut ako je izvršen s greškom.

Interval ponovnog pokušaja kada se posao završi nenormalno– koliko često će se pozadinski posao ponovo pokretati ako je dovršen s greškom.

Postavljanje rasporeda

Raspored izvršavanje zadatka:

Svaki sat, samo jedan danPeriod dana ponavljanja = 0, period ponavljanja dana = 3600
Svaki dan jednom dnevnoPeriod dana ponavljanja = 1, period ponavljanja dana = 0
Jednog dana, jednomPeriodRepeatDays = 0
Svaki drugi dan jednom dnevnoPeriodRepeatDays = 2
Svaki sat od 01.00 do 07.00 svaki danPeriodRepeatDays = 1RepeatPeriodDuringDay = 3600StartTime = 01.00

Vrijeme završetka = 07.00

Svake subote i nedjelje u 09.00 satiPeriod ponavljanja = 1 dani u nedelji = 6, 7 vreme početka = 09,00
Svaki dan jednu sedmicu, preskočite sedmicuPeriodRepeatDays = 1PeriodWeeks = 2
U 01.00 jednomVrijeme početka = 01.00
Zadnji dan svakog mjeseca u 9:00.PeriodRepeatDays = 1DayInMonth = -1StartTime = 09.00
Peti dan svakog mjeseca u 9:00PeriodRepeatDays = 1DayInMonth = 5StartTime = 09.00
Svake druge srijede u mjesecu u 9:00PeriodRepeatDays = 1DayWeekMonth = 2DaysWeek = 3

Vrijeme početka = 09.00

Karakteristike izvršavanja pozadinskih poslova u fajl i klijent-server varijantama

Mehanizmi za izvršavanje pozadinskih poslova u verzijama datoteke i klijent-server su različiti.

U verziji fajla morate kreirati namjenski klijentski proces koji će obavljati pozadinske poslove. Da bi to učinio, klijentski proces mora periodično pozvati funkciju globalnog konteksta ExecuteJobProcessing. Samo jedan klijentski proces po bazi podataka bi trebao obraditi pozadinske poslove (i, shodno tome, pozvati ovu funkciju). Ako klijentski proces nije kreiran za obradu pozadinskih poslova, tada će se prilikom programskog pristupa mehanizmu poslova prikazati greška “Upravitelj poslova nije aktivan”. Ne preporučuje se korištenje klijentskog procesa koji obrađuje pozadinske poslove za druge funkcije.

Jednom kada klijentski proces obrađuje pozadinske poslove, drugi klijentski procesi mogu programski pristupiti mašini za pozadinske poslove, tj. može pokrenuti i upravljati poslovima u pozadini.

U klijent-server verziji Za izvršavanje pozadinskih poslova koristi se planer zadataka, koji se fizički nalazi u upravitelju klastera. Za sve pozadinske poslove u redu čekanja, planer dobiva najmanje opterećen radni proces i koristi ga za pokretanje odgovarajućeg pozadinskog posla. Radnički proces izvršava posao i obavještava planer o rezultatima izvršenja.

U verziji klijent-server moguće je blokirati izvršavanje rutinskih zadataka. Izvršavanje rutinskih zadataka je blokirano u sljedećim slučajevima:

  • Na informacijskoj bazi je instalirano eksplicitno blokiranje rutinskih zadataka. Zaključavanje se može postaviti preko konzole klastera;
  • Na infobazi postoji blok veze. Zaključavanje se može postaviti preko konzole klastera;
  • Metoda SetExclusiveMode() sa parametrom True je pozvana iz ugrađenog jezika;
  • U nekim drugim slučajevima (na primjer, prilikom ažuriranja konfiguracije baze podataka).

Obrada pokretanja i pregled planiranih zadataka možete preuzeti ovdje.

Ovaj članak daje primjer rada sa poslovima u pozadini, kao u Pokreću se 1C pozadinski poslovi, kako možete dobiti listu zadataka koristeći metodu "GetBackgroundTasks()". Dakle, ova metoda nam vraća neki niz. Hajde da vidimo šta sadrži.

Dozvolite mi da odmah rezerviram da je navedeni primjer razvijen u klijent-server verziji baze podataka.

Slika prikazana iznad prikazuje sadržaj ovog niza.

Obratite pažnju na teren "država". Sadrži informacije o tome da li je pokrenuti pozadinski posao uspješno završen ili se još uvijek izvodi.

Sadrži i informacije o neuspješnom završetku zadatka. Ovaj niz također sadrži informacije o ključevima, jedinstvenim identifikatorima i nazivima pozadinskih poslova. Informacije o pokrenutim i završenim zadacima pohranjuju se u infobazu, ali postoji ograničenje u broju zapisa pohranjenih u tabeli. Ovaj broj je oko 1000 zapisa. To jest, kada se dodaju novi elementi, stari se uklanjaju. Također, zadatak se briše iz tabele ako je završen prije više od jednog dana.

Primjer rada s pozadinskim poslom 1C - Metoda "GetBackgroundTasks"

Pogledajmo i rad sa poslovima u pozadini koristeći primjer metode "GetBackgroundTasks()". U ovoj metodi moguće je podesiti odabir za primljene zapise. Odnosno, trebamo proslijediti strukturu kao parametar metode.

Struktura može sadržavati polja: Jedinstveni identifikator, ključ, status, početak, kraj, ime, naziv metode, zakazani zadatak.

Na primjer, ako su nam potrebni samo poslovi koji se izvršavaju, primijenili bismo selekciju s imenom elementa strukture “State” i vrijednošću, naveli bismo sistemsku enumeraciju “BackgroundTask State” u aktivnom stanju. Dakle, prvo morate osigurati da se zapisi o izvršavanju pozadinskih zadataka 1C pojavljuju u demo bazi podataka.


Da bismo implementirali primjer, učinit ćemo sljedeće:
1. Kreirajmo zajednički modul "BackgroundTask Handlers" izvršavanje na serveru.

I dodajte mu sljedeći kod:

Procedura ProduceBackgroundCalculation(parametar) Izvoz

TimeStart = CurrentDate() ;

Dok CurrentDate() - Vrijeme početka Ciklus

EndCycle ;

Kraj procedure

2. Kreirajmo obradu i postavimo dugme na obrazac "Pokreni zadatak u pozadini" a u proceduru za obradu događaja klika na dugme dodajte sledeći kod:

&O klijentskoj proceduri ExecuteTask(Command) ExecuteBackgroundTaskOnServer() ; Kraj procedure

Opis pozvane procedure:

&OnServer procedura ExecuteBackgroundTaskOnServer()BackgroundTask Parameters = New Array; BackgroundTask Parameters. Dodati( "Neki parametar" "Test") ; BackgroundTaskParameters = Novi niz; BackgroundTask Parameters. Dodati( "Neki parametar") ; BackgroundTasks. trči ( "BackgroundTask Handlers. Izvršite pozadinski proračun", BackgroundTask Parameters, New UniqueIdentifier, "Probni zadatak 2") ; Kraj procedure // Izvrši BackgroundTaskOnServer()

Sada pokrenimo 1C u poslovnom modu i počnimo s izvršavanjem pozadinskog posla.


Spreman. Ovim akcijama osigurali smo da se zapisi o izvršavanju 1C pozadinskih poslova pojavljuju u našoj demo bazi podataka, te sada možemo demonstrirati primjer dobijanja njihovog niza koji se nalazi u našoj bazi podataka.

Dodajmo još jedno dugme u obrazac "Nabavite pozadinske poslove". Napišimo sljedeći kod u proceduri obrade klika:

&O klijentskoj proceduri GetBackgroundJob(Command) GetBackgroundJobOnServer() ; Kraj procedure

Tekst procedure na serveru:

&OnServer procedura GetBackgroundTasksOnServer() Parametri odabira = Nova struktura("Name" , "Probni zadatak 2") ; ListBackgroundTasks = Pozadinski zadaci. GetBackgroundTasks(SelectionParameters) ; Za svaki zadatak Sa liste Pozadinskih zadataka Izvještaj o ciklusu(Task.Name) ; EndCycle ; Kraj procedure // GetBackgroundTasksOnServer()

Pokrenimo 1C za izvršenje i pritisnite dugme "Nabavite pozadinske poslove".

mob_info