1c hva er rutineoppgaver. Rutine- og bakgrunnsoppgaver

Spørsmålet vi stiller i tittelen på artikkelen er relevant for mange systemadministratorer som jobber med dette produktet. Så langt som mulig prøver vi å snakke om parametrene som påvirker 1C-ytelsen og avlive populære myter. I dag, ved å bruke eksempelet fra en nylig sak, ønsker vi å fortelle deg om et annet aspekt som kan påvirke produktiviteten alvorlig - rutineoppgaver.

La oss begynne med ekte tilfelle. For ikke lenge siden kontaktet en av våre kunder oss med en klage på 1C "bremsene" til en av hans ansatte. Symptomene var at Trade Management 10-konfigurasjonen etter en viss tid begynte å avta kraftig, eller rett og slett, frøs en stund.

Med flere detaljert analyse situasjon, viste det seg at dette bare skjer med én ansatt, og på en hvilken som helst arbeidsplass har det skjedd i lang tid, men hvis tidligere "bremsene" varte omtrent et sekund, nå, etter oppdateringen, kan de vare opptil 15-20 sekunder, noe som gjør arbeidet ekstremt ubehagelig.

I prinsippet er de første dataene allerede tilstrekkelige til å trekke de første konklusjonene. La oss liste dem opp igjen:

  • "Bremser" forekommer konstant, med en viss frekvens
  • Sakter kun for én bruker
  • "Sakter farten" på enhver arbeidsplass

For å bekrefte gjetningene våre, la oss se på Regnskapsinnstillinger:

Faktisk er "problem"-brukeren oppført som en bruker for å utføre rutineoppgaver. Det viste seg at det en gang i tiden kjørte en RIB-autoutvekslingsoppgave på vegne av denne brukeren. Det gjenstår å se hva som var årsaken til den episodiske "bremsingen". Dette er også enkelt å gjøre:

Og her er "anledningens helt" - oppgaven med å oppdatere fulltekstsøkeindeksen, som ble lansert en gang hvert 2,5 minutt. I dette tilfellet ble problemet fullstendig løst ved å deaktivere utførelsen av rutineoppgaver under denne brukeren, men dette er ikke alltid mulig eller tilrådelig, så nedenfor vil vi se på hvordan du kan administrere rutineoppgaver og hvordan du sørger for at de gjør det ikke påvirke negativ påvirkning for ytelse.

Vanlig søknad

I konfigurasjoner basert på en vanlig applikasjon finnes det ikke ett enkelt verktøy for å administrere rutineoppgaver. Dette skyldes i stor grad det faktum at selve konseptet med rutineoppgaver på tidspunktet for deres første utvikling var ganske dårlig utviklet.

Mange rutineoppgaver administreres gjennom å sette opp undersystemene knyttet til dem. For eksempel bør innstillingene for regulatoriske oppgaver knyttet til datautveksling ses etter i utvekslingsinnstillingene knyttet til Unified State Automated Information System i alkoholhandelsinnstillingene osv.

Ved første øyekast er alt ganske logisk, men mangelen på et enkelt verktøy gjør det vanskelig å kontrollere de konfigurerte rutineoppgavene og optimaliteten til innstillingene deres. Det er bra hvis det er en eller to oppgaver, men hvis det er flere av dem eller, som i vårt tilfelle, er det mistanke om en av de planlagte oppgavene, men du aner ikke hvem som har konfigurert hva i denne databasen.

I dette tilfellet bør du bruke ekstern behandling ConsoleTasks (JobsConsole), som er inkludert i settet med standardbehandling på ITS-disken. Behandling gir ett enkelt grensesnitt for alle jobber og lar dem konfigureres sentralt, samt kontrollere jobbene som kjører for øyeblikket.

Denne listen må studeres nøye, alle unødvendige oppgaver bør slås av, og de som trengs bør få timeplanen tilpasset for å møte umiddelbare behov og sunn fornuft. For eksempel, i vårt tilfelle, er det ikke nødvendig å behandle EGAIS-svar en gang hvert 30. sekund (denne innstillingen ble gjort for testing), og i driftsmodus vil det være ganske nok å gjøre dette, for eksempel en gang hver halve time.

Administrert applikasjon

I konfigurasjoner basert på en administrert applikasjon tildeles rutineoppgaver en mer betydelig rolle med deres hjelp, ulike oppgaver kan utføres for å vedlikeholde informasjonsgrunnlaget og holde det oppdatert, men samtidig er det rutineoppgaver de fleste; blir ofte årsaken til "bremser".

Det er et eget punkt i menyen for å administrere rutineoppgaver Administrasjon - Support og vedlikehold.

Det kan umiddelbart bemerkes at antallet oppgaver har økt betydelig (for eksempel tok vi den samme konfigurasjonen - Retail), og riktig konfigurasjon kan forbedre ytelsen til informasjonsbasen betydelig. Standardinnstillingene er laget av 1C basert på behovene til et gjennomsnittlig sfærisk selskap i et vakuum og er ikke engang i nærheten av optimalt.

Først og fremst deaktiverer vi det som åpenbart er unødvendig, det du ikke jobber med. Deretter optimerer vi tidsplanen for sjeldent brukte funksjoner, for eksempel oppdatering av bankklassifisereren i Retail, samt sjekk av motparter, kan utføres en gang i uken i ikke-arbeidstid eller på slutten (begynnelsen) av arbeidsdagen.

Spesiell oppmerksomhet bør rettes mot alt relatert til søkeindeksen. Fulltekstsøk er absolutt en praktisk ting, men å jobbe med indeksen er en veldig, veldig ressurskrevende oppgave. Derfor bør du ikke gå til det ekstreme og forlate det, men du bør seriøst revurdere og justere parametrene.

La oss begynne med tekstutvinning, lar denne operasjonen deg søke i innholdet i vedlagte filer, så hvis du ikke bruker dem, ikke søker gjennom dem, eller du bare har bilder der, så kan denne operasjonen deaktiveres i alle fall, og utføre den en gang hver 85 sekunder er helt klart overkill.

Oppdater PPD-indeks - en av de mest ressurskrevende operasjonene, utført en gang per minutt som standard.

La oss nå tenke på hvor ofte informasjonen du oftest søker etter blir lagt til eller oppdatert i databasen? Åpenbart ikke hvert minutt, så det vil være ganske nok å oppdatere indeksen mye sjeldnere: en gang i timen, en gang om dagen, eller til og med en gang i uken.

Det samme gjelder for sammenslåing av PPD-indeksen Hvis du oppdaterer indeksen en gang om dagen, bør du konfigurere sammenslåingen til å kjøre en gang i uken, og velge det minst forstyrrende tidspunktet for å starte jobben.

Disse enkle operasjonene vil tillate deg å øke komforten ved å jobbe med den uten mye skade på funksjonaliteten til konfigurasjonen. nytt nivå ved å eliminere hyppig gjennomføring av ganske ressurskrevende operasjoner. Bare ikke gå til ytterligheter; bedøm klokt hvor mye du trenger visse evner og hvor ofte du bør utføre oppgaver relatert til dem.

  • Tagger:

Vennligst aktiver JavaScript for å se

" I den vil vi se på nye funksjoner som ikke er relatert til systemgrensesnittet, men utvider den medfølgende funksjonaliteten til 1C:Enterprise 8-plattformen betydelig.

Anvendbarhet

Artikkelen diskuterer 1C:Enterprise-plattformen versjon 8.3.4.437. All funksjonalitet beskrevet i artikkelen er oppdatert til versjon 8.3.11.

Andre innovasjoner i 1C:Enterprise 8.3

La oss fortsette å bli kjent med innovasjonene til 1C:Enterprise 8.3-plattformen.

Bakgrunn og rutineoppgaver i filinfobasen

I mange typiske plattformkonfigurasjoner 8.2 det var en konstant som indikerte brukeren som oppgavene ble utført under i filversjonen.

Da systemet begynte å kjøre under denne brukeren, ble en ventebehandling koblet til, som kalte den innebygde språkmetoden med en viss periodisitet ExecuteTaskProcessing().

Denne tilnærmingen skapte ytterligere vanskeligheter og ulemper ved bruk av rutineoppgaver i fildatabasen.

Dette kan være spesielt kritisk når du arbeider med konfigurasjoner som f.eks "Omfattende automatisering" eller "Kontroll produksjonsbedrift, der regulatoriske oppgaver spiller en ganske viktig rolle.

Hvis dette er fil IB da
=
Constants.UserForExecutingRoutineTasksInFileVariant.Get();
Hvis chValueVariable("glCurrentUser") =
UserTo ExecuteTaskRegl Deretter
// med et intervall på sekunder kaller vi prosedyren for å jobbe med rutineoppgaver
SupportRegularTaskForFileVersion();
IntervalFor Poll=
Constants.IntervalFor PollingRutineTasksInFileVariant.Get();
Hvis IntervalFor Poll= Udefinert
ELLER IntervalFor Poll= 0 Deretter
IntervalFor Poll= 60 ;
Slutt om ;
ConnectWaitHandler("Støtte for RoutineTaskForFileVersion",
IntervalFor Poll);
Slutt om ;
Slutt om ;

På plattformen 8.3 implementert arbeidet med bakgrunns- og rutinejobber i filinfobasen uten å bruke global kontekst-metodekallet ExecuteTaskProcessing().

Bakgrunn og rutineoppgaver utføres direkte i en av klientapplikasjonene (tynn, tykk klient) eller av en webserverutvidelse.

En bakgrunnsjobb startet av en økt utføres av den samme klientapplikasjonen som startet den.

Bakgrunnsjobber utføres sekvensielt, dvs. På én klientapplikasjon kan bare én bakgrunnsoppgave (inkludert rutineoppgaver) utføres om gangen.

Rutineoppgaver utføres av bare én klientapplikasjon. For å kontrollere lanseringen av planlagte oppgaver, brukes en kommandolinjetast /AllowExecuteScheduledJobs.

Rutineoppgaver utføres av den første klientapplikasjonen i oppstartsrekkefølgen, som ikke er forbudt fra å utføre rutineoppgaver (for å forby økten, må økten startes med kommandolinjeparameteren /AllowExecuteScheduledJobs -Av).

Når den økten avsluttes, flyttes kjøringen til en av de gjenværende løpende øktene.

Hvis startlinjen til klientapplikasjonen eksplisitt indikerer behovet for å kjøre rutineoppgaver (i kommandolinje angitt /AllowExecuteScheduledJobs -Force), så begynner rutineoppgaver å bli utført på den, uavhengig av tilstedeværelsen av andre økter.

Rutineoppgaver behandles en gang hvert 60. sekund.

Merk at rutineoppgavene til applikasjonsløsningen (i filversjonen) begynte å bli utført tidligst 1 minutt etter at klientapplikasjonen ble lansert. Fra og med versjon 8.3.8 har denne tiden blitt doblet, og derfor begynner rutineoppgaver å bli utført maksimalt 2 minutter etter at klienten er lansert (i filversjonen).

Denne avgjørelsen skyldes en reduksjon i forsinkelsen ved oppstart av søknaden. I tillegg ble muligheten lagt til i utgivelse 8.3.7 rask definisjon at gjeldende økt er en bakgrunnsjobbøkt. Dette er implementert ved hjelp av den nye globale kontekstmetoden GetCurrentInfoBaseSession(), samt en ny metode for infobaseøkten GetBackgroundTask().

Nedenfor er kode som illustrerer ovenstående:

For å forstørre, klikk på bildet.

Beregning av kontrollsummer

Plattformen inkluderer nå mekanismer for beregning av datasjekksummer.

La oss huske det sjekk sum(hash) er en verdi beregnet fra et sett med data ved å bruke en viss algoritme og brukes til å sjekke integriteten til data under overføring eller lagring.

Hashes kan brukes til å sjekke identiteten til data (du må for eksempel sørge for at filen ikke ble skadet ved overføringen; sjekk om det ble gjort endringer i filen, og i så fall last den opp til databasen på nytt) .

For dette formålet ble et objekt implementert i plattformen HashingData, tilgjengelig på serveren, i den tykke klienten, ekstern tilkobling og også på mobilapplikasjonsserveren.

Dette objektet har to metoder: Legg til() Og Legg til fil(), som oppdaterer hash-summen med hensyn til dataene som sendes i parameterne.

Plattform 8.3.4.437 støtter beregning av følgende hash-funksjoner: CRC32, MD5, SHA1, SHA256. Men funksjonene SHA1 Og SHA256 støttes ikke på mobilplattformen.

La oss se på et enkelt eksempel. Det antas at det er en fil på serveren i programkatalogen " ragent.exe" Trenger å beregne MD5-sum for denne filen.

For å gjøre dette vil vi lage en ekstern behandling, i form av hvilken vi vil plassere kommandoen Regne ut. Behandleren inneholder følgende kode:

&På klient
Prosedyre Calculate (Kommando)
Resultat = CalculateOnServer();
Rapport(String(Resultat));
Sluttprosedyre
&På server
Funksjon CalculateOnServer()
Hash = Ny HashingData(HashFunction.MD5);
Hash.AddFile(Katalogprogrammer() + "ragent.exe" );
Returner Hash.HashSum ;
EndFunction

I utgave plattform 8.3.10+ i metoden Legg til() gjenstand HashingData Det ble mulig å bruke en strøm av binære data, noe som i stor grad forenklet bruken deres for å løse ulike anvendte problemer med å oppdatere hasj-summer.

Arbeide med beskyttede versjoner av protokoller SMTP/POP3

På plattformen 8.3 det ble mulig å bruke beskyttede versjoner av protokoller SMTP/POP3(det er vilkår SMTPS/POP3S eller SSLSMTP/SSLPOP3).

For objekt InternetMailProfile nye eiendommer implementert:

  • Bruk SSLSMTP;
  • Bruk SSLPOP3;
  • Bare SecureAuthenticationSMTP;
  • Kun POP3 sikker autentisering.

Egenskaper AutentiseringSMTP Og POP3-autentisering gjenstand InternetMailProfile, samt overføringer SMTPAutentiseringsmetode Og POP3-autentiseringsmetode bruk anbefales ikke - de støttes for kompatibilitet.

Bruker en sikker protokoll SMTPS gjør det mulig å sende post fra 1C, ved hjelp av i postkassen Google.

La oss se på et eksempel. På skjemaet vil vi legge inn felt for å skrive inn emnet for brevet og mottakerens adresse, og for å skrive inn teksten til brevet - et formatert dokumentfelt.

For å forstørre, klikk på bildet.

Når du trykker på knappen Sende Følgende kode vil bli utført:

&På klient
Prosedyre Send (Kommando) Mail = Ny InternetMail; Profil = Ny InternetMailProfile;
Profile.SMTPServerAddress= "smtp.googlemail.com" ;
Profile.UserSMTP= “[e-postbeskyttet]” ;
Profile.PassordSMTP= "PASSORD" ;
Profile.UseSSLSMTP= Sant ;
Profile.SMTPPort = 465 ; Forsøk
Mail.Connect(Profil);
Unntak
Rapport(Feilbeskrivelse());
Komme tilbake ;
EndAttempt ; MailMessageText= “” ;
Vedlegg = Ny struktur;
Text.GetHTML(MailMessageText, Vedlegg ); E-postmelding= Ny InternetMailMessage;
MailMessage.Recipients.Add(Til hvem );
MailMessage.Subject= Emne;
MailMessage.Texts.Add(MailMessageText,
MailMessageTextType.HTML); Mail.Send ( E-postmelding); Mail.Koble fra();
Sluttprosedyre

Merk at i vårt eksempel, hvis SMTP-serveren ikke var i stand til å sende en e-post til mottakeren(e), så Mail.Send(MailMessage) kastet et unntak. Dette medførte visse ulemper for utviklerne, fordi... Årsaken til å kaste unntaket var ikke åpenbar.

I versjon 8.3.9 har denne virkemåten endret seg, og nå returnerer Send()-metoden et samsvar hvis nøkkel er mottakeren og verdien er diagnostikken fra e-postserveren. Dette lar deg nøyaktig bestemme årsakene til at du ikke sendte en e-postmelding til hver mottaker. I kompatibilitetsmodus med versjon 8.3.8 har ikke virkemåten endret seg.

Tosidig utskrift

På plattformen 8.2 Selve plattformen klarte ikke tosidig utskrift. Denne funksjonen kunne bare kontrolleres ved hjelp av skriverdriveren.

På plattformen 8.3 det ble mulig å kontrollere tosidig utskrift for et regnearkdokument, et grafisk diagram (fra det innebygde språket og interaktivt) og et tekstdokument (kun interaktivt).

Systemoppregninger dukket opp på det innebygde språket:

  • Tosidig utskriftstype(Ingen, FlipUp, FlipLeft);
  • (Auto, MirrorTop, MirrorLeft, Ikke bruk).

Og for gjenstander Tabelldokument Og GraphicScheme egenskaper dukket opp Tosidig utskrift Og Veksling av sidearrangementer, som du kan endre layout på utskrevne sider med.

I plattformversjon 8.3.9 har DuplexPrintType-systemoppregningen en ny verdiøkning Bruk PrinterSettings. Ved å velge denne verdien kunne du bruke skriverinnstillingene når du skriver ut systemdokumenter. I 8.3.8-kompatibilitetsmodus er oppførselen uendret, og de tilsvarende skriverinnstillingene ignoreres.

Dialogen for å publisere en informasjonsbase på en webserver er gjort mer funksjonell. Når du nå publiserer fra konfiguratoren, kan du angi alle filparametere default.vrd.

For dialogen for publisering av en webklient og webtjenester gjennom konfiguratoren er følgende implementert:

  • muligheten til å kontrollere tilgjengeligheten til webtjenester som standard (attributt pointEnableCommon element ws);
  • muligheten til å kontrollere utførelsen av bakgrunnsjobber i filversjonen (attributt tillat å utføre planlagte jobber element ws).

Hvis avkrysningsboksen "Publiser nettjenester som standard" på bokmerket “Grunnleggende” er installert, vil de valgte webtjenestene automatisk publiseres ved oppdatering av publikasjonen.

Ellers vil nettjenestene bli merket som upubliserbare. Dette flagget tilsvarer attributtet pointEnableCommon element ws i fil default.vrd, beregnet for å sette opp en webklient og webtjenester.

Egenskap pointEnableCommon ws element er ansvarlig for muligheten for å bruke i denne informasjonsbasen webtjenester som er publisert uten eksplisitt angivelse av tillatelse til bruk (attributt muliggjøre element punkt).

Hvis attributtet har en verdi ekte, så alle webtjenester der attributtverdien ikke er eksplisitt spesifisert muliggjøre element punkt, vil være tillatt for bruk.

Ellers vil bruk av slike webtjenester være forbudt.

Innstillinger "Bakgrunnsjobber i filmodus" samsvarer med attributtet tillat å utføre planlagte jobber ws element i filen default.vrd.

Egenskap tillat å utføre planlagte jobber kontrollerer muligheten til å utføre rutineoppgaver av webserverutvidelsen for filversjonen av infobasen.

Attributtet kan ha følgende verdier:

  • av– i dette tilfellet vil ikke webserverutvidelsen utføre rutineoppgaver. Rutineoppgaver vil bli utført av en klientapplikasjon (hvis en finnes), som kobles til infobasen direkte, uten å bruke en webserver.
  • makt– i dette tilfellet vil webserverutvidelsen utføre rutineoppgaver.
    Hvis verdien av dette attributtet ikke er spesifisert, vil rutineoppgaver bli utført av applikasjonen som skal brukes til å opprette den første tilkoblingen til infobasen.

Publiseringsvinduet på nettjenesten har blitt enda mer praktisk og ergonomisk i den nåværende utgivelsen av plattformen. Nå er parametrene som beskriver OpenID-autentisering plassert på en egen fane.

Nummerering av infobaseobjekter

På plattformen 8.3 Mekanismen for automatisk nummerering av informasjonsbaseobjekter har blitt redesignet. Det unike til et nummer eller kode (inkludert de som oppnås som et resultat av automatisk generering av et nummer eller kode) kontrolleres alltid når et objekt registreres.

En indikasjon på hvilket nummer eller kode som ikke er unikt er lagt til teksten i meldingen om brudd på unikheten til et nummer eller kode.

Bruken av et ledig nummer eller kode er endret. Nytt nummer eller koden tildeles uten bruk av frigitte tall eller koder, dersom det allerede finnes utstedte numre eller koder med et stort (i rekkefølge) prefiks av nummeret eller koden.

Aggregerte funksjoner til uttrykksspråket for datasammensetningssystemet

Nye aggregerte funksjoner er implementert i uttrykksspråket til datasammensetningssystemet:

  • Hver();
  • Noen();
  • StandardDeviationofPopulation();
  • StandardSampleDeviation();
  • VarianceSamples();
  • VarianceofPopulation();
  • KovariansBefolkning();
  • SampleCovariance();
  • Sammenheng();
  • RegresjonSlope();
  • RegressionSegment();
  • RegressionCount();
  • RegresjonR2();
  • RegressionAverageX();
  • RegresjonsgjennomsnittY();
  • RegressionAverageSXX();
  • RegresjonsgjennomsnittSYY();
  • RegressionAverageSXY().

Som navnene indikerer er dette statistiske funksjoner, som gjør at utviklere har mulighet til å lage komplekse rapporter uten å måtte utvikle prosedyrer for å beregne statistiske data.

For å forstørre, klikk på bildet.

Som du kan se av figuren er det ingen nye funksjoner i nedtrekkslisten, men hvis du legger dem inn manuelt vil det ikke komme noen feilmelding, og rapporten genereres:

Også av interesse ny funksjonKlassifiseringABC(). Resultatet av funksjonen vil være klassenummeret, fra 1 (1 tilsvarer klasse A, 2 til klasse B, 3 til klasse C osv.).

La oss demonstrere hvordan denne funksjonen fungerer. La oss lage en ny ekstern rapport "Klassifisering av varer" basert på forespørsel:

VELGE
ProduktforbrukProdukter.Produkt,
ProduktforbrukProdukter.Antall
FRA
Dokument.Forbruk av varer.Varer HVORDAN Produktforbruk Produkter

La oss definere et nytt beregnet felt Klasse:

For å forstørre, klikk på bildet.

La oss konfigurere ressursene som følger:

For å forstørre, klikk på bildet.

I brukermodus ser rapporten slik ut:

Avslutningsvis merker vi oss at fra utgave til utgave i 1C 8.3-plattformen blir ACS-mekanismen stadig forbedret og raffinert, og innenfor rammen av vår "nybegynner"-artikkel er det ikke mulig å presentere disse endringene i sin helhet. Ja, dette virker unødvendig, for når du jobber med den nåværende versjonen av plattformen, kan du alltid bruke forskjellige hjelpesystemer for å hjelpe deg med å analysere dette eller det aspektet av driften av denne mekanismen.

I tillegg, ikke glem vårt separate kurs Profesjonell utvikling av rapporter i 1C 8.3 om Data Composition System, som bryter ned til atomet alle finesser og fallgruver når du arbeider med denne mekanismen. Sjekk ut demoen selv.

Så, la oss oppsummere mellomresultatene. Frem til dette punktet har vi blitt kjent med de nye funksjonene til Taxi-grensesnittet og administrerte skjemaer, samt med noen tidligere ikke leverte funksjoner på selve plattformen. Nå er det på tide å se hvilke praktiske funksjoner som har blitt tilgjengelig for utvikleren i konfiguratoren.

Lar oss utføre alle beregninger i systemet ubemerket av brukeren, det vil si i bakgrunnen. Dessuten lar denne mekanismen oss parallellisere beregningsprosessen. Vi kan til og med parallellisere prosedyren som vil bli utført. For å gjøre dette må bakgrunnsjobben vår kjøre flere bakgrunnsjobber. I dette tilfellet er prosessene parallellisert, og hvis vi har et multiprosessor, flerkjernesystem, vil algoritmen vår fungere effektivt. Etter å ha startet flere prosesser, kan vi fortelle systemet at det må vente på fullføringen av disse prosessene for på en eller annen måte å kombinere resultatet.

For eksempel, i typiske konfigurasjoner, mens brukeren arbeider forskjellige typer tjenestebakgrunnsjobber. Dette kan dokumenteres av loggoppføringer som registrerer det faktum at slike handlinger ble utført. Dessuten påvirker dette ikke brukerens arbeid på noen måte, han legger ganske enkelt ikke merke til dem.

Ideelt sett implementeres en bakgrunnsjobb i en klient-serverversjon, i så fall går hele belastningen til serveren. Når det gjelder filalternativet, er en bakgrunnsjobb mulig, men den har noen særegenheter.

Det er dette systemet vil produsere hvis du ikke tar hensyn til disse funksjonene og kjører en bakgrunnsjobb i filversjonen av infobasen.


1C-bakgrunnsjobben har noen begrensninger. Siden den kjører på serversiden er det ingen mulighet for interaktivt arbeid med brukeren. Du kan for eksempel ikke vise en melding eller informasjon i det hele tatt. Alle disse dataene må lagres i informasjonsbasen og viderebehandles på en eller annen måte.
Ved å kontakte syntaksassistenten kan du få mer detaljert informasjon om 1C bakgrunnsjobber. Det skal bemerkes her at dette objektet er rent programvare og er ikke lagret i databasen på noen måte. Det vil si at vi lager en forekomst av klassen, initialiserer egenskapene og starter den for kjøring.

Hvilke verktøy har vi for å håndtere bakgrunnsjobber? Denne funksjonen er et metadataobjekt "Bakgrunnsoppgavebehandling". Dette objektet har en metode "Løpe", ved å bruke denne metoden, startes bakgrunnsjobben.

Den har følgende parametere:
"Metodenavn"- navnet på prosedyren eller funksjonen som skal utføres, og det må være en prosedyre eller funksjon av serverkonteksten;

"Alternativer"- en rekke parametere, hvor antall elementer må tilsvare antallet parametere for vår prosedyre/funksjon spesifisert i parameteren "Metodenavn";

"Nøkkel"- en viss unikhetsnøkkel, som er en linje som systemet forstår om en bakgrunnsoppgave må startes eller om en slik oppgave allerede kjører;

"Navn"- her kan du spesifisere en vilkårlig beskrivelse av metoden vår.

Returverdien er et objekt "Bakgrunnsoppgave", som inneholder gjeldende metodenavn, gjeldende nøkkel og flere flere egenskaper og metoder. En slik metode er metoden "Vent fullført". Hensikten er at vi kan fortelle systemet at det ikke skal gjøre noe før bakgrunnsjobben er fullført.

Bakgrunnsjobb 1C 8.2, 8.3 - Eksempel på bruk

La oss gi et eksempel på arbeid med 1C bakgrunnsjobber. Først vil vi lage en enkel algoritme som kort laster 1C-systemet på en slik måte at vi ikke kan gjøre noe på dette tidspunktet.

For dette:

1. La oss lage en felles modul "Bakgrunnsoppgavebehandlere", som vil bli kompilert på serversiden;


2. Vi vil beskrive eksportprosedyren i den "ProduceBackgroundCalculation(Parameter)", som tar én parameter av strengtype;

Prosedyre PerformBackgroundCalculation(Parameter) ExportStartTime = CurrentDate() ;< = 6 Цикл КонецЦикла ; КонецПроцедуры Процедура КнНажатие() ОбработчикиФоновыхЗаданий. ПроизветиФоновоеВычисление(Mens CurrentDate() - Starttid"Noen parameter"
Klar. Nå, når du begynner å behandle og trykker på en knapp, fryser systemet i flere sekunder, hvor ingenting kan gjøres. Dette er akkurat det vi trengte å gjøre.

Nå skal vi sørge for at disse beregningene utføres i bakgrunnen, det vil si slik at bakgrunnsoppgaven 1C 8.2, 8.3 blir utført, men ikke forstyrrer oss.

For dette:

1. Under behandling, i knappen klikk-hendelsen, skriv følgende kode.

Prosedyre KnPress() Parameters = New Array; Mens CurrentDate() - Starttid Alternativer. Legg til( ) ; Bakgrunnsoppgave. Løpe ( "Background Task Handlers. Utfør Background Computation""Noen parameter"

, Parametere, New UniqueIdentifier,

"Test"

  • Her sender vi navnet på den vanlige modulprosedyren som den første parameteren, og en rekke parametere som den andre. Den tredje parameteren må gis en unik nøkkel og den fjerde parameteren en beskrivelse av prosedyren vår.
  • Ofte, når du vedlikeholder poster, er det behov for å utføre visse handlinger med jevne mellomrom uten brukerintervensjon. Rutine- og bakgrunnsoppgaver i 1C er de mekanismene som er gitt for dette formålet i den åttende versjonen av programmet og tillater:
  • Sett opp rettidig levering av dokumenter; Beregn saldoer og totaler;;
  • Oppgi frekvens

mailingliste

Sjekk og slett irrelevante data. Bakgrunn og planlagt oppgave - hva er det og hvor er det konfigurert?

Planlagt oppgave

- en mekanisme innebygd i 1C som lar deg konfigurere og, i samsvar med den etablerte tidsplanen og frekvensen, utføre en viss sekvens av handlinger.

  • En bakgrunnsjobb er en handling generert av en rutineoperasjon og krever ikke direkte brukermedvirkning.
  • En rutineoppgave opprettes i konfiguratormodus:
  • I konfigurasjonstrevinduet finner vi den tilsvarende grenen (fig. 1);

Klikk på legg til-knappen;

  • I vinduet som åpnes må du angi et navn som lar deg identifisere objektet i konfigurasjonen;

Fig.2

  • På motsatt side av inskripsjonen "Schedule" (fig. 2) er det en inskripsjon "Open", ved å klikke på som åpner et vindu for å stille inn tid og frekvens for utførelse av behandleren (fig. 3);
  • Fig.3
  • Det er også nødvendig å fylle inn "Metodenavn" (navnet på prosedyren kalt fra den generelle modulen og beskriver atferdsalgoritmen til programmet vil bli lagt inn her);
  • "Forhåndsdefinert" bør settes hvis behandleren skal startes umiddelbart etter at den er lagt til databasen, ellers kan lanseringen gjøres fra den tilsvarende behandlingen (mer om det nedenfor);
  • Parameterne "Antall forsøk" og "Forsøk på nytt" beskriver programmets oppførsel i tilfelle et unntak inntreffer mens en bakgrunnsjobb utføres.

Så ved å bruke mekanismen for rutineoperasjoner, kan du angi tidsplanen og hovedhandlingene for bakgrunnsjobber. La oss nå se på funksjonene deres.

Funksjoner av bakgrunnsjobber

Hovedtrekket til denne mekanismen er at bakgrunnsprosessen kjører asynkront.

Hva betyr dette? Faktum er at med en synkron arbeidsmodell, hvis en algoritme blir utført, blokkeres brukergrensesnittet. I vårt tilfelle kan brukeren fortsette å legge inn og redigere data selv om prosedyren kjører. Den asynkrone programmeringsmodellen innebærer separasjon av beregningstråder.

Dermed kan bakgrunnsjobber i 1C skape sine egne prosesser, og distribuere beregninger på tvers av ulike servere som er inkludert i samme klynge.

Funksjoner ved å jobbe i klient-server-modus

  • Planlegging og kontroll av utførelse utføres av en planlegger fra en serverklynge;
  • Hvis en forespørsel om utførelse vises, ser planleggeren etter klyngearbeiderprosesser med minimal belastning og distribuerer oppgaver til dem for utførelse;
  • Hver prosess kan utføre flere parallelle beregninger;
  • Etter at en oppgave kommer, kobles prosessen til databasen og utfører algoritmen i den;
  • Prosessen rapporterer resultatene til planleggeren.

Bakgrunnsjobber i filmodus

Før plattformversjon 8.3.3.641 ga det noen vanskeligheter å jobbe med bakgrunnsjobber i filversjonen:

  1. Det var nødvendig å starte en egen økt som skulle fungere døgnet rundt, og erstatte planleggeren;
  2. Denne økten skal med jevne mellomrom ha utført RunJobProcessing()-metoden.

Etter oppdateringen starter hver start av de tykke og tynne klientene, hvis AllowExecuteScheduledJobs-nøkkelen er spesifisert i lanseringsinnstillingene (fig. 4) i "Additional"-feltet, en ekstra tråd for tilkobling til databasen, som ikke påvirker brukerens arbeid på noen måte, men utfører kun bakgrunnsoperasjoner.

Fig.4

Det bør tas i betraktning at selv i filversjonen av arbeid, tillater ikke bakgrunnsprosesser interaktivt arbeid med brukeren (tjenestemeldinger, advarsler og spørsmål vil ikke bli vist). Det vil si at de må kodes som om de ville bli utført på serversiden.

Slik deaktiverer du planlagte oppgaver

Ubrukte oppgaver kan deaktiveres ved ganske enkelt å fjerne merket for "Bruk" i objektegenskapene.

I tilfellet når administratoren trenger å forby bruken av rutine- og bakgrunnsoperasjoner for hele databasen som helhet (for eksempel lagres flere databaser på serveren, hvorav kun én er den viktigste, og resten brukes kun for utvikling), er det nødvendig å bruke databaseadministrasjonsverktøyet. Du kan også merke av for "Angi blokkering av rutineoppgaver" i databasen som er opprettet på serveren.

I tillegg har ITS-diskene en spesiell prosesserings "Task Console", som lar deg redigere tidsplanen bakgrunnsprosesser og endre aktiviteten deres.

Administrere rutineoppgaver for 1C-databaser fra oppdateringsprogrammet

2018-11-20T15:18:30+00:00

I dette notatet vil vi gå over mulighetene til oppdateringsprogrammet for å administrere rutineoppgaver i databaser.

Først av alt, i elementet "Mer" -> "Administrer rutineoppgaver...":

I kontekstmenyen dedikert database (eller gruppe av databaser):

Og til slutt, i maler for batch-skript (dette lar deg utføre operasjoner på rutineoppgaver fra et skript i henhold til en tidsplan):

Slik ser dialogen for håndtering av rutineoppgaver i databaser ut:

Hvilke problemer lar den løse i rett gruppe baser (eller én base)?

Valg av rutineoppgaver

Vær oppmerksom på at du kan velge en liste over rutineoppgaver i mange operasjoner nedenfor:

Men i valgdialogen er det kanskje ikke rutineoppgaver spesifikt for databasen din:

I dette tilfellet kan du angi navnene på de planlagte oppgavene du trenger i delen "Dine oppgaver ...", for eksempel slik:

Navnene på slike rutineoppgaver kan hentes direkte fra rapporten om alle rutineoppgaver (dette omtales).

Viser gjeldende status for oppgaver

For å gjøre dette, gå til "Trekk tilbake"-fanen og klikk på "Trekk tilbake..."-knappen:

I resultatene kan vi se:

  1. Lanseringen av nye planlagte oppgaver på 1C-serveren er aktivert eller deaktivert.
  2. Liste over rutineoppgaver i databasen.
  3. Timeplanen deres.
  4. Jobber er aktivert eller deaktivert.
  5. Hvis siste kjøring av en oppgave hadde en feil, vises denne feilen i rødt ved siden av oppgaven.

Om nødvendig, i funksjonsinnstillingene, kan vi begrense listen over planlagte oppgaver, og også vise bare aktiverte oppgaver:

Slå av alle eller noen oppgaver

For å gjøre dette, gå til "Slå av"-fanen:

For alle eller utvalgte planlagte oppgaver vil avmerkingsboksen "Bruk" bli fjernet.

Her er resultatet for én base (klikk for å utvide)

Inkluder alle eller noen oppgaver

For å gjøre dette, gå til "Aktiver"-fanen:

For alle eller utvalgte planlagte oppgaver vil avmerkingsboksen "Bruk" være valgt.

Vær oppmerksom på at "Make"-flagget er tilgjengelig i denne fanen. sikkerhetskopi base" i nedre venstre hjørne.

Her er resultatet for én base (klikk for å utvide)

Vi administrerer lanseringen av planlagte oppgaver på 1C-serveren

For å gjøre dette, gå til "1C Server"-fanen:

Velg "blokker" eller "opphev blokkering" og klikk på "Kjør"-knappen.

Sette opp en oppgaveplan

Men hva om vi trenger å sette opp en tidsplan for å starte en oppgave (eller gruppe av oppgaver) i mange databaser samtidig?

For å gjøre dette, gå til "Sett opp tidsplan"-fanen:

Vi setter opp tidsplanen (dialogen og dens evner faller helt sammen med standarden i 1C selv) og klikker på "Tilpass...".

Vi lanserer oppgaver for utførelse

For å gjøre dette, gå til "Kjør"-fanen:

Velg de nødvendige oppgavene og klikk på "Kjør"-knappen:

Lagre oppgaveinnstillinger til en ekstern fil

La oss anta at vi ideelt sett har konfigurert rutineoppgaver i en av databasene og ønsker å overføre disse innstillingene til alle andre databaser.

For å gjøre dette laster vi først opp alle oppgaveinnstillingene i den ideelle databasen til en ekstern fil:

Gjenopprette oppgaveinnstillinger fra en ekstern fil

Og så laster vi denne filen med oppgaveinnstillinger inn i alle andre databaser:

Bare merk at for denne oppgaven (overføring av jobbinnstillinger fra en database til en annen), valgte jeg matchingsmetoden etter jobbnavn, og ikke etter intern identifikator.

Avskjedsord

Generelt var det alt jeg ville fortelle deg. Selv ser jeg mange scenarier for bruk av nye funksjoner, men her skummet jeg bare kort over hovedpunktene.