1s Foninio darbo darbuotojo procesas baigėsi neįprastai. Fono darbo procesas baigėsi neįprastai. Asinchroninio programavimo samprata
Kl .: foninis darbo procesas užstrigo...
Geros dienos ir geros savaitės visiems!
Įmonės apskaita, 3.0 leidimas (3.0.46.11).
Platforma 8.3.9.2033.
Skelbiant dokumentus paketais, atsiranda klaida „Foninis darbo procesas užstrigo“. Priežastis nenurodyta...
Iš naujo paleidus SQL serverį, serveris 1C (niekada nežinai) nepadeda... Gal kas susidūrėte su panašia problema ??? Net sunku pasakyti, po ko atsirado ši klaida, nes grupinis valdymas (mėnesio uždarymas) nebuvo naudojamas ilgą laiką ...
Atsakymas:() () Vėl laba diena) Įjungiau technologijų žurnalą ir radau šiuos įdomius dalykus (gal žinote, kokia yra problema?):
Buvo bandoma operuoti objektą, kuris nėra lizdas...
Procesas baigiasi. Išeinantis skambutis atmestas...
Nerasta priglobto serverio...
Kl.: Fono darbai
Atsakymas:
Klausimas: Kaip perkelti failą į foninį darbą
8.3.6.2152 platforma
Būtina perkelti failą iš UV į fono užduotį tolesniam apdorojimui.
Ar taip:
&AtClient
Procedūra Command1(Command) FileDD = Nauji dvejetainiai duomenys(failo pavadinimas); StorageAddressForBackground = Įdėkite į laikinąją saugyklą(FileDD, UniqueIdentifier); StartUploadUploadOnServer(StorageAddressToBackground) EndProcedure &OnServer Funkcija StartUploadUploadOnServer(StorageAddressForBackground) Metodas Parametrai = naujas masyvas; Metodo parametrai.Add(StorageAddressForBackground); Užduotis = BackgroundTasks.Run("MyCommonModule.MyBackground", MethodParameters); EndFunctions
Bendrajame modulyje:
Procedūra MyBackground(Saugyklos adresas) Eksportuoti FileDD = GetFromTempStorage(Saugyklos adresas); Jei TypeValue(FileDD) = Tipas("Dvejetainiai duomenys") Tada Žurnalo įrašas Registruotis Žurnalo įrašas Registruotis(„Debug“, „No DD“); EndIf ; EndProcedure Bandyta taip: PlaceFiles = New Array; PlacedFiles.Add(Naujas perkeliamo failo aprašymas(Failo pavadinimas)); PlacedFiles = naujas masyvas; Jei NE „PutFiles“ („PutFiles“, „PutFiles“, „False“, „UniqueIdentifier“) - tada grąžinkite; EndIf ; StorageAddressForBackground = PlacedFiles.Storage; Bandyta taip: StorageAddressForBackground = PlaceInTemporaryStorage(Undefined, UniqueIdentifier); Įdėti failą (Saugyklos adresas fonui, failo pavadinimas, klaidingas );
Iš fono į klientą per laikiną saugojimą jis paprastai perkeliamas, bet iš kliento į foną - dėl kokių nors priežasčių nieko.
Atsakymas: Apskritai viskas pasirodė gana paprasta. Pasirodo, galite kvailai perduoti BinaryData kaip parametrą foninei užduočiai. Nekvalifikuotiems gerbėjams pacituoti pagalbą ir pasakyti, kad „kaip numatyta“ darbo kodą:
&AtClient
Procedūra Command1(Command) RunUploadUploadOnServer(Nauji dvejetainiai duomenys(failo pavadinimas)) Procedūros pabaiga
&AtServer funkcija RunUploadUploadAtServer(DD) MethodParameters = naujas masyvas; Metodo parametrai.Pridėti(DD); Užduotis = BackgroundTasks.Run("MyCommonModule.MyBackground", MethodParameters); EndFunction procedūra MyBackground(FileDD) Eksportuoti Jei TypeVin(FileDD) = Tipas("Dvejetainiai duomenys") Tada Žurnalo įrašas Registruotis(„Debug“, „Yra DD“); Priešingu atveju Žurnalo įrašas Registruotis(„Debug“, „No DD“); EndIf ; Procedūros pabaiga
Klausimas: Foninės užduoties vykdymas tinkamam vartotojui
Atsakymas:
Klausimas: fono darbo derinimas
Foninė užduotis vykdoma su klaida. Nusprendė derinti.
Išorinį apdorojimą vykdau viena eilute:
BackgroundJobs.Run("MyModule.MyDarbas");
Nepaveikia modulio pertraukos taško.
Leidžiamas derinimas serveryje, derinimo langelis, automatinis ryšys, foninės užduotys – verta. Kokia dar gali būti problema?
Atsakymas:Įprastuose moduliuose buvo kreiptasi į funkcijas, kurioms reikalingas kliento, o ne serverio vykdymas. Turėjau juos įrašyti skliausteliuose #Jei klientas Tada. Fonas taip pat veikė.
Klausimas: Klaida atliekant keitimą
Laba diena, pasakyk, kur kasti:
Atlieku mainus buhalterinės apskaitos duomenų bazėje. Iš UT-shki per įprastą keitimą iškeliama apie tris dešimtis dokumentų. Jie ilgai galvoja (apie valandą) ir baigia žinute:
foninis darbo procesas sustojo
Tikriausiai nė viena rimta 1C 8.3 ar 8.2 konfigūracija negali išsiversti be suplanuotų ir foninių užduočių. Jie labai patogūs, nes bus vykdomi pagal aiškiai apibrėžtą grafiką be vartotojo ir programuotojo įsikišimo.
Pavyzdžiui, kartą per dieną reikia keistis duomenimis su kita programa. Naudodamas įprastas ir fonines užduotis, 1C šiuos veiksmus galės atlikti savarankiškai, pavyzdžiui, ne darbo valandomis. Šis metodas niekaip neturės įtakos vartotojų darbui ir sutaupys laiko.
Pirmiausia išsiaiškinkime, ką jie reiškia ir kuo skiriasi:
- Suplanuota užduotis leidžia atlikti bet kokius konkrečius veiksmus pagal iš anksto sukonfigūruotą tvarkaraštį.
- Fono darbas yra objektas, kuriame yra atliktini veiksmai.
Tarkime, kad mūsų įmonė kažką parduoda ir turi savo svetainę su kainomis. Kartą per dieną norime juos iškrauti, kad išlaikytume aktualumą.
Atidarykite konfigūraciją ir pridėkite suplanuotą užduotį.
Savybių nustatymas
Apsvarstykite svarbiausius parametrus, kuriuos reikia užpildyti jo savybėse.
- Lauke" Metodo pavadinimas» pasirenkama kokio nors konkretaus bendrojo modulio procedūra, kuri bus vykdoma tiesiogiai. Jame bus nurodyti visi veiksmai, susiję su kainų įkėlimu į mūsų svetainę. Atminkite, kad vykdymas vyks serveryje. Tai logiška, nes įprastinės operacijos atliekamos be vartotojo įsikišimo.
- Suplanuotą užduotį galima išjungti arba įjungti, jei reikia. Nereikia kiekvieną kartą keisti jo tvarkaraščio. Norėdami tai padaryti, ypatybių paletėje pažymėkite arba panaikinkite žymėjimą Naudojimas».
- Kitas svarbus nustatymas – ar ši suplanuota užduotis bus atlikta iš anksto nustatytas, arba ne. Iš anksto nustatytos suplanuotos užduotys vykdomos automatiškai. Jei ši vėliavėlė nenustatyta, turėsite juos paleisti programiškai arba naudoti „Job Console“ apdorojimą su ITS.
- Taip pat galite nurodyti pakartojimų skaičius ir intervalas tarp jų avarijos atveju. Neįprastas užbaigimas reiškia tas situacijas, kai užduotys nebuvo užbaigtos dėl klaidos.
Tvarkaraščio nustatymas
Paskutinis veiksmas yra mūsų įkėlimo į svetainę tvarkaraštis, naudojant atitinkamą hipersaitą ypatybių paletėje.
Įprastą tvarkaraščio nustatymą matysite 1C 8.3. Čia nėra nieko sudėtingo. Šiame pavyzdyje nustatome, kad kainų įkėlimas į svetainę būtų paleistas kasdien nuo penkių iki septynių ryto. Jei suplanuotos užduoties nespės atlikti iki 7:00, ji bus atlikta kitą dieną.
Suplanuotų užduočių blokavimas
Paleiskite standartinę 1C įmonės serverio administravimo įrankį ir atidarykite informacijos bazės, kurioje sukūrėte suplanuotą užduotį, ypatybes (1C kliento-serverio versijoms).
Atsidariusiame lange (įvedę prisijungimo vardą ir slaptažodį, kad galėtumėte pasiekti IB), patikrinkite, ar elemente „Įjungta suplanuotų užduočių blokavimas“ nėra nustatyta vėliavėlė. Jei susiduriate su situacija, kai užduotis neveikia, pirmiausia patikrinkite šį nustatymą.
Taip pat galite visiškai išjungti suplanuotas užduotis 1C 8.3. Norėdami išjungti konkrečias fonines užduotis, galite naudoti „Foninių užduočių konsolės“ apdorojimą, integruotą į naujausius leidimus.
Fonas ir suplanuoti darbai failo režimu
Šiuo režimu nustatyti ir vykdyti šias užduotis yra daug sunkiau organizuoti. Dažniausiai sukuriama papildoma sąskaita, kurios sesija visada bus atidaryta.
Suplanuotų užduočių aktyvinimas šiuo atveju atliekamas naudojant metodą „PerformProcessingTasks()“.
Taip pat galite naudoti šią konstrukciją:
Procedūros pavadinimas turi būti vykdomos kliento procedūros pavadinimas. Intervalas rodo, kiek sekundžių užtruks vykdymas. Parametras „Vieną kartą“ yra neprivalomas. Tai atspindi, ar nurodyta procedūra bus atliekama vieną ar kelis kartus.
Stebėjimo klaidos atliekant fonines užduotis
Galite peržiūrėti foninių užduočių eigą, taip pat galimų klaidų buvimą registracijos žurnale. Filtre nustatykite pasirinkimą į programą „Foninė užduotis“ ir, jei reikia, pasirinkite dominančio svarbą, pavyzdžiui, tik „Klaidos“.
Žurnale bus rodomi visi jūsų pasirinkimą atitinkantys įrašai su komentaru, kurį naudodami galėsite suprasti klaidos priežastį.
Problema nėra nauja ir retkarčiais aptariama įvairiuose 1C forumuose. Paprasčiausias ir populiariausias sprendimas yra iš naujo paleisti 1C serverį. Deja, ši parinktis ne visada priimtina arba labai nepageidautina. Šiuo atveju yra subtilesnių sprendimų.
Čia vienas iš šių būdų trumpos nuoseklios instrukcijos forma:
1. Naudodamiesi 1C serverio administravimo konsole ieškome problemos fNauja užduotis ryšių sąraše (pavyzdžiui, pagal jos pradžios laiką, palyginti su suplanuotos užduoties pradžios laiku užduočių konsolėje). Mes apibrėžiamedarbuotojo procesas, kuriame yra pakabintas ryšys.
2. Atidarykite šio proceso ypatybes ir pažymėkite kaip nenaudojamą (jei naudojamas vienas procesas, pirmiausia turite sukurti naują darbo procesą, kad visi aktyvūs ryšiai vėl prie jo prisijungtų). Mes prisimename šio proceso PID numerį.
3. Laukiame, kol visi esami ryšiai pereis iš išjungto proceso į vieną iš naudotų. Galiausiai mūsų procese turėtų likti tik probleminiai junginiai, kuriuos norime pašalinti.
4. Kompiuteryje su 1C serveriu, naudodami užduočių tvarkyklę, pagal neįgalaus darbuotojo proceso PID ieškome atitinkamo rphost.exe proceso ir jį ištriname.
5 . Tik tuo atveju galite ištrinti 1C darbo eigą, kurią išjungėme su administratoriaus pagalba. pultą ir, jei reikia, sukurkite naują.
6. Paruošta. Galite prisijungti prie užduočių konsolės ir patikrinti suplanuoto darbo būklę.
Šiame straipsnyje aprašysiu savo, kol kas nedidelę, patirtį organizuojant duomenų mainus universaliu EnterpriseData formatu.
Mano atveju birža sukonfigūruota tarp konfigūracijų „Prekybos valdymas 11.2“ (toliau – UT) ir „Įmonės apskaita 3.0.43“ (toliau – BP). Keitimasis yra vienpusis, iš UT į BP. Prieš atnaujinant Trade Management 11.1 į 11.2 versiją, duomenų mainai buvo sukonfigūruoti naudojant Data Conversion 2.0 konfigūraciją. Tačiau „Prekybos valdyme“ perėjus prie „11.2“, vartotojų darbo metu atsirado klaidų. Buvo atlikta mainų taisyklių atnaujinimo procedūra, tačiau tai rezultato nedavė. Derintuvas parodė, kad problema buvo keičiantis duomenimis. Abiejų konfigūracijų duomenų mainų nustatymą nuspręsta pašalinti ir nustatyti iš naujo.
Tiek „Prekybos valdymas“, tiek „Įmonių apskaita“ mums veikia kliento-serverio versijoje. Pradėjau nustatyti sinchronizavimą su UT. Atlikau taip, kad duomenys buvo iškelti iš UT į failą. Tai yra sinchronizavimas per tinklo katalogą. BP aš sukonfigūravau keitimą taip, kad iš BP jokie duomenys nebūtų iškraunami.
Klaida iškviečiant kontekstinį metodą (patvirtinti): klaida tikrinant XDTO duomenis:
Objekto „/Sandorio šalies banko sąskaita/Bankas“ struktūra neatitinka tipo: (http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.1)KeyPropertiesBank
„BIC“ nuosavybės tikrinimas:
forma: elementas
pavadinimas: (http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.1)BIC
tipas:
Trūksta būtino turto
Objektas: Sutartis su sandorio šalimi Nr. ...
Norėdami išanalizuoti klaidą, paspaudžiau piktogramą „Siunčiamų duomenų sudėtis“ ir registruotų kontraktų siuntimo šalių sąraše radau sutartį, pagal kurią atsirado klaida. Atidarė sutartį, įsiminė sutartyje nurodytą sandorio šalies banko sąskaitą. Tada perėjau prie banko sąskaitų, registruotų siuntimui. Paaiškėjo, kad reikiamos paskyros registruotųjų sąraše nėra. Perjungiau probleminę banko sąskaitą ir sutartį. Po to rankiniu būdu užregistravo reikiamą banko sąskaitą.
Bandžiau dar kartą sinchronizuoti duomenis iš UT. Šį kartą duomenys buvo sėkmingai įkelti. Tinklo aplanke buvo sugeneruotas XML failas, kuriame yra duomenų, skirtų perkelti iš UT į BP.
Kitas žingsnis – duomenų įkėlimas iš bylos į Įmonių apskaitos skyrių. Konfigūracijoje „Įmonės apskaita“ paspaudžiau mygtuką „Sinchronizuoti“, atsidarė apdorojimo forma su pranešimu „Duomenų analizė vykdoma“. Kiek vėliau pranešimas pasikeitė į „Duomenys įkeliami“. Tuo pačiu metu indikatorius ir skaitiklis rodė, kad iš BP iškraunama daugiau nei 80 tūkst. Tai mane supainiojo, nes nustatymuose nurodžiau, kad iš PSU nieko nereikia iškrauti. Apdorojimas užtruko ilgai ir baigėsi klaida:
Renginys: Bendravimas
(CommonModule.LongOperations.Module(371)): foninio darbo darbuotojo procesas užstrigo
ThrowException (ErrorText);
Norėdami lokalizuoti klaidą, bandžiau pakeisti sinchronizavimo nustatymus ir BP bazės veikimo parinktis. Dėl to, kai konvertavau duomenų bazę į failo versiją, sistema veikė tinkamai: atsidarė dviejų duomenų bazių palyginimo forma. Suderinus objektus, pirminis sinchronizavimas buvo sėkmingas. Tada vėl perkėliau duomenų bazę į kliento-serverio versiją.
Toliau „vykstant“ sinchronizacijai, reikėjo šiek tiek pakeisti objektų konvertavimo taisykles. Atėjo laikas naudoti „Data Conversion 3.0“ konfigūraciją. Integruotame konfigūracijos žinyne aprašoma, kaip dirbti. Taip pat padėjo straipsniai ITS svetainėje.
Dėl to į „Data Conversion 3.0“ įkėliau šiuos duomenis:
- Bendrojo modulio „Data Exchange Manager Via UniversalFormat“ tekstai iš dviejų bazių
- Abiejų bazių schema
- EnterpriseData formato aprašymas (iš bet kurios duomenų bazės)
- Konversijos taisyklės
Atsisiuntę atidariau duomenų, objektų, savybių konvertavimo taisykles „Data Conversion 3.0“. Padariau pakeitimus, kurių man reikėjo. Tada naudojau mygtuką „Iškrauti mainų tvarkyklės modulį“. Modulio tekstas buvo nukopijuotas į mainų sritį. Belieka tik įterpti jį į konfigūraciją.
Eksperimentavęs su taisyklių nustatymu „Data Conversion 3.0“, padariau išvadą, kad tuo atveju, kai atlikti pakeitimai yra nedideli, taisykles lengviau nustatyti tiesiogiai UT ir BP konfigūracijose, bendrame modulyje „Duomenų mainai“. Valdytojas per „UniversalFormat“. Jei pakeitimai yra rimti, pavyzdžiui, mainais pridedamas naujas objektas, turėtumėte naudoti konfigūraciją " Duomenų konvertavimas 3.0".
Dokumento „Užsakymas tiekėjui“ įtraukimo į mainų planą užduotį atlikau naudodamas „ Duomenų konvertavimas 3.0". Standartinėje UT - BP versijoje šis dokumentas neįtrauktas į mainų planą.
Prisiminkime, kad objektų registravimo iškrovimui taisyklės vis dar sukonfigūruotos „Duomenų konvertavimo 2.0“ konfigūracijoje.
Tai pirmieji įspūdžiai apie duomenų sinchronizavimą universaliu EnterpriseData formatu.
P.S. Jei turite klausimų ir savo pastabų dėl duomenų mainų naudojant universalų formatą ir konfigūracijas " Duomenų konvertavimas 3.0", rašykite komentaruose. Pasikeisime patirtimi.
- Duomenų sinchronizavimas
- Universalus EntepriseData formatas
- Duomenų konvertavimas 3.0
- Duomenų konvertavimas 2.0
- Prekybos valdymas
- Įmonės apskaita
Tikriausiai kiekvienas 1C 8.3 programuotojas anksčiau ar vėliau turėjo nustatyti 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ų, suplanuota užduotis sukonfigūruojama vieną kartą ir veikia pagal jūsų grafiką.
Išsamias instrukcijas su pavyzdžiu rasite žemiau.
Kas yra suplanuotos ir foninės užduotys 1C
- Suplanuotos užduotys yra specialus 1C įmonės 8.3 mechanizmas, skirtas atlikti konkretų veiksmą tam tikru grafiku.
- Fono darbas- objektai, sukurti pagal suplanuotą užduotį, kuri tiesiogiai atlieka būdingą veiksmą nedalyvaujant vartotojui ar programuotojui 1C 8.2.
Suplanuotų ir foninių užduočių mechanizmas veikia kliento-serverio veikimo režimu (SQL), dėka DBVS funkcionalumo. Jei turite failų duomenų bazę, užduotį taip pat galima konfigūruoti, tačiau šiek tiek kitaip.
Foninių užduočių nustatymas kliento-serverio veikimo režimu 1C
Pirmiausia sukurkime naują metaduomenų objektą – suplanuotą užduotį. Savo užduotį pavadinsiu „Valiutų kursų įkėlimas“. Apsvarstykite šio konfigūracijos objekto savybių paletę:
Gaukite 267 1C vaizdo pamokas 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- suplanuotos užduoties naudojimo ženklas.
- iš anksto nustatytas Nurodo, ar suplanuotas darbas yra iš anksto nustatytas. Jei norite, kad suplanuota užduotis veiktų iš karto po įtraukimo į duomenų bazę, nurodykite šią žymą. Kitu atveju turėsite naudoti „Job Console“ apdorojimą arba iškviesti užduotį, kad ji būtų paleista programiškai.
- Pakartotinių bandymų skaičius užstrigus— kiek kartų foninė užduotis buvo paleista iš naujo, jei ji buvo atlikta su klaida.
- Darbo nutraukimo kartojimo intervalas– kaip dažnai foninė užduotis bus paleista iš naujo, jei ji buvo atlikta su klaida.
Ir įdomiausia aplinka - Tvarkaraštis:
Čia galite nustatyti laukelyje „Metodo pavadinimas“ nurodytą procedūros pradžios intervalą. Leisk man nustatyti
Dėmesio! Nepamirškite išjungti suplanuotų ir foninių užduočių blokavimo DBVS lygiu!
Tai galima padaryti kliento-serverio versijos administravimo programoje arba kuriant naują duomenų bazę:
Suplanuotų užduočių nustatymas failo veikimo režimu 1C
Failų režimu tokių užduočių nustatymas yra šiek tiek sunkesnis. Norint atlikti tokią užduotį, turi būti paleista atskira 1C programos sesija. Dažnai tai išsprendžia „techninio“ vartotojo institucija, kurios sesija visada veikia.
Failo režimu suplanuotos užduoties inicijavimas įvyksta, kai paleidžiamas metodas "ExecuteJobProcessing()".
Konkrečiam vartotojui galima sukonfigūruoti šį metodą, kad jis būtų paleistas naudojant kitą metodą −
ConnectWaitingHandler( <ИмяПроцедуры>, <Интервал>, <Однократно>).
- Procedūros pavadinimas— procedūros, prijungtos kaip laukimo tvarkytojas, pavadinimas. Valdomos programos modulio (įprastos programos modulio) arba visuotinio bendrinamo modulio eksportuotos procedūros pavadinimas. Procedūra turi būti nurodyta kliente.
- Intervalas— laikotarpis tarp operacijų vykdymo sekundėmis.
- kartą- kaip atlikti užduotį vieną kartą ar ne.
ConnectWaitingHandler, 3600 );
Dviejų minučių vaizdo įrašas, kuriame parodyta, kaip nustatyti suplanuotą užduotį 1C konfigūratoriuje: