Overføre informasjon fra serveren. Overføre informasjon fra serveren Behandle statusvarsling

I programmer på 1C:Enterprise-plattformen kan en melding vises til brukeren på ulike måter.

1. Metode Vis Advarsel.

Vis Advarsel(< ОписаниеОповещенияОЗавершении> , < ТекстПредупреждения> , < Таймаут> , < Заголовок> )

Når du bruker denne designen, vises et advarselsvindu i midten av programgrensesnittet.

Alternativer:

BeskrivelseFullstendige varsler(valgfri)
Type: BeskrivelseAlerts. Inneholder en beskrivelse av prosedyren som vil bli kalt etter lukking av varselvinduet med følgende parametere: Tilleggsparametere - verdien som ble spesifisert ved opprettelse av objektet Alert Description. Hvis parameteren ikke er spesifisert, vil ingen prosedyre kalles etter fullføring.

Advarselstekst(obligatorisk)
Type: String; Formatert streng. Advarselstekst.

Tidsavbrudd (valgfritt)
Type: Antall. Tidsintervallet i sekunder som systemet vil vente på brukersvar. Når intervallet utløper, lukkes advarselsvinduet. Hvis parameteren ikke er spesifisert, er ventetiden ubegrenset. Hvis parameteren har negativ betydning, vil et unntak bli kastet. Standardverdi: 0.

Tittel (valgfritt)
Type: String. Inneholder tittelen på advarselsvinduet. Beskrivelse: Viser et advarselsvindu, men venter ikke på at det lukkes.

Tilgjengelighet: Tynnklient, nettklient, tykk klient, mobilapplikasjon (klient).

Merk: Hvis en kode må utføres etter at brukeren lukker advarselsvinduet, må den plasseres i en egen modulprosedyre og beskrives i en parameter.

2. Metode Advarsel.

Et advarselsvindu vises i midten av programgrensesnittet. Men hvis konfigurasjonsegenskapen BruksmåteModaliteter er satt til Ikke bruk, fungerer ikke metoden.

Tilgjengelighet: tynnklient, nettklient, mobil klient, tykk klient, mobilapplikasjon (klient).

3. Metode ShowUserAlert.

ShowUserAlert(< Текст> , < ДействиеПриНажатии> , < Пояснение> , < Картинка> , < СтатусОповещенияПользователя> , < КлючУникальности> )

Når du bruker denne metoden, vises en melding i nedre høyre hjørne av grensesnittet.

Tilgjengelighet: Tynn klient, nettklient, tykk klient.

4. Rapporteringsmetode.

Å melde(< ТекстСообщения> , < Статус> )

Tilgjengelighet: Tynnklient, webklient, mobilklient, server, tykk klient, ekstern tilkobling, mobilapplikasjon (klient), mobilapplikasjon (server).

5. Objekt Melding til bruker.

Designet for å lagre meldingsparametere som må vises til brukeren. Hvis meldingen ennå ikke er vist til brukeren (dette kan skje når du jobber på serversiden, i en bakgrunnsjobb, ekstern tilkobling eller webtjenester), kan du få de akkumulerte meldingene ved å bruke metoden Motta meldinger til brukeren.

Egenskaper: Destinasjons-ID(MålID); Datanøkkel; Felt; DataPath(DataPath); Tekst.

Metoder: Melding; SetData(SetData).

Meldingen vises nederst i grensesnittet, på en linje.

Message = New MessageToUser(); Beskjed. Tekst ="Ikke nok nomenklatur" ; Beskjed. Felt =

  1. "Nomenklatur. Antall"
    ;
    Beskjed. SetData(DataObject) ;
  2. Beskjed. Å melde() ;

    Plattform 8.2. Arkitektur - klient-server. Oppgave: serveren må kalle en spesifikk prosedyre på en spesifikk klient koblet til serveren.
  3. Er det mulig å implementere dette og hvordan?
    (Dette er noe som ligner på operasjonsprinsippet til ICQ og lignende programvare, når det ikke er ventebehandleren som periodisk poller serveren, men serveren selv kaller hendelsesbehandleren på klienten).
    Det er umulig å ringe klienten fra serveren, du kan bare ringe serveren fra klienten etter å ha utført "server"-koden, kontrollen går tilbake til klienten.

    Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.

    Det er umulig å ringe klienten fra serveren, du kan bare ringe serveren fra klienten etter å ha utført "server"-koden, kontrollen går tilbake til klienten. Beklager, dette er arkitekturen, og det er ikke klart hvorfor du skal ringe klienten fra serveren. Forstå 8.2-arkitekturen. Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.
    Klikk for å utvide...
    Oppgaven er å implementere en mekanisme for å varsle brukere om forekomsten av visse hendelser. For eksempel oppretter en leder en forespørsel om betaling av en faktura eller en faktura. Regnskapsføreren (som er langt fra sjefen) river banken. Og når regnskapsføreren foretar en betaling for å betale fakturaen
    Hvis et par klienter jobber med systemet, vil i prinsippet ikke 1. løsningsalternativet føre til store problemer. Problemer begynner å oppstå når antallet klienter øker til flere hundre, og noen ganger kan til og med noen få dusin faktisk tette trafikken og laste serveren. Driftsmodusen, når klienten abonnerer på listen over hendelser på serveren og deretter bytter til "lytte"-modus, reduserer ubrukelig trafikk betydelig og belaster ikke serveren med ubrukelige forespørsler. For eksempel, hvorfor periodisk oppdatere listeskjemaet hvis det ikke har skjedd noen endringer i det? Hvorfor spørre med jevne mellomrom et informasjonsregister eller oppgave når ingenting er endret i det? Bare serveren vet om den har endret seg eller ikke. Derfor er det logisk at klienten ikke skal sende en forespørsel til serveren hvert 5. sekund og motta det samme svaret, men serveren, når den abonnerer på en hendelse (for eksempel "når du skriver" for en oppgave), vil føre til at behandling av denne hendelsen på "interesserte" klienter. Nå behandles hendelser bare på de klientene som initierte denne hendelsen direkte, men jeg vil at hendelsen skal behandles på andre klienter (bare av en annen behandler).
    Dette prinsippet for nettleserdrift er sikret av WebSocket-teknologien, som allerede ble standardisert i fjor (http://www.rfc-editor.org/info/rfc6455) og støttes av 4 nettlesere (unntatt Internet Explorer). Denne teknologien er fremtiden.

  4. 800 brukere. Flyturen er stabil og normal. Alt avhenger av hvordan du velger de nødvendige dataene. Trafikken er forresten minimal.

    Slik at serveren ikke holder styr på hvilke valg brukerne har i listen for øyeblikket, for eksempel.
    Også, hva om brukeren ikke trenger å oppdatere listen ->

    Det kan være mange servere. Når det gjelder den administrerte applikasjonen, er det ingen permanent forbindelse med serveren. Forespørselen din kan bli behandlet av en prosess på en annen server i klyngen.

    Derfor er det logisk at klienten ikke skal sende en forespørsel til serveren hvert 5. sekund og motta det samme svaret, men serveren, når den abonnerer på en hendelse (for eksempel "når du skriver" for en oppgave), vil føre til at behandling av denne hendelsen på "interesserte" klienter. Nå behandles hendelser bare på de klientene som initierte denne hendelsen direkte, men jeg vil at hendelsen skal behandles på andre klienter (bare av en annen behandler).

    Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.

    1C er et REGNSKAP, ikke et faktureringssystem. Det trenger hun ikke. Derfor kan problemet med 5 sekunder løses på andre måter (hvis det i det hele tatt trengs).

  5. Vel, du sa ikke engang noe om varsling via e-post - men det er ganske enkelt organisert med standard midler.
    Vel, du kan faktisk knytte ICQ til 1Ske (Google libs, smoke mana, roll out code) - men IMHO bryet er ikke verdt bryet.

    Men det er en annen måte.



    (b) bare sitter og lytter til en dedikert port (den venter på datapakker på porten)
    2) I 1C, i behandling ved registrering av et dokument, skriver vi en kode som analyserer om dette er den første posten, og om noe har endret seg vesentlig siden siste post (ellers kan regnskapsførerne ganske enkelt sende dokumentet på nytt, og hver gang lederen mottar en munter stent for denne saken melding) og om det nytt dokument, eller det endres betydelig (beløp, betaler, formål), da:

    Vel, noe sånt som dette.


    Ved behandling av betalingsdokumentposten skriver vi en kode som om nødvendig (for ikke å forstyrre administratoren når det gamle dokumentet kjøres på nytt), plasserer den i en tredjeparts database

  6. 800 brukere. Flyturen er stabil og normal. Alt avhenger av hvordan du velger de nødvendige dataene. Trafikken er forresten minimal.

    Prøv å tilordne alle klienter et anrop til en prosedyre som genererer en forespørsel, for eksempel om et register med informasjon der det skal skrives varsler eller for brukeroppgaver. Og slik at denne prosedyren kalles opp av ventebehandleren minst hvert minutt. Hvordan vil serveren og nettverket koble seg sammen?

    Slik at serveren ikke holder styr på hvilke valg brukerne har i listen for øyeblikket, for eksempel.
    Også, hva om brukeren ikke trenger å oppdatere listen -> det er ikke nødvendig å dra listedataene til klienten (ikke glem at klienten bare får det han ser +2 linjer under og over. Hvorfor tjener serveren trenger alt dette?)
    Jeg vurderer akkurat tilfellet når en haug med brukere trenger å oppdatere listen. Deretter kundeabonnementsteknologientil en opptakshendelse på serveren (cluster) sikrer utelukkelse av ubrukelige forespørsler og trafikk.

    Det kan være mange servere. Når det gjelder den administrerte applikasjonen, er det ingen permanent forbindelse med serveren. Forespørselen din kan bli behandlet av en prosess på en annen server i klyngen.
    Hvorfor husker en klynge (som kan ha tusenvis av brukere) alle innstillingene til alle brukere? Hva ville fullstendig ødelegge hukommelsen?
    Klynge og så videre for hver tilkoblinghusker alt åpne skjemaer, ellers ville det være umulig å "gjenopprette" økten i tilfelle en tilkoblingsfeil. Og klyngen trenger ikke å huske alt dette. Du kan ganske enkelt lagre arrangementsabonnementer i en spesiell databasetjenestetabell.

    1C er et REGNSKAP, ikke et faktureringssystem. Det trenger hun ikke. Derfor kan problemet med 5 sekunder løses på andre måter (hvis det i det hele tatt trengs).

    Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.

    Hva, i regnskapssystemå holde data oppdatert er nummer 105?! For eksempel i et stort handelsselskap hvorTrenger du ikke et par hundre ledere for å se gjeldende saldo og priser på varer? Hvis dette ikke skjer, vil ledere over telefon love varer som en annen leder allerede har solgt, navngi utdaterte priser osv. Og ved å muliggjøre periodisk oppdatering av prislisteskjemaet får vi ubrukelig serverbelastning og en betydelig økning i ubrukelig trafikk.
  7. Er lederne så dumme at de ikke kan oppdatere skjemaet selv????????????
  8. Hva er fordelene med denne metoden? Bare ved å overføre lasten fra 1C-serveren til e-postserveren? Tross alt vil klienten fortsatt måtte spørre serveren med jevne mellomrom.
    Hva er forskjellen mellom et brev og et telegram? Telegrammer ble tidligere båret av postbud og overlevert personlig. Lyntelegrammer ble generelt distribuert umiddelbart etter at de ankom postkontoret. Og for et brev til klienten må du med jevne mellomrom se på Postkasse. For eksempel kommer det 2 brev i løpet av dagen, og klienten ser inn i postkassen hvert 10. minutt. Av alle "utseendene" er bare 2 vellykkede, og resten er ubrukelige. Men med telegrammet er alt perfekt. Klienten går i gang med arbeidet sitt, og når postmannen kommer med et telegram, stopper han og mottar det uten å kaste bort tid på ubrukelig å løpe rundt.
    Jeg trenger ikke en ICQ-spesialist i 1C, jeg skrev om prinsippet om ICQ-drift.

    Men det er en annen måte.

    1) Vi skriver vår egen enkle klient. Som gir enten:
    (a) regelmessig lesing av en database (for eksempel tredjepart) for tilstedeværelsen av poster i tabellen med «IsNew_Blead»-attributtet

    Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.

    Denne operasjonsmetoden er nå implementert av plattformen som en ventebehandling. Men det er veldig suboptimalt.
    Og dette er nøyaktig hvordan WebSockets-protokollen er implementert. Denne metoden er den mest optimale, men er ikke implementert i 1C.

    2) I 1C, i behandling ved registrering av et dokument, skriver vi en kode som analyserer om dette er den første posten, og om noe har endret seg vesentlig siden siste post (ellers kan regnskapsførerne ganske enkelt sende dokumentet på nytt, og hver gang lederen mottar en munter stent for denne saksmeldingen), og hvis dette er et nytt dokument, eller det har blitt vesentlig endret (beløp, betaler, formål), så:
    For alternativ A oppretter vi en post i en separat (eller kanskje ikke en separat) tabell i tabellen vår, med samme merke IsNew_Blead
    For alternativ B starter vi VKshku (selv om det er en dum EXE med parametere kommandolinje), som initialiserer "pinnen" til den samme dedikerte porten.

    Vel, noe sånt som dette.

    Men EMAIL er, IMHO, enklere og krever ikke å skrive ekstra krykker.
    Ved behandling av betalingsdokumentposten skriver vi en kode som om nødvendig (for ikke å forstyrre administratoren når det gamle dokumentet kjøres på nytt), plasserer den i en tredjeparts database

    Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.

    Vel, faktum er at plattformen for å skrive applikasjoner designet for svært flerbrukerarbeid ikke fungerer spesielt optimalt.
    Og om VK-shku (det er det den kjørbare er for) fra alternativ (B), hvem kan skrive den?

  9. Selvfølgelig kan de det! Dessuten vil de gjette at hvis du merker av i boksen "Oppdater automatisk hver" i skjemalisten og perioden er 5 sekunder, trenger du ikke å trykke på "Oppdater" -knappen. Hvor mye vil da belastningen på klyngen (serveren) øke og den dumme trafikken på nettverket fra 200 klienter øke?!
    Det er en helt annen sak når "UponRecord"-behandleren behandles på serveren og et varsel kalles fra den til de nødvendige klientene, og klientene genererer allerede forespørsler og oppdaterer skjemaene sine. I dette tilfellet vil det være stigninger i trafikk og forespørsler til serveren ikke bare tilfeldig, men bare når det virkelig er nødvendig.
  10. Kan du forestille deg om alle 200 ledere bytter på å lede, distribuere og registrere dokumenter??????
  11. Ødelegger disse 200 lederne virkelig nettverket ditt med sine "feil"?

    Og så ja, alexburn Riktig bemerket, hvis du er redd for at 200 ledere med bakgrunnsmåling vil dumt laste opp rutenettet og klyngen din, hva vil da skje når de begynner å jobbe? Når du utfører dokumenter, er forespørsler mye vanskeligere.

  12. Prøv å tilordne alle klienter et anrop til en prosedyre som genererer en forespørsel, for eksempel om et register med informasjon der det skal skrives varsler eller for brukeroppgaver. Og slik at denne prosedyren kalles opp av ventebehandleren minst hvert minutt. Hvordan vil serveren og nettverket koble seg sammen?

    Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.

    Jeg vurderer akkurat tilfellet når en haug med brukere trenger å oppdatere listen. Da sikrer teknologien med å abonnere klienten på en opptakshendelse på serveren (cluster) utelukkelse av ubrukelige forespørsler og trafikk.

    Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.

    Men det gir en haug med hemoroider for å synkronisere serveren med klienten. For øyeblikket er klienten initiativtaker til forbindelsen, og du foreslår å gjøre det motsatte
    La meg forklare en ting til: hva skal skje når brukeren har et dokument åpent i fullskjerm og mottar et varsel fra serveren om at dette dokumentet må oppdateres?

    Klyngen husker allerede alle åpne skjemaer for hver tilkobling, ellers ville det være umulig å "heve" økten i tilfelle tilkoblingsfeil. Og klyngen trenger ikke å huske alt dette. Du kan ganske enkelt lagre arrangementsabonnementer i en spesiell databasetjenestetabell.

    Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.

    Vennligst avklar hvordan en forespørsel til databasen fra serveren (for å motta abonnementer) skiller seg fra en forespørsel fra klienten? Dette er det samme som det du ble fortalt helt fra begynnelsen.




    Derav konklusjonen - resten er IKKE relevant etter å ha lest den.

  13. Har du noen gang hørt noe om å optimalisere applikasjonsytelsen? Gå for eksempel til nettstedet http://www.gilev.ru og se hvordan en typisk fungerer før og etter optimalisering.
    Jeg snakker bare om hvordan teknikken med å "poke" klienter inn i serveren, sammenlignet med teknikken for serveren som varsler de nødvendige klientene, er fryktelig ikke optimal. Og hvis det er suboptimalitet i applikasjonen, vil dette definitivt komme ut ettersom belastningen på systemet øker.

    Denne prosessen kan ikke elimineres, men prosessen med å "poke" klienter dumt inn i serveren for å finne ut om listen har blitt oppdatert eller ikke kan erstattes av en mye mer progressiv metode for å varsle de nødvendige klientene av serveren.

  14. Ødelegger disse 200 lederne virkelig nettverket ditt med sine "feil"?
    Hvis det er sterkt, så er det søppel på deg, ikke nettet.
    Det er trafikk der - uff. Hvorfor finne opp lesapedes fra ingensteds?

    Når du ser "ja, rutenettet kryper nesten ikke" og du er sikker på at dette er på grunn av denne automatiske avstemningen hvert 5. sekund - da vil du begynne å klø kålroten.

    Og så ja, alexburn Riktig bemerket, hvis du er redd for at 200 ledere med bakgrunnsmåling vil dumt laste opp rutenettet og klyngen din, hva vil da skje når de begynner å jobbe? Når du utfører dokumenter, er forespørsler mye vanskeligere.

    Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.

    Husker du at plattform 8.2 fortsatt kan fungere i tynnklientmodus og også fungere på trege tilkoblinger?! Tenk nå på det, hvis du utelukker noe av den dumme trafikken på en treg tilkobling, vil klienten kjøre raskere?

  15. Husker du at plattform 8.2 fortsatt kan fungere i tynnklientmodus og også fungere på trege tilkoblinger?! Tenk nå på det, hvis du utelukker noe av den dumme trafikken på en treg tilkobling, vil klienten kjøre raskere?

    Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.

    Og hva? Trafikk kan også genereres fra dum bruk av programmet. DU har fortsatt ikke oppgitt bruksmønsteret (jeg sa forresten allerede om restene - se på store nettbutikker, hvordan de er bygget opp. De har ingen melding fra serveren)

    Ikke forveksle Slavas metoder for konfigurasjon med plattformtilbudene hans. Det er Slava som gjør server-klient-utvekslingsprosessen minimal.

    Jeg snakker bare om hvordan teknikken med å "poke" klienter inn i serveren, sammenlignet med teknikken for serveren som varsler de nødvendige klientene, er fryktelig ikke optimal. Og hvis det er suboptimalitet i applikasjonen, vil dette definitivt komme ut ettersom belastningen på systemet øker.
    Denne prosessen kan ikke elimineres, men prosessen med å "poke" klienter dumt inn i serveren for å finne ut om listen har blitt oppdatert eller ikke kan erstattes av en mye mer progressiv metode for å varsle de nødvendige klientene av serveren.

    Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.

    Nok en gang: gi et mønster. På generelt spørsmål du har et generelt svar. Når en spesifikk oppgave er synlig, er det fornuftig å diskutere den.
    Jeg har allerede beskrevet ulempene ved å trekke fra klientens server i et nøtteskall.

  16. Se på de vanlige - det er slik det gjøres. Slik er det forresten også i vår bedriftsdatabase.
    Ingenting, alle lever og har det bra. Spørsmålet her er hvordan man konstruerer disse dataene. Hvis du er gal, setter jeg opp en server for deg på en tom base uten å anstrenge deg for mye.

    Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.

    De typiske er skrevet på denne måten fordi:
    1) dette er hvordan plattformen er skrevet, og du kan ikke hoppe over dens evner uten å bruke VK.
    2) i standardkoder skriver de noen ganger kode som 1C aldri ville bestått en eksamen for.
    Det forventes ingen hemoroider og ikke alt er helt omvendt. Klienten åpner forbindelsen, og deretter blir konseptet "klient" og "server" slettet. Overføringen initieres av den som skal gjøre det. Vennligst les http://ru.wikipedia.org/wiki/WebSocket. Fant virkelig dummiene på dette?

    La meg forklare en ting til: hva skal skje når brukeren har et dokument åpent i fullskjerm og mottar et varsel fra serveren om at dette dokumentet må oppdateres?
    Du vil støte på det faktum at du må behandle en slik hendelse, tenke på hva brukeren har endret og hvordan du kobler det hele til ett. For å si det enkelt, du vil bli stum.
    Og en ting til: det nytter ikke å vurdere saken i et vakuum. Vi trenger detaljer.

    Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.

    Er du klar over at hvis en behandlingsprosedyre ikke er tilordnet en hendelse, blir ikke denne hendelsen behandlet? Det er opp til utvikleren å bestemme om dokumentskjemaet skal oppdateres eller ikke hvis noen har endret det. Og du trenger ikke tenke på hva brukeren endret i det hele tatt! Prøv å åpne det samme dokumentet på forskjellige klienter og endre detaljene på en av dem. Hva skjer? Det stemmer, opptaket blir automatisk blokkert! Og inntil blokkeringen er opphevet, vil ikke en annen klient kunne skrive noe til databasen. Og etter opptak vil en annen klient, selv om han endret noe, heller ikke kunne ta det opp, fordi. Dataversjonen er endret.
    Vel, dette er generelt den "dypeste" forståelsen av 3-lagsstrukturen til 1C: Enterprise 8.2.
    Forskjellen er at klienten ikke jobber med databasen, men jobber med 1C-applikasjonsserveren, og applikasjonsserveren jobber med databasen. For seriøse systemer er utvekslingshastigheten mellom 1C-klient-serveren og 1C-SQL-serveren forskjellig med flere størrelsesordener. Dette er grunnen til at en applikasjonsserver ble oppfunnet for å redusere mengden data som overføres fra serveren til klienten. Derfor er hastigheten på forespørselsutførelse og behandling av resultatet av applikasjonsserveren flere ganger eller til og med størrelsesorden høyere enn hvis klienten gjør det samme.

    Forstå at gjeldende saldo er den som er blokkert fra å endres. Så snart du har lest den og ikke blokkert den, er den ikke lenger relevant.
    Derfor, uansett hvor ofte du oppdaterer listen - til du blokkerer en bestemt mengde fra å endres (legg den i reserve, selg den) - er det hele et stykke kake.
    Og du kan love først etter at dokumentet er fullført - dette er det grunnleggende om regnskap.
    Dermed har du ikke engang en oppdateringsoppgave

    Tenk på hva som vil skje i scenarioet ditt for 1000 brukere.
    Saldoskjemaet ditt vil bli oppdatert uendelig (mengden vil endres hele tiden - fordi det er 1000 brukere!)
    Derav konklusjonen - resten er IKKE relevant etter å ha lest den.

    Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.

    Alt avhenger av det spesifikke systemet. Hvis frekvensen av opptak øker, kan du varsle klienter sjeldnere. Alt dette kan "avgjøres" av utvikleren, hvis bare 1C-plattformen tillot implementeringen av denne teknikken. WebSocket-protokollen utelukker ikke bruken av http-protokollen, men utfyller den. Det er opp til utvikleren å bestemme om han vil bruke metoden for å "poke" klienten inn i serveren eller bruke serveren til å varsle klienter. I mellomtiden gir plattformen bare ett enkelt alternativ for applikasjonen.

  17. Ok, la oss gå fra den andre siden.
    Hvor mange klienter og hvor mange servere????
    Det kan være så mange klienter du vil, men serveren er et depot, og i teorien burde det være en (det er unntak, selvfølgelig, men du bryr deg ikke om dem)

    Lengre. Hvilket kall til serverbehandleren på klienten??? Hvem er klienten for serveren - ja, ingen, og navnet hans er ingenting, ikke noe hjemland, ikke noe flagg, i dag er han det - i morgen er han ikke det. Eller send et varsel til Vasya Pupkin, det er sant at han er treg, og alt kommer til ham tredje gang, jeg sender ham tre varsler, han vil plutselig våkne, og Mashenka, hun er en smart jente, forstår alt perfekt , så jeg sender henne et halvt varsel , la henne tenke ut på egenhånd, hun er allerede voksen.
    Så hva sier du her - dette er tomt vann, i 1C er de heller ikke traineer, de vet hva de får penger for.)
    På forretningsreise. Har du noen gang vært plaget av en ICQ popup-melding når du ser på en film??? Selv om dette kan deaktiveres, hvordan kan jeg da vite når nøyaktig kontakten jeg trenger vises på nettverket? Vel, dette er tekster, for å si det sånn.

    Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.

    La meg tegne en analogi: en nettserver og klientnettlesere. Hvem er det mer? WEB-servere + SQL (som ofte er veldig tett) er ikke samme lagring? Fysisk kan WEB-servere og SQL-servere også kombineres til en klynge. Hva, alt dette implementerer ikke WebSocket-protokollen, som implementerer ekte duplekskommunikasjon mellom klienten og serveren (der ikke bare klienten, men også serveren starter overføringen). Når det gjelder stresset med popup-vinduet, hvis jeg ikke vil motta meldinger, går jeg bare offline eller deaktiverer popup-vinduet.

    Lengre. Hvilket kall til serverbehandleren på klienten??? Hvem er klienten for serveren - ja, ingen, og navnet hans er ingenting, ikke noe hjemland, ikke noe flagg, i dag er han det - i morgen er han ikke det. Eller send et varsel til Vasya Pupkin, det er sant at han er treg, og alt kommer til ham tredje gang, jeg sender ham tre varsler, han vil plutselig våkne, og Mashenka, hun er en smart jente, forstår alt perfekt , så jeg sender henne et halvt varsel , la henne tenke ut på egenhånd, hun er allerede voksen.
    Så hva sier du her - dette er tomt vann, i 1C er de heller ikke traineer, de vet hva de får penger for.
    Alt du sier kan gjøres på klienten, og til minimale kostnader.
    Jeg ser ingen vits i å diskutere videre. Jeg foreslår å lukke emnet.

    Eller uttrykk ideen tydeligere, hva som trengs og hvilket formål som forfølges.

    Tror du det er traineer hos Google som oppfant WebSocket-protokollen?! Hvis denne ideologien var utopisk, irrasjonell, etc., ville ikke WebSocket (beskrevet i RFC 6455) ha fått statusen som en "forslag til standard" fra IETF. Den neste statusen er "utkast til standard", som har de aller fleste standarder som brukes på Internett.
    Og når det gjelder klienten, uten en klient er det bare en server og ingen kaller ham noe; En fullstendig ubrukelig opphopning av programvare og maskinvare. En klient er for en server hva en kjøper er for en selger. Serveren gir klienten de nødvendige dataene, serveren genererer administrerte skjemaer for klienten, generelt eksisterer serveren for klientens skyld, og ikke omvendt! I versjon 8.2 husker serveren til og med brukerens økt. Les: http://v8.1c.ru/overview/Term_000000805.htm#1 delen "Motstand mot avbrudd i kommunikasjonskanalen".
    Så hvem eksisterer for hvem?

  18. Kanskje de ikke forstår meg helt riktig? Jeg foreslår å ikke endre utvekslingsmetoden mellom klienter og serveren fra forespørsel-svar til dupleks, jeg foreslår å legge til en mekanisme for dupleksvarsling av noen klienter fra andre, om andre klienter som utfører visse handlinger gjennom serveren. Utviklere kan bruke denne mekanismen etter eget skjønn. Hvordan ønsket for eksempel utvikleren å omgå katalogelementene gjennom objektmodellen i stedet for en forespørsel - vær så snill. Og på små oppslagsverk øker denne metoden noen ganger arbeidshastigheten betydelig.
    Ellers kan du programmatisk bare få en liste over alle tilkoblinger til databasen og få en bruker til å koble fra databasen (hvis du har rettigheter til det). Men det er umulig å sende et varsel til brukeren og få et kall til en bestemt prosedyreutløser.

Artikkelen fortsetter artikkelserien «Første trinn i utvikling på 1C».

I den vil vi se på metodene for å informere brukeren som er til stede i 1C:Enterprise-plattformen 8, og også fokusere oppmerksomheten din på noen funksjoner ved driften av disse mekanismene .

Anvendbarhet

Artikkelen diskuterer funksjonaliteten:

  • Grensesnitt i "Versjon 8.2"-versjonen for konfigurasjonen utviklet på 1C:Enterprise-plattformen 8.2.19.130
  • Taxigrensesnitt for konfigurasjon utviklet på 1C:Enterprise-plattformen 8.3.4.496 til 8.3.9+
  • Taxigrensesnitt for en konfigurasjon utviklet på 1C:Enterprise-plattformen 8.3.10-8.3.11

Hvordan vise en melding til brukeren i 1C

Å vise meldinger i brukermodus løser en rekke problemer:

  • refleksjon av fremdriften til den nåværende prosessen (viser stadiet for utførelse av prosessen; viser de beregnede verdiene oppnådd under driften av algoritmen);
  • vise feil til brukeren for mulig korrigering;
  • utstede anbefalinger;

Meldingstyper:

  • Terminatorer, som stopper kjøringen av programmet og ikke lar det fortsette før brukeren leser denne meldingen og utfører visse handlinger. For eksempel vil brukeren bli presentert med et spørsmål på skjermen som må besvares Ja eller Nei. Inntil brukeren svarer, utfører ikke programmet ytterligere handlinger;
  • introduksjonsmeldinger som enkelt vises for brukeren og tillater videre arbeid (dvs. brukt i varslingsmodus).

Avslutningsmeldinger skal være feilmeldinger og introduksjonsmeldinger: anbefalinger, meldinger om det nåværende stadiet av prosessen og visning av beregnede verdier (feilsøkingsutskrift).

Innledende meldinger er ment å gi brukeren noe informasjon.

Det er nødvendig at brukeren gjør seg kjent med det og eventuelt tar noen handlinger som er beskrevet i denne meldingen.

Det er svært viktig at brukeren faktisk leser disse meldingene, så de skal kun inneholde viktig informasjon.

Test- og feilsøkingsmeldinger skal ikke sendes til brukeren, fordi før eller siden vil han begynne å ignorere absolutt alle meldinger.

I konseptet med et administrert grensesnitt har tilnærmingen til å sende ut en melding endret seg noe. Den er nå bundet til den formen den oppsto i. Den kan ikke lenger lukkes slik at teksten er helt usynlig.

Du kan ikke løsne en meldingsboks fra et skjema.

Funksjonssyntaks:

Å melde (<Текст сообщения>, <Статус>)

De. den første parameteren er selve teksten.

Den andre parameteren (meldingsstatus) er valgfri. Du kan spesifisere verdier for statusen: Normal, Viktig, Veldig viktig etc.

Denne verdien bestemmer hvilket ikon som vil være plassert ved siden av meldingen. Dette fungerer imidlertid bare i det vanlige grensesnittet.

I konseptet med administrert grensesnitt er ikonet alltid i skjemaet utropstegn, kan den ikke omdefineres.

Faktum er at hvis en melding genereres på tidspunktet for skriving av et katalogelement, kan følgende situasjon oppstå.

Brukeren klikker på en knapp Lagre og lukk, i dette tilfellet vises meldingen i det tilsvarende vinduet (til høyre i skjemaet).

Men skjemaet lukkes umiddelbart, og brukeren vil ikke se at noen informasjon ble vist for ham.

Derfor, i konseptet med en administrert applikasjon, anbefales det å vise introduksjonsmeldinger ved hjelp av såkalte varsler. Et eksempel på feil bruk av en funksjon Å melde presentert i figuren.

Men funksjonen Å melde kan brukes til å vise informasjon om visse feil, for eksempel ved dokumentpostering.

I dette tilfellet kan systemet informeres om at skjemaet ikke trenger å lukkes og vise brukeren hvilke feil som oppstår ved bokføring av dokumentet.

Funksjon Å melde fullt støttet i plattform 8.3. Den kan brukes, og den vil fungere (både i filversjonen og i klient-serverversjonen).

Men det bør også bemerkes at funksjonen Å melde Det er videre utvikling– dette er en meldingsklasse for brukeren, som tillater, i tillegg til å vise en melding, å binde den kontekstuelt til alle skjemaelementer.

For eksempel kan en feilmelding knyttes til et skjemaelement, som er veldig tydelig for brukeren. Vi kommer tilbake for å vurdere dette problemet litt senere. Funksjon Å melde det er en interessant funksjon.

Dermed kan programkoden i Plattform 8.3 kjøres både på klientsiden og på serversiden.

I dette tilfellet er klientprogramkoden ansvarlig for interaksjon med brukeren, dvs. På klientsiden åpnes skjemaer og rapporter vises.

Ulike dialogdokumenter vises også kun på klienten. De kan ikke kjøres på serveren fordi serveren ikke har mulighet til å samhandle med brukere.

Men funksjonen Å melde kan utføres både på klientsiden og på serversiden. Samtidig bruker metoden Å melde på serveren betyr ikke i det hele tatt at meldingen vil vises på serveren, det er rett og slett ingen steder å vise dem.

Dette betyr at hvis vi viser en melding i serverprosedyren ved hjelp av denne metoden, vil de samle seg i en eller annen buffer og de vil vises på skjermen først når serverprosedyren avsluttes og returnerer til klienten.

På dette tidspunktet vil systemet be om data fra bufferen og vise dem på skjermen.

Den samme funksjonen gjelder for klassen Melding til bruker. Figuren viser et eksempel på bruk av metoden Å melde på serversiden.

Som et resultat av å bruke metoden Å melde på serversiden ble meldinger vist på skjermen på klientsiden.

En varslingsmekanisme er nødvendig for å informere brukeren om at "noe" har skjedd i systemet og at "noe" krever brukerens oppmerksomhet. Varsler genereres av to scenarier:

  1. Av selve plattformen når du interaktivt tar opp eller endrer et objekt
  2. Av utvikleren når han kaller en metode i koden .

Selve varslingen er et lite vindu som som regel vises i nedre høyre hjørne og informerer om den fullførte handlingen. I løpet av noen få sekunder blekner den gradvis og forsvinner. Samtidig, hvis du holder musepekeren over varslingen, forsvinner den ikke, og du kan lese den nøye.

I tillegg kan du få tilgang til varsler i det tilsvarende området i informasjonspanelet («Historikk»-knappen nederst til venstre i søknadsskjemaet i «Versjon 8.2»-grensesnittalternativet).

For å lage dine egne varsler, må du bruke den globale kontekstmetoden ShowUserAlert(). Syntaksen før versjon 8.3.10 er presentert nedenfor:

Vis brukervarsel (<Текст>, <НавигационнаяССылка>, <Пояснение>, <Картинка>)

Den første parameteren inneholder teksten som vil vises i varselet.

Deretter, som den andre parameteren, kan du sende en viss navigasjonslenke til et hvilket som helst element i informasjonsbasen (elementet som tilsvarer teksten i meldingen vår). Når en bruker klikker på et varsel, vil lenken bli fulgt.

Ved å bruke den tredje parameteren kan du sende en forklaring på meldingen, dvs. noe utvidet beskrivelse.

Du kan også tilordne et bilde som viser varslingsstatusen.

Det skal bemerkes at alle disse parameterne er valgfrie. Nedenfor er et eksempel på bruk av denne metoden (i konfiguratoren og i brukermodus i grensesnittalternativet "Versjon 8.2").

I versjonen av plattformen 8.3.10.216 for "Taxi"-grensesnittet, ble varslingsmekanismen betydelig forbedret for å forbedre brukervennligheten til både tynne klienter og nettklienter. Av denne grunn har også parameterne som er sendt til metoden endret seg ShowUserAlert(). Nå ser syntaksen slik ut:

ShowUserAlert(<Текст>, <ДействиеПриНажатии>, <Пояснение>, <Картинка>, <СтатусОповещенияПользователя>, <КлючУникальности>)

Det kan sees at den andre parameteren, tidligere kalt Navigasjonslenke, fikk et nytt navn HandlingNårKlikket. Dette skyldes det faktum at det nå er mulig å sende ikke bare en streng med en navigasjonslenke, men også en beskrivelse av varselet. Dette er illustrert i skjermbildet nedenfor:

Som det fremgår av eksempelet, har vi nå muligheten til å programmatisk behandle et klikk på et varslingsvindu, i henhold til logikken som er nødvendig.

Neste parameter Brukervarselstatus dukket opp for første gang. Den indikerer statusen til varselet (Informasjon eller Viktig).

Når det gjelder alternativet Viktig, hvis brukeren ikke har svart på meldingen, kan den leses gjennom varslingssenteret etter at den er skjult fra skjermen (mer om det nedenfor). Ved informasjonsalternativet slettes varselet uten å lagres i dette senteret. La oss omskrive koden fra vårt eksempel som nedenfor:

Etter å ha utført kommandoen, får vi omtrent denne visningen av programvinduet:

En knapp med et bjelleikon har dukket opp i verktøylinjen, som kaller opp det ovennevnte varslingssenteret. Den akkumulerer nye viktige varsler som brukeren ennå ikke har svart på.

Hvis det er noen varsler i senteret, vises en liten oransje prikk ved siden av den for å tiltrekke brukerens oppmerksomhet. Brukeren kan åpne varslingssenteret, lese teksten og om nødvendig iverksette noen handlinger.

Fra senteret fjernes varselet ved å klikke på fjernknappen, men hvis det er en handling knyttet til varselet, så forsvinner den også så snart brukeren klikker på teksten i meldingen.

Og til slutt var den siste parameteren som ble lagt til Nøkkel til unikhet. Du kan bruke den til å finne varselet som vises på skjermen og endre det. Hvis det ikke er noe varsel med denne parameteren, vises et nytt varsel.

Som du kan se, har mulighetene gitt av den tilsvarende metoden blitt enda større! Men dette er ikke alle endringene i varslingsmekanismen.

Som du kanskje allerede har lagt merke til, har utseendet deres endret seg. Varsler ser nå mer moderne og ergonomiske ut, men de kan ikke flyttes rundt på skjermen eller endre størrelse. Vær oppmerksom på at i vårt eksempel passet varslingsteksten rett og slett ikke helt inn i selve vinduet, og brukeren kan bare lese den i sin helhet ved å åpne varslingssenteret. Derfor bør du ikke skrive mye tekst i varslingsteksten.

Nye funksjoner inkluderer også samtidig visning av opptil tre varsler på skjermen.

Dette avslutter vårt bekjentskap med programvaregenerering av varsler. Husk imidlertid at varsler ikke bare genereres av utvikleren programmatisk, men også av plattformen selv på tidspunktet for interaktiv opptak eller endring av et objekt. Og ofte forårsaker dette faktum misforståelser først og fremst blant nybegynnere: hvorfor trengs disse tjenestevarslene, som forresten ikke kan slås av?

La oss forestille oss dette enkel situasjon: Brukeren har satt et filter i en liste for enkelhets skyld. La oss si at han gjorde dette i form av en liste i nomenklaturkatalogen. Så, etter en stund, bestemte jeg meg for å introdusere et nytt element kalt "Stol", som ikke samsvarer med det tidligere installerte filteret. Går inn i den, skriver den ned og...? Og han ser det ikke på listen. Hva vil den gjennomsnittlige brukeren gjøre? Selvfølgelig vil han gå inn i den en gang til, men vil ikke se den igjen. Dette kan bli fulgt av en tredje, fjerde, femte gang. Når han blir lei av å gå inn i det samme om og om igjen, vil han til slutt spørre deg: hvor blir alt av?

Det er nettopp derfor plattformen viser disse tjenestevarslene, og informerer brukeren om at handlingen deres er fullført. I vårt eksempel, på tidspunktet for interaktivt opptak, vil brukeren se følgende varsel:

Oppsigelsesmeldinger

Oppsigelsesmeldinger er de meldingene som ikke vil tillate arbeid før brukeren utfører bestemte handlinger, dvs. til den behandler meldingen.

Vi vil snakke om muligheten for å bruke oppsigelsesmeldinger i plattform 8.3 litt senere (i I det siste De prøver å ikke bruke dem, så eksemplet som vurderes er mer relevant for plattform 8.2).

Det er to metoder for å utstede oppsigelsesmeldinger Advarsel Og Spørsmål. Advarsel skiller seg fra Spørsmål fordi den har en enkelt knapp OK.

Et spørsmål kan spesifisere forskjellige sett med svaralternativer ( Ikke egentlig, JaNeiAvbryt, OK, OKAvbryt, Gjenta Avbryt, AbortRepeatSkip), som er spesifisert ved hjelp av parameteren.

La oss vise en advarsel ved å bruke linjen (for eksempel i en administrert applikasjonsmodul):

Advarsel(“Basen vil nå være åpen”);

For å åpne en administrert applikasjonsmodul, velg objektet i konfigurasjonstreet Konfigurasjon, anrop kontekstmenyen og velg element Åpne en administrert applikasjonsmodul.

I dette tilfellet, når applikasjonen startes, vil et vindu vises som er modalt. Et modalt vindu overlapper alle vinduer som finnes i applikasjonen. Inntil vi behandler dette vinduet, er ingen ytterligere handlinger mulig.

Funksjonen fungerer på samme måte Spørsmål.

Syntaks:
Spørsmål(<ТекстВопроса>,<Кнопки>,<Таймаут>,<КнопкаПоУмолчанию>,<Заголовок>,
<КнопкаТаймаута>);

Bare de to første parameterne er nødvendige. For den andre parameteren er datatypen sammensatt ( DialogmodusSpørsmål eller Listeverdier). Tredje parameter ( <Таймаут> ) karakteriserer tidsintervallet i sekunder som systemet vil vente på brukersvar.

Når intervallet utløper, lukkes spørsmålsvinduet. Lignende parameter( <Таймаут> ) er også til stede i funksjonen Advarsel.

Som et eksempel på bruk av funksjonen Spørsmål Du kan bruke følgende kode, skrevet i en administrert applikasjonsmodul:

Vær oppmerksom på at disse metodene ( Advarsel Og Spørsmål) er ikke tilgjengelig på serveren. Og dette er logisk, fordi grensesnittmetoder ikke kan kjøres på en server der det ikke er noen bruker.

Funksjoner ved bruk av modale vinduer i plattform 8.3

I plattform 8.3 er det driftsmoduser med og uten modalitet. Standardinnstillingen er Ikke bruk modalitetsmodus.

I dette tilfellet er bruk av oppsigelsesmeldinger umulig. Hvis det er nødvendig å bruke oppsigelsesmeldinger (funksjoner Advarsel Og Spørsmål) bør du endre verdien på konfigurasjonsegenskapen Bruk.

Modalvinduet vises helt øverst og blokker fungerer med andre vinduer til handlingene med modalvinduet er fullført. I tillegg stopper kjøringen av programkoden på punktet der dette vinduet kalles. Kodekjøring vil fortsette først etter at det modale vinduet er lukket.

For det første oppstår det problemer med bruk av modale vinduer for mobil applikasjon. For det andre, i nettleseren, implementeres vindusmodalitet ved hjelp av separate popup-vinduer.

Popup-vinduer er ofte deaktivert av standard nettleserinnstillinger. Brukeren må tvinges til å angi tillatelsen for disse vinduene.

Nettlesere for nettbrett og telefoner støtter i de fleste tilfeller ikke popup-vinduer i det hele tatt.

For å erstatte funksjoner Spørsmål Og Advarsel nye metoder er utviklet: Vis spørsmål, Vis Advarsel.

Disse metodene lar deg kalle et vindu, men stopper ikke kjøringen av programkoden. Teknisk oppnås dette ved å danne et pseudo-vindu inne i det overordnede vinduet. Pseudovinduet overlapper ikke det overordnede vinduet. Etter å ha åpnet et slikt vindu, fortsetter koden å kjøre.

Mottak og behandling av brukerangitte verdier utføres i en egen prosedyre, som kalles når dialogboksen lukkes.

Funksjonssyntaks Vis Advarsel:

Vis Advarsel(<ОписаниеОповещенияОЗавершении>, <ТекстПредупреждения>, <Таймаут>, <Заголовок>)

Parameter <ОписаниеОповещенияОЗавершении> (valgfri)

Data-type: Beskrivelse Varsler.

Inneholder en beskrivelse av prosedyren som vil bli kalt etter at advarselsvinduet er lukket.

Funksjonssyntaks Vis spørsmål:

Vis spørsmål(<ОписаниеОповещенияОЗавершении>, <ТекстВопроса>, <Кнопки>, <Таймаут>, <КнопкаПоУмолчанию>, <Заголовок>, <КнопкаТаймаута>)

De tre første parameterne er nødvendige.

Nedenfor er et eksempel på bruk av funksjonen.

Class MessageToUser

Grunnleggende bekvemmelighet for meldingsklassen Melding til bruker er at dette er en kontekstuell melding (i motsetning til metoder Advarsel Og Spørsmål).

Meldinger kan knyttes til et spesifikt skjermelement. Dette objektet er også tilgjengelig på serveren.

Vær oppmerksom på at for det første må dette objektet opprettes. For eksempel: Message = New MessageToUser;

Dermed lager vi en forekomst av dette objektet.

For det andre må du spesifisere meldingsteksten i en egen egenskap.

For det tredje, i eiendommen Felt Du kan spesifisere hvilket skjemaelement denne meldingen skal knyttes til.

Merk følgende! For å binde til ønsket skjemafelt, vær oppmerksom på initialiseringen av egenskaper PathToData Og Datanøkkel. For et dokument, når du plasserer kode i en objektmodul, kan du skrive:

Message.DataPath = "Objekt";
Message.DataKey = ThisObject.Link;

For å åpne dokumentmodulen går du til fanen i redigeringsvinduet for objekt (dokument). Annen trykk på knappen Objektmodul.

For eksperimentet vil vi plassere koden i objektmodulen til et dokument.

Nedenfor er resultatet oppnådd i brukermodus for plattform 8.3.

Det skal bemerkes at meldinger sendes ut ved hjelp av det nye systemobjektet Melding til bruker i det generelle tilfellet avsluttes de ikke. De. systemet vil tillate brukeren å fortsette ytterligere handlinger uten å svare på de viste meldingene.

Men for det første er disse meldingene ganske merkbare. For det andre vises meldinger vanligvis til brukeren på tidspunktet for registrering av elementer i kataloger eller postering av dokumenter, dvs. når noen kontroller utføres. Og hvis det ble oppdaget feil, vil brukeren se de samme meldingene.

Følgelig, når feil oppdages, kanselleres transaksjonen, dvs. skriving av et katalogelement er forbudt, eller posting av et dokument er forbudt.

Dermed oppstår en slags emulering av oppsigelsesmeldingen. Fordi handlingen avbrytes inntil brukeren reagerer på den angitte meldingen, vil det være umulig å fullføre handlingen, for eksempel å legge ut et dokument.

Men på den annen side er det mulig å lukke dokumentet uten å gjennomføre det, uten å reagere på meldingen på noen måte. Derfor avsluttes ikke disse meldingene til brukeren.

Behandle statusvarsling

Det er en spesiell funksjon som du kan bruke til å vise den omtrentlige fremdriften av en prosess.

Syntaks: Stat(<ТекстСообщения>, <Прогресс>, <Пояснение>, <Картинка>)
Alternativer:<ТекстСообщения>Og<Пояснение>– valgfritt, skriv – Linje.
Teksten vises på en spesiell statuslinje.
<Прогресс>Parameteren er også valgfri, men visuell.
Type: Antall. Fremdriftsindikatorverdi (fra 1 til 100).
<Картинка>også en valgfri parameter.
Når du behandler en hendelse, kalles periodiske funksjoner som:

I dette tilfellet kan etikettene endres, og verdiene til fremdriftsparameteren kan endres.

En funksjon kan kalles fra én prosedyre (funksjon) eller fra flere. På denne måten kan du spore utførelsesstatusen til prosessen.

Hvis du vil se nærmere på varslingsmekanismen, stopp nå og les vår ny artikkel Viser fremdriften til langvarige operasjoner i 8.3.10. Det forklarer, ikke lenger på nivået til en nybegynner, alle finessene og fallgruvene ved driften av denne mekanismen.

Vi avslutter vår introduksjon til måter å informere brukeren på. Vi håper du har forståelse for i hvilke situasjoner en eller annen metode bør brukes.

Jeg vil nok en gang gjøre deg oppmerksom på at hvis konfigurasjonen din (versjon 8.3.3+) innebærer bruk av en nettklient, så:

  • på konfigurasjonsnivået må modalitetsmodusinnstillingen settes til "Ikke bruk"
  • Koden må bruke metodene til den asynkrone brukerinteraksjonsmodellen. Slike metoder begynner med ordene Forestilling eller Begynne.

Du kan lese mer om å nekte å bruke modale vinduer i 1C:Enterprise 8.3-plattformen i den siste artikkelen i serien. Og vi går videre og begynner til slutt å studere det etterlengtede Taxi-grensesnittet, som allerede har blitt nevnt mer enn en gang i materialene våre.

Denne artikkelen er en kunngjøring om ny funksjonalitet.
Det anbefales ikke å bruke innholdet i denne artikkelen for å lære ny funksjonalitet.
Full beskrivelse ny funksjonalitet vil bli gitt i dokumentasjonen for den tilsvarende versjonen.
Full liste endringer i ny verson finnes i filen v8Update.htm.

Implementert i versjon 8.3.11.2867.

Under en lang serveroperasjon vil brukeren alltid se fremdriften for utføringen på klienten. For å estimere hvor lang tid som er igjen til den er ferdig, eller hvor raskt den er ferdig. For å implementere dette er det nødvendig å på en eller annen måte overføre informasjon fra serveren til klienten. Men både før og nå skjer interaksjon mellom klient- og serverdelen av 1C:Enterprise kun på initiativ fra klienten. 1C:Enterprise-serveren selv kan ikke etter eget skjønn kalle opp noen klientapplikasjon og overføre informasjon til den.

Første ting først. For "vanlige" IT-tjenester eksisterer ikke dette problemet. Personer med erfaring finner ut i praksis hvorfor det er dårlig å plassere andre oppgaver på terminalservere og ikke gjør det. Men vi forstår alle godt at det finnes små selskaper, og det er alltid de som er i ferd med å starte opp og derfor ikke har denne erfaringen. Derfor er det mulig at til og med noen andre kan finne forklaringen banal, men den må uttales.
La oss vurdere å kombinere terminalen med andre serverroller på "begge" sider.

1. "For kombinasjon."
Hoved EKTE grunnå kombinere roller betyr å spare penger. Og for å være presis - TILSYNENDE besparelser ved oppstart av drift.
Mange støttespillere kommer selvfølgelig med andre argumenter. Men som regel blir de til slutt fortsatt "konvertert" til billighet. Forresten, hva som vil skje etter operasjonsstart i dette øyeblikk, beregner talsmenn for kombinasjonen ikke godt - posisjonen er enkel - "vi vil bryte gjennom på en eller annen måte."

Før vi går videre til den motsatte sidens argumenter, la oss gå litt dypere inn i teorien.

Det er noe slikt som utstyrskraftreserve i toppøyeblikk. Dessverre er det ikke åpenbart for mange administratorer at når han ser på oppgavebehandleren, ser han et øyeblikksbilde (flere minutter) av gjeldende arbeidsmengde og ser ikke "topper". Og han vil ikke se det.
For forskjellige serverroller kan den maksimale amplituden mellom "topp" og gjennomsnittsverdien variere sterkt. I gjennomsnitt for et sykehus er terminalserverrollen preget av den største forskjellen mellom toppbelastning og gjennomsnittlig belastning. Du kan gi en betinget forklaring, men den er betinget: å legge inn data manuelt (ett dokument hvert femte minutt) er svært vanskelig å laste inn noe i det hele tatt på 1C-klientsiden, siden datamanipulering, beregning, etc. kjører på en annen server (1C-server og DB). De. Brukere som gjør noe for hånd, og dette er mesteparten av arbeidsdagen, belaster ikke terminalserveren mye. Men når en lokal oppgave ikke oppstår for hele dagen - kopiere en film, last ned en distribusjon, last ned data til en klient, eller til og med last ned porno via en torrent - alt dette spiser opp ressurser ganske godt, om enn ikke på lenge, men ofte er flere prosessorkjerner lastet fullstendig. Det finnes også et antivirus, som ikke skal være på 1C-serveren (der brukere ikke har lokal tilgang), men antiviruset må være på terminalserveren. Også på terminalserveren i god form i fjor det må være en anti-kryptering installert. Slike "ting", men ikke hele tiden, begynner noen ganger å sjekke noe - en ny fil, et portangrep, etc. Generelt, kall det hva du vil, men fra tid til annen er det situasjoner på terminaler, spesielt når maskinvaren er overbelastet. Dette er en terminal terminal pull - bare erfarne administratorer gjør dette, balanserer tilkoblinger og last. Jeg snakker ikke om dfss, ressurskvoter, virtualisering osv. kutte av maksimal hastighet for enhver strømning.

1. "For riving." Det viser seg at vi ikke bare trenger å snakke om å regulere belastningen mellom rollene. Det er nødvendig å regulere belastningen mellom terminalbrukere. Og hvis antallet overstiger det som er rimelig for én server, er det nødvendig å bygge flere terminalservere, og spre brukere mellom dem.
Ikke akkurat en teori, men også interessant fakta. Vår praksis har vist (og vi gjør ca. 100 revisjoner i året) at topper i belastningen på terminalservere når de kombineres med en 1C-server er et veldig populært alternativ, og det viste seg at terminalservere ikke overvåkes i det hele tatt eller at dette er gjort betinget, men viktigst av alt påvirker de arbeidet til andre roller-server (1C-server i dette tilfellet). Dessuten er dette ikke et teoretisk resonnement - de overførte lasten til en egen server og klienten bekreftet det positive resultatet.
2. "For riving." En annen faktor er lisensiering. For det samme antall brukere (det er klart at vi ikke snakker om tre personer), tatt i betraktning stor forskjell Når det gjelder kostnad mellom standard og bedrift, er det mer lønnsomt å samle flere rimelige servere enn én kraftig maskinvare. For eksempel, hvis du lisensierer MS SQL Server, må du lisensiere ALLE kjerner på serveren, og ikke de du tilordner affinitetsmasken til å bruke. Det viser seg at du vil betale for mye for brukere som vil spise opp prosessorer med terminaløkter.

3. "For riving." Det virkelige argumentet er sikkerhet. Dessuten er dette en mangefasettert ting. Terminalservere bør overvåkes aktivt med antivirus. Dette er det mest sannsynlige angrepspunktet for trojanere, løsepengeprogramvare, brute force-angrep, etc. Men det er bedre å ikke logge på en server med rollen som 1C-server og DB lokalt i det hele tatt. Det er bedre å kjøre brettkonsoller fra en annen server. Kontroller aktivt 1C-servere med antivirus, deres tilkoblinger - brrrr. Du vil mest sannsynlig angre på det. Og enda mer, det er en "synd" å arrangere en "fildump" på en 1C-server eller database. Men i Russland tar de ikke agnet ennå - de har ikke med sikkerhet å gjøre, så vi går videre.

4. "For riving." Vanligvis, på tidspunktet for kjøp av en server, blir ikke oppgaven "hvem skal håndtere problemene med konkurranse om ressurser" tatt på alvor. Men i praksis kan du fortsatt forstå de som legger rollen til 1C-serveren og databasen på "fysikk", og legger en virtuell maskin ved siden av den og legger en "terminalserver" i den, så i det minste har terminalbrukere mindre prioritet i kampen om ressursene, og det er lettere å kvotere dem . Men hvorfor er det ikke åpenbart at for å sette kvoter må du forstå HVILKE REGLER SOM SKAL GJELES BASERT PÅ HVILKE METRIKK. Hvem overvåker seriøst belastningen av terminalbrukere? Og de som kan konfigurere for eksempel Zabbix, kan fortsatt ikke tolke de riktig innsamlede verdiene. Med andre ord, latskap er en normal egenskap hos en administrator, men du må vurdere styrken din riktig. Å isolere lasten fysisk er mye mer realistisk enn å tenke at under drift vil du plutselig få en ny vind og finne hemmelige flått som vil returnere lasten til det normale.
Ta analogien med skip. De har "skott" slik at vannet som kommer inn ved et havari under vannlinjen sprer seg ikke gjennom hele skipets volum og fører ikke til flom. Det er naivt å tro at når denne sammenbruddet skjer, vil du begynne å lage de samme partisjonene. Det er ingen måte i helvete du vil ha tid/penger/kunnskap/lyst til denne aktiviteten.

Og hvis du er et lite selskap, er det ofte en filversjon ved siden av klient-server-alternativet, for eksempel 1C: Regnskap. Og denne databasen skal ikke plasseres på DB-serveren, men på terminalserveren på lokale disker, og ikke over nettverket. Ellers vil du forverre ytelsen til filversjonen.

Hvis du vil gjøre det riktige, er det bedre å bruke penger på en egen terminal.
Vel, hvis du ønsker å dykke dypere inn i dette emnet, kom til vår opplæring http://www..
Hvis du ikke er enig i materialet, skriv til slava@site med argumentene dine. Vi vil inkludere begge posisjonene i gjennomgangsmaterialet ovenfor.

Mekanismen for tellere for ressursforbruk er forbedret - muligheten til å velge basert på bruk er implementert sikkerhetsmodus arbeids- og sikkerhetsprofil (nye typer filtre lagt til). For seleksjonsuttrykk for ressursforbrukteller er muligheten til å sammenligne for ulikhet implementert.For valguttrykk for teller for ressursforbruk er muligheten til å kombinere "AND" flere betingelser for én filtertype implementert.

Implementert batch-modus for tynne og tykke klientapplikasjoner. Batch-modus strekker seg fra starten av klientapplikasjonen til slutten av behandlerenFør du starter systemetapplikasjonsmodul. Etter at behandleren er ferdig med arbeidet, deaktiveres batchmodus automatisk. I batch-oppstartsmodus undertrykkes utdataene fra alle systemdialoger.Et tegn på batchmodusen til en klientapplikasjon er kommandolinjekommandoen for start/DisableStartupDialogs.

Grensesnitt 8.2 støttes ikke lenger

Tiden for fullstendig etterberegning av totaler for regnskaps- og akkumuleringsregistre er redusert i følgende tilfeller:

  • omberegning av totaler under operasjonen Testing og fiksing fra konfiguratoren;
  • ved hjelp av metoden RecalculateTotals() underlagt følgende vilkår:
    • eksklusiv tilgang til informasjonsbasen;
    • tilstedeværelsen av administrative rettigheter for brukeren på hvis vegne resultatene beregnes på nytt;
    • metoden utføres i en sesjon der ingen skilletegn brukes.

Restruktureringen av informasjonsbasen har blitt fremskyndet ved bruk av Microsoft SQL Server og IBM DB2 DBMS.

Sannsynligheten for at flere tilkoblinger til Microsoft SQL Server lukkes samtidig er redusert, noe som har en positiv effekt på ytelsen ved arbeid med TempDB.

Det er implementert en klyngeindeks på registraren for beregningsregisteret. Ombyggingen av indeksen vil bli utført når beregningsregisteret restruktureres eller ved re-indeksering under en test- og oppdateringsoperasjon. hovedregistertabellen er ikke dannet for slettingsforespørselen. Reduserte sannsynligheten for tabelllåsing ved sletting av poster over selve gyldighetsperioden til beregningsregisteret.

I tynne, tykke og webklienter låser skjemaet opp objektet 1 minutt etter at modifikasjonsflagget er fjernet (tidligere ble det fjernet da skjemaet ble lukket) Når du arbeider under PostgreSQL DBMS, i den teknologiske loggen (hendelse. ) Spørringsplaner for UPDATE-, DELETE- og INSERT-spørringer plasseres. (Tidligere var det bare SELECT)

Implementert visning av kritiske feil i den optimaliserte mekanismen for oppdatering av databasekonfigurasjonen i konfiguratoren og i tilfellet teknologimagasin.

Teknologiloggen implementerer Dbms, Database, DBCopy-egenskapene for DBMS-tilgangshendelser (DB2, DBMSSQL, DBPOSTGRS, DBORACLE), EXCP og SDBL-hendelser.

Kategori: , | Tags: ,

Optimalisering av arbeid med PostgreSQL
Driften av virtuelle tabeller over omsetning av akkumulerings- og regnskapsregistre har blitt optimalisert ved bruk av grupperinger etter dag, måned eller år, samt ved bruk av spørringsspråkfunksjonen BeginPeriod(). Optimalisering brukes for alle versjoner av støttet DBMS, bortsett fra Microsoft SQL Server, hvor optimalisering er effektiv fra og med versjon 2012.

fakta om overskridelse av telleren registreres i den teknologiske loggen (hendelse )

Implementerte muligheten til å evaluere CPU-bruk under en økt:

  • for gjeldende serveranrop;
  • i de siste 5 minuttene;
  • for hele øktens varighet.

For et arrangement implementert egenskapen CpuTime, som inneholder varigheten av det fullførte serverkallet, i mikrosekunder.

Endring av struktur.
For informasjonsregistre er dannelsen av en klyngeindeks etter dimensjoner implementert for de fysiske tabellene for den første skiven og den siste skiven. Beskrivelse av indeksstrukturen (se). Indeksens unikhetskontroll er deaktivert.Forespørsler for å hente data fra skivetabeller har blitt optimalisert.Nye indekser bygges når det tilsvarende informasjonsregisteret restruktureres eller når en databaserestrukturering utføres under en test- og reparasjonsoperasjon.

Nye spørringsdesign. Muligheten til å lage et felt med unike (innen en tabell) og sekvensielt økende verdier er implementert. Spørringsspråkfunksjonen implementert AUTONUMMERREKORD(), som kun kan brukes når du oppretter en midlertidig tabell. Bruken av funksjonen støttes ikke AUTONUMMERREKORD():

  • i spørsmål som inneholder JOIN på toppnivå;
  • i spørringer som ikke danner en midlertidig tabell;
  • utenfor utvalgslisten;
  • i uttrykk.

Objekt implementert ConstantKeyValues.Det er implementert metoder for den konstante lederen CreateKeyValue().

Hvis spørringen bruker operator B med en underspørring, vil en kobling til tabellen som brukes i operator B i stedet for underspørringen brukes. Denne erstatningen brukes bare hvis erstatningen ikke endrer søkeresultatet. I kompatibilitetsmodus med versjon 8.3.12 har ikke virkemåten endret seg.

Skyoptimalisering.
Reduserte størrelsen på midlertidige filer opprettet av plattformen ved oppdatering av fulltekstsøkeindeksen. Denne endringen er mest merkbar i informasjonsbaser med et stort antall skilletegn. Det nye midlertidige filformatet vil bli brukt etter at kompatibilitetsmodus er deaktivert.I kompatibilitetsmodus med versjon 8.3.12 har ikke virkemåten endret seg.

Bakgrunnsfolk.
Implementerte muligheten til å vente på at en eller flere bakgrunnsjobber skal fullføres i en spesifisert tidsperiode. Implementert metodeWaitCompleteExecution() for objekter Fo newTask og Bakgrunn Task Manager. Metode WaitComplete()anses som foreldet og anbefales ikke brukt.Det anbefales å analysere applikasjonsløsningen og endre algoritmene for arbeid med bakgrunnsjobber.
Optimalisert start og venting på at bakgrunnsjobber skal fullføres

Kundestart.
Implementerte muligheten til å deaktivere visningen av velkomstskjermen når du starter klientapplikasjonen. Implementerte kommandolinjealternativet DisableSplash-klientprogramstart. Alternativet er tilgjengelig for tynnklient, tykk klient og nettklient.

Gjengivelsen av sidetitler (bokmerker) når du arbeider i nettklienten har blitt optimalisert og akselerert.

Oppdatering av brukte biblioteker

  • LibEtPan-biblioteket har blitt oppdatert til versjon 1.8.
  • WebSocket-biblioteket har blitt oppdatert til versjon 0.7.0.
  • Micosoft JDBC Driver for SQL Server har blitt oppdatert til versjon 6.2.
Kategori: ,

Curl-biblioteket er oppdatert til versjon 7.57.0.
OpenSSL-biblioteket oppdatert til versjon 1.1.0h

Forbedret oppdatering av fulltekstsøk: Muligheten til å kontrollere antall bakgrunnsjobber som oppdaterer fulltekstsøkeindeksen når du arbeider i klient-serverversjonen av infobasen er implementert. Plasseringen av fi bakgrunnen kan kontrolleres gjennom krav til funksjonalitetstildeling.
For Full-Text Search Manager-objektet er metodene SetNumber of Indexing Jobs() og GetNumber of Indexing Jobs() implementert.

For FTEXTUpd-teknologilogghendelsen er følgende egenskaper implementert: MinDataId, MemoryUsed, BackgroundJobCreated, JobCanceledByLoadLimit, TotalJobsCount, FailedJobsCount.

Klyngediagnostikk har blitt forbedret: Sesjons- og tilkoblingsegenskaper har nå verdier som indikerer tiden brukt på å ringe til klyngetjenester på vegne av økten eller tilkoblingen. Disse verdiene er implementert for alle administrasjonsverktøy: klyngekonsoll, COM-tilkobling, administrasjonsgrensesnitt fra Java-språket, administrasjonsserver.
Følgende egenskaper er implementert for IInfoBaseConnectionInfo- og ISessionInfo-objektene:

durationCurrentService — gjeldende driftstid for klyngetjenesten;
CurrentServiceName — navnet på tjenesten som utføres;
durationLast5MinService — driftstid for klyngetjenester over de siste 5 minuttene;
durationAllService — varigheten av driften av klyngetjenester fra begynnelsen av økten eller tilkoblingen.
Lignende egenskaper er implementert i klyngekonsollen for listen over økter, listen over tilkoblinger og dialogboksen for tilkoblingsegenskaper.

For serverklynge-kommandolinjeverktøyet (rac) implementeres parametrene duration-current-service, current-service-name, duration-last-5min-service og duration-all-service for tilkoblingslisten og sesjonslistekommandoer.

Linux: For å kjøre en klientapplikasjon som kjører Linux OS, må webkitgtk-3.0-biblioteket versjon 1.4.3 og eldre være installert.

Støtte for Microsoft SQL Server 2017 DBMS er implementert

Muligheten til å bruke eksterne leverandører for å utføre OpenID-autentisering er implementert.

Kategori: , | Tagger:

Ny funksjonalitet "Interaksjonssystem"

Det er blitt mulig å informere klientapplikasjonen om hendelser på 1C:Enterprise-serversiden, inkludert asynkront.
Muligheten til å distribuere din egen interaksjonssystemserver er implementert. Serveren leveres som separat distribusjon og krever separat installasjon.

.

Hendelsen er ment å undersøke hendelser relatert til feil ved å kontrollere gyldigheten av sertifikater ved hjelp av Windows API. Hendelsen genereres kun når den kjøres under Windows OS.

Det er nå mulig å starte mer enn én nettklientøkt fra én nettleser.

Søkehastigheten ved begynnelsen av en streng i spørringsspråket er økt når du arbeider med PostgreSQL DBMS.

Når du arbeider med PostgreSQL DBMS, har konverteringen av en spørringsspråkoperasjon LIKE `TEXT%` til en mer optimal SQL-spørringsoperasjon blitt implementert I kompatibilitetsmodus med versjon 8.3.10 har ikke virkemåten endret seg.

Forbedret ytelse og skalerbarhet ved bruk av HTTPConnection- og FTPConnection-objekter på 1C:Enterprise-serversiden når flere tilkoblinger fra forskjellige sesjoner brukes.

Arbeid med midlertidige tabeller har blitt akselerert ved bruk av Microsoft SQL Server DBMS

følgende versjoner:

  • 2012, versjon 11.0.5548.0 og eldre.
  • 2014, versjon 12.0.2430.0 og eldre.
  • 2016.

Hastigheten til 1C:Enterprise-serveren er økt når dokumenter som inneholder et stort antall (titalls tusen) linjer behandles samtidig.

Arbeid med store midlertidige tabeller som kjører PostgreSQL DBMS har blitt optimalisert.

Operasjoner for sletting av poster fra midlertidige tabeller har blitt optimalisert når du utfører enkelte operasjoner i PostgreSQL og IBM DB2 DBMS.

Klargjørende visning i Linux

Når du kjører under Linux OS, beregnes arbeidsflytparameteren Minne okkupert basert på VmRSS-verdien (resident set size). Verdien av parameteren Minne okkupert har blitt mindre i absolutte termer og samsvarer mer nøyaktig med virkeligheten. Det anbefales å revurdere parametrene for å starte arbeidsprosesser på nytt i egenskapene til arbeidsserveren.

Lagt til plattformalternativ for dataversjon (for revisjon) https://wonderland.v8.1c.ru/blog/istoriya-dannykh/

Kategori: , | Tags: ,

Den teknologiske loggen gjenspeiler hendelser relatert til:

  • skaffe og frigi lisenser (både programvare og HASP-nøkler);
  • skaffe lisenser for grunnleggende versjoner;
  • regelmessig overvåking av samsvar med ekte utstyr og listen over utstyr registrert i lisensen.

Implementert prosesslogghendelse .

Teknologilogghendelse gir muligheten til å analysere kun de teknologiske aspektene ved arbeid med HASP-nøkler (kaller til grensesnittet for arbeid med HASP), uten å gi muligheten til å spore mottak og frigivelse av lisenser hentet fra HASP-nøkler.

Logging av hendelser som oppstår under den første tilkoblingen av 1C:Enterprise-serveren til Microsoft SQL Server DBMS er implementert i en teknologisk logg. Logging gjøres ved hjelp av en hendelse .

Denne endringen er beskrevet i dokumentasjonen.

Tilnærmingen til å lagre utførelseshistorikken for bakgrunns- og rutineoppgaver er endret. I klient-serverversjonen lagres historikk i sammenheng med informasjonsdatabaser. For hver informasjonsbase lagres en historikk:

  • opptil 1000 bakgrunnsjobber, laget fra det innebygde språket;
  • opptil 1000 rutineoppgaver;
  • opptil 1000 systembakgrunnsjobber (generert av systemet selv).

For hver jobb (bakgrunn, systembakgrunn og planlagt) vil det bli gjort et forsøk på å lagre informasjon om minst de tre siste kjøringene. Dette tallet (tre kjøringer) vil reduseres hvis grensen på 1000 poster for en bestemt type oppgave overskrides.

Kategori: , | Tags: , Kategori: , | Tagger: Kategori: , | Tags: , Kategori: ,

Muligheten til å bruke logiske uttrykk i beskrivelsen av utvalgsfeltet og i uttrykk for filtrering av søkeresultater (WHERE-klausul) er implementert.

ATTN-prosesslogghendelsen er implementert. Overvåking analyserer noen klyngeparametere og lar deg med kraft avslutte problematiske prosesser. Overvåking utføres av klyngens sentrale serveragent. Overvåkingsresultatene registreres i den teknologiske loggen.

I den teknologiske loggen, i SCALL- og CALL-hendelsene, implementeres nye felt IName og MName, som inneholder Ytterligere informasjon om interne systemanrop. Informasjonen kan brukes av 1C-spesialister når de analyserer forespørsler sendt til støttetjenesten.

Implementert refleksjon av fulltekstsøkeindeksoppdateringsoperasjoner i den teknologiske loggen. Teknologiske logghendelser FTEXTCheck og FTEXTUpd er implementert. Loggelementet ftextupd teknologi er implementert.

store mengder Brukere kan finne det verre enn den gamle driftsmodusen. For å gå tilbake til den gamle opptaksmodusen - for dette (med 1C-serveren stoppet):

Finn i databasemappen (...\srvinfo\reg_ \) loggmappe (1Cv8Log),

i 1Cv8Log-mappen oppretter du en tom fil 1Cv8.lgf.

Gjenta disse trinnene for hver base.

For å redusere belastningen, er det nyttig å redusere detaljene i loggingen av den tekniske dokumentasjonen (for eksempel la bare feil)
Kan brukes til å lagre en loggbok

Feilen i det nye formatet for store skalaer ble anerkjent av 1C som det faktum at siden versjon 8.3.12 er det mulig å interaktivt velge loggformatet (dvs. erfarne folk velger det gamle formatet).

Overskrift: