Įprastos ir foninės užduotys. Įprastos ir foninės užduotys Sukurkite įprastą užduotį per 1s 8.2

Asinchroninio programavimo koncepcija

Asinchroninio programavimo koncepcija yra ta, kad funkcijos rezultatas pasiekiamas ne iš karto, o po kurio laiko tam tikro asinchroninio (pažeidžiančio įprastą vykdymo tvarką) iškvietimo forma.

Tie. Pagrindinė asinchroninio programavimo idėja yra atlikti individualius metodų iškvietimus ir tęsti kitus darbus lygiagrečiai nelaukiant, kol skambučiai baigsis.

Kai kurie metodai, kurie sumažina išimčių tikimybę, nereikalauja asinchroninio požiūrio, tačiau kiti to reikalauja pačioje kūrimo pradžioje.

Kaip matyti iš grafikų, sinchroninio programavimo modelio atveju nėra naudingų interaktyvių vartotojo veiksmų koeficiento, nes sistema blokuoja vartotojo sąsają, o naudojant asinchroninį modelį, vartotojas toliau aktyviai dirba sistemoje.

Kai programa veikia sinchroniškai, ji turi tik vieną giją. Naudodami asinchroninio programavimo modelį galite paleisti kelias gijas lygiagrečiai ir reaguoti į naujus vartotojo veiksmus jiems vykdant. Įvykdžius n giją, ekrane rodomas rezultatas.

Fono užduotys 1C:Enterprise 8

1C:Enterprise 8 foninės užduotys skirtos asinchroniškai atlikti taikomųjų programų užduotis. Jie gali generuoti antrines fono užduotis, pavyzdžiui, norėdami lygiagrečiai atlikti sudėtingus skaičiavimus skirtinguose klasterio serveriuose kliento-serverio veikimo režimu.

Galima apriboti foninių užduočių, turinčių tuos pačius metodus, vykdymą, remiantis konkrečiu taikymo kriterijumi. Programinis foninių užduočių kūrimas ir valdymas galimas iš bet kurio vartotojo prisijungimo prie sistemos informacinės bazės. Foninė užduotis vykdoma ją sukūrusio vartotojo vardu.

Užduočių mechanizmas veikia tiek kliento-serverio, tiek failo veikimo režimuose, tačiau abiejų versijų užduočių administravimo ir vykdymo galimybės šiek tiek skiriasi.

Kliento-serverio parinktis

Kliento-serverio versijoje užduočių planavimą atlieka užduočių planuoklis, kuris fiziškai yra klasterio tvarkyklėje.

Planuotojas periodiškai tikrina, ar buvo gauta užklausų paleisti fonines užduotis. Jei yra užduočių, kurias reikia vykdyti, planuotojas nustato mažiausiai apkrautus darbuotojų procesus klasteryje ir nuosekliai priskiria kiekvienam iš jų vykdytiną užduotį. Taigi, tas pats darbuotojo procesas gali lygiagrečiai atlikti kelias užduotis. Darbuotojo procesui gavus užduotį, darbuotojo procesas užmezga ryšį su informacijos baze ir vykdo užduotį per tą ryšį. Kai darbas bus baigtas, darbuotojo procesas praneša planuotojui, ar darbas atliktas sėkmingai, ar nesėkmingai.

Failo parinktis

Pradedant nuo 8.3.3.641 platformos versijos, kūrėjai žymiai supaprastino darbą su foninėmis užduotimis failo versijoje.

Anksčiau, norint automatiškai vykdyti užduotis, reikėjo paleisti atskirą papildomą 1C:Enterprise seansą, naudojamą kaip užduočių planuoklis. Ir šioje sesijoje reikėjo periodiškai vykdyti integruotą kalbos metodą ExecuteTaskProcessing().Šis metodas buvo gana sudėtingas, nepatogus ir labai apribojo foninių ir įprastų užduočių naudojimą failų versijoje.

Dabar viskas tapo daug lengviau. Jei paleidžiamas plonas arba storas klientas, taip pat jei žiniatinklio serveris turi kliento ryšius, tada kiekvienoje iš šių programų automatiškai paleidžiama kita gija su ryšiu su duomenų baze. Šios gijos atlieka fonines ir įprastas užduotis.

Kiekviena iš išvardytų programų atlieka savo fonines užduotis. Jei programa inicijavo keletą foninių užduočių, jos vykdomos paeiliui gavimo tvarka.

Akivaizdus 1C fono darbų trūkumas: kadangi jie vykdomi serverio pusėje, nėra galimybės interaktyviai dirbti su vartotoju (pavyzdžiui, neįmanoma parodyti pranešimo ar kitos informacijos; visi šie duomenys turi būti saugomi informacijos bazėje ir toliau tvarkomi tam tikru būdu).

Reikėtų pažymėti, kad foninės užduotys yra grynai programinės įrangos objektai ir negali būti saugomi duomenų bazėje. Tai reiškia, kad galime sukurti tik klasės egzempliorių, inicijuoti jos savybes ir paleisti ją vykdyti.

Asinchroninio kodo vykdymo pavyzdys 1C:Enterprise 8

„Rašyti programas, kuriose funkcijos iškvietimo rezultatas ateina nežinia kada, yra daug sunkiau nei įprastas. Įdėti skambučiai, klaidų valdymas, kontrolė, kas vyksta – viskas tampa sudėtingesnė“, – tai sakys tik tie, kurie nemoka tinkamai naudotis platformos galimybėmis, bet ne mes!

Parodykime asinchroninio kodo vykdymo paprastumą ir eleganciją 1C:Enterprise 8!

1 žingsnis. Sukurkime naują informacijos apsaugos sistemą konfigūracijos kūrimui

2 žingsnis. Konfigūracijoje pridėsime bendrąjį modulį „Asinchroniniai tvarkytojai“

Kodėl pridėjome bendrinamą modulį? Čia viskas paprasta: norint atlikti asinchronines operacijas 1C:Enterprise 8, naudojamos foninės užduotys, kurios turi savo tvarkyklę - „BackgroundTask Manager“. Šis objektas turi „Run“ metodą, kurio pagalba paleidžiama foninė užduotis.

Kreipkimės į sintaksės asistentą.

Taigi mums reikės bendro modulio.

3 veiksmas. Bendrajame modulyje „Asinkroniniai tvarkytojai“ pridėsime eksporto procedūrą OurLongOperation()

Procedūra OurLongOperation(Duration) Export // Ilgalaikio veiksmo modeliavimas (Trukmė sek.). OperationStartDate = Dabartinė data(); Nors CurrentDate() – operacijos pradžios data< Длительность Цикл КонецЦикла; КонецПроцедуры

4 veiksmas. Pridėkite „Asinchroninio programavimo koncepcijos“ apdorojimą prie konfigūracijos (galite sukurti išorinį apdorojimą)

Pridėkite vieną atributą prie formos:

Trukmė (skaičius)

ir dvi komandos

Atlikti LongOperaciją;

Atlikite ilgą ir ilgą operaciją asinchroniškai.

5 veiksmas. Pasak sintaksės asistento, užpildykite formos modulį

&Kliento procedūroje Atlikite Long-RunningOperation(Command) ExecuteLong-RunningOperationOnServer(); EndProcedure &OnServer Procedūra ExecuteLongOperationOnServer() AsynchronousHandlers.OurLongOperation(Duration); Procedūros pabaiga &Kliente Procedūra Atlikite ilgalaikę operaciją asinchroniškai (komandą) Atlikite ilgalaikę operaciją asinchroniškai serveryje (); Procedūros pabaiga &Serveryje Procedūra Atlikite ilgą ir ilgą operaciją asinchroniškaiServeryje() Parameters = naujas masyvas; Parameters.Add(Duration); BackgroundTasks.Execute("AsynchronousHandlers.OurLongOperation", Parameters, New UniqueIdentifier, "Asinchroninio programavimo koncepcijos pavyzdys"); Procedūros pabaiga

6 veiksmas Paleiskime ir patikrinkime!

Rezultatas:

Jei spustelėjame mygtuką „Atlikti ilgą operaciją“, vartotojo sąsaja blokuojama „Trukmė“ sekundėms;

Jei paspaudžiame mygtuką „Atlikti ilgalaikę operaciją asinchroniškai“, vartotojo sąsaja neužblokuojama ir programos kodas vykdomas lygiagrečiai.

Pažiūrėję į žurnalą galime patikrinti, ar programos kodas vykdomas asinchroniškai.

Galime derinti programos kodą, kuris veikia „fone“, jei derinimo parametruose nustatome atitinkamą ypatybę.

Asinchroninio kodo vykdymo pavyzdys 1C:Enterprise 8 naudojant BSP

Panagrinėkime asinchroninio programavimo koncepcijos 1C:Enterprise 8 įgyvendinimo BSP pavyzdį, naudodami apdorojimo „Aktualūs reikalai“ pavyzdį.

Logika yra tokia: paleidus programą, inicijuojama pradinio puslapio darbo sritis, kurioje gali būti rodoma apdorojimo forma „Aktualūs reikalai“. Ši forma pildoma atsižvelgiant į vartotojo aktualijas, o jos užpildymas užtrunka. Jei kūrėjai neturėtų galimybės vykdyti kodo asinchroniškai, tada vartotojo sąsaja būtų užblokuota, kol buvo pildoma apdorojimo forma!

Išanalizuokime formos programos kodą.

Formos įvykis „When CreatedOnServer“ iškviečia „RunBackgroundTask“ procedūrą – štai ko mums reikia.

Nesiblaškydami nuo niuansų, paanalizuokime šią procedūrą

Ir čia matome, kad naudojamas fono darbų vadovas ir jo „Vykdymo“ metodas. Atminkite, kad kūrėjai saugo unikalų fono darbo ID.

Norėdami tai padaryti, kūrėjai naudoja šį metodą ConnectWaitHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>).



Susietoje procedūroje Connectable_CheckTaskComplete() kūrėjai vadina funkciją Užduotis baigta (užduoties ID)


Ši funkcija pagal identifikatorių tikrina foninės užduoties vykdymą.

Reikėtų pažymėti, kad BSP sukūrė bendruosius modulius, skirtus palaikyti ilgalaikes serverio operacijas.

Taigi, asinchroninio programavimo koncepcija 1C:Enterprise 8 šiek tiek padidina kūrėjo problemų sprendimo sudėtingumą, tačiau vartotojo požiūriu žymiai pagerina programos funkcionalumą.

Kaip pagreitinti darbą naudojant 1C: Apskaita 8.3 (3.0 leidimas) arba išjungti įprastas ir fonines užduotis

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

Tie, kurie jau perėjo į naują 1C: Apskaita 8.3 (3.0 leidimas) leidimą, pastebėjo, kad jis tapo lėtesnis nei 2. Kažkoks keistas sulėtėjimas, nesibaigiančios foninės užduotys kelis kartus per dieną, kurių niekas neprašė jos atlikti be mūsų žinios.

Mano buhalteriai iškart po perėjimo man pasakė, kad naujasis „1C: Accounting 3.0“ leidimas yra labai lėtas, palyginti su ankstesniais! O dirbti tiesiog neįmanoma.

Pradėjau domėtis ir labai greitai išsiaiškinau, kad pagrindinė užstrigimo ir vėlesnio vartotojų nepasitenkinimo priežastis yra įprastinės ir foninės užduotys, kurių daugelis yra įjungtos pagal nutylėjimą, nors didžiajai daugumai buhalterių to nereikia.

Na, pavyzdžiui, kodėl mums reikia šimtą kartų per dieną vykdyti užduotį „Teksto ištraukimas“, jei neatliekame viso teksto (buhalteriai, nesijaudinkite) visuose mūsų duomenų bazės objektuose.

Arba kam nuolat atsisiųsti valiutų kursus, jei valiutų operacijų neturime arba jas darome retkarčiais (o prieš tai patys galime paspausti atsisiuntimo kursų mygtuką).

Tas pats pasakytina apie nuolatinį 1C bandymą prisijungti prie svetainės ir patikrinti bei atnaujinti banko klasifikatorius. Kam? Aš pats paspausiu mygtuką atnaujinti klasifikatorius, jei nerasiu tinkamo banko pagal jo BIC.

Kaip tai padaryti žingsnis po žingsnio žemiau.

1. Eikite į skyrių „Administravimas“ ir veiksmų skydelyje pasirinkite „Priežiūra“ ():

2. Atsidariusiame lange raskite ir pasirinkite „Įprastos ir foninės užduotys“:

3. Atidarykite kiekvieną užduotį, kurios stulpelyje „Įjungta“ nurodyta „Įjungta“. yra aušra.

4. Panaikinkite žymėjimą „Įjungta“ ir spustelėkite mygtuką „Išsaugoti ir uždaryti“.

5. Atlikite tai su kiekviena įtraukta užduotimi ir mėgaukitės naujuoju leidimu. Apskritai, mano nuomone, tai daug geriau nei du.

Tuo pačiu metu platforma vis tiek įgalins kai kurias suplanuotas užduotis, kurias išjungėte.

Turbūt kiekvienas 1C 8.3 programuotojas anksčiau ar vėliau turėjo susidėlioti tam tikrų užduočių vykdymą pagal grafiką. Žemiau pateiksiu išsamų šių mechanizmų aprašymą, tikiuosi, kad tai bus naudinga informacija pradedantiesiems 1C programuotojams. Tai labai patogu, nes tai nereikalauja žmogaus veiksmų, įprastinė užduotis sukonfigūruojama vieną kartą ir veikia pagal jūsų tvarkaraštį.

Išsamias instrukcijas rasite naudodami toliau pateiktą pavyzdį.

Kas yra įprastinės ir foninės užduotys 1C

  • Suplanuotos užduotys yra specialus 1C Enterprise 8.3 mechanizmas, skirtas atlikti konkretų veiksmą pagal nurodytą tvarkaraštį.
  • Fono darbas- įprastinės užduoties sugeneruoti objektai, kurie tiesiogiai atlieka numatytą veiksmą, nedalyvaujant vartotojui ar 1C 8.2 programuotojui.

Įprastų ir foninių užduočių mechanizmas veikia kliento-serverio režimu (SQL) dėl DBVS funkcionalumo. Jei turite failų duomenų bazę, užduotį taip pat galima konfigūruoti, tačiau pagal šiek tiek kitokį principą.

Foninių užduočių nustatymas 1C kliento-serverio režimu

Pirmiausia sukurkime naują metaduomenų objektą – įprastą užduotį. Savo užduotį pavadinsiu „Valiutų kursų įkėlimas“. Pažvelkime į šio konfigūracijos objekto savybių paletę:

Gaukite 267 vaizdo įrašų pamokas 1C nemokamai:

  • Metodo pavadinimas— kelias į procedūrą, kuri bus vykdoma foninėje užduotyje pagal nurodytą tvarkaraštį. Procedūra turi būti bendrame modulyje. Rekomenduojama nenaudoti standartinių, o kurti savo. Nepamirškite, kad foninės užduotys vykdomos serveryje!
  • Naudojimas— įprastos užduoties naudojimo požymis.
  • Iš anksto nustatyta— nurodo, ar įprasta užduotis yra iš anksto nustatyta. Jei norite, kad įprastinė užduotis veiktų iš karto po įtraukimo į duomenų bazę, nurodykite šią vėliavėlę. Priešingu atveju turėsite naudoti Job Console apdorojimą arba priversti užduotį vykdyti programiškai.
  • Pakartotinių bandymų skaičius, kai užduotis nutraukiama neįprastai— kiek kartų foninė užduotis buvo paleista iš naujo, jei ji buvo atlikta su klaida.
  • Pakartotinio bandymo intervalas, kai užduotis baigiasi neįprastai— kaip dažnai foninė užduotis bus paleista iš naujo, jei ji buvo baigta su klaida.

O įdomiausia aplinka yra Tvarkaraštis:

Čia sukonfigūruojate lauke „Metodo pavadinimas“ nurodytos procedūros paleidimo intervalą. Tarkime, sukonfigūravau

Dėmesio! Nepamirškite išjungti įprastų ir foninių užduočių blokavimo DBVS lygiu!

Tai galima padaryti kliento-serverio versijos administravimo programoje arba kuriant naują duomenų bazę:

Įprastų užduočių nustatymas 1C failo režimu

Failų režimu tokius darbus nustatyti yra šiek tiek sunkiau. Norint atlikti tokią užduotį, turi būti paleista atskira 1C programos sesija. Tai dažnai išsprendžiama sukuriant „techninį“ vartotoją, kurio sesija visada veikia.

Failo režimu įprasta užduotis inicijuojama, kai paleidžiamas metodas „RunTaskProcessing()“.

Konkrečiam vartotojui galite sukonfigūruoti šį metodą, kad jis būtų paleistas naudojant kitą metodą −

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

  • Procedūros pavadinimas— procedūros, prijungtos kaip laukimo tvarkytojas, pavadinimas. Valdomos programos modulio (įprasto programos modulio) arba visuotinio bendrinamo modulio eksportuotos procedūros pavadinimas. Procedūra turi būti nurodyta kliente.
  • Intervalas— laikotarpis tarp operacijų vykdymo sekundėmis.
  • Vieną kartą- kaip atlikti užduotį vieną kartą ar ne.

ConnectWaitHandler, 3600 );

Dviejų minučių vaizdo įrašas, kuriame parodyta, kaip nustatyti įprastą užduotį 1C konfigūratoriuje:

Dirbant 1C yra daugybė įprastų operacijų, kurias reikia pradėti arba suplanuoti norint atlikti vieną ar kitą veiksmą, pvz.: dokumentų paskelbimas arba duomenų įkėlimas į 1C iš svetainės.

Neseniai paskelbiau straipsnį: Atėjo laikas tai automatizuoti:

Įprastos ir foninės užduotys

Užduočių variklis sukurtas bet kokiai programai ar funkcijoms atlikti pagal grafiką arba asinchroniškai.

Užduočių mechanizmas išsprendžia šias problemas:

  • Gebėjimas apibrėžti reguliavimo procedūras sistemos konfigūravimo etape;
  • Nurodytų veiksmų atlikimas pagal grafiką;
  • Iškviesti tam tikrą procedūrą ar funkciją asinchroniškai, t.y. nelaukiant jo pabaigos;
  • Konkrečios užduoties eigos stebėjimas ir jos atlikimo būsenos gavimas (reikšmė, nurodanti, ar ji buvo sėkminga, ar ne);
  • Dabartinių užduočių sąrašo gavimas;
  • Galimybė palaukti, kol bus atlikta viena ar daugiau užduočių;
  • Darbo valdymas (galimybė atšaukti, blokuoti vykdymą ir pan.).

Darbo mechanizmas susideda iš šių komponentų:

  • Įprastų užduočių metaduomenys;
  • Reguliarūs darbai;
  • Fono darbai;
  • Darbų planuotojas.

Foninės užduotys ir yra skirtos asinchroniškai atlikti taikomųjų programų užduotis. Fono užduotys įgyvendinamos naudojant integruotą kalbą.

Suplanuotos užduotys ir skirtos programos užduotims atlikti pagal tvarkaraštį. Įprastos užduotys saugomos informacijos bazėje ir sukuriamos remiantis konfigūracijoje apibrėžtais metaduomenimis. Reguliavimo užduoties metaduomenyse yra tokia informacija kaip pavadinimas, metodas, naudojimas ir kt.

Įprastinė užduotis turi tvarkaraštį, kuris nustato, kada turi būti vykdomas su įprasta užduotimi susietas metodas. Tvarkaraštis, kaip taisyklė, yra nurodytas informacijos bazėje, bet gali būti nurodytas ir konfigūracijos etape (pavyzdžiui, iš anksto nustatytoms įprastoms užduotims).

Užduočių planuoklis naudojamas planuoti įprastų užduočių vykdymą. Kiekvienam suplanuotam darbui planuotojas periodiškai tikrina, ar dabartinė data ir laikas atitinka suplanuotos užduoties tvarkaraštį. Jei jis atitinka, planuotojas priskiria tą užduotį vykdyti. Norėdami tai padaryti, šiai suplanuotai užduočiai planuoklis sukuria foninę užduotį, kuri atlieka faktinį apdorojimą.

Manau, kad aprašymo užtenka - pereikime prie įgyvendinimo:

Įprastos užduoties kūrimas

Metodo pavadinimas– kelias į procedūrą, kuri bus vykdoma foninėje užduotyje pagal nurodytą tvarkaraštį. Procedūra turi būti bendrame modulyje. Rekomenduojama nenaudoti standartinių bendrų modulių, o susikurti savo. Nepamirškite, kad foninės užduotys vykdomos serveryje!

Naudojimas– rutininės užduoties naudojimo ženklas.

Iš anksto nustatyta– nurodo, ar įprasta užduotis yra iš anksto nustatyta.

Jei norite, kad įprastinė užduotis veiktų iš karto po įtraukimo į duomenų bazę, nurodykite atributą Iš anksto nustatyta. Kitu atveju turėsite naudoti „Job Console“ apdorojimą arba suaktyvinti užduotį, kad ji būtų paleista programiškai.

Pakartotinių bandymų skaičius, kai užduotis nutraukiama neįprastai– kiek kartų foninė užduotis buvo paleista iš naujo, jei ji buvo atlikta su klaida.

Pakartotinio bandymo intervalas, kai užduotis baigiasi neįprastai– kaip dažnai foninė užduotis bus paleista iš naujo, jei ji buvo baigta su klaida.

Tvarkaraščio sudarymas

Tvarkaraštis atlikti užduotį:

Kas valandą, tik vieną dieną„RepeatDays“ laikotarpis = 0, „RepeatDays“ laikotarpis = 3600
Kiekvieną dieną kartą per dieną„RepeatDays“ laikotarpis = 1, „RepeatDays“ laikotarpis = 0
Vieną dieną, vieną kartąPeriodRepeatDays = 0
Kas antrą dieną kartą per dienąPeriodRepeatDays = 2
Kas valandą nuo 01:00 iki 07:00 kiekvieną dienąPeriodRepeatDays = 1RepeatPeriodDuringDay = 3600Pradžios laikas = 01.00

Pabaigos laikas = 07.00

Kiekvieną šeštadienį ir sekmadienį 09.00 valKartotinių dienų laikotarpis = 1 savaitės dienos = 6, 7 pradžios laikas = 09.00
Kiekvieną dieną vieną savaitę, praleiskite savaitęPeriodRepeatDays = 1PeriodSavaitės = 2
Vieną kartą 01.00 valPradžios laikas = 01.00
Paskutinę kiekvieno mėnesio dieną 9.00 val.PeriodRepeatDays = 1DienaInMonth = -1Pradžios laikas = 09.00
Kiekvieno mėnesio penktą dieną 9.00 valPeriodRepeatDays = 1DienaInMonth = 5Pradžios laikas =09.00
Kiekvieno mėnesio antrą trečiadienį 9:00 valPeriodasPakartotinės dienos = 1 dienaSavaitė Mėnuo = 2 dienosSavaitė = 3

Pradžios laikas = 09.00 val

Foninių užduočių vykdymo ypatybės failų ir kliento-serverio variantuose

Foninių užduočių vykdymo mechanizmai failo ir kliento-serverio versijose skiriasi.

Failo versijoje turite sukurti specialų kliento procesą, kuris atliks fonines užduotis. Norėdami tai padaryti, kliento procesas turi periodiškai iškviesti visuotinio konteksto funkciją ExecuteJobProcessing. Tik vienas kliento procesas vienoje informacijos bazėje turėtų apdoroti fonines užduotis (ir atitinkamai iškviesti šią funkciją). Jei kliento procesas nebuvo sukurtas foninėms užduotims apdoroti, programiškai pasiekiant užduočių variklį, bus rodoma klaida „Užduočių tvarkyklė neaktyvi“. Nerekomenduojama naudoti kliento proceso, kuris apdoroja kitų funkcijų fonines užduotis.

Pradėjus kliento proceso apdorojimo fonines užduotis, kiti kliento procesai gali programiškai pasiekti fono užduočių variklį, t.y. gali vykdyti ir valdyti fonines užduotis.

Kliento-serverio versijoje Norint atlikti fonines užduotis, naudojamas užduočių planuoklis, kuris fiziškai yra klasterio tvarkyklėje. Visoms eilėje esančioms fono užduotims planuoklis gauna mažiausiai įkeliamą darbuotojo procesą ir naudoja jį atitinkamai foninei užduočiai vykdyti. Darbuotojo procesas atlieka darbą ir praneša planuotojui apie vykdymo rezultatus.

Kliento-serverio versijoje galima blokuoti įprastų užduočių vykdymą. Įprastų užduočių vykdymas blokuojamas šiais atvejais:

  • Informacinėje bazėje įdiegtas aiškus įprastų užduočių blokavimas. Užraktą galima nustatyti per klasterio konsolę;
  • Informacinėje bazėje yra ryšio blokas. Užraktą galima nustatyti per klasterio konsolę;
  • Metodas SetExclusiveMode() su parametru True buvo iškviestas iš integruotos kalbos;
  • Kai kuriais kitais atvejais (pavyzdžiui, atnaujinant duomenų bazės konfigūraciją).

Suplanuotų užduočių paleidimo ir peržiūros apdorojimas galite atsisiųsti čia.

Šiame straipsnyje pateikiamas darbo su foninėmis užduotimis pavyzdys, kaip nurodyta Pradedamos 1C foninės užduotys, kaip galite gauti užduočių sąrašą naudodami metodą „GetBackgroundTasks()“. Taigi, šis metodas mums grąžina tam tikrą masyvą. Pažiūrėkime, kas jame yra.

Leiskite man iš karto padaryti išlygą, kad pateiktas pavyzdys buvo sukurtas duomenų bazės kliento-serverio versijoje.

Aukščiau pateiktame paveikslėlyje parodytas šio masyvo turinys.

Atkreipkite dėmesį į lauką "valstybė". Jame pateikiama informacija apie tai, ar vykdoma foninė užduotis sėkmingai baigta, ar vis dar vykdoma.

Jame taip pat pateikiama informacija apie nesėkmingą užduoties atlikimą. Šiame masyve taip pat yra informacijos apie raktus, unikalius identifikatorius ir foninių užduočių pavadinimus. Informacija apie vykdomas ir atliktas užduotis saugoma informacijos bazėje, tačiau lentelėje saugomų įrašų skaičius yra ribojamas. Šis skaičius yra apie 1000 įrašų. Tai yra, kai pridedami nauji elementai, seni pašalinami. Taip pat užduotis ištrinama iš lentelės, jei ji buvo atlikta daugiau nei prieš dieną.

Darbo su fonine užduotimi pavyzdys 1C – metodas „GetBackgroundTasks“

Taip pat pažiūrėkime, kaip dirbti su foninėmis užduotimis naudojant metodo pavyzdį „GetBackgroundTasks()“. Šiuo metodu galima nustatyti gautų įrašų pasirinkimą. Tai yra, mes turime perduoti struktūrą kaip metodo parametrą.

Struktūroje gali būti laukai: Unikalus identifikatorius, raktas, būsena, pradžia, pabaiga, pavadinimas, metodo pavadinimas, suplanuota užduotis.

Pavyzdžiui, jei mums reikia tik vykdomų užduočių, taikytume pasirinkimą su struktūros elemento pavadinimu „Būsena“ ir reikšme, aktyvioje būsenoje nurodytume sistemos sąrašą „BackgroundTask State“. Taigi, pirmiausia turite užtikrinti, kad demonstracinėje duomenų bazėje būtų įrašai apie 1C fono užduočių vykdymą.


Norėdami įgyvendinti pavyzdį, atliksime šiuos veiksmus:
1. Sukurkime bendrą modulį „Foninės užduočių tvarkyklės“ vykdomas serveryje.

Ir pridėkite prie jo šį kodą:

Procedūra ProduceBackgroundCalculation (parametras) eksportuoti

Laiko pradžia = CurrentDate() ;

Nors CurrentDate() – pradžios laikas Ciklas

EndCycle ;

Procedūros pabaiga

2. Sukurkime apdorojimą ir uždėkite mygtuką ant formos „Vykdyti užduotį fone“ ir mygtuko paspaudimo įvykio apdorojimo procedūroje pridėkite šį kodą:

&Kliento procedūroje ExecuteTask(Command) ExecuteBackgroundTaskOnServer() ; Procedūros pabaiga

Iškviestos procedūros aprašymas:

&OnServer procedūra ExecuteBackgroundTaskOnServer()BackgroundTask Parameters = naujas masyvas; BackgroundTask parametrai. Papildyti( "Kažkoks parametras" "testas") ; BackgroundTaskParameters = naujas masyvas; BackgroundTask parametrai. Papildyti( "Kažkoks parametras") ; Fono užduotys. Paleisti ( "Foninės užduočių tvarkyklės. Atlikite foninį skaičiavimą", BackgroundTask parametrai, naujas unikalus identifikatorius, „2 bandomoji užduotis“) ; Procedūros pabaiga // Vykdyti BackgroundTaskOnServer()

Dabar paleiskite 1C įmonės režimu ir pradėkime vykdyti foninę užduotį.


Paruošta. Šiais veiksmais užtikrinome, kad įrašai apie 1C fono užduočių vykdymą atsirastų mūsų demonstracinėje duomenų bazėje, ir dabar galime parodyti pavyzdį, kaip gauti jų masyvą, esantį mūsų duomenų bazėje.

Pridėkime prie formos dar vieną mygtuką „Gauti foninius darbus“. Parašykime šį kodą paspaudimų apdorojimo procedūroje:

&Apie kliento procedūrą GetBackgroundJob(Command) GetBackgroundJobOnServer() ; Procedūros pabaiga

Procedūros tekstas serveryje:

&OnServer procedūra GetBackgroundTasksOnServer() pasirinkimo parametrai = New Structure("Vardas" , „2 bandomoji užduotis“) ; ListBackgroundTasks = BackgroundTasks. GetBackgroundTasks(Pasirinkimo parametrai) ; Kiekvienai užduočiai iš foninių užduočių sąrašo ciklo ataskaita (Užduoties pavadinimas) ; EndCycle ; Procedūros pabaiga // GetBackgroundTasksOnServer()

Paleiskite 1C vykdymui ir paspauskite mygtuką „Gauti foninius darbus“.

mob_info