Naplánovaná úloha na klientovi 1s. Rutinné úlohy a úlohy na pozadí. Vypnite všetky alebo niektoré z úloh

  • 25.01.2021

1 Quest Engine
2 Úlohy na pozadí
3 Naplánované úlohy
4 Funkcie vykonávania úloh na pozadí vo verziách súborov a klient-server
5 Vytvorenie metadát naplánovanej úlohy
6 Konzola misie
7 Práca s naplánovanými úlohami
7.1 Predmet práce
7.2 Získanie zoznamu úloh
7.3 Tvorba
7.4 Vymazanie
7.5 Získanie objektu úlohy

Pracovný motor

Nástroj úloh je navrhnutý tak, aby spúšťal niektoré aplikácie alebo funkcie podľa plánu alebo asynchrónne.

Mechanizmus úloh rieši tieto úlohy:

  • Schopnosť definovať rutinné postupy vo fáze konfigurácie systému;
  • Vykonávanie určených akcií podľa harmonogramu;
  • Vykonanie volania danej procedúry alebo funkcie je asynchrónne, t.j. bez čakania na jeho dokončenie;
  • Sledovanie priebehu konkrétnej úlohy a získanie stavu jej dokončenia (hodnota označujúca úspešnosť alebo neúspešnosť jej dokončenia);
  • Získanie zoznamu aktuálnych úloh;
  • Schopnosť čakať na dokončenie jednej alebo viacerých úloh;
  • Správa úloh (možnosť zrušenia, blokovania exekúcie atď.).

Pracovný stroj pozostáva z nasledujúcich komponentov:

  • Metadáta naplánovaných úloh;
  • Rutinné úlohy;
  • Pracovné miesta na pozadí;
  • Plánovač úloh.

Úlohy na pozadí sú navrhnuté tak, aby vykonávali úlohy aplikácie asynchrónne. Úlohy na pozadí sú implementované pomocou vstavaného jazyka.

Naplánované úlohy – určené na vykonávanie úloh aplikácie podľa plánu. Naplánované úlohy sú uložené v informačnej databáze a vytvárajú sa na základe metadát definovaných v konfigurácii. Metadáta naplánovanej úlohy obsahujú informácie, ako je názov, metóda, použitie atď.

Plánovaná úloha má plán, ktorý definuje, v ktorých časových bodoch by sa mala vykonať metóda spojená s plánovanou úlohou. Plán je spravidla špecifikovaný v informačnej databáze, ale môže byť špecifikovaný aj vo fáze konfigurácie (napríklad pre preddefinované naplánované úlohy).

Plánovač úloh sa používa na plánovanie vykonávania naplánovaných úloh. Pre každú naplánovanú úlohu plánovač pravidelne kontroluje, či je aktuálny dátum a čas v pláne plánovanej úlohy. Ak áno, plánovač priradí takúto úlohu na vykonanie. Na tento účel plánovač pre túto naplánovanú úlohu vytvorí úlohu na pozadí, ktorá vykoná skutočné spracovanie.

Úlohy na pozadí

Úlohy na pozadí sú užitočné pri vykonávaní zložitých výpočtov, kedy je možné výsledok výpočtu získať až po dlhšom čase. Nástroj úloh má prostriedky na vykonávanie takýchto výpočtov asynchrónne.

S úlohou na pozadí je spojená metóda, ktorá sa volá pri spustení úlohy na pozadí. Metóda úlohy na pozadí môže byť akákoľvek neglobálna procedúra alebo funkcia spoločného modulu, ktorú možno volať na serveri. Parametre úlohy na pozadí môžu byť ľubovoľné hodnoty, ktoré môžu byť odovzdané serveru. Parametre úlohy na pozadí sa musia presne zhodovať s parametrami procedúry alebo funkcie, ktorú volá. Ak je metódou úlohy na pozadí funkcia, jej návratová hodnota sa ignoruje.

Úloha na pozadí môže mať kľúč – akúkoľvek aplikačnú hodnotu. Kľúč zavádza obmedzenie pri spúšťaní úloh na pozadí – za jednotku času možno vykonať iba jednu úlohu na pozadí so špecifickou hodnotou kľúča a zadaným názvom metódy úlohy na pozadí (názov metódy pozostáva z názvu modulu a názvu procedúry alebo funkcie) . Kľúč vám umožňuje zoskupiť úlohy na pozadí, ktoré majú rovnaké metódy, podľa špecifického kritéria aplikácie, takže v rámci jednej skupiny sa nevykoná viac ako jedna úloha na pozadí.

Úlohy na pozadí sa vytvárajú a riadia programovo z akéhokoľvek pripojenia. Každý používateľ môže vytvoriť úlohu na pozadí. Okrem toho sa vykonáva v mene používateľa, ktorý ho vytvoril. Používateľ s oprávneniami správcu alebo používateľ, ktorý vytvoril tieto úlohy na pozadí, môže prijímať úlohy, ako aj čakať na ich dokončenie z akéhokoľvek pripojenia.

Úloha na pozadí je čisto objekt relácie, ale nepatrí do žiadnej používateľskej relácie. Pre každú úlohu sa vytvorí špeciálna systémová relácia, ktorá beží v mene užívateľa, ktorý uskutočnil volanie. Úlohy na pozadí nemajú trvalý stav.

Úloha na pozadí môže vyvolať ďalšie úlohy na pozadí. Vo verzii klient-server to umožňuje paralelizáciu zložitých výpočtov naprieč pracovnými postupmi klastra, čo môže výrazne urýchliť výpočtový proces ako celok. Paralelizácia sa vykonáva vytvorením viacerých podriadených úloh na pozadí a čakaním na dokončenie každej z nich v hlavnej úlohe na pozadí.

Úlohy na pozadí, ktoré boli úspešne alebo neštandardne dokončené, sa uložia na 24 hodín a potom sa vymažú. Ak počet vykonaných úloh na pozadí prekročí 1000, vymažú sa aj najstaršie úlohy na pozadí.

Plánované úlohy

Naplánované úlohy sa používajú, keď je potrebné vykonať určité periodické alebo jednorazové akcie v súlade s harmonogramom.

Naplánované úlohy sú uložené v informačnej databáze a vytvárajú sa na základe metadát naplánovanej úlohy definovaných v konfigurácii. Metadáta nastavujú parametre plánovanej úlohy, ako sú: volaná metóda, názov, kľúč, možnosť použitia, preddefinovaný príznak atď. Pri vytváraní plánovanej úlohy môžete dodatočne zadať plán (dá sa zadať v metadátach), hodnoty parametrov metódy, meno používateľa, v mene ktorého má vykonávať rutinnú úlohu atď.

Vytváranie a správa naplánovaných úloh sa vykonáva programovo z akéhokoľvek pripojenia a je povolené iba používateľom s oprávneniami správcu.

Poznámka. Pri práci v režime súborov je možné vytvárať a upravovať naplánované úlohy bez spúšťania plánovača úloh.

Naplánovaná úloha je spojená s metódou, ktorá sa volá pri vykonaní naplánovanej úlohy. Akákoľvek procedúra alebo funkcia neglobálneho spoločného modulu, ktorú možno volať na serveri, môže fungovať ako metóda plánovanej úlohy. Parametrami naplánovanej úlohy môžu byť ľubovoľné hodnoty, ktoré sa môžu odosielať na server. Parametre naplánovanej úlohy sa musia presne zhodovať s parametrami procedúry alebo funkcie, ktorú volá. Ak je metódou naplánovanej úlohy funkcia, jej návratová hodnota sa ignoruje.

Naplánovaná úloha môže mať kľúč – akúkoľvek použitú hodnotu. Kľúč zavádza obmedzenie spúšťania naplánovaných úloh, pretože za jednotku času, spomedzi naplánovaných úloh spojených s rovnakým objektom metaúdajov možno vykonať iba jednu naplánovanú úlohu so špecifickou hodnotou kľúča. Kľúč vám umožňuje zoskupiť naplánované úlohy spojené s rovnakým objektom metadát podľa špecifického kritéria aplikácie, takže v rámci jednej skupiny sa nevykoná viac ako jedna naplánovaná úloha.

Počas konfigurácie môžete definovať preddefinované plánované úlohy. Preddefinované plánované úlohy sa nelíšia od bežných naplánovaných úloh, okrem toho, že ich nemožno explicitne vytvoriť ani odstrániť. Ak sú nastavené metadáta plánovanej úlohy znak preddefinovanej naplánovanej úlohy, potom sa po aktualizácii konfigurácie v informačnej databáze automaticky vytvorí preddefinovaná naplánovaná úloha. Ak je preddefinovaný príznak vymazaný, potom pri aktualizácii konfigurácie v informačnej databáze sa preddefinovaná naplánovaná úloha automaticky odstráni. Počiatočné hodnoty vlastností preddefinovanej naplánovanej úlohy (napríklad plánu) sú nastavené v metaúdajoch. Neskôr, keď je aplikácia spustená, je možné ich zmeniť. Preddefinované naplánované úlohy nemajú žiadne parametre.

Plán naplánovanej úlohy určuje, v ktorých časových bodoch by sa mala naplánovaná úloha spustiť. Plán umožňuje nastaviť: dátum a čas začiatku a konca vykonávania úlohy, obdobie vykonávania, dni v týždni a mesiace, pre ktoré sa má naplánovaná úloha vykonať atď. (pozri popis zostaveného -v jazyku).

Príklady naplánovaných úloh:

Každú hodinu, len jeden deň

Obdobie RepeatDays = 0, RepeatPeriodPočas dňa = 3600

Každý deň, raz za deň

RepeatPeriodDays = 1, RepeatPeriodOverDay = 0

Jeden deň, raz

Obdobie opakovaných dní = 0

Každý druhý deň, raz denne

Počet dní opakovania = 2

Každú hodinu od 01:00 do 07:00 každý deň

Počet dní opakovania = 1
Opakovanie PeriodOverDay = 3600
Čas začiatku = 01:00
Koniec = 07:00

Každú sobotu a nedeľu o 09.00 hod

Počet dní opakovania = 1
DaysWeeks = 6, 7
Čas začiatku = 09:00

Každý deň jeden týždeň, preskočte týždeň

Počet dní opakovania = 1
Obdobie Týždne = 2

Raz o 01:00

Čas začiatku = 01:00

Posledný deň každého mesiaca je o 9:00.

Počet dní opakovania = 1
Deň v mesiaci = -1
Čas začiatku = 09:00

Piaty v každom mesiaci o 9:00

Počet dní opakovania = 1
Deň Mesiac = 5
Čas začiatku = 09:00

Druhá streda v mesiaci o 9:00

Počet dní opakovania = 1
Deň v týždni v mesiaci = 2
DaysWeeks = 3
Čas začiatku = 09:00

Môžete skontrolovať, či je úloha spustená pre daný dátum (metóda ExecutionRequired objektu JobSchedule). Naplánované úlohy sa vždy vykonávajú pod menom konkrétneho používateľa. Ak nie je zadaný používateľ plánovanej úlohy, vykonanie sa vykoná v mene predvoleného používateľa s právami správcu.

Naplánované úlohy sa vykonávajú pomocou úloh na pozadí. Keď plánovač určí, že by sa mala spustiť naplánovaná úloha, na základe tejto naplánovanej úlohy sa automaticky vytvorí úloha na pozadí, ktorá vykoná všetky ďalšie spracovanie. Ak je táto naplánovaná úloha už spustená, potom sa znova nespustí, bez ohľadu na jej plán.

Naplánované úlohy majú možnosť reštartu. To platí najmä vtedy, keď sa musí zaručiť splnenie metódy naplánovanej úlohy. Naplánovaná úloha sa reštartuje, keď sa nenormálne ukončí, alebo keď sa pracovný proces (vo verzii klient-server) alebo klientsky proces (vo verzii súboru), na ktorom bola naplánovaná úloha vykonaná, abnormálne ukončil. V naplánovanej úlohe môžete určiť, koľkokrát sa má reštartovať, ako aj interval medzi reštartmi. Pri implementácii metódy reštartovateľnej plánovanej úlohy je potrebné vziať do úvahy, že keď sa reštartuje, jej vykonávanie sa začne od začiatku a nebude pokračovať od okamihu abnormálneho ukončenia.

Je dôležité si to pamätať Čas ukončeniaúloha na pozadí sa nemusí nevyhnutne skončiť v určenom čase. Niektoré vyjadrenia:
* Úloha na pozadí môže ignorovať svoje automatické zrušenie, ak sa nezablokuje, ale z dôvodu pokračuje v spustení
že nie všetky operácie platformy je možné vrátiť späť. Ak sa vykoná cyklický kód vloženého jazyka, úloha sa zruší
inak to nie je možné. Všetko závisí od toho, čo úloha robí.
* Čas ukončenia – limit, v rámci ktorého môže úloha začať a nie skončiť?
* Vracia vynútené ukončenie úlohy späť vykonané zmeny do okamihu začatia transakcie?

Špecifiká vykonávania úloh na pozadí vo verziách súborov a klient-server

Mechanizmy vykonávania úloh na pozadí vo verziách súborov a klient-server sú odlišné.

  • Vo verzii súboru musíte vytvoriť špeciálny klientsky proces, ktorý bude vykonávať úlohy na pozadí. Na tento účel musí klientsky proces pravidelne volať kontextovú funkciu ExecuteJobProcessingGlobal. Iba jeden klientsky proces na infobázu by mal spracovávať úlohy na pozadí (a preto volať túto funkciu). Ak nebol vytvorený klientsky proces na spracovanie úloh na pozadí, pri programovom prístupe k nástroju úloh sa zobrazí chyba „Správca úloh nie je aktívny“. Neodporúča sa, aby sa úlohy spracovania na pozadí klientskeho procesu používali na iné funkcie.

Po spustení procesu klienta, ktorý vykonáva spracovanie úlohy na pozadí, môžu ostatné klientske procesy programovo pristupovať k nástroju úlohy na pozadí, t.j. môže spúšťať a spravovať úlohy na pozadí.

Vo verzii klient-server sa úlohy na pozadí vykonávajú pomocou plánovača úloh, ktorý je fyzicky umiestnený v správcovi klastrov. Plánovač pre všetky úlohy na pozadí vo fronte dostane najmenej zaneprázdnený pracovný tok a použije ho na vykonanie zodpovedajúcej úlohy na pozadí. Pracovný proces spustí úlohu a upozorní plánovač na výsledky vykonania.

Vo verzii klient-server je možné blokovať vykonávanie naplánovaných úloh. K blokovaniu vykonávania naplánovaných úloh dochádza v nasledujúcich prípadoch:

  • V informačnej databáze je nainštalované explicitné blokovanie naplánovaných úloh. Zámok je možné nastaviť cez konzolu klastra;
  • Na informačnej základni je nainštalované blokovanie pripojenia. Zámok je možné nastaviť cez konzolu klastra;
  • Metóda SetExclusiveMode () bola volaná z vloženého jazyka s parametrom True;
  • V niektorých iných prípadoch (napríklad pri aktualizácii konfigurácie databázy).

Vytváranie plánovaných metadát úloh

Skôr ako budete môcť programovo vytvoriť naplánovanú úlohu v informačnej databáze, musíte pre ňu vytvoriť objekt metadát.

Ak chcete vytvoriť metaúdajový objekt pre naplánovanú úlohu v konfiguračnom strome vo vetve "Všeobecné" pre vetvu "Rutinné úlohy", spustite príkaz Pridať a na palete vlastností vyplňte nasledujúce vlastnosti plánovanej úlohy:

Názov metódy – určuje názov metódy plánovanej úlohy.

Kľúč – zadá sa ľubovoľná hodnota reťazca, ktorá sa použije ako kľúč pre naplánovanú úlohu.

Plán - je uvedený plán naplánovanej úlohy. Ak chcete vytvoriť rozvrh, kliknite na odkaz „Otvoriť“ a v otvorenom formulári rozvrhu nastavte požadované hodnoty.

Karta Všeobecné obsahuje dátumy začiatku a konca úlohy a režim opakovania.

Na karte „Deň“ je uvedený denný plán úlohy.

Uveďte rozvrh:

  • čas začiatku a čas ukončenia úlohy;
  • čas dokončenia úlohy, po ktorom bude násilne dokončená;
  • opakovať periódu úlohy;
  • dĺžka pauzy medzi opakovaniami;
  • trvanie exekúcie.

Je povolená ľubovoľná kombinácia podmienok.

Týždenný plán úlohy je uvedený na karte „Týždenne“.

Začiarknite políčka pri tých dňoch v týždni, v ktorých bude úloha vykonaná. Ak chcete úlohu opakovať, zadajte interval opakovania v týždňoch. Napríklad úloha sa vykoná po 2 týždňoch, hodnota opakovaného pokusu je 2.

Na karte „Mesačne“ je uvedený mesačný plán úlohy.

Začiarknite políčka pre mesiace, v ktorých bude úloha prebiehať. V prípade potreby môžete určiť konkrétny deň (mesiac alebo týždeň) vykonania od začiatku mesiaca / týždňa alebo konca.

Použitie – ak je nastavené, úloha sa vykoná podľa plánu.

Preddefinované – ak je nastavené, úloha je preddefinovanou úlohou.

Počet opakovaní pri zlyhaní — Určuje počet opakovaní pri abnormálnom ukončení.

Crash retry interval — Špecifikuje abnormálny interval opakovania. Príklady

Ak chcete vytvoriť úlohu na pozadí "Obnoviť index celotextového vyhľadávania":

BackgroundJobs.Run ("Aktualizácia indexu fulltextového vyhľadávania");

Vytvorenie naplánovanej úlohy "Obnovenie sekvencií":

Schedule = Nový rozvrh naplánovanej úlohy;
Schedule.Repeat PeriodDays = 1;
Schedule.RepeatPeriodIn priebehu dňa = 0;

Job = ScheduledJobs.CreateRocularJobs ("Obnovenie sekvencií");
Task.Schedule = Plán;
Task.Write ();

Quest Console

Spracovanie s ITS, spravuje naplánované úlohy: Task Console.epf

Práca s naplánovanými úlohami

Objekty úloh

Objekty úloh nie sú referenčné, ale sú uložené v databáze v nejakom špeciálnom úložisku.

Ak je v metaúdajoch povolený príznak „Predefined“, potom sa takýto objekt vytvorí automaticky pri spustení 1C: Enterprise a vždy existuje presne v jednej inštancii. Takýto objekt nie je možné vymazať.

Ak nie je nastavený príznak "Preddefinované", potom sa objekty takejto úlohy vytvoria a vymažú programovo s uvedením plánu a parametrov.

Získanie zoznamu úloh

Zoznam úloh možno získať pomocou metódy Získajte pravidelné úlohy globálny manažér práce Regulačné úlohy

ScheduledJobsManager

GetScheduledJobs

Syntax:

Získajte pravidelné pracovné miesta (<Отбор>)

Možnosti:

<Отбор>(voliteľné)

Typ: Štruktúra. Výberová štruktúra. Hodnoty štruktúry môžu byť: UniqueIdentifier, Key, Metadata, Predefined, Usage, Name. Ak výber nie je zadaný, získajú sa všetky naplánované úlohy.

Ak filtrujete podľa metaúdajov, ako hodnotu Metaúdajov môžete zadať buď objekt metaúdajov rutinnej úlohy, alebo jeho názov.

Vrátená hodnota:

Typ: Array.

Popis:

Získa množstvo rutinných úloh pre daný výber. Prijímanie naplánovaných úloh je možné len pre administrátora.

Dostupnosť:

Pre každú rutinu rutinného cyklu
NewString = Zoznam bežných úloh. Pridať ();
NewString.Metadata = Regular.Metadata.Representation ();
NewString.Description = Regulatory.Name;
NewLine.Key = Bežný.Kľúč;
NewLine.Schedule = Regular.Schedule;
NewString.User = Regular.Username;
NewString.Predefined = Regular.Predefined;
NewString.Use = Regular.Use;
NewString.Id = Regular.UniqueIdentifier;

LastJob = Scheduled.LastJob;
Ak je posledná úloha nedefinovaná, potom
NewLine.Run = LastJob.Start;
NewString.Status = LastJob.Status;
Koniec Ak;
Koniec cyklu;

Tvorba

Vytvorené metódou CreateRegularTask správcu naplánovaných úloh:

ScheduledJob = ScheduledJobs.CreateRegularJob (MetadataSelection);

Regulatory Task.Name = Name;
Regular Task.Key = Kľúč;
RegularTask.Use = Použitie;
ScheduledJob.UserName = UsersSelection;
Scheduled Job. Počet opakovaní pri núdzovom ukončení = Počet opakovaní pri núdzovom ukončení;
ScheduledJob.Repeat Interval pri núdzovom ukončení = Interval opakovania pri núdzovom ukončení;
ScheduledJob.Schedule = Plán;
RegularJob.Write ();

JobObject = ScheduledJobs.CreateRegularJobs ("ExecuteExchange");

JobObject.Name = Názov;
JobObject.Usage = True;

Objekt úlohy má pole "Parametre", v ktorom sa nastavujú parametre metódy:

ScheduledJob

Parametre

Použitie:

Čítanie a písanie.

Popis:

Typ: Array. Pole parametrov plánovanej úlohy. Počet a zloženie parametrov musí zodpovedať parametrom metódy rutinnej úlohy.

Dostupnosť:

Server, Tučný klient, Vonkajšie pripojenie.

Poznámka:

Možnosti čítania a zápisu sú dostupné iba pre správcu.

Odstraňuje sa

Vymaže sa metódou Delete () objektu úlohy:

Naplánovaná úloha.Odstrániť ();

Získanie predmetu práce

  • zoznam pomocou metódy GetRegularJobs:
    Rutina = RoutineTasks.Get RutineJobs (výber);
  • prostredníctvom metódy FindByUniqueIdentifier správcu úloh:
    Task = Scheduled Tasks.FindBy Unique Identifier (UID);

[pre zobrazenie odkazu sa musíte zaregistrovať]

Umožňuje nám vykonávať akékoľvek výpočty v systéme bez toho, aby si to používateľ všimol, teda na pozadí. Okrem toho nám tento mechanizmus umožňuje paralelizovať proces výpočtu. Môžeme dokonca paralelizovať postup, ktorý sa vykoná. Aby to bolo možné, naša úloha na pozadí musí spustiť niekoľko ďalších úloh na pozadí. V tomto prípade sú procesy paralelizované a ak máme viacprocesorový, viacjadrový systém, náš algoritmus bude fungovať efektívne. Po spustení niekoľkých procesov môžeme systému povedať, že je potrebné počkať na dokončenie týchto procesov, aby sa potom výsledok nejako zredukoval.

Napríklad v typických konfiguráciách, keď používateľ pracuje, sa vykonávajú rôzne druhy úloh služby na pozadí. Dôkazom toho môžu byť záznamy v registračnom denníku, v ktorom sú zaznamenané skutočnosti o takýchto akciách. Navyše to nijako neovplyvňuje prácu používateľa, jednoducho si ich nevšimne.

V ideálnom prípade je úloha na pozadí implementovaná vo verzii klient-server, v takom prípade ide celá záťaž na server. Pokiaľ ide o možnosť súboru, úloha na pozadí je možná, ale má určité zvláštnosti.

To je to, čo systém dá, ak neberiete do úvahy tieto funkcie a nespustíte úlohu na pozadí vo verzii súboru infobázy.


Úloha 1C na pozadí má určité obmedzenia. Keďže beží na strane servera, neexistuje žiadna interaktívna používateľská skúsenosť. Nemôžete napríklad zobraziť správu ani žiadne informácie. Všetky tieto údaje musia byť uložené v informačnej databáze a ďalej nejakým spôsobom spracované.
Kontaktovaním asistenta syntaxe môžete získať podrobnejšie informácie o úlohách na pozadí 1C. Tu je potrebné poznamenať, že ide o čisto programový objekt a nie je nijakým spôsobom uložený v databáze. To znamená, že vytvoríme inštanciu triedy, inicializujeme vlastnosti a spustíme ju na vykonanie.

Aké nástroje máme na správu úloh na pozadí? Toto zariadenie je objekt metadát "BackdropManager"... Tento objekt má metódu "beh", pri tejto metóde sa spustí úloha na pozadí.

Má nasledujúce parametre:
"názov metódy"- názov procedúry alebo funkcie, ktorá sa má vykonať, a musí to byť procedúra alebo funkcia kontextu servera;

"Možnosti"- pole parametrov, ktorých počet prvkov musí zodpovedať počtu parametrov našej procedúry/funkcie špecifikovaných v parametri "názov metódy";

"kľúč"- určitý kľúč jedinečnosti, čo je riadok, pomocou ktorého systém pochopí, či je potrebné spustiť úlohu na pozadí alebo už bola spustená;

"Názov"- tu môžete zadať ľubovoľný popis našej metódy.

Návratová hodnota je objekt "Pozadie" obsahujúci aktuálny názov metódy, aktuálny kľúč a niekoľko ďalších vlastností a metód. Jednou z týchto metód je metóda "Počkajte na dokončenie"... Jeho účelom je povedať systému, aby nerobil nič, kým sa úloha na pozadí nedokončí.

Podkladová úloha 1C 8.2, 8.3 - Príklad použitia

Uveďme príklad práce s úlohami na pozadí 1C. Najprv si vytvoríme jednoduchý algoritmus, ktorý krátkodobo načíta systém 1C tak, že v tejto chvíli nemôžeme nič robiť.

Pre to:

1. Vytvorme všeobecný modul "Background Job Handlers" ktorý bude zostavený na strane servera;


2. Popíšme si v ňom postup exportu. "PerformBackgroundCalculation (Parameter)" ktorý preberá jeden parameter typu reťazec;

Procedure ProduceBackgroundCalculation (Parameter) ExportStartTime = CurrentDate (); Kým CurrentDate () - TimeStart< = 6 Цикл КонецЦикла ; КонецПроцедуры Процедура КнНажатие() ОбработчикиФоновыхЗаданий. ПроизветиФоновоеВычисление("nejaký parameter"); Koniec procedúry
Pripravený. Teraz, keď začnete spracovávať a stlačíte tlačidlo, systém na niekoľko sekúnd zamrzne, počas ktorých sa nedá nič robiť. Presne toto sme potrebovali urobiť.

Teraz zabezpečíme, aby sa tieto výpočty vykonávali na pozadí, teda aby sa vykonala úloha na pozadí 1C 8.2, 8.3, ale to nás neobťažuje.

Pre to:

1. Pri spracovaní v prípade stlačenia tlačidla napíšte nasledujúci kód.

Procedúra KnNazenie () Parametre = Nové pole; Možnosti. Pridať( "nejaký parameter"); Práca na pozadí. Vykonať ( "BackgroundJob Handlers.Produce and BackgroundCompute", Parametre, Nový UniqueIdentifier, "test"); Koniec procedúry

Tu ako prvý parameter odovzdáme názov procedúry všeobecného modulu a druhý - pole parametrov. Tretím parametrom je jedinečný kľúč a štvrtým je popis nášho postupu.

Pri práci v 1C existuje veľa rutinných operácií, ktoré sa musia spustiť alebo vytvoriť podľa plánu vykonaním tejto alebo tej akcie, napríklad: uchovávanie dokumentov alebo sťahovanie údajov do 1C z lokality.

Nedávno som uverejnil článok: je čas to zautomatizovať:

Plánované úlohy a úlohy na pozadí

Nástroj úloh je navrhnutý tak, aby spúšťal niektoré aplikácie alebo funkcie podľa plánu alebo asynchrónne.

Mechanizmus úloh rieši tieto úlohy:

  • Schopnosť definovať rutinné postupy vo fáze konfigurácie systému;
  • Vykonávanie určených akcií podľa harmonogramu;
  • Vykonanie volania danej procedúry alebo funkcie je asynchrónne, t.j. bez čakania na jeho dokončenie;
  • Sledovanie priebehu konkrétnej úlohy a získanie stavu jej dokončenia (hodnota označujúca úspešnosť alebo neúspešnosť jej dokončenia);
  • Získanie zoznamu aktuálnych úloh;
  • Schopnosť čakať na dokončenie jednej alebo viacerých úloh;
  • Správa úloh (možnosť zrušenia, blokovania exekúcie atď.).

Pracovný stroj pozostáva z nasledujúcich komponentov:

  • Metadáta naplánovaných úloh;
  • Rutinné úlohy;
  • Pracovné miesta na pozadí;
  • Plánovač úloh.

Úlohy na pozadí a sú navrhnuté tak, aby spúšťali aplikačné úlohy asynchrónne. Úlohy na pozadí sú implementované pomocou vstavaného jazyka.

Naplánované úlohy a sú navrhnuté tak, aby vykonávali úlohy aplikácie podľa plánu. Naplánované úlohy sú uložené v informačnej databáze a vytvárajú sa na základe metadát definovaných v konfigurácii. Metadáta naplánovanej úlohy obsahujú informácie, ako je názov, metóda, použitie atď.

Plánovaná úloha má plán, ktorý definuje, v ktorých časových bodoch by sa mala vykonať metóda spojená s plánovanou úlohou. Plán je spravidla špecifikovaný v informačnej databáze, ale môže byť špecifikovaný aj vo fáze konfigurácie (napríklad pre preddefinované naplánované úlohy).

Plánovač úloh sa používa na plánovanie vykonávania naplánovaných úloh. Pre každú naplánovanú úlohu plánovač pravidelne kontroluje, či je aktuálny dátum a čas v pláne plánovanej úlohy. Ak áno, plánovač priradí takúto úlohu na vykonanie. Na tento účel plánovač pre túto naplánovanú úlohu vytvorí úlohu na pozadí, ktorá vykoná skutočné spracovanie.

S popisom si myslím, že to stačí - poďme k implementácii:

Vytvorenie plánovanej úlohy

Názov metódy- cesta k procedúre, ktorá bude vykonaná v úlohe na pozadí podľa zadaného plánu. Postup by mal byť v spoločnom module. Odporúča sa nepoužívať typické spoločné moduly, ale vytvoriť si vlastné. Nezabudnite, že úlohy na pozadí bežia na serveri!

Použitie- znak použitia naplánovanej úlohy.

Vopred určené- označuje, či je naplánovaná úloha preddefinovaná.

Ak chcete, aby naplánovaná úloha fungovala ihneď po umiestnení do databázy, uveďte znamienko Vopred určené... V opačnom prípade budete musieť použiť spracovanie "Konzola úloh" alebo spustiť spustenie úlohy programovo.

Počet opakovaní v prípade abnormálneho dokončenia úlohy- koľkokrát bola úloha na pozadí reštartovaná, ak bola dokončená s chybou.

Interval opakovania pre abnormálne ukončenie úlohy- ako často sa úloha na pozadí reštartuje, ak bola vykonaná s chybou.

Nastavenie plánu

Rozvrh dokončenie úlohy:

Každú hodinu, len jeden deňObdobie RepeatDays = 0, RepeatPeriodPočas dňa = 3600
Každý deň, raz za deňRepeatPeriodDays = 1, RepeatPeriodOverDay = 0
Jeden deň, razObdobie opakovaných dní = 0
Každý druhý deň, raz dennePočet dní opakovania = 2
Každú hodinu od 01:00 do 07:00 každý deňDayRepeatPeriod = 1RepeatPeriodInDay = 3600 Čas začiatku = 01:00

Koniec = 07:00

Každú sobotu a nedeľu o 09.00 hodObdobie RepeatDays = 1 DaysWeeks = 6, 7 Čas začiatku = 09:00
Každý deň jeden týždeň, preskočte týždeňObdobie opakovania Počet dní = 1 Obdobie Týždeň = 2
Raz o 01:00Čas začiatku = 01:00
Posledný deň každého mesiaca je o 9:00.Obdobie opakovaných dní = 1 deň v mesiaci = -1 čas začiatku = 09:00
Piaty v každom mesiaci o 9:00Obdobie opakovaných dní = 1 deň v mesiaci = 5 čas začiatku = 09:00
Druhá streda v mesiaci o 9:00Obdobie opakovaniaDni = 1 deň v týždni v mesiaci = 2 dni v týždni = 3

Čas začiatku = 09:00

Špecifiká vykonávania úloh na pozadí vo verziách súborov a klient-server

Mechanizmy vykonávania úloh na pozadí vo verziách súborov a klient-server sú odlišné.

Vo verzii súboru musíte vytvoriť špeciálny klientsky proces, ktorý bude spracovávať úlohy na pozadí. Na tento účel musí klientsky proces pravidelne volať kontextovú funkciu ExecuteJobProcessingGlobal. Iba jeden klientsky proces na infobázu by mal spracovávať úlohy na pozadí (a preto volať túto funkciu). Ak nebol vytvorený klientsky proces na spracovanie úloh na pozadí, pri programovom prístupe k nástroju úloh sa zobrazí chyba „Správca úloh nie je aktívny“. Neodporúča sa, aby sa úlohy spracovania na pozadí klientskeho procesu používali na iné funkcie.

Po spustení procesu klienta, ktorý vykonáva spracovanie úlohy na pozadí, môžu ostatné klientske procesy programovo pristupovať k nástroju úlohy na pozadí, t.j. môže spúšťať a spravovať úlohy na pozadí.

Vo verzii klient-server na vykonávanie úloh na pozadí sa používa plánovač úloh, ktorý je fyzicky umiestnený v správcovi klastrov. Plánovač pre všetky úlohy na pozadí vo fronte dostane najmenej zaneprázdnený pracovný tok a použije ho na vykonanie zodpovedajúcej úlohy na pozadí. Pracovný proces spustí úlohu a upozorní plánovač na výsledky vykonania.

Vo verzii klient-server je možné blokovať vykonávanie naplánovaných úloh. K blokovaniu vykonávania naplánovaných úloh dochádza v nasledujúcich prípadoch:

  • V informačnej databáze je nainštalované explicitné blokovanie naplánovaných úloh. Zámok je možné nastaviť cez konzolu klastra;
  • Na informačnej základni je nainštalované blokovanie pripojenia. Zámok je možné nastaviť cez konzolu klastra;
  • Metóda SetExclusiveMode () bola volaná z vloženého jazyka s parametrom True;
  • V niektorých iných prípadoch (napríklad pri aktualizácii konfigurácie databázy).

Spracovanie spúšťania a prezerania naplánovaných úloh môžete stiahnuť tu.

Tento článok poskytuje príklad práce s úlohami na pozadí, ako napr 1C spúšťa úlohy na pozadí ako môžete získať zoznam úloh pomocou metódy "GetBackgroundJobs ()"... Takže táto metóda nám vráti nejaké pole. Pozrime sa, čo obsahuje.

Dovoľte mi hneď urobiť výhradu, že daný príklad bol vyvinutý vo verzii klient-server databázy.

Vyššie uvedený obrázok zobrazuje obsah tohto poľa.

Venujte pozornosť poľu "Štát"... Obsahuje informácie o tom, či sa spustená úloha na pozadí úspešne dokončila alebo stále beží.

Obsahuje aj informácie o neúspešnom vykonaní úlohy. Toto pole obsahuje aj informácie o kľúčoch, jedinečných identifikátoroch a názvoch úloh na pozadí. Informácie o spustených a dokončených úlohách sú uložené v informačnej databáze, ale počet záznamov v tabuľke je obmedzený. Toto číslo je asi 1000 záznamov. To znamená, že pri pridávaní nových prvkov sa staré vymažú. Úloha sa tiež odstráni z tabuľky, ak bola dokončená pred viac ako dňom.

Príklad práce s úlohou na pozadí 1C - metóda "GetBackgroundJobs"

Pozrime sa tiež na prácu s úlohami na pozadí pomocou príkladu metódy "GetBackgroundJobs ()"... Pri tomto spôsobe je možné nastaviť výber pre prijaté záznamy. To znamená, že musíme metóde odovzdať štruktúru ako parameter.

Štruktúra môže obsahovať polia: Jedinečný identifikátor, kľúč, stav, začiatok, koniec, názov, názov metódy, bežná úloha.

Ak by sme napríklad potrebovali iba spustené úlohy, uložili by sme výber s názvom prvku štruktúry „State“ a hodnota by udávala systémovú enumeráciu „BackgroundJobStatus“ do aktívneho stavu. Takže najprv musíte zabezpečiť, aby sa záznamy o vykonávaní úloh na pozadí 1C objavili v demo databáze.


Na implementáciu príkladu urobme nasledovné:
1. Vytvorme všeobecný modul "Background Job Handlers" beží na serveri.

A pridajte k nemu nasledujúci kód:

Procedúra PerformBackgroundCalculation (Parameter) Export

StartTime = CurrentDate ();

Kým CurrentDate () - TimeStart Cyklus

Koniec cyklu;

Koniec procedúry

2. Vytvorme spracovanie, umiestnime tlačidlo na formulár "Dokončite úlohu na pozadí" a v postupe spracovania udalosti stlačenia tlačidla doplňte kód:

& Procedúra AtClient ExecuteJob (príkaz) ExecuteBackgroundJobServer (); Koniec procedúry

Popis volanej procedúry:

& Procedúra AtServer ExecuteBackgroundJobOnServer () Parameters BackgroundJob = Nové pole; Možnosti BackgroundJob. Pridať( "nejaký parameter" "test"); BackgroundJobParameters = Nové pole; Možnosti BackgroundJob. Pridať( "nejaký parameter"); Úlohy na pozadí. Vykonať ( "BackgroundHandlers.ProduceBackgroundComputing".BackgroundParameters, New UniqueIdentifier, "Testovacia úloha 2"); Koniec procedúry // ExecuteBackgroundJobServer ()

Teraz spustíme 1C v podnikovom režime a spustíme úlohu na pozadí.


Pripravený. Týmito akciami sme dosiahli, že v našej demo databáze boli záznamy o vykonávaní úloh na pozadí 1C a teraz môžeme demonštrovať príklad zahrnutia ich poľa do našej databázy.

Pridajme do formulára ďalšie tlačidlo "Získať úlohy na pozadí"... Napíšme nasledujúci kód v procedúre spracovania kliknutí:

& OnClient Postup GetBackgroundJobs (príkaz) GetBackgroundJobsOnServer (); Koniec procedúry

Text postupu na serveri:

& AtServer Postup GetBackgroundJobsOnServer () SelectionParameters = Nová štruktúra ("Názov", "Testovacia úloha 2"); BackgroundJobsList = BackgroundJobs. GetBackgroundJobs (SelectionParameters); Pre každú úlohu zo zoznamu úloh na pozadí cyklická správa (názov úlohy); Koniec cyklu; Koniec procedúry // GetBackgroundJobsOnServer ()

Začnime 1C na vykonanie a stlačte tlačidlo "Získať úlohy na pozadí".

Ako zrýchliť prácu v 1C: Účtovníctvo 8.3 (revízia 3.0) alebo zakázať rutinné úlohy a úlohy na pozadí

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

Tí z vás, ktorým sa už podarilo prejsť na novú verziu 1C: Accounting 8.3 (verzia 3.0), ste si všimli, že funguje pomalšie ako tieto dve. Nejaké nepochopiteľné spomalenia, nekonečné úlohy na pozadí niekoľkokrát denne, o ktoré ju bez nášho vedomia nikto nežiadal.

Ihneď po prechode mi moji účtovníci povedali, že nová verzia 1C: Accounting 3.0 sa v porovnaní s predchádzajúcimi, úprimne povedané, spomaľuje! A pracovať je jednoducho nemožné.

Začal som na to prichádzať a veľmi skoro som zistil, že hlavným dôvodom zamrznutia a následnej nespokojnosti používateľov sú naplánované úlohy a úlohy na pozadí, z ktorých mnohé sú štandardne povolené, hoci pre veľkú väčšinu účtovníkov ich nepotrebuje .

Prečo napríklad musíme stokrát denne spúšťať úlohu „Extrahovať text“, ak nevykonávame fulltextové (účtovníci, neľakajte sa) prehľadávanie všetkých objektov v našej databáze.

Alebo prečo neustále sťahovať kurzy mien, ak nemáme menové transakcie alebo ich robíme príležitostne (a predtým môžeme sami kliknúť na tlačidlo sťahovania kurzov).

To isté platí pre neustále pokusy 1C pripojiť sa k stránke a kontrolovať a aktualizovať bankové klasifikátory. Za čo? Sám stlačím tlačidlo aktualizovať klasifikátory, ak nenájdem požadovanú banku podľa jej BIC.

Ako na to podľa bodov nižšie.

1. Prejdite do sekcie "Správa" a vyberte položku "Údržba" na paneli akcií ():

2. V okne, ktoré sa otvorí, nájdite a vyberte položku „Naplánované úlohy a úlohy na pozadí“:

3. Otvorte každú úlohu, ktorá má stĺpec „Zapnuté“. je tam kavka.

4. Zrušte začiarknutie políčka Povolené a kliknite na tlačidlo Uložiť a zavrieť.

5. Urobte to s každou zo zahrnutých úloh a užite si nové vydanie. Vo všeobecnosti je to podľa mňa oveľa lepšie ako dvojka.

Platforma zároveň zapne niektoré z naplánovaných úloh, ktoré ste aj tak zakázali.