{"id":32465,"date":"2019-10-31T21:47:12","date_gmt":"2019-10-31T18:47:12","guid":{"rendered":"https:\/\/prohoster.info\/blog\/pro-veb-klient-1s\/"},"modified":"2026-05-20T19:17:21","modified_gmt":"2026-05-20T17:17:21","slug":"pro-veb-klient-1s__trashed","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pro-veb-klient-1s__trashed","title":{"rendered":"1\u0421 veebiklient","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00dcks meeldiv omadus 1C:Enterprise tehnoloogias on see, et rakenduslahendust, mis on loodud hallatud vormide tehnoloogia alusel, saab k\u00e4ivitada nii Windows, Linux, MacOS X keskkonnas peenes (t\u00e4idesaatvas) kliendis kui ka veebikliendina viies brauseris \u2013 Chrome, Internet Explorer, Firefox, Safari, Edge, ja k\u00f5ik see ilma rakenduse l\u00e4htekoodi muutmiseta. Veelgi enam \u2013 visuaalselt toimib ja n\u00e4eb rakendus peenes kliendis ja brauseris v\u00e4lja praktiliselt identne.<br \/>\nLeia 10 erinevust (kaks pilti allpool):<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nPeene kliendi aken Linuxil:<\/p>\n<p><img decoding=\"async\" alt=\"1\u0421 veebiklient\" src=\"\/wp-content\/uploads\/2019\/04\/6a836d01f80f447302e04d1827d5eebb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSama aken veebikliendis (brauseris Chrome):<\/p>\n<p><img decoding=\"async\" alt=\"1\u0421 veebiklient\" src=\"\/wp-content\/uploads\/2019\/04\/1cab8bdf0d9d1c9d6601219c3ae6018c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMiks me tegime veebikliendi? \u00dctlematagi selge, et t\u00e4nap\u00e4eva vajadused panid meid sellise \u00fclesande ette. Juba ammu on Interneti kaudu t\u00f6\u00f6tamine muutunud \u00e4ritervekottide oluline tingimus. Alguses lisasime meie peenele kliendile v\u00f5imaluse t\u00f6\u00f6tada Internetis (m\u00f5ned meie konkurendid, muide, j\u00e4id selle juurde; teised aga loobusid peenest kliendist ja piirdusid ainult veebikliendi j\u00f5udlusega). Me otsustasime anda meie kasutajatele v\u00f5imaluse valida nende vajadustele paremini vastav kliendi variant.<\/p>\n<p><img decoding=\"async\" alt=\"1\u0421 veebiklient\" src=\"\/wp-content\/uploads\/2019\/04\/345d070d695cfc4854c485148d22d24c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInternetist t\u00f6\u00f6tamise v\u00f5imaluse lisamine peene kliendi jaoks oli suur projekt, millega muutus t\u00e4ielikult kliendi ja serveri vahelise suhtluse arhitektuur. Veebikliendi loomine on t\u00e4iesti uus projekt, mis algas nullist.<\/p>\n<h3>\u00dclesande seadmine<\/h3>\n<p>\nNii et projekti n\u00f5uded: veebikliendi peab tegema sama, mis peen kliend, nimelt:<\/p>\n<ol>\n<li>Kasutajaliidese kuvamine<\/li>\n<li>Kliendi koodi t\u00e4itmine, kirjutatud 1C keeles<\/li>\n<\/ol>\n<p>\nKasutajaliides 1C-s on kirjeldatud visuaalses redigeerijas, kuid deklaratiivselt, elementide pikslite paigutamata; kasutatakse umbes kolmk\u00fcmmend eri t\u00fc\u00fcpi liidese elemente \u2013 nuppe, sisendv\u00e4lju (teksti, numbrite, kuup\u00e4evade\/aegade), loendeid, tabeleid, graafikuid jne. <\/p>\n<p>Kliendi kood 1C keeles v\u00f5ib sisaldada serveri kutsungeid, t\u00f6\u00f6d kohalike ressurssidega (failid jne), printimist ja palju muud.<\/p>\n<p>Nii peen klient (t\u00f6\u00f6tades veebis) kui ka veebiklient kasutavad sama veebiteenuste komplekti, et suhelda 1C rakenduste serveriga. Klientide rakendamine on muidugi erinev \u2013 peen klient on kirjutatud C++, veebiklient aga JavaScriptis.<\/p>\n<h3>Enne kui liigume edasi<\/h3>\n<p>\nVeebiklientide arendusprojekt algas 2006. aastal, mille raames osales keskmiselt 5 inimest. Erinevatel etappidel kaasati arendajaid spetsiifiliste funktsioonide (nt tabelid, diagrammid jne) elluviimiseks; reeglina olid need samad arendajad, kes olid neid funktsioone loonud \u00f5hukeses kliendis. See t\u00e4hendab, et arendajad kirjutavad JavaScriptis uuesti komponente, mille nad olid varem loonud C++-s.<\/p>\n<p>Alates algusest juhtisime tagasi idee automaatsetest (mugavalt osalistest) \u00fcleviimist C++ koodist \u00f5hukese kliendi JavaScripti veebikliendisse, arvestades kahe keele vahelisi suuri kontseptsioonilisi erinevusi; veebiklient kirjutati JavaScriptis nullist.<\/p>\n<p>Projekti esialgsetes iteratsioonides konverteeris veebiklient kliendi koodi sisseehitatud 1C keeles otse JavaScriptiks. \u00d5huke klient toimib teisiti - kood sisseehitatud 1C keeles kompileeritakse byte-koodiks, mida t\u00f5lgendatakse seej\u00e4rel kliendis. Hiljem hakkas ka veebiklient seda tegema - esiteks parandas see j\u00f5udlust, teiseks lubas see \u00fchtlustada \u00f5hukese ja veebiklientide arhitektuuri.<\/p>\n<p>Esimene versioon platvormist 1C: Ettev\u00f5te veebiklienti toetava funktsiooniga ilmus 2009. aastal. Sel hetkel toetas veebiklient 2 brauserit - Internet Explorer ja Firefox. Algsetes plaanides oli toetada Opera, kuid seoses \u00fcletamatute probleemidega rakenduse sulgemise t\u00f6\u00f6tlejatega Opera brauseris (ei \u00f5nnestunud 100% kindlusega j\u00e4lgida, et rakendus suletakse, ja sel hetkel 1C rakenduste serverist lahti\u00fchendamise protseduuri l\u00e4bi viia) tuli neist plaanidest loobuda.<\/p>\n<h3>Projekti struktuur<\/h3>\n<p>\nPlatvormil 1C: Ettev\u00f5te on kokku 4 JavaScriptis kirjutatud projekti:<\/p>\n<ol>\n<li>WebTools \u2013 \u00fcldised raamatukogud, mida kasutavad teised projektid (siia kuuluvad ka <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Google_Closure_Tools#Closure_Library\">Google Closure Library<\/a><\/noindex>).<\/li>\n<li>Kasutajaliides <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000785.htm\">FormaatitudDokument<\/a><\/noindex> (rakendatud nii JavaScriptis kui ka \u00f5hukeses ja veebikliendis)<\/li>\n<li>Kasutajaliides <noindex><a rel=\"nofollow\" href=\"https:\/\/wonderland.v8.1c.ru\/blog\/planirovshchik\/\">Planeerija<\/a><\/noindex> (rakendatud nii JavaScriptis kui ka \u00f5hukeses ja veebikliendis)<\/li>\n<li>Veebiklient<\/li>\n<\/ol>\n<p>\nIga projekti struktuur sarnaneb Java projektide (v\u00f5i .NET projektide - kellele mis sobib) struktuuriga; meil on nimed, kus iga nimi asub eraldi kaustas. Kaustas asuvad nime ruumi failid ja klassid. Veebiklientide projektis on umbes 1000 faili.<\/p>\n<p>Struktuuriliselt jaguneb veebiklient suuremas osas j\u00e4rgmisteks alams\u00fcsteemideks:<\/p>\n<ul>\n<li>Kliendirakenduse hallatav liides\n<ul>\n<li>Rakenduse \u00fcldliides (s\u00fcsteemimen\u00fc\u00fcd, paneelid)<\/li>\n<li>Haldatavate vormide liides, mis h\u00f5lmab kokku umbes 30 juhtseadet (nupud, erinevad sisestusv\u00e4ljade t\u00fc\u00fcbid \u2013 tekstilised, numbrilised, kuup\u00e4ev\/aeg jne, tabelid, loendid, graafikud jms)<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Objektimudel, mis on arendajatele k\u00e4ttev\u00f5tted (\u00fcle 400 t\u00fc\u00fcpi: hallatava liidese objektimudel, andmete paigutuse seadistamine, tingimuslik vormindamine jne)<\/li>\n<li>1C sisseehitatud keele interpretator<\/li>\n<li>Brauserilaiendid (kasutatakse funktsionaalsuse jaoks, mida JavaScript ei toeta)\n<ul>\n<li>T\u00f6\u00f6tamine kr\u00fcptograafiaga<\/li>\n<li>Failidega t\u00f6\u00f6tamine<\/li>\n<li>V\u00e4liste komponentide tehnoloogia, mis v\u00f5imaldab neid kasutada nii \u00f5hukeses kui ka veebikliendis<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<h3>Arenduse erip\u00e4ra<\/h3>\n<p>\nK\u00f5ik \u00fclaltoodu elluviimine JavaScriptis on keeruline \u00fclesanne. V\u00f5ib-olla on 1C veebiklient \u00fcks suurimaid JavaScriptis kirjutatud kliendi poole rakendusi \u2013 umbes 450,000 rida. Me kasutame aktiivselt objektorienteeritud l\u00e4henemist, mis lihtsustab sellise suure projekti arendust.<\/p>\n<p>Kliendikoodi suuruse v\u00e4hendamiseks kasutasime algul oma obfuskaatorit, alates platvormi versioonist 8.3.6 (oktoober 2014) hakkasime kasutama <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Google_Closure_Tools#Closure_Compiler\">Google Closure Compiler<\/a><\/noindex>. Obfuskatsiooni m\u00f5ju numbrites \u2013 veebikliendi raamistik p\u00e4rast obfuskatsiooni:<\/p>\n<ul>\n<li>Meie obfuskaator \u2013 1556 kB<\/li>\n<li>Google Closure Compiler \u2013 1073 kB<\/li>\n<\/ul>\n<p>\nGoogle Closure Compiler'i kasutamine aitas meil kiirusaruandlust t\u00f5sta 30% v\u00f5rreldes meie obfuskaatoriga. Samuti v\u00e4henes rakenduse m\u00e4lu kasutamine 15-25% (s\u00f5ltuvalt brauserist).<\/p>\n<p>Google Closure Compiler t\u00f6\u00f6tab v\u00e4ga h\u00e4sti objektorienteeritud koodiga, seega on selle efektiivsus veebikliendi jaoks maksimaalne. Closure Compiler teeb meie jaoks mitu head asja:<\/p>\n<ul>\n<li>Statistiline t\u00fc\u00fcpide kontroll projekti kogumisel (see tagatakse sellega, et katame koodi JSDoc annotatsioonidega). Tulemuseks on staatiline t\u00fcpiseerimine, mis on l\u00e4hedane C++ t\u00fcpiseerimise tasemele. See aitab sajandeid vigu kinni p\u00fc\u00fcda projekti kompileerimise etapis.<\/li>\n<li>Koodi suuruse v\u00e4hendamine obfuskatsiooni kaudu<\/li>\n<li>Rida optimeerimisi t\u00e4idetud koodi, n\u00e4iteks:\n<ul>\n<li>inline-funktsioonide asendamine. Funktsiooni v\u00e4ljakutse JavaScriptis on piisavalt kulukas operatsioon, ja inline-harjumuste tihedam kasutamine kiirendab koodi t\u00f6\u00f6tlust oluliselt.<\/li>\n<li>Konstantide v\u00e4ljaarvutamine kompileerimise ajal. Kui v\u00e4ljend s\u00f5ltub konstantist, asendatakse see tegeliku konstantide v\u00e4\u00e4rtusega.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\nArenduskeskkonnana veebiklientide jaoks kasutame WebStormi.<\/p>\n<p>Koodi anal\u00fc\u00fcsimiseks kasutame <noindex><a rel=\"nofollow\" href=\"http:\/\/www.sonarqube.org\/\">SonarQube<\/a><\/noindex>, kuhu integreerime staatilisi koodi anal\u00fcsaatoreid. Anal\u00fcsaatorite abil j\u00e4lgime JavaScripti l\u00e4htekoodi kvaliteedi langust ja p\u00fc\u00fcame seda v\u00e4ltida.<\/p>\n<p><img decoding=\"async\" alt=\"1\u0421 veebiklient\" src=\"\/wp-content\/uploads\/2019\/04\/886fe89a8c12d29d940b6b59316ea627.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Milliseid \u00fclesandeid oleme lahendanud \/ lahendame<\/h3>\n<p>\nProjekti elluviimise k\u00e4igus kohtasime mitmeid huvitavaid \u00fclesandeid, mida pidime lahendama.<\/p>\n<h4>Andmevahetus serveri ja akende vahel<\/h4>\n<p>\nOn olukordi, kus l\u00e4htekoodi obfuskeering v\u00f5ib s\u00fcsteemi t\u00f6\u00f6d segada. Kood, mis on v\u00e4ljaspool veebiklientide t\u00e4itmist, v\u00f5ib obfuskeeringu t\u00f5ttu sisaldada funktsioonide ja parameetrite nimesid, mis erinevad neid, mida meie t\u00e4ituv kood ootab. Meie jaoks on v\u00e4line kood:<\/p>\n<ul>\n<li>Kood, mis saab serverilt struktuursete andmete kujul<\/li>\n<li>Teise rakenduse akna kood<\/li>\n<\/ul>\n<p>\nObfuskeeringu v\u00e4ltimiseks serveriga suhtlemisel kasutame sildit @expose:<\/p>\n<pre><code class=\"javascript\">\/**\n * @constructor\n * @extends {Base.SrvObject}\n *\/\nSrv.Core.GenericException = function ()\n{\n    \/**\n     * @type {string}\n     * @expose\n     *\/\n    this.descr;\n\n    \/**\n     * @type {Srv.Core.GenericException}\n     * @expose\n     *\/\n    this.inner;\n\n    \/**\n     * @type {string}\n     * @expose\n     *\/\n    this.clsid;\n\n    \/**\n     * @type {boolean}\n     * @expose\n     *\/\n    this.encoded;\n}<\/code><\/pre>\n<p>\nJa et v\u00e4ltida obfuskeeringut teise aknaga suhtlemisel, kasutame nn eksporditud liideseid (liidesed, kus k\u00f5ik meetodid on eksportitavad).<\/p>\n<pre><code class=\"javascript\">\/**\n * \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 DropDownWindow\n *\n * @interface\n * @struct\n *\/\nWebUI.IDropDownWindowExp = function(){}\n\n\/**\n * \u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 1 \u0432\u043f\u0435\u0440\u0435\u0434 \u0438\u043b\u0438 \u043d\u0430\u0437\u0430\u0434\n *\n * @param {boolean} isForward\n * @param {boolean} checkOnly\n * @return {boolean}\n * @expose\n *\/\nWebUI.IDropDownWindowExp.prototype.moveMarker = function (isForward, checkOnly){}\n\n\/**\n * \u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0438\u043b\u0438 \u043a\u043e\u043d\u0435\u0446\n *\n * @param {boolean} isFirst\n * @param {boolean} checkOnly\n * @return {boolean}\n * @expose\n *\/\nWebUI.IDropDownWindowExp.prototype.moveMarkerTo = function (isFirst, checkOnly){}\n\n\/**\n * @return {boolean}\n * @expose\n *\/\nWebUI.IDropDownWindowExp.prototype.selectValue = function (){}<\/code><\/pre>\n<h4>Kasutasime Virtual DOM-i enne, kui see muutus peavooluks)<\/h4>\n<p>\nNagu k\u00f5ik arendajad, kes tegelevad keerulise veebiliidese loomisega, m\u00f5istsime kiiresti, et DOM ei sobi d\u00fcnaamilise kasutajaliidese jaoks. Peaaegu kohe rakendati Virtual DOM-i analooge, et optimeerida t\u00f6\u00f6tlust UI-ga. \u00dcrituste t\u00f6\u00f6tlemise k\u00e4igus salvestatakse k\u00f5ik DOM-i muutused m\u00e4lu, ja ainult p\u00e4rast k\u00f5igi toimingute l\u00f5petamist rakendatakse akumuleeritud muutused DOM-puule.<\/p>\n<h4>Veebikliendi t\u00f6\u00f6tluse optimeerimine<\/h4>\n<p>\nKuna tahame, et meie veebiklient t\u00f6\u00f6taks kiiremini, p\u00fc\u00fcame maksimaalselt kasutada brauseri sisseehitatud v\u00f5imalusi (CSS jne). N\u00e4iteks vormi k\u00e4su paneel (mis asub praktiliselt igas rakenduse vormis) joonistatakse ainult brauseri vahenditega, d\u00fcnaamilise kujunduse abil, mis p\u00f5hineb CSS-il.<\/p>\n<p><img decoding=\"async\" alt=\"1\u0421 veebiklient\" src=\"\/wp-content\/uploads\/2019\/04\/116261ca79218eaa2bee9a4f5104092b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>Testimine<\/h4>\n<p>\nFunktsionaalsete testide ja j\u00f5udlustestide jaoks kasutame meie enda loodud t\u00f6\u00f6riista (kirjutatud Java ja C++ keeles) ning testide komplekti, mis p\u00f5hineb <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Selenium\">Selenium<\/a><\/noindex>.<\/p>\n<p>Meie t\u00f6\u00f6riist on universaalne \u2013 see v\u00f5imaldab testida praktiliselt k\u00f5iki aknaprogramme, seega sobib see nii \u00f5huklientide kui ka veebiklientide testimiseks. T\u00f6\u00f6riist salvestab kasutaja tegevused, kes k\u00e4ivitas rakenduse \"1C\", skripti faili. Samal ajal salvestatakse ekraanipinna pildid \u2013 referentsid. Uute veebikliendi versioonide kontrollimisel m\u00e4ngitakse skripte ilma kasutaja osaluseta. Kui m\u00f5nes etapis ekraanipilt ei \u00fchti referentsiga, loetakse test eba\u00f5nnestunuks, mille j\u00e4rel kvaliteedi spetsialist uurib, kas see on viga v\u00f5i kavandatud s\u00fcsteemi muutus. Kui see on kavandatud k\u00e4itumine, asendatakse referentsid automaatselt uute vastu.<\/p>\n<p>T\u00f6\u00f6riist m\u00f5\u00f5dab samuti rakenduste j\u00f5udlust t\u00e4psusega kuni 25 millisekundit. Mitmetes juhtudel me kordame skripti osi (n\u00e4iteks mitu korda tellimuse sisestamist), et anal\u00fc\u00fcsida t\u00e4itmise aegade halvenemist aja jooksul. K\u00f5ik m\u00f5\u00f5tmiste tulemused salvestatakse logisse anal\u00fc\u00fcsimiseks.<\/p>\n<p><img decoding=\"async\" alt=\"1\u0421 veebiklient\" src=\"\/wp-content\/uploads\/2019\/04\/058bab976becf6fd38b2ec668492043b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Meie testimist\u00f6\u00f6riist ja testitav rakendus<\/b><\/p>\n<p>Meie t\u00f6\u00f6riist ja Selenium t\u00e4iendavad \u00fcksteist; n\u00e4iteks, kui m\u00f5ni nupp \u00fchelt ekraanilt on oma asukohta muutnud \u2013 Selenium v\u00f5ib seda mitte j\u00e4lgida, kuid meie t\u00f6\u00f6riist m\u00e4rkab seda, sest see teeb pixel-pixel v\u00f5rdluse ekraanipildist referentsiga. Samuti suudab t\u00f6\u00f6riist tuvastada probleeme klaviatuuri v\u00f5i hiire sisendi t\u00f6\u00f6tlemisel, kuna just neid ta ka taastab.<\/p>\n<p>M\u00f5lema t\u00f6\u00f6riista (meie ja Seleniumi) testid k\u00e4ivitavad t\u00fc\u00fcpilisi t\u00f6\u00f6stsenaariume meie rakenduste lahendustest. Testid k\u00e4ivitatakse automaatselt p\u00e4rast iga p\u00e4evast \"1C:Enterprise\" platvormi kogumist. Kui stsenaariumide t\u00e4itmise aeg aeglustub (v\u00f5rreldes eelmise kogumisega), viibime uurimise l\u00e4bi ja likvideerime aeglustumise p\u00f5hjuse. Meie kriteerium on lihtne \u2013 uus kogumine peaks t\u00f6\u00f6tama mitte aeglasemalt kui eelmine.<\/p>\n<p>Aeglustumise intsidentide uurimiseks kasutavad arendajad erinevaid t\u00f6\u00f6riistu; peamiselt kasutatakse <noindex><a rel=\"nofollow\" href=\"http:\/\/apmblog.dynatrace.com\/2014\/12\/11\/dynatrace-ajax-edition-4-5-last-page-chapter-yet-story-continues\/\">Dynatrace AJAX Edition<\/a><\/noindex> tootja ettev\u00f5te <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Dynatrace\">DynaTrace<\/a><\/noindex>. Probleemse operatsiooni logide salvestamine toimub nii eelmises kui ka uues versioonis, p\u00e4rast mida logisid anal\u00fc\u00fcsitakse. Sel juhul ei pruugi \u00fcksikute operatsioonide t\u00e4itmise aeg (millisekundites) olla m\u00e4\u00e4rav tegur \u2013 brauseris k\u00e4ivitatakse aeg-ajalt teenindusprotsesse, nagu pr\u00fcgi koristamine, mis v\u00f5ivad m\u00f5jutada funktsioonide t\u00e4itmise aega ja moonutada olukorda. Relevantsed parameetrid oleksid antud juhul JavaScripti t\u00e4idetud k\u00e4skude arv, DOM-iga seotud aatomite operatsioonide arv jne. Kui uue versiooni sama stsenaariumi k\u00e4skude \/ operatsioonide arv on suurenenud, t\u00e4hendab see peaaegu alati j\u00f5udluse langust, mida tuleb parandada.<\/p>\n<p>\u00dcks p\u00f5hjusi j\u00f5udluse languseks v\u00f5ib olla see, et Google Closure Compiler ei suutnud mingil p\u00f5hjusel funktsiooni inline-asendust teha (n\u00e4iteks, kuna funktsioon on rekursiivne v\u00f5i virtuaalne). Sellisel juhul p\u00fc\u00fcame olukorda parandada, kirjutades allika koodi \u00fcmber.<\/p>\n<h3>Braiuserilaiendused<\/h3>\n<p>\nKui rakendustehnilises lahenduses on vajalik funktsionaalsus, mida JavaScript ei paku, kasutame brauserilaiendusi:<\/p>\n<ul>\n<li>failidega t\u00f6\u00f6tamiseks<\/li>\n<li>kr\u00fcptograafiaga t\u00f6\u00f6tamiseks<\/li>\n<li>t\u00f6\u00f6tamine <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000545.htm\">v\u00e4liste komponentidega<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nMeie laiendused koosnevad kahest osast. Esimene osa on nn brauserilaiendus (tavaliselt JavaScriptis kirjutatud laiendused Chrome'i ja Firefoxi jaoks), mis suhtleb teise osaga \u2013 binaarse laiendusega, mis realiseerib vajaliku funktsionaalsuse. Tuleb mainida, et kirjutame 3 versiooni binaarsetest laiendustest \u2013 Windowsi, Linuxi ja MacOS-i jaoks. Binaarne laiendus on 1C:Enterprise platvormi osa ja asub 1C rakendusse serveris. Esimese veebikliendi kutsumise ajal laaditakse see kliendiarvutisse ja installitakse brauserisse.<\/p>\n<p>Safari kasutamisel kasutavad meie laiendused NPAPI-d, Internet Exploreris \u2013 ActiveX-tehnoloogiat. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Microsoft_Edge\">Aegunud Microsoft Edge'i versioon ei ole enam arenduses.<\/a><\/noindex> hetkel ei toeta laiendusi, seega toimib veebiklient selles piirangutega.<\/p>\n<h3>Edasine areng<\/h3>\n<p>\n\u00dcks arendusmeeskonna \u00fclesannete r\u00fchmadest on veebikliendi funktsionaalsuse edasine arendamine. Veebikliendi funktsionaalsus peab olema identne \u00f5hukese kliendi funktsionaalsusega, kogu uus funktsionaalsus rakendatakse samaaegselt nii \u00f5hukeses kui ka veebikliendis.<\/p>\n<p>Teised \u00fclesanded h\u00f5lmavad arhitektuuri arendamist, refaktoreerimist, j\u00f5udluse ja usaldusv\u00e4\u00e4rsuse suurendamist. N\u00e4iteks on \u00fcks suund edasine liikumine as\u00fcnkroonse t\u00f6\u00f6mudeli suunas. Osaliselt on veebikliendi funktsionaalsus praegu \u00fcles ehitatud s\u00fcnkroonselt serveriga suhtlemiseks. As\u00fcnkroonne mudel muutub n\u00fc\u00fcd brauserites (ja mitte ainult brauserites) j\u00e4rjest olulisemaks, mis sunnib meid veebiklienti modifitseerima, asendades s\u00fcnkroonilised k\u00f5ned as\u00fcnkroonsetega (ja vastava koodi refaktoreerimisega). Aegan\u00f5udev \u00fcleminek as\u00fcnkroonsele mudelile on p\u00f5hjendatud vajadusega toetada v\u00e4lja antud lahendusi ja nende j\u00e4rkj\u00e4rgulise kohandamisega.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/315414\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u043f\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0444\u043e\u0440\u043c, \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432 \u0442\u043e\u043d\u043a\u043e\u043c (\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c) \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043f\u043e\u0434 Windows, Linux, MacOS X, \u0442\u0430\u043a \u0438 \u043a\u0430\u043a \u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434 5 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 \u2013 Chrome, Internet Explorer, Firefox, Safari, Edge, \u0438 \u0432\u0441\u0435 \u044d\u0442\u043e \u2013 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e \u2013 \u0432\u043d\u0435\u0448\u043d\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24269,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32465","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u043f\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0444\u043e\u0440\u043c, \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432 \u0442\u043e\u043d\u043a\u043e\u043c (\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c) \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043f\u043e\u0434 Windows, Linux, MacOS.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pro-veb-klient-1s__trashed\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0440\u043e \u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 1\u0421 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u043f\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0444\u043e\u0440\u043c, \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432 \u0442\u043e\u043d\u043a\u043e\u043c (\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c) \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043f\u043e\u0434 Windows, Linux, MacOS.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pro-veb-klient-1s__trashed\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:47:12+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-05-20T17:17:21+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd471C veebiklient | ProHoster","description":"\u00dcks meeldivamaid omadusi 1C:Enterprise tehnoloogias on see, et rakendusel, mis on v\u00e4lja t\u00f6\u00f6tatud hallatavate vormide tehnoloogial, on v\u00f5imalik k\u00e4ivitada nii \u00f5hukeses (t\u00e4idetavas) kliendis Windowsis, Linuxis kui ka MacOSis.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pro-veb-klient-1s__trashed","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0440\u043e \u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 1\u0421 | ProHoster","og:description":"\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u043f\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0444\u043e\u0440\u043c, \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432 \u0442\u043e\u043d\u043a\u043e\u043c (\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c) \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043f\u043e\u0434 Windows, Linux, MacOS.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pro-veb-klient-1s__trashed","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:47:12+00:00","article:modified_time":"2026-05-20T17:17:21+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32465","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 11:00:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:58:23","updated":"2026-01-21 11:00:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32465","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=32465"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32465\/revisions"}],"predecessor-version":[{"id":173305,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32465\/revisions\/173305"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/24269"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=32465"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=32465"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=32465"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}