Univerzalni regulatorni zadatak. Rutinski i pozadinski zadaci (1Cv8) Pozivanje dijaloškog okvira za promjenu rasporeda rutinskog zadatka

💖 Sviđa li vam se? Podijelite vezu sa svojim prijateljima

Problem nije nov i o njemu se s vremena na vrijeme raspravlja na raznim 1C forumima. Najjednostavnije i najpopularnije rješenje je ponovno pokretanje 1C poslužitelja. Nažalost, ova opcija nije uvijek prihvatljiva ili je krajnje nepoželjna. U takvom slučaju postoje delikatnija rješenja.

Ovdje jednu od ovih metoda u obliku kratkih uputa korak po korak:

1. Pomoću konzole za administraciju poslužitelja 1C tražimo problematične fnovi posao na listi povezivanja (na primjer, prema vremenu početka njegove operacije, u usporedbi s vremenom početka reguliranog posla u konzoli poslova). Mi definiramoradni proces u kojem se nalazi obješena veza.

2. Otvorite svojstva ovog procesa i označite ga kao neiskorištenog (ako se koristi samo jedan proces, tada prvo morate stvoriti novi radni proces tako da se sve aktivne veze ponovno povežu s njim). Pamtimo PID broj ovog procesa.


3. Čekamo dok se sve trenutne veze ne premjeste iz onemogućenog procesa u jedan od korištenih. U konačnici bi u našem procesu trebale ostati samo problematične veze koje želimo ukloniti.

4. Na računalu s 1C poslužiteljem pomoću upravitelja zadataka potražite odgovarajući proces rphost.exe prema PID-u onemogućenog radnog procesa i izbrišite ga.

5 . Za svaki slučaj, možete izbrisati tijek rada 1C koji smo onemogućili pomoću administratora. konzolu i po potrebi izradite novu.

6. Spreman. Možete se prijaviti na konzolu poslova i provjeriti funkcionalnost planiranog posla.

Neki zadaci u upravljanju dokumentima i računovodstvu možda će se morati obavljati povremeno. Na primjer, dvadesetog. Ili svakodnevno.

Tipično, tvrtka pokušava stvoriti pravila za obavljanje takvih zadataka - tko, kada i kako treba izvršiti zadatak, tko ga treba kontrolirati.

Takvi poslovi nazivaju se regulirani, odnosno obavljaju se u skladu s propisima.

U IT-u se nadzor često provodi na reguliran način.

Ovo je administratoru sustava dobro poznato - postoje posebni programi koji povremeno provjeravaju performanse poslužitelja i mrežne infrastrukture te o tome obavještavaju administratora SMS-om ili e-poštom.

Slične stvari postoje za webmastere - za provjeru dostupnosti stranice tijekom dana.

U 1C, nadzorni zadaci i svi drugi periodični zadaci koji bi se trebali automatski izvršavati prema rasporedu izvode se pomoću mehanizma 1C Scheduled Tasks.

Razgovarajmo o njima danas.

Planirani zadaci 1C

Planirani zadaci 1C su oni koji vam omogućuju da ih obavljate kao i oni, ali prema rasporedu.

Sam rutinski zadatak 1C u konfiguratoru je način za određivanje postavki i postavljanje rasporeda. Usput, raspored se kasnije može dinamički mijenjati u načinu rada 1C Enterprise.

Pozadinski poslovi mogu se kreirati iz teksta programa u 1C jeziku proizvoljno bez planiranog 1C posla - za paralelno računanje na poslužitelju.

Izvršenje rutinskih 1C zadataka može se privremeno onemogućiti - u.

Dodavanje rutinskog zadatka 1C

Rutinski 1C zadaci nalaze se u konfiguraciji u ogranku Opći/Rutinski 1C zadaci. Dodajmo novi regulatorni zadatak 1C i naznačimo njegov naziv.

U svojstvu rutinskog zadatka 1C naznačeno je ime metode, baš kao u. Funkcija će se nalaziti u zajedničkom modulu s označenim potvrdnim okvirom Server u svojstvima, odnosno modul se mora dodati unaprijed.

Svojstvo planiranog zadatka 1C - Naziv zadatka - određuje naziv pod kojim će se zadatak pojaviti u alatima za upravljanje zadacima.

Svojstvo zadatka 1C rutine – Key – omogućuje grupiranje nekoliko različitih zadataka 1C rutine. Istovremeno se može pokrenuti samo jedan posao s istom vrijednošću ključa. Sama vrijednost može biti proizvoljna. Prazna vrijednost se ne uzima u obzir tijekom kontrole (odnosno, smatra se praznom).

Svojstvo rutinskog zadatka 1C - Predefinirano - određuje da će se prilikom pokretanja 1C Enterprise takav zadatak stvoriti u jednoj kopiji s rasporedom navedenim u konfiguratoru. Nepredefinirani zadaci pojavljuju se programski u vrijeme rasporeda.

U tipičnim konfiguracijama, na primjer Računovodstveno izdanje 2.0, takvi rutinski 1C zadaci kao što su Ažuriranje konfiguracije i Ponovno izračunavanje ukupnih iznosa su unaprijed definirani, ali kao što su Razmjena podataka ili Odgođena kretanja nisu unaprijed definirani.

Upotreba – omogućuje zadatak (odnosno, izvršit će se samo ako je potvrdni okvir Upotreba označen).

Pokušaj ponovo nakon abnormalnog prekida - kao što možda pretpostavljate, znači ponovno pokretanje zadatka ako nije mogao uspješno završiti prvi put - možete odrediti koliko puta ponovno pokrenuti i koliko dugo nakon abnormalnog prekida.

1C rutinsko upravljanje i praćenje zadataka

Za upravljanje rutinskim zadacima 1C postoji posebna standardna Job Console za obradu. Može se naći i na.

Ova obrada odnosi se na takozvanu univerzalnu vanjsku standardnu ​​1C obradu, koja često nije uključena u konfiguraciju, već se distribuira zasebno, na primjer, na ITS diskovima.

Korištenjem obrade konzole poslova možete:

  • Omogući/onemogući izvršavanje rutinskog 1C zadatka
  • Dodjeljivanje/promjena rasporeda rutinskog 1C zadatka (i drugih parametara)
  • Navedite 1C korisnika u čije ime će se izvršiti rutinski 1C zadatak
  • Pogledajte koji su zadaci izvršeni kada i s kojim rezultatom, pogreške u ispunjavanju zadataka 1C
  • Izvršite zadatak.

Kopije baza podataka i 1C rutinskih zadataka

Ako koristite poslužitelj 1C, događa se sljedeća situacija:

  • Za vlastite potrebe (npr. za programiranje) izrađuje se kopija radne baze podataka
  • Rad, testiranje itd. u kopiji baze podataka
  • Zaboravljate isključiti rutinske 1C zadatke u takvoj testnoj bazi podataka.

Dok 1C rutinski zadaci obavljaju zadatke koji se odnose samo na njihovu informacijsku bazu, tada u njemu nema ničega.

Međutim, rutinski zadaci 1C često mogu spremati bilo koje datoteke, podatke u druge baze podataka, provoditi razmjene i slati e-poštu.

U ovom slučaju možete dobiti zanimljivu mješavinu rezultata obavljanja rutinskih 1C zadataka u radnoj bazi podataka i kopija.

Rutinski 1C zadaci za kopije radne baze podataka moraju biti onemogućeni u .

Ispunjavanje i neispunjavanje regulatornih zadataka 1C

Prilikom izrade rutinskih 1C zadataka morate zapamtiti:

  • Zadaci se obavljaju sami - potrebno ih je pratiti
  • Zadaci se izvršavaju u modulu na poslužitelju
  • Zadaci se izvode pod drugim Windows korisnikom, s različitim pravima.

Najprije morate provjeriti izvodi li se zadatak i može li se dovršiti kao rutinski 1C zadatak.

Drugo, serverski modul znači da mnoge stvari koje su dostupne na klijentu nisu dostupne. Na primjer, ponekad se svi dokumenti ne mogu objaviti samo na poslužitelju, jer njihov algoritam može omogućiti da korisnik ručno pokrene knjiženje i mogu se koristiti funkcije koje nisu na poslužitelju, na primjer
Upozorenje ("Zdravo!")

Treće, ako se zadatak bavi nečim izvan baze podataka 1C, tada prava korisnika Windowsa pod kojim se zadatak izvršava postaju važna.

Treća točka je posebno važna pri razvoju. Ako se modul ne može izvršiti na poslužitelju, zadatak se uopće neće izvršiti. Da biste provjerili, trebate pokrenuti zadatak barem jednom i vidjeti rezultat "Zadatak dovršen" u obradi konzole zadataka.

Omogućuje nam izvođenje bilo kakvih izračuna u sustavu neprimjetno za korisnika, odnosno u pozadini. Štoviše, ovaj mehanizam nam omogućuje paraleliziranje procesa izračuna. Možemo čak i paralelizirati proceduru koja će se izvršiti. Da bismo to učinili, naš pozadinski posao mora pokrenuti još nekoliko pozadinskih poslova. U ovom slučaju procesi su paralelizirani i, ako imamo višeprocesorski, višejezgreni sustav, naš algoritam će raditi učinkovito. Nakon pokretanja nekoliko procesa, sustavu možemo reći da treba pričekati završetak tih procesa kako bi se rezultat nekako spojio.

Na primjer, u tipičnim konfiguracijama, dok korisnik radi, izvršavaju se razne vrste pozadinskih servisnih poslova. To se može dokazati zapisima u dnevniku koji bilježe činjenicu da su takve radnje izvršene. Štoviše, to ni na koji način ne utječe na rad korisnika, on ih jednostavno ne primjećuje.

U idealnom slučaju, pozadinski posao implementiran je u verziji klijent-poslužitelj, u kojem slučaju cjelokupno opterećenje ide na poslužitelj. Što se tiče verzije datoteke, pozadinski posao je moguć, ali ima neke osobitosti.

To je ono što će sustav proizvesti ako ne uzmete u obzir ove značajke i ne pokrenete pozadinski posao u datotečnoj verziji infobaze.


1C pozadinski posao ima neka ograničenja. Budući da radi na serverskoj strani, ne postoji mogućnost interaktivnog rada s korisnikom. Na primjer, ne možete prikazati poruku ili bilo kakvu informaciju. Sve te podatke potrebno je pohraniti u informacijsku bazu i na neki način dalje obrađivati.
Kontaktiranjem pomoćnika za sintaksu možete dobiti detaljnije informacije o pozadinskim poslovima 1C. Ovdje treba napomenuti da je ovaj objekt isključivo softverski i ni na koji način nije pohranjen u bazi podataka. Odnosno, stvaramo instancu klase, inicijaliziramo svojstva i pokrećemo je za izvođenje.

Koje alate imamo za upravljanje pozadinskim poslovima? Ova mogućnost je objekt metapodataka "Upravitelj zadataka u pozadini". Ovaj objekt ima metodu "Trčanje", koristeći ovu metodu, pokreće se pozadinski posao.

Ima sljedeće parametre:
"Naziv metode"- naziv procedure ili funkcije koju treba izvršiti, a mora biti procedura ili funkcija konteksta poslužitelja;

"Opcije"- niz parametara čiji broj elemenata mora odgovarati broju parametara naše procedure/funkcije navedenih u parametru "Naziv metode";

"Ključ"- određeni ključ jedinstvenosti, koji je linija po kojoj sustav razumije treba li pokrenuti pozadinski zadatak ili je takav zadatak već pokrenut;

"Ime"- ovdje možete navesti proizvoljan opis naše metode.

Povratna vrijednost je objekt "Pozadinski zadatak", koji sadrži naziv trenutne metode, trenutni ključ i još nekoliko svojstava i metoda. Jedna od takvih metoda je metoda "Čekaj dovršeno". Njegova je svrha da možemo reći sustavu da ne radi ništa dok se pozadinski posao ne završi.

Pozadinski posao 1C 8.2, 8.3 - Primjer korištenja

Dajmo primjer rada s pozadinskim poslovima 1C. Prvo ćemo izraditi jednostavan algoritam koji će nakratko učitati 1C sustav na takav način da u ovom trenutku ne možemo ništa učiniti.

Za ovo:

1. Kreirajmo zajednički modul "Rukovatelji pozadinskim zadacima", koji će se kompajlirati na strani poslužitelja;


2. U njemu ćemo opisati postupak izvoza "ProduceBackgroundCalculation(Parameter)", koji uzima jedan parametar vrste niza;

Procedura PerformBackgroundCalculation(Parameter) ExportStartTime = CurrentDate() ; Dok CurrentDate() - Vrijeme početka< = 6 Цикл КонецЦикла ; КонецПроцедуры Процедура КнНажатие() ОбработчикиФоновыхЗаданий. ПроизветиФоновоеВычисление("Neki parametar") ; EndProcedure
Spreman. Sada, kada pokrenete obradu i pritisnete gumb, sustav se zamrzne na nekoliko sekundi, tijekom kojih se ništa ne može učiniti. To je upravo ono što smo trebali učiniti.

Sada ćemo osigurati da se ti proračuni provode u pozadini, odnosno da se pozadinski zadatak 1C 8.2, 8.3 izvršava, ali da nas ne ometa.

Za ovo:

1. U obradi, u događaju klika na gumb, napišite sljedeći kod.

Procedura KnPress() Parametri = Novi niz; Mogućnosti. Dodati( "Neki parametar") ; Pozadinski zadatak. Trčanje ( "Rukovatelji pozadinskim zadacima. Izvršite računanje u pozadini", parametri, novi jedinstveni identifikator, "Test") ; EndProcedure

Ovdje prosljeđujemo ime zajedničke procedure modula kao prvi parametar, a niz parametara kao drugi. Trećem parametru treba proslijediti jedinstveni ključ, a četvrtom parametru neki opis naše procedure.

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

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

Što su rutinski i pozadinski zadaci u 1C

  • Planirani zadaci je poseban mehanizam 1C Enterprise 8.3 dizajniran za izvođenje određene akcije prema zadanom rasporedu.
  • Pozadinski posao- objekti generirani rutinskim zadatkom koji izravno izvode predviđenu radnju bez sudjelovanja korisnika ili programera 1C 8.2.

Mehanizam rutinskih i pozadinskih poslova radi u načinu rada klijent-poslužitelj (SQL), zahvaljujući funkcionalnosti DBMS-a. Ako imate bazu podataka datoteka, zadatak se također može konfigurirati, ali prema malo drugačijem principu.

Postavljanje pozadinskih poslova u načinu rada 1C klijent-poslužitelj

Prvo, stvorimo novi objekt metapodataka - rutinski zadatak. Svoj ću zadatak nazvati "Učitavanje tečajeva valuta". Pogledajmo paletu svojstava ovog konfiguracijskog objekta:

Besplatno nabavite 267 video lekcija o 1C:

  • Naziv metode— put do procedure koja će se izvršiti u pozadinskom poslu prema zadanom rasporedu. Postupak mora biti u zajedničkom modulu. Preporuča se ne koristiti standardne, već izraditi vlastite. Ne zaboravite da se pozadinski poslovi izvode na poslužitelju!
  • Korištenje— znak korištenja rutinskog zadatka.
  • Unaprijed određeno— označava je li rutinski zadatak unaprijed određen. Ako želite da rutinski zadatak radi odmah nakon postavljanja u bazu podataka, navedite ovu oznaku. Inače ćete morati koristiti obradu Job Console ili izazvati programsko izvođenje posla.
  • Broj ponovnih pokušaja kada se posao prekine neuobičajeno— koliko je puta pozadinski posao ponovno pokrenut ako je izvršen s pogreškom.
  • Interval ponovnog pokušaja kada se posao nenormalno prekine— koliko često će se pozadinski posao ponovno pokretati ako je dovršen s pogreškom.

A najzanimljivija postavka je Raspored:

Ovdje konfigurirate interval pokretanja procedure navedene u polju "Naziv metode". Recimo da sam konfigurirao

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

To se može učiniti u uslužnom programu za administraciju verzije klijent-poslužitelj ili prilikom stvaranja nove baze podataka:

Postavljanje rutinskih zadataka u načinu rada datoteke 1C

U modu datoteke, postavljanje takvih poslova je nešto teže. Za takav zadatak potrebno je pokrenuti zasebnu sesiju programa 1C. To se često rješava stvaranjem "tehničkog" korisnika čija je sesija uvijek pokrenuta.

U datotečnom načinu, rutinski posao se inicijalizira kada se pokrene metoda "RunTaskProcessing()".

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

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

  • Naziv postupka— naziv procedure spojene kao rukovatelj čekanjem. Naziv izvezene procedure upravljanog aplikacijskog modula (običnog aplikacijskog modula) ili globalnog dijeljenog modula. Zahvat se mora nalaziti na klijentu.
  • Interval— razdoblje između izvrš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:

Planirani zadaci u 1C dizajnirani su za izvođenje određenih postupaka prema rasporedu, s određenom učestalošću.

Rutinski zadaci pohranjeni su u informacijskoj bazi i imaju raspored pokretanja. Samo pokretanje je potpuno automatsko ako informacijska baza radi u načinu klijent-poslužitelj. Ako se baza podataka temelji na datotekama, morate izvršiti sljedeće korake:

  • dodijeliti posebnog korisnika za obavljanje rutinskih zadataka;
  • pod tim korisnikom mora se otvoriti baza podataka u kojoj se funkcija mora periodički izvršavati Izvrši obradu zadatka().

Stvaranje rutinskog zadatka

Planirani zadaci su objekt metapodataka konfiguracije 1C. Nalazi se u grupi Općenito. Razmotrimo parametre i svojstva planiranih zadataka.

Naziv metode— put do postupka izvoza u općem modulu, koji će se izvršiti prema zadanom rasporedu. Procedura se mora izvršiti na poslužitelju. U tom su pogledu rutinski zadaci donekle slični objektu Pretplatite se na događaj.

Ključ— omogućuje stvaranje nekoliko rutinskih zadataka iste vrste. Na primjer, sinkronizacija podataka između nekoliko infobaza može se implementirati pomoću jednog objekta metapodataka Rutinski zadatak, dok će se kreirati nekoliko samih rutinskih zadataka (prema broju baza podataka za razmjenu). Ovi rutinski zadaci će se razlikovati pomoću svojstva Ključ. Istovremeno se može izvršiti samo jedan posao s istim ključem.

Korištenje— zastavica koja pokazuje je li planirani zadatak omogućen.

Unaprijed određeno— ovdje možemo povući analogiju s unaprijed definiranim elementima imenika. Predefinirani elementi kreiraju se u konfiguratoru i koriste ih korisnici u svom radu. Korisnik sam izrađuje obične elemente. Isto je i s rutinskim zadacima: ako je predefiniran, onda postoji i može se izvršiti prema rasporedu odmah nakon izrade u konfiguratoru. Ako zastava Unaprijed određeno nije instaliran, tada korisnik mora stvoriti jedan ili više rutinskih zadataka ove vrste (na primjer, kroz Konzola poslova).

Broj ponovnih pokušaja kada se posao prekine neuobičajeno— određuje koliko će se puta pozadinski posao ponovno pokrenuti ako je dovršen s pogreškom.

Interval ponovnog pokušaja kada se posao nenormalno prekine— određuje koliko će se često pozadinski posao ponovno pokretati ako je dovršen s pogreškom.

Programirajte rad s rutinskim zadacima

U ovim primjerima razmotrit ćemo rad s običnim, nepredefiniranim, rutinskim zadacima.

Programska izrada rutinskog zadatka

//Stvorite zadatak
"RegularTaskName") ;

//Postavite ključ za zakazani zadatak (neobavezno)
Vježbajte. Ključ = "Ključ zadatka" ;

//Omogući rutinski zadatak
Vježbajte. Upotreba = Istina ;

//Napišite rutinski zadatak
Vježbajte. Write() ;

Programsko primanje planiranog zadatka za promjenu parametara

U ovom primjeru pretpostavimo da postoji samo jedan rutinski zadatak određene vrste. Ako postoji nekoliko zadataka, tada, znajući , nije teško napraviti odgovarajuće izmjene koda.


"RoutineTaskName"] ) ) ;


Ako Zadaci. Količina() > 0 Zatim
Posao= Poslovi[ 0 ] ;


Inače
Zadatak = RegularTasks. Stvori rutinski zadatak ( "RoutineTaskName") ;

Završi ako ;

//Rutinski zadatak nalazi se u varijabli Zadatak. Možete promijeniti njegove parametre.

Pozivanje dijaloškog okvira za promjenu rasporeda rutinskog zadatka

Postoji posebna vrsta dijaloga za rad s rasporedom rutinskog zadatka. Još uvijek pretpostavljamo da imamo samo jedan rutinski zadatak ove vrste.

//Dobivanje niza s rutinskim zadacima tražene vrste
Zadaci = Redoviti zadaci. Nabavite RoutineTasks(nova struktura("Metapodaci" , Metapodaci. RoutineTasks[ "RoutineTaskName"] ) ) ;

//Ako zadatak postoji, onda je po uvjetu jedan
Ako Zadaci. Količina() > 0 Zatim
Posao= Poslovi[ 0 ] ;

//Ako nema zadatka, kreirajte ga
Inače
Zadatak = RegularTasks. Stvori rutinski zadatak ( "RoutineTaskName") ;

Završi ako ;

Raspored=Zadatak. Raspored;

//Stvorite dijaloški okvir za promjenu rasporeda rutinskog zadatka
Dijalog za uređivanje = Novi dijaloški okvir rasporeda RoutineTask (raspored) ;

//Prikaži dijalog korisniku i obradi promjene rasporeda
IfEditDialog. OpenModal() Zatim
Vježbajte. Raspored = EditDialog. Raspored;
Vježbajte. Write() ;
Završi ako ;



reci prijateljima
Pročitajte također