Domov / Ovládanie PC / 1c webové rozšírenie. Pripojenie k zverejnenej informačnej databáze cez webový prehliadač

1c webové rozšírenie. Pripojenie k zverejnenej informačnej databáze cez webový prehliadač

Úlohou je pozdvihnúť webový server IIS zabudovaný do windows a publikovať na ňom základ 1c na platforme 8.3. V tomto nie je nič ťažké.

K dispozícii spinning na podnikovom serveri virtualka 2008 r2. Práva miestneho správcu k nemu. Nástupište 1C 8.3.6.2041. Vytvorme prázdnu infobázu. A tak začnime. Pridajte sa k našej skupine VK! V oprave! Inteligentná dielňa!

Inštalácia roly webového servera (IIS)

Najprv musíte nainštalovať rolu webového servera. Otvárame Správca servera, vyberte vetvu vľavo Roly, kliknite pravým tlačidlom myši Pridať rolu.

Dosiahneme krok výberu role servera a začiarknutie políčka vedľa položky Web Server (IIS). Kliknite ďalej. Teraz musíte správne vybrať služby role, ktorá sa má nainštalovať. Začiarknite políčka presne tak, ako na obrázku nižšie.

Dokončujeme inštaláciu. Sprievodca pridaním rolí by nám mal po určitom čase oznámiť, že rola a všetky služby rolí boli úspešne nainštalované:

Teraz musíme skontrolovať, či nám všetko vyšlo. Otvorte ľubovoľný prehliadač a prejdite na adresu http://localhost. Mali by sme vidieť taký radostný obrázok:


inštalácia plošiny a komponentov 1s

To znamená, že webový server sa zdvihol správne a všetko funguje dobre. Prejdime teda na 1s. Musíte nastaviť platformu. Jedinou výhradou pri inštalácii platformy je vybrať si:

  • 1C: Podnik
  • Rozšírenia webového servera
nastavenie prístupových práv

Prvým krokom je nastavenie práv priečinka, kde máme koreňový adresár webového servera. Ak sa nič nezmenilo, potom je to štandardne C:\inetpub\wwwroot. Prejdite do priečinka C:\inetpub\ vyberte priečinok wwwroot, kliknite naň pravým tlačidlom a prejdite na vlastnosti. Prejdite na kartu Bezpečnosť. Kliknutím na tlačidlo zmeniť prejdeme priamo na nastavenie povolení. Nájdite v zozname Skupiny a používatelia, skupina Používatelia a kliknutím naň vložíme do stĺpca nižšie Skupinové povolenia, chýbajúce kliešte v stĺpci povoliť.

Teraz musíte udeliť povolenia priečinkom s nainštalovaným 1. Prejdime k nim, štandardne pre 32-bitovú verziu je 1c v priečinku C:\Program Files (x86)\1cv8 pre 64-bit v priečinku C:\Program Files\1cv8. Vyberte tiež priečinok 1cv8 prejdite na jeho vlastnosti, prejdite na kartu Zabezpečenie -> Upraviť. Ale namiesto toho, aby sme vybrali skupinu zo zoznamu, musíme ju tam najskôr pridať. Ak to chcete urobiť, kliknite na tlačidlo Pridať, v zobrazenom okne stlačte tlačidlo Okrem toho.


Ďalej kliknite na tlačidlo Vyhľadávanie a vo výsledkovej listine, ktorú hľadáme IIS_IUSRS, jeho pridaním dvojitým kliknutím sa vrátime do okna Vyberte „Používatelia“ alebo „Skupiny“ ale s už označenou skupinou v zozname. Kliknite na tlačidlo OK a vráťte sa do okna Skupinové povolenia vložte všetky značky do poľa povolenia pre novo pridanú skupinu.

Po nastavení povolení pre priečinky so súbormi 1c nám zostáva posledné. Poskytnite práva skupine IIS_IUSRS na priečinok, kde máme samotný základ 1c.

Vykonali sa potrebné prípravy. Teraz prejdime k publikovaniu.

Publikácia 1s na webovom serveri

Je potrebné začať 1s v režime konfigurátora výberom databázy, ktorú potrebujete publikovať. V mojom prípade je to prázdna základňa a je len jedna.

V režime konfigurátora 1s prejdite do ponuky Administrácia -> Publikovanie na webovom serveri.


Po zhliadnutí parametrov a uistení sa, že nám v podstate všetko vyhovuje, stlačíme Publikovať. Ak vaša publikácia prebehla bez chýb, prejdite na posledný krok.

konfigurácia IIS na prácu s 32-bitovým modulom rozšírenia webového servera 1C

Pripomínam, že sme použili 32-bitovú platformu a modul rozšírenia webového servera od 1c, resp. Preto v tomto prípade stále musíme povoliť spustenie predvoleného fondu aplikácií - DefaultAppPool spúšťať 32-bitové aplikácie. To nie je ťažké. Poďme Správca servera -> Roly -> webový server (IIS) -> Správca služieb (IIS) -> Aplikačné fondy -> DefaultAppPool. Pravé tlačidlo myši zapnuté DefaultAppPool hovor obsahové menu a vyberte si v ňom Extra možnosti.


Hľadáme líniu Povolené 32-bitové aplikácie a dať opačne PRAVDA

KONFIGURÁCIA IIS PRE PRÁCU S 64-BITOVÝM 1C MODULOM ROZŠÍRENIA WEBOVÉHO SERVERA

Ak sme použili 64-bitovú platformu a modul rozšírenia webu, musíme vykonať nasledujúce manipulácie:

Poďme Správca servera -> Roly -> webový server (IIS) -> Správca služieb (IIS)-> A vyberieme aplikáciu konvertovanú z virtuálneho adresára s názvom, ktorý sme nastavili pri publikovaní databázy. V pravom poli prejdite do sekcie Mapovania manipulátora. Publikovanie 1s 8.3 na webovom serveri iis Publikovanie 1s 8.3 na webovom serveri iis

Pridajte sa k našej skupine VK!

06.04.2014

K dispozícii:

Windows 8.1 Professional.

1C enterprise, verzia 8.3.4.465.

Databáza ZUP 3.0.

K zadanej databáze RAM je potrebné zriadiť prístup cez internetový prehliadač alebo tenkého klienta.

Pre ľahšie pochopenie budú všetky akcie popísané z ovládacieho panela.

    2. Zverejnenie databázy od 1C enterprise.

    Po inštalácii IIS je potrebné spustiť konfigurátor ako lokálny správca a publikovať databázu.

  1. IIS nakonfiguruje samotný konfigurátor.

Súhlasíme s reštartovaním servera IIS po zverejnení novej databázy.


    7. Otvorte port vo firewalle.

    Ovládací panel - Brána firewall systému Windows- Extra možnosti.

    Vytvorte pravidlo pre prichádzajúce pripojenia pre vybraný port.

8. Organizácia práce cez internet.

Aby ste sa dostali do databázy z „otvoreného internetu“, musíte si od poskytovateľa zakúpiť „bielu IP adresu“. Obrazne povedané, bude to váš digitálny identifikátor, podľa ktorého vás spoznajú všetky internetové počítače. Ak váš webový server bude s touto adresou, nemusíte robiť nič iné. Ak bude internet distribuovať smerovač alebo iný počítač s proxy serverom (t. j. bránou), potom na tejto bráne musíte otvoriť jeden z portov a presmerovať ho na pracovný port IIS na webovom serveri. V nastaveniach brány musíte špecifikovať prichádzajúci port a kam je presmerovaná prevádzka - IP adresu a port webového servera.

  1. 9. Spustite prehliadač.

    V mojom prípade bude riadok spustenia prehliadača vyzerať takto:

http - indikácia protokolu.

i7 - názov DNS počítača alebo IP adresa webového servera.

180 - IIS port (možno vynechať, ak je port predvolený)

hrm30 – zverejniť adresár (c:\inetpub\wwwroot\HRM30)

Pre tenkého klienta je reťazec špecifikovaný v nastaveniach pripojenia.

Každý môže pracovať!

V budúcnosti by ste nemali zabudnúť aktualizovať publikáciu po aktualizácii podnikovej platformy 1C.

9. januára 2016 o 13:08

Publikovanie databázy 1C na webovom serveri tretej strany

  • Nastavenie Linuxu

K dispozícii je server Windows s 1C 8.3 (DB - MSSQL).
Úlohou je nastaviť publikovanie databázy na webovom serveri Linux.
Jemnosti - modul 1C pre Apache funguje iba s 2.0 a 2.2 a Aktuálna verzia vo väčšine distribúcií - 2,4+
Píšem viac pre seba, aby som nezabudol. No, nikdy neviete, zrazu sa vám bude hodiť niekto iný - nemusíte behať po fórach a hľadať tie správne príkazy.

Železo - dalo gigabajt RAM, jedno jadro a 20 gigabajtov disku. Na expanziu nie je nikdy neskoro.
OS: Debian Stable, som na to zvyknutý.

Nastavil som minimum vrátane ssh servera, ale bez webu. Vráťme sa k tomu.

Po inštalácii základné nastavenie podla chuti zvyknem nastavit locale na utf8, dam sudo, mc a vim, ostatne podla potreby.
Ďalej musíte nainštalovať apache 2.2. A urobte to správna cesta namiesto sťahovania balíka deb. :)

Najprv pridajte riadky do /etc/apt/sources.list s odkazom na predošlá verzia distribúcia.
deb http://mirror.yandex.ru/debian/ wheezy main deb-src http://mirror.yandex.ru/debian/ wheezy main
Môžete, samozrejme, písať oldstable- v tejto chvíli bude tiež správne. Ale len v tej skutočnej, pretože skôr či neskôr vyjde nová stabilná verzia a in oldstable a potom namiesto apache 2.2 bude 2.4. Aj keď dúfam, že dovtedy bude 1C aktualizovaný a bude fungovať s novšími verziami Apache. Ale kto vie? :)
Kde mirror.yandex.ru- je tam napísaný názov vášho obľúbeného servera s úložiskom.

Potom aktualizujeme indexy - apt-get update- a pozrite sa, čo tu máme pre apache s príkazom apt-cache showpkg apache2
Existuje veľa výstupov, ale nás zaujíma iba začiatok výstupu:
Balík: apache2 Verzie: 2.4.10-10+deb8u3 (/var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_binary-i386_Packages) i386_Packages MD5: Jazyk popisu: en Súbor: /var/lib/apt.list. yandex.ru_debian_dists_stable_main_i18n_Translation-sk MD5: Jazyk popisu: sk Súbor: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_i18n_Translation-sk MD5 : 2.4.10/10/septity/lib8u debian.org_dists_stable_updates_main_binary-i386_Packages) Jazyk: sk Súbor: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_i18n_Translation-sk MD5: Jazyk popisu: sk Súbor: /var/lib/apt8yandansdansbian_de_mirror. sk MD5: 2.2.22 -13+deb7u6 (/var/lib/apt/lists/mirror.yandex.ru_deb ian_dists_wheezy_main_binary-i386_Packages) Jazyk popisu: Súbor: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_wheezy_main_binary-i386_Packages MD5: Jazyk popisu: sk Súbor: /var/lib/apt.wyandebian_Translation Languageirror_1lists/miruans : ru Súbor: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_wheezy_main_i18n_Translation-ru MD5:

Vidíme, že okrem 2.4.10 existuje verzia 2.2.22-13+deb7u6 - čo potrebujete.
Dali sme: apt-get install apache2=2.2.22-13+deb7u6
Alebo presnejšie: apt-get install apache2=2.2.22-13+deb7u6 apache2-mpm-worker=2.2.22-13+deb7u6 apache2.2-common=2.2.22-13+deb7u6 apache2.2-bin=2.2.22-13 +deb7u6 a ostatné závislosti sa automaticky vytiahnu.

Potom sme Apache pozastavili, aby sme ho náhodou neaktualizovali.

Apt-mark hold apache2 apache2-mpm-worker apache2.2-common apache2.2-bin apache2 je označený ako potvrdený. apache2-mpm-worker je označený ako potvrdený. apache2.2-common je označený ako potvrdený. apache2.2-bin je označený ako potvrdený.
Môžete spustiť službu apache2 start a telnet na port 80, aby ste skontrolovali, či nie ste príliš leniví na spustenie prehliadača.

telnet localhost 80
Trying::1... Pripojené k localhost. Únikový znak je "^]". jeden Metóda 501 nie je implementovaná

Metóda nie je implementovaná

1 až /index.html nie je podporovaný.


Server Apache/2.2.22 (Debian) na 1cweb Port 80
Spojenie zatvorené cudzím hostiteľom.

Prisahá - to znamená, že to funguje.

Teraz dáme 1C.
Potrebné sú iba webové služby 1C (balík 1c-enterprise83-ws). A 1c-podnik83-bežný, ktorá je evidovaná v závislostiach. A 1c-enterprise83-server, ktorá nie je uvedená v závislostiach, ale bez nej, publikačná utilita napíše "Segmentation error".
V zásade je potrebný iba modul pre Apache wsap22.so z balíka 1c-enterprise83-ws a všetko ostatné je možné vykonať pomocou textového editora. Ale som lenivec a radsej miniem par mega na 1C ako rucne hnat linky do konfiguriek. :)

Ďalej musíte vytvoriť priečinok na uloženie nastavení publikovanej databázy 1C. Je to možné v strome webového servera, ale radšej to urobím samostatne, priamo v koreni, / 1s.
Potom z priečinka s nainštalovanými súbormi 1C ( /opt/1C/v8.3/i386) spustite pomôcku na publikovanie webinst s nasledujúcimi parametrami (zverejňujem našu testovaciu databázu):
./webinst -apache22 -wsdir testlitupp -dir /1c/testlitupp -connstr "Srvr=10.0.0.4;Ref=testlitupp;" -confPath /etc/apache2/apache2.conf Zverejnené

Apache22 - naša verzia webového servera
-wsdir testlitupp - priečinok na webovom serveri, kde bude dostupná zverejnená databáza (http://yourserver/testlitupp)
-dir /1c/testlitupp - priečinok, kde bude uložený súbor default.vrd s nastaveniami publikovania
-connstr "Srvr=10.0.0.4;Ref=testlitupp;" - IP servera 1C a zverejnený názov databázy
-confPath /etc/apache2/apache2.conf - cesta ku konfigurácii Apache

Ak je tam uvedené „Publikované“, všetko prebehlo v poriadku. Ak sa zobrazuje „Chyba segmentácie“, s najväčšou pravdepodobnosťou ste zabudli zadať 1c-enterprise83-server.
Na základe výsledkov máme súbor default.vrd

A niekoľko nových riadkov v konfiguračnom súbore webového servera:

LoadModule _1cws_module "/opt/1C/v8.3/i386/wsap22.so" # 1c publikácia Alias ​​​​"/testlitupp" "/1c/testlitupp/" AllowOverride All Options None Objednať povoliť, zamietnuť Povoliť zo všetkých aplikácií SetHandler 1c ManagedApplicationDescriptor "/1c/testlitupp/default.vrd"
Reštartujeme Apache (reštart služby apache2) a ideme sa pozrieť, čo tam bolo zverejnené.
Zverejnené, vyžaduje si heslo.

A pustite ho do základne.

Tvorba. Ďalšie nastavenia publikovania sa vykonávajú úpravou súborov vrd (napríklad povolením ladenia) a vaši programátori 1C by sa mali podieľať na dokončení rozhrania webového klienta.
Ak pridávate možnosti, napríklad s pripájaním služieb manuálne, potom nezabudnite v predvolenom nastavení odstrániť poslednú lomku v riadku „base="/testlitupp" ib="Srvr=10.0.0.4;Ref=testlitupp;". súbor vrd / >>, dlho som sa s tým pohrával. Ak niečo nevymažete a nepridáte potom, vyletí „chyba 500“ bez ďalších informácií.
Aké bude zaťaženie webového servera - zatiaľ neviem, zatiaľ nám to funguje v testovacom režime a alokovaných zdrojov je dosť. Ale pridávanie pamäte alebo jadier podľa rastúcich potrieb nie je problém.

Vo všeobecnosti sa v iných distribúciách linuxu všetko robí podobným spôsobom, rozdiely sú iba v spôsoboch inštalácie starej verzie Apache.

Dnes zanechám malú poznámku o nastavení 1C 8.3 z hľadiska organizácie prístupu prostredníctvom webového servera 1C a služieb IIS 8.

Predtým, staromódnym spôsobom, som používateľom poskytol prístup k 1C pomocou terminálového servera. Potom som mal v práci server Windows 2003 s 1C verzie 7, mal som licenciu na terminálový server, kde bol nasadený terminálový server. Tiež som raz napísal článok o nastavení tohto dobrého,. Všetko bolo v poriadku, ale teraz máme nový hardvér (založený na procesore Intel Xeon E3-1220 v3, 8 GB RAM), nový 1C (v 8.3), nový operačný systém (WIndows Server 2012 r2).

Zo začiatku naše účtovné oddelenie (8 PC) pracovalo na sieťovom disku, no v tomto prípade program funguje na princípe sťahovania súborov cez sieť a to je veľmi pomalé. Bolo rozhodnuté nájsť spôsob, ako urýchliť prácu.

Premýšľal som o terminálovom serveri, ale nemám licenciu na terminálový server (nenašiel som ho na internete, ale povedali, že je drahý). Výstup bol vyvolaný náhodou, ukázalo sa, že existuje podpora pre WEB server v 1C. Keďže mám skúsenosti s rovnakým Apache a poznám princíp fungovania, rozhodol som sa zvládnuť WEB server 1C.

Inštalácia a overenie všetkých komponentov

Začnime nastavenie inštaláciou komponentov webového servera 1C. Skontrolujeme, či máme nainštalovaný modul rozšírenia webového servera 1C. Ak nie je nainštalovaný, nainštalujte.

Publikovanie databázy na webový server

Prejdeme do databázy 1C v režime konfigurátora. Ďalej prejdeme do menu. "Administrácia" - "Publikovanie na webovom serveri"

Zverejňujeme!

Nastavili sme práva na priečinky 1C

Ďalším krokom je nastavenie povolení pre nasledujúce priečinky:

Priečinok koša v 1C.

Práva sme nastavili ako na snímke obrazovky nižšie v ponuke zabezpečenia.

Pripojenie k webovému serveru z klientskych počítačov

Ak to chcete urobiť, vytvorte pripojenie k DB 1C - Napíšte názov pripojenia -> vyberte Na webovom serveri -> potom ako na obrázku nižšie:

Potom sa budete môcť pripojiť k 1C prostredníctvom webového servera.

Vyskytli sa chyby:

1C8.3 IIS "Zistila sa potenciálne škodlivá hodnota Request.Path" prijatá od klienta

Po nastavení webového servera 1C som narazil na problém: môžem sa prihlásiť do 1C pomocou IP, prihlásim sa, ale všetky ponuky nefungovali, nemohol som otvoriť jediné okno okrem pracovnej plochy 1C. Dlho som sa trápil, kým som našiel riešenie na internete.

Čo treba urobiť:
1. Otvorte službu IIS. Štart - Spustiť - nájdite "Správca IIS"
2. Otvorte našu "stránku"
3. Prejdite do ponuky "Mapovanie obslužného programu"
4. Hľadáte ISAPI-dll a vyberte možnosť Upraviť.
5. Zmeňte cestu požiadavky z "*.dll" na "*", Spustiteľný súbor (môžete mať inú verziu 1C, buďte prosím opatrnejší) - "C:\Program Files (x86)\1cv8\ 8.3.6.2390 \bin\wsisapi.dll".
6. Uložiť.

7. Kontrolujeme.

To je zatiaľ všetko. Ak máte nejaké otázky, pokúsim sa vám pomôcť.

Jednou z pekných vlastností technológie 1C:Enterprise je, že aplikačné riešenie vyvinuté pomocou technológie spravovaných formulárov je možné spustiť ako v tenkom (spustiteľnom) klientovi pod Windows, Linux, MacOS X, tak aj ako webový klient pre 5 prehliadačov - Chrome, Internet Explorer, Firefox, Safari, Edge a to všetko bez zmeny zdrojového kódu aplikácie. Navyše navonok aplikácia v tenkom klientovi a v prehliadači funguje a vyzerá takmer identicky.
Nájdite 10 rozdielov (pod rezom 2 obrázky):

Okno tenkého klienta v systéme Linux:

Rovnaké okno vo webovom klientovi (v prehliadači Chrome):

Prečo sme vytvorili webového klienta? Trochu pateticky povedané, čas nám dal takúto úlohu. Práca cez internet sa na dlhú dobu stala nevyhnutnou podmienkou pre obchodné aplikácie. Najprv sme pre nášho tenkého klienta pridali možnosť pracovať cez internet (niektorí naši konkurenti sa tam mimochodom zastavili, iní naopak tenkého klienta opustili a obmedzili sa na implementáciu webového klienta). Rozhodli sme sa dať našim používateľom možnosť vybrať si klientsku možnosť, ktorá im najviac vyhovuje.

Pridanie webových možností do tenkého klienta bolo veľkým počinom s úplnou zmenou architektúry klient/server. Vytvorenie webového klienta je úplne nový projekt, ktorý začal od nuly.

Formulácia problému

Takže požiadavky na projekt: webový klient musí urobiť to isté ako tenký klient, a to:
  1. Zobraziť používateľské rozhranie
  2. Spustite klientsky kód napísaný v jazyku 1C
Používateľské rozhranie v 1C je opísané vo vizuálnom editore, ale deklaratívne, bez usporiadania prvkov pixel po pixeli; používajú sa asi tri desiatky typov prvkov rozhrania - tlačidlá, vstupné polia (textové, digitálne, dátum / čas), zoznamy, tabuľky, grafy atď.

Klientsky kód v jazyku 1C môže obsahovať serverové volania, prácu s lokálnymi zdrojmi (súbory atď.), tlač a mnoho ďalšieho.

Tenký klient (pri práci cez web) aj webový klient používajú na komunikáciu s aplikačným serverom 1C rovnakú sadu webových služieb. Implementácia klientov je samozrejme iná - tenký klient je napísaný v C++, webový klient je napísaný v JavaScripte.

Trochu histórie

Projekt webového klienta začal v roku 2006 s (priemerným) tímom 5 ľudí. V určitých fázach projektu boli vývojári zapojení do implementácie špecifických funkcií (tabuľkový dokument, diagramy atď.); spravidla to boli tí istí vývojári, ktorí túto funkcionalitu vytvorili v tenkom klientovi. Tie. vývojári prepísali komponenty v JavaScripte, ktoré predtým vytvorili v C++.

Od samého začiatku sme odmietali myšlienku akejkoľvek automatickej (aspoň čiastočnej) konverzie kódu tenkého klienta C++ na JavaScript webového klienta z dôvodu veľkých koncepčných rozdielov medzi týmito dvoma jazykmi; webový klient bol napísaný v JavaScripte od začiatku.

V prvých iteráciách projektu webový klient konvertoval kód klienta v zabudovanom jazyku 1C priamo do JavaScriptu. Tenký klient sa správa inak – kód v zabudovanom jazyku 1C sa skompiluje do bajtkódu a následne sa tento bajtkód interpretuje na klientovi. Následne to začal robiť aj webový klient – ​​po prvé zvýšil výkon a po druhé umožnil zjednotiť architektúru tenkého a webového klienta.

Prvá verzia platformy 1C:Enterprise s podporou webového klienta bola vydaná v roku 2009. Webový klient v tom čase podporoval 2 prehliadače – Internet Explorer a Firefox. Pôvodné plány boli podporovať Operu, no kvôli neprekonateľným problémom s vtedajšími obslužnými programami zatvorenia aplikácie v Opere (nebolo možné so 100% istotou sledovať, že sa aplikácia zatvára a v tom momente vykonať procedúru odpojenia od aplikačný server 1C) z týchto plánov sa muselo opustiť.

Štruktúra projektu

Celkovo má platforma 1C:Enterprise 4 projekty napísané v JavaScripte:
  1. WebTools sú zdieľané knižnice používané inými projektmi (zahŕňame tu aj Google Closure Library).
  2. Ovládací prvok FormattedDocument
  3. Riadenie plánovača (implementované v JavaScripte v tenkom aj webovom klientovi)
  4. Webový klient
Štruktúra každého projektu sa podobá štruktúre Java projektov (alebo .NET projektov – podľa toho, čo je vám bližšie); máme menné priestory a každý menný priestor leží v samostatný priečinok. V priečinku sú súbory a triedy názvov. V projekte webového klienta je asi 1000 súborov.

Štrukturálne je webový klient z veľkej časti rozdelený do nasledujúcich podsystémov:

  • Rozhranie spravovanej klientskej aplikácie
    • Všeobecné aplikačné rozhranie (systémové menu, panely)
    • Rozhranie riadené formuláre, ktorá obsahuje okrem iného asi 30 ovládacích prvkov (tlačidlá, odlišné typy vstupné polia – textové, digitálne, dátum/čas atď., tabuľky, zoznamy, grafy atď.)
  • Objektový model dostupný vývojárom na klientovi (celkom viac ako 400 typov: objektový model spravovaného rozhrania, nastavenia zloženia údajov, podmienené formátovanie atď.)
  • Vstavaný jazykový tlmočník 1C
  • Rozšírenia prehliadača (používajú sa pre funkcie, ktoré nie sú podporované v JavaScripte)
    • Práca s kryptografiou
    • Práca so súbormi
    • Technológia vonkajšie komponenty, čo umožňuje ich použitie v tenkých aj webových klientoch

Funkcie vývoja

Implementácia všetkých vyššie uvedených v JavaScripte nie je ľahká úloha. Možno je webový klient 1C jednou z najväčších aplikácií na strane klienta napísaných v JavaScripte - asi 450 000 riadkov. V kóde webového klienta aktívne využívame objektovo orientovaný prístup, ktorý zjednodušuje prácu s takým veľkým projektom.

Aby sme minimalizovali veľkosť klientskeho kódu, najprv sme použili vlastný obfuskátor a od verzie platformy 8.3.6 (október 2014) sme začali používať Google Closure Compiler . Efekt použitia v číslach je veľkosť rámca webového klienta po zahmlení:

  • Vlastný obfuskátor - 1556 kb
  • Google Closure Compiler – 1073 kb
Použitie Google Closure Compiler nám pomohlo zlepšiť výkon webového klienta o 30 % v porovnaní s naším vlastným obfuskátorom. Okrem toho sa množstvo pamäte spotrebovanej aplikáciou znížilo o 15 – 25 % (v závislosti od prehliadača).

Google Closure Compiler pracuje veľmi dobre s objektovo orientovaným kódom, takže jeho efektivita je najvyššia pre webového klienta. Closure Compiler pre nás robí niekoľko dobrých vecí:

  • Statická kontrola typu vo fáze zostavovania projektu (zabezpečená tým, že kód pokrývame anotáciami JSDoc). Výsledkom je statické písanie, ktoré je svojou úrovňou veľmi blízke písanie v C++. Pomáha to zachytiť pomerne veľké percento chýb vo fáze kompilácie projektu.
  • Zmenšenie veľkosti kódu prostredníctvom zahmlievania
  • Množstvo optimalizácií spustiteľného kódu, napríklad:
    • inline náhrady funkcií. Volanie funkcie v JavaScripte je pomerne nákladná operácia a inline substitúcie často používaných malých metód môžu výrazne urýchliť kód.
    • Počítanie konštánt v čase kompilácie. Ak výraz závisí od konštanty, nahradí sa aktuálnou hodnotou konštanty
WebStorm používame ako naše vývojové prostredie pre webového klienta.

Na analýzu kódu používame SonarQube, kde integrujeme analyzátory statického kódu. Pomocou analyzátorov sledujeme zhoršovanie kvality zdrojového kódu JavaScriptu a snažíme sa mu predchádzať.

Aké úlohy riešime/riešime

Počas realizácie projektu sme čelili množstvu zaujímavých úloh, ktoré sme museli riešiť.

Výmena dát so serverom a medzi oknami

Existujú situácie, keď zahmlievanie zdrojového kódu môže narušiť fungovanie systému. Kód mimo spustiteľného kódu webového klienta môže mať z dôvodu zahmlenia názvy funkcií a parametrov, ktoré sa líšia od tých, ktoré očakáva náš spustiteľný kód. Externý kód pre nás je:
  • Kód prichádzajúci zo servera ako dátové štruktúry
  • Kód pre ďalšie okno aplikácie
Aby sme sa vyhli zmätku pri interakcii so serverom, používame značku @expose:

/** * @constructor * @extends(Base.SrvObject) */ Srv.Core.GenericException = function () ( /** * @type (reťazec) * @expose */ this.descr; /** * @type (Srv.Core.GenericException) * @expose */ this.inner; /** * @type (reťazec) * @expose */ this.clsid; /** * @type (boolean) * @expose */ this. zakódované ;)
A aby sme sa vyhli zahmlievaniu pri interakcii s inými oknami, používame takzvané exportované rozhrania (rozhrania, v ktorých sa exportujú všetky metódy).

/** * Exportované rozhranie ovládacieho prvku DropDownWindow * * @rozhranie * @struct */ WebUI.IDropDownWindowExp = function()() /** * Posunie výber dopredu alebo dozadu o 1 * * @param (boolean) isForward * @ param (boolean ) checkOnly * @return (boolean) * @expose */ WebUI.IDropDownWindowExp.prototype.moveMarker = function (isForward, checkOnly)() /** * Presunie výber na začiatok alebo koniec * * @param (boolean ) isFirst * @param (boolean) checkOnly * @return (boolean) * @expose */ WebUI.IDropDownWindowExp.prototype.moveMarkerTo = function (isFirst, checkOnly)() /** * @return (boolean) * @expose */ WebUI.IDropDownWindowExp.prototype .selectValue = function()()

Virtual DOM sme používali skôr, ako sa stal hlavným prúdom)

Ako všetci vývojári, ktorí sa zaoberajú komplexným webovým používateľským rozhraním, rýchlo sme si uvedomili, že DOM nie je vhodný pre dynamické používateľské rozhrania. Takmer okamžite bol implementovaný analóg virtuálneho DOM na optimalizáciu práce s používateľským rozhraním. Počas spracovania udalostí sú všetky zmeny DOM uložené v pamäti a až po dokončení všetkých operácií sa nahromadené zmeny aplikujú na strom DOM.

Optimalizácia webového klienta

Aby náš webový klient fungoval rýchlejšie, snažíme sa maximálne využívať štandardné funkcie prehliadača (CSS a pod.). Takže panel príkazov formulára (nachádza sa takmer na každom formulári aplikácie) je nakreslený výlučne prehliadačom, dynamické rozloženie založené na CSS.

Testovanie

Na testovanie funkčnosti a výkonu používame proprietárny nástroj (napísaný v jazyku Java a C++) a testovací balík postavený na Selenium.

Náš nástroj je univerzálny – umožňuje testovať takmer akýkoľvek okenný program, a preto je vhodný na testovanie tenkého aj webového klienta. Nástroj zaznamenáva akcie používateľa, ktorý spustil riešenie aplikácie 1C, do súboru skriptu. Súčasne sa zaznamenávajú obrázky pracovnej oblasti obrazovky - referencie. Pri monitorovaní nových verzií webového klienta sa scenáre prehrávajú bez účasti používateľa. V prípadoch, keď sa snímka obrazovky v žiadnom kroku nezhoduje s referenčnou, test sa považuje za neúspešný, po ktorom odborník na kvalitu vykoná vyšetrovanie - ide o chybu alebo plánovanú zmenu v správaní systému. V prípade plánovaného správania sa normy automaticky nahrádzajú novými.

Nástroj tiež meria výkon aplikácie s presnosťou 25 milisekúnd. V niektorých prípadoch zacyklíme časti skriptu (napríklad niekoľkokrát opakujeme zadanie objednávky), aby sme analyzovali degradáciu času vykonávania v priebehu času. Výsledky všetkých meraní sa zaznamenávajú do denníka na analýzu.


Náš testovací nástroj a testovaná aplikácia

Náš nástroj a Selén sa navzájom dopĺňajú; ak napríklad niektoré tlačidlo na jednej z obrazoviek zmenilo svoje umiestnenie - Selén ho nemusí sledovať, ale náš nástroj si to všimne, pretože vykoná porovnanie snímky obrazovky po jednotlivých pixeloch so štandardom. Nástroj je tiež schopný sledovať problémy so spracovaním vstupu z klávesnice alebo myši, pretože práve to reprodukuje.

Testy na oboch nástrojoch (našom a Selenium) spúšťajú typické pracovné scenáre z našich aplikačných riešení. Testy sa spúšťajú automaticky po každodennom zostavovaní platformy 1C:Enterprise. Ak sa skripty spomalia (v porovnaní s predchádzajúcou zostavou), preskúmame a opravíme príčinu spomalenia. Naše kritérium je jednoduché - nová zostava by nemala fungovať pomalšie ako predchádzajúca.

Vývojári používajú rôzne nástroje na vyšetrovanie incidentov spomalenia; používa sa hlavne Dynatrace AJAX Edition od DynaTrace. Zaznamenajú sa protokoly o vykonaní problematickej operácie na predchádzajúcej a novej zostave, následne sa protokoly analyzujú. Čas vykonávania jednotlivých operácií (v milisekundách) zároveň nemusí byť rozhodujúcim faktorom - servisné procesy ako garbage collection sa v prehliadači spúšťajú pravidelne, môžu sa prekrývať s časom vykonávania funkcií a skresľovať obraz. Relevantnejšími parametrami by v tomto prípade bol počet vykonaných inštrukcií JavaScriptu, počet atómových operácií na DOM atď. Ak počet pokynov/operácií v rovnakom scenári v Nová verzia zvýšená – to takmer vždy znamená pokles výkonu, ktorý je potrebné korigovať.

Jedným z dôvodov poklesu výkonu môže byť aj to, že kompilátor Google Closure Compiler z nejakého dôvodu nemohol vykonať inline náhradu funkcie (napríklad preto, že funkcia je rekurzívna alebo virtuálna). V tomto prípade sa snažíme situáciu napraviť prepísaním zdrojového kódu.

Rozšírenia prehliadača

V prípade, že aplikované riešenie potrebuje funkčnosť, ktorá nie je v JavaScripte, používame rozšírenia prehliadača:
  • pracovať so súbormi
  • pracovať s kryptografiou
  • práca s externými komponentmi
Naše rozšírenia pozostávajú z dvoch častí. Prvá časť je to, čo sa nazýva rozšírenie prehliadača (zvyčajne rozšírenia JavaScript pre Chrome a Firefox), ktoré interaguje s druhou časťou, binárnym rozšírením, ktoré implementuje funkcie, ktoré potrebujeme. Treba spomenúť, že píšeme 3 verzie binárnych rozšírení – pre Windows, Linux a MacOS. Binárne rozšírenie je dodávané ako súčasť platformy 1C:Enterprise a nachádza sa na aplikačnom serveri 1C. Pri prvom volaní z webového klienta sa stiahne do klientskeho počítača a nainštaluje sa do prehliadača.

Pri spustení v prehliadači Safari používajú naše rozšírenia pri spustení NPAPI internet Explorer- Technológia ActiveX. Microsoft Edge zatiaľ nepodporuje rozšírenia, takže webový klient je obmedzený.

Ďalší vývoj

Jednou z pracovných skupín pre vývojový tím webového klienta je ďalší vývoj funkčnosť. Funkcionalita webového klienta by mala byť totožná s funkcionalitou tenkého klienta, všetky nové funkcionality sú implementované súčasne v tenkom aj webovom klientovi.

Ďalšími úlohami sú vývoj architektúry, refactoring, zlepšenie výkonu a spoľahlivosti. Jedným zo smerov je napríklad ďalší pohyb smerom k asynchrónnemu pracovnému modelu. Časť funkcionality webového klienta je v súčasnosti postavená na synchrónnom modeli interakcie so serverom. Asynchrónny model je teraz v prehliadačoch (a nielen v prehliadačoch) relevantnejší a to nás núti upravovať webového klienta nahradením synchrónnych volaní asynchrónnymi (a podľa toho refaktorovať kód). Postupný prechod na asynchrónny model sa vysvetľuje potrebou podporovať uvoľnené riešenia a postupne ich prispôsobovať.

Štítky: Pridajte štítky