Casa / Padroneggiare il PC / 1c estensione web. Connessione a un'infobase pubblicata tramite un browser web

1c estensione web. Connessione a un'infobase pubblicata tramite un browser web

L'attività è aumentare il server Web IIS integrato in Windows e pubblicare su di esso la base 1c sulla piattaforma 8.3. Non c'è niente di difficile in questo.

Disponibile in rotazione su un server aziendale virtualka 2008 r2. Diritti di amministratore locale su di esso. Piattaforma 1C 8.3.6.2041. Creiamo un infobase vuoto. E quindi cominciamo. Unisciti al nostro gruppo VK! In riparazione! Officina intelligente!

Installazione del ruolo del server Web (IIS)

Per prima cosa devi installare il ruolo del server web. Noi apriamo Gestore del server, seleziona il ramo a sinistra Ruoli, clic destro Aggiungi ruolo.

Raggiungiamo la fase di selezione del ruolo del server e selezioniamo la casella accanto a Web Server (IIS). Fare clic su Avanti. Ora è necessario selezionare correttamente i servizi del ruolo da installare. Metti le caselle di controllo esattamente come nello screenshot qui sotto.

Completiamo l'installazione. L'Aggiunta guidata ruoli dovrebbe comunicarci dopo un certo periodo di tempo che il ruolo e tutti i servizi ruolo sono stati installati correttamente:

Ora dobbiamo verificare se tutto ha funzionato bene per noi. Apri qualsiasi browser e vai all'indirizzo http://localhost. Dovremmo vedere un'immagine così gioiosa:


installazione della piattaforma e dei componenti 1s

Ciò significa che il server Web è stato avviato correttamente e tutto funziona correttamente. Quindi passiamo a 1s. Devi creare una piattaforma. L'unica avvertenza durante l'installazione della piattaforma è scegliere:

  • 1C: impresa
  • Estensioni del server web
impostazione dei diritti di accesso

Il primo passo è impostare i diritti della cartella in cui abbiamo la directory principale del server web. Se non è stato modificato nulla, per impostazione predefinita lo è C:\inetpub\wwwroot. Vai alla cartella C:\inetpub\ scegli una cartella wwwroot, fai clic destro su di esso e vai alle proprietà. Vai alla scheda Sicurezza. Cliccando sul pulsante di modifica, andiamo direttamente all'impostazione dei permessi. Trova nell'elenco Gruppi e utenti, gruppo Utenti, e cliccandoci sopra inseriamo nella colonna sottostante Autorizzazioni di gruppo, segni di spunta mancanti nella colonna permettere.

Ora devi dare i permessi alle cartelle con 1s installati. Passiamo a loro, per impostazione predefinita per la versione a 32 bit 1c è nella cartella C:\Programmi (x86)\1cv8 per 64 bit in una cartella C:\Programmi\1cv8. Scegli anche una cartella 1cv8 vai alle sue proprietà, vai alla scheda Sicurezza -> Modifica. Ma invece di selezionare un gruppo dall'elenco, dobbiamo prima aggiungerlo lì. Per fare ciò, fare clic sul pulsante Aggiungere, nella finestra che appare, premere il pulsante Inoltre.


Successivamente, fai clic sul pulsante Ricerca e nell'elenco dei risultati che stiamo cercando IIS_IUSRS, aggiungendolo con un doppio clic, ci riporta alla finestra Seleziona "Utenti" o "Gruppi" ma con un gruppo già contrassegnato nell'elenco. Fare clic su OK e tornare alla finestra Autorizzazioni di gruppo mettere tutti i segni di spunta nel campo Consenti per il gruppo appena aggiunto.

Dopo aver impostato i permessi per le cartelle con i file 1c, ci resta l'ultimo. Assegna diritti a un gruppo IIS_IUSRS sulla cartella dove abbiamo la base 1c stessa.

Sono stati fatti i preparativi necessari. Ora passiamo alla pubblicazione.

Pubblicazione 1s su un server web

E' necessario avviare 1s in modalità configuratore selezionando il database da pubblicare. Nel mio caso, questa è una base vuota e ce n'è solo una.

Nella modalità configuratore 1s, vai al menu Amministrazione -> Pubblicazione su un server web.


Dopo aver esaminato i parametri e aver verificato che, in sostanza, tutto ci si addice, premiamo Pubblicare. Se la tua pubblicazione è andata a buon fine, vai all'ultimo passaggio.

configurazione di IIS per il funzionamento con un modulo di estensione del server Web 1C a 32 bit

Lascia che ti ricordi che abbiamo utilizzato rispettivamente una piattaforma a 32 bit e un modulo di estensione del server web da 1c. Pertanto, in questo caso, dobbiamo ancora consentire l'esecuzione del pool di applicazioni predefinito: DefaultAppPool eseguire applicazioni a 32 bit. Questo non è difficile da fare. Andiamo Gestore del server -> Ruoli -> Server web (IIS) -> Responsabile del servizio (IIS) -> Pool di applicazioni -> DefaultAppPool. Pulsante destro del mouse attivato DefaultAppPool chiamata menù contestuale e scegli in esso Opzioni aggiuntive.


Cerchiamo una linea Applicazioni a 32 bit consentite e metti di fronte VERO

CONFIGURAZIONE DI IIS PER FUNZIONARE CON UN MODULO DI ESPANSIONE DEL SERVER WEB 1C A 64 BIT

Se abbiamo utilizzato rispettivamente una piattaforma a 64 bit e un modulo di estensione Web, dobbiamo eseguire le seguenti manipolazioni:

Andiamo Gestore del server -> Ruoli -> Server web (IIS) -> Responsabile del servizio (IIS)-> E seleziona l'applicazione convertita dalla directory virtuale con il nome che abbiamo impostato durante la pubblicazione del database. Nel campo a destra, vai alla sezione Mappature dei gestori. Pubblicazione di 1s 8.3 sul server web iis Pubblicazione di 1s 8.3 sul server web iis

Unisciti al nostro gruppo VK!

06.04.2014

A disposizione:

Windows 8.1 professionale.

1C enterprise, versione 8.3.4.465.

Banca dati ZUP 3.0.

È necessario stabilire l'accesso al database RAM specificato tramite un browser Internet o un thin client.

Per facilità di comprensione, tutte le azioni verranno descritte dal pannello di controllo.

    2. Pubblicazione di un database da 1C enterprise.

    Dopo aver installato IIS, è necessario eseguire il configuratore come amministratore locale e pubblicare il database.

  1. Il configuratore stesso configurerà IIS.

Accettiamo di riavviare il server IIS dopo aver pubblicato un nuovo database.


    7. Aprire la porta nel firewall.

    Pannello di controllo - firewall di Windows- Opzioni aggiuntive.

    Crea una regola per le connessioni in entrata per la porta selezionata.

8. Organizzazione del lavoro via Internet.

Per entrare nel database da "Internet aperto", è necessario acquistare un "indirizzo IP bianco" dal provider. In senso figurato, questo sarà il tuo identificatore digitale, con il quale tutti i computer Internet ti riconosceranno. Se il tuo server web sarà con questo indirizzo, non sarà necessario fare nient'altro. Se Internet distribuirà un router o un altro computer con un server proxy (ovvero un gateway), su questo gateway è necessario aprire una delle porte e reindirizzarla alla porta di lavoro IIS sul server Web. Nelle impostazioni del gateway, è necessario specificare la porta in entrata e dove viene reindirizzato il traffico: l'indirizzo IP e la porta del server web.

  1. 9. Avvia il browser.

    Nel mio caso, la riga di avvio del browser sarà simile a questa:

http - indicazione del protocollo.

i7 - nome del computer dns o indirizzo ip del server web.

180 - Porta IIS (può essere omessa se la porta è quella predefinita)

hrm30 - directory di pubblicazione (c:\inetpub\wwwroot\HRM30)

Per cliente sottile la stringa è specificata nelle impostazioni di connessione.

Tutti possono lavorare!

In futuro, non dimenticare di aggiornare la pubblicazione dopo aver aggiornato la piattaforma aziendale 1C.

9 gennaio 2016 alle 13:08

Pubblicazione di un database 1C su un server Web di terze parti

  • Installazione Linux

Esiste un server Windows con 1C 8.3 (DB - MSSQL).
L'attività consiste nell'impostare la pubblicazione del database su un server Web Linux.
Sottigliezze: il modulo 1C per Apache funziona solo con 2.0 e 2.2 e Versione attuale nella maggior parte delle distribuzioni - 2.4+
Scrivo di più per me stesso, per non dimenticare. Beh, non si sa mai, all'improvviso qualcun altro tornerà utile: non devi correre nei forum alla ricerca dei comandi giusti.

Iron: ha fornito un gigabyte di RAM, un core e 20 gigabyte di disco. Non è mai troppo tardi per espandersi.
Sistema operativo: Debian Stable, ci sono abituato.

Ho impostato il minimo, incluso il server ssh, ma escluso il web. Torniamo a questo.

Dopo l'installazione configurazione di base a piacere, di solito imposto il locale su utf8, metto sudo, mc e vim, il resto secondo necessità.
Successivamente, è necessario installare Apache 2.2. E fallo il modo giusto piuttosto che scaricare semplicemente il pacchetto deb. :)

Innanzitutto, aggiungi righe a /etc/apt/sources.list con un collegamento a versione precedente distribuzione.
deb http://mirror.yandex.ru/debian/ wheezy principale deb-src http://mirror.yandex.ru/debian/ wheezy principale
Puoi, ovviamente, scrivere oldstable- anche al momento sarà corretto. Ma solo in quella vera, perché prima o poi uscirà una nuova versione stabile e dentro oldstable e poi invece di apache 2.2 ci sarà 2.4. Anche se, spero, a quel punto 1C verrà aggiornato e funzionerà con le versioni più recenti di Apache. Ma chi lo sa? :)
Dove mirror.yandex.ru- il nome del tuo server preferito con il repository è scritto lì.

Quindi aggiorniamo gli indici - aggiornamento apt-get- e guarda cosa abbiamo qui per apache con il comando apt-cache showpkg apache2
C'è molto output, ma siamo interessati solo all'inizio dell'output:
Pacchetto: apache2 Versioni: 2.4.10-10+deb8u3 (/var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_binary-i386_Packages) i386_Packages MD5: Descrizione Lingua: en File: /var/lib/apt/lists/mirror. yandex.ru_debian_dists_stable_main_i18n_Translation-en MD5: Linguaggio di descrizione: en File: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_i18n_Translation-en MD5 : 2.4.10-10+deb8u1 (/var/lib/apt/lists/security. debian.org_dists_stable_updates_main_binary-i386_Packages) Lingua: en File: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_i18n_Translation-en MD5: Description Language: en File: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_i18n_Translation- it MD5: 2.2.22 -13+deb7u6 (/var/lib/apt/lists/mirror.yandex.ru_deb ian_dists_wheezy_main_binary-i386_Packages) Linguaggio di descrizione: File: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_wheezy_main_binary-i386_Packages MD5: Linguaggio di descrizione: en File: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_wheezy_main_i18n_Translation : Linguaggio di descrizione : ru File: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_wheezy_main_i18n_Translation-ru MD5:

Vediamo che oltre alla 2.4.10 c'è la versione 2.2.22-13+deb7u6 - ciò di cui hai bisogno.
Abbiamo messo: apt-get install apache2=2.2.22-13+deb7u6
O più precisamente: 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 e il resto delle dipendenze verrà automaticamente richiamato.

Successivamente, mettiamo Apache in attesa per non aggiornarlo per sbaglio.

Apt-mark hold apache2 apache2-mpm-worker apache2.2-common apache2.2-bin apache2 è contrassegnato come commit. apache2-mpm-worker è contrassegnato come commit. apache2.2-common è contrassegnato come commit. apache2.2-bin è contrassegnato come commit.
Puoi eseguire il servizio apache2 start e telnet sulla porta 80 per verificare se sei troppo pigro per avviare il browser.

host locale telnet 80
Sto provando::1... Connesso a localhost. Il carattere di escape è "^]". uno Metodo 501 non implementato

Metodo non implementato

1 a /index.html non supportato.


Server Apache/2.2.22 (Debian) su 1cweb Porta 80
Connessione chiusa da un host straniero.

Giura: significa che funziona.

Ora mettiamo 1C.
Sono necessari solo i servizi Web 1C (package 1c-impresa83-ws). E 1c-impresa83-comune, che è registrato nelle dipendenze. E 1c-enterprise83-server, che non è specificato nelle dipendenze, ma senza di esso, l'utilità di pubblicazione scrive "Errore di segmentazione".
In linea di principio, è necessario solo il modulo per Apache wsap22.so dal pacchetto 1c-impresa83-ws e tutto il resto può essere fatto tramite un editor di testo. Ma sono una persona pigra e preferirei spendere qualche megabyte su 1C piuttosto che guidare manualmente le linee nelle configurazioni. :)

Successivamente, è necessario creare una cartella per memorizzare le impostazioni del database pubblicato 1C. È possibile nell'albero del server Web, ma è meglio che lo faccia separatamente, proprio alla radice, /1s.
Successivamente, dalla cartella con i file 1C installati ( /opt/1C/v8.3/i386) eseguire l'utilità di pubblicazione webinst con i seguenti parametri (pubblico il nostro database di test):
./webinst -apache22 -wsdir testlitupp -dir /1c/testlitupp -connstr "Srvr=10.0.0.4;Ref=testlitupp;" -confPath /etc/apache2/apache2.conf Pubblicato

Apache22 - la nostra versione del server web
-wsdir testlitupp - cartella sul server web dove sarà disponibile il database pubblicato (http://yourserver/testlitupp)
-dir /1c/testlitupp - cartella in cui verrà archiviato il file default.vrd con le impostazioni di pubblicazione
-connstr "Srvr=10.0.0.4;Ref=testlitupp;" - IP del server 1C e nome del database pubblicato
-confPath /etc/apache2/apache2.conf - percorso della configurazione di apache

Se dice "Pubblicato", allora è andato tutto bene. Se dice "Errore di segmentazione", molto probabilmente ti sei dimenticato di inserire 1c-enterprise83-server.
Sulla base dei risultati, abbiamo il file default.vrd

E alcune nuove righe nel file di configurazione del server web:

LoadModule _1cws_module "/opt/1C/v8.3/i386/wsap22.so" # 1c pubblicazione Alias ​​"/testlitupp" "/1c/testlitupp/" AllowOverride Tutte le opzioni Nessuno Ordine consenti, nega Consenti da tutte le applicazioni SetHandler 1c ManagedApplicationDescriptor "/1c/testlitupp/default.vrd"
Riavviamo Apache (servizio apache2 restart) e andiamo a vedere cosa è stato pubblicato lì.
Pubblicato, richiede una password.

E lascialo entrare nella base.

Lavori. Ulteriori impostazioni di pubblicazione vengono effettuate modificando i file vrd (ad esempio, abilitando il debug) e i tuoi programmatori 1C dovrebbero essere coinvolti nel completamento dell'interfaccia del client web.
Se aggiungi opzioni, ad esempio, con la connessione manuale dei servizi, non dimenticare di rimuovere l'ultima barra nella riga "base="/testlitupp" ib="Srvr=10.0.0.4;Ref=testlitupp;" nell'impostazione predefinita. file vrd / >", ci ho giocherellato a lungo. Se non si elimina e si aggiunge qualcosa dopo, viene visualizzato un "errore 500" senza ulteriori informazioni.
Quale sarà il carico sul server Web: non lo so ancora, per noi funziona ancora in modalità test e ci sono risorse allocate sufficienti. Ma aggiungere memoria o core all'aumentare delle esigenze non è un problema.

In generale, in altre distribuzioni di Linux tutto è fatto in modo simile, le differenze sono solo nelle modalità di installazione della vecchia versione di apache.

Oggi lascerò una piccola nota post sulla configurazione di 1C 8.3 in termini di organizzazione dell'accesso tramite il server WEB 1C e i servizi IIS 8.

In precedenza, alla vecchia maniera, davo agli utenti l'accesso a 1C utilizzando il terminal server. Poi avevo un server Windows 2003 con 1C versione 7 al lavoro, avevo una licenza per terminal server in cui era distribuito il terminal server. Una volta ho anche scritto un articolo sull'impostazione di questo bene. Tutto andava bene, ma ora abbiamo un nuovo hardware (basato su CPU Intel Xeon E3-1220 v3, 8 GB di RAM), nuovo 1C (v 8.3), nuovo sistema operativo (WINdows Server 2012 r2).

Fin dall'inizio, il nostro reparto contabilità (8 PC) ha lavorato su un'unità di rete, ma in questo caso il programma funziona secondo il principio del download di file tramite la rete, e questo è molto lento. Si è deciso di trovare un modo per accelerare il lavoro.

Ho pensato a un terminal server, ma non ho una licenza per un terminal server (non l'ho trovato su Internet, ma hanno detto che è costoso da acquistare). L'output è stato richiesto per caso, risulta che esiste il supporto per il server WEB in 1C. Poiché ho esperienza con lo stesso Apache e conosco il principio di funzionamento, ho deciso di padroneggiare il server WEB 1C.

Installazione e verifica di tutti i componenti

Iniziamo la configurazione installando i componenti del server Web 1C. Verifichiamo di avere installato il modulo di estensione del server Web 1C. Se non installato, installa.

Pubblicazione del database sul server web

Andiamo al database 1C nella modalità configuratore. Successivamente andiamo al menu. "Amministrazione" - "Pubblicazione su un server web"

Pubblichiamo!

Impostiamo i diritti sulle cartelle 1C

Il passaggio successivo consiste nell'impostare le autorizzazioni sulle seguenti cartelle:

La cartella bin in 1C.

Impostiamo i diritti come nello screenshot qui sotto nel menu di sicurezza.

Connessione al server Web dai computer client

Per fare ciò, crea una connessione al DB 1C - Scrivi il nome della connessione -> seleziona Sul server web -> quindi come nella figura seguente:

Successivamente, sarai in grado di connetterti a 1C tramite un server web.

Errori riscontrati:

1C8.3 IIS "Rilevato valore Request.Path potenzialmente dannoso" ricevuto dal client

Dopo aver configurato il server Web 1C, ho riscontrato un problema: posso accedere a 1C tramite IP, accedo, ma tutti i menu non funzionano, non riesco ad aprire una sola finestra tranne il desktop 1C. Ho lottato a lungo finché non ho trovato una soluzione su Internet.

Cosa dovrebbe essere fatto:
1. Apri IIS. Start - Esegui - trova "IIS Manager"
2. Apri il nostro "sito"
3. Vai al menu "Mappature gestore"
4. Alla ricerca ISAPI-dll e scegli Modifica.
5. Cambia il percorso della richiesta da "*.dll" a "*", file eseguibile (potresti avere una versione diversa di 1C, fai più attenzione) - "C:\Program Files (x86)\1cv8\ 8.3.6.2390 \bin\wsisapi.dll".
6. Salva.

7. Controlliamo.

È tutto per ora. Se hai domande, cercherò di aiutarti.

Una delle belle caratteristiche della tecnologia 1C:Enterprise è che la soluzione applicativa sviluppata utilizzando la tecnologia dei moduli gestiti può essere lanciata sia in un thin client (eseguibile) sotto Windows, Linux, MacOS X, sia come client web per 5 browser - Chrome, Internet Explorer, Firefox, Safari, Edge e tutto senza modificare il codice sorgente dell'applicazione. Inoltre, esternamente, l'applicazione nel thin client e nel browser funziona e sembra quasi identica.
Trova 10 differenze (sotto il taglio 2 immagini):

Finestra thin client su Linux:

La stessa finestra nel client Web (nel browser Chrome):

Perché abbiamo creato un client web? Parlando in modo un po 'patetico, il tempo ci ha assegnato un compito del genere. Per molto tempo, il lavoro su Internet è diventato un prerequisito per le applicazioni aziendali. Innanzitutto, abbiamo aggiunto la possibilità di lavorare via Internet per il nostro thin client (alcuni dei nostri concorrenti, tra l'altro, si sono fermati qui; altri, al contrario, hanno abbandonato il thin client e si sono limitati all'implementazione del web client). Abbiamo deciso di dare ai nostri utenti l'opportunità di scegliere l'opzione client più adatta a loro.

L'aggiunta di funzionalità Web al thin client è stata una grande impresa con un cambiamento completo nell'architettura client/server. La creazione di un client Web è un progetto completamente nuovo che è iniziato da zero.

Formulazione del problema

Quindi, i requisiti per il progetto: il web client deve fare lo stesso del thin client, vale a dire:
  1. Visualizza l'interfaccia utente
  2. Eseguire il codice client scritto in linguaggio 1C
L'interfaccia utente in 1C è descritta in un editor visivo, ma in modo dichiarativo, senza una disposizione degli elementi pixel per pixel; vengono utilizzate circa tre dozzine di tipi di elementi dell'interfaccia: pulsanti, campi di input (testo, digitale, data / ora), elenchi, tabelle, grafici, ecc.

Il codice client in linguaggio 1C può contenere chiamate al server, lavorare con risorse locali (file, ecc.), Stampare e molto altro.

Sia il thin client (quando si lavora tramite il Web) che il client Web utilizzano lo stesso set di servizi Web per comunicare con il server delle applicazioni 1C. L'implementazione dei client, ovviamente, è diversa: il thin client è scritto in C ++, il client Web è scritto in JavaScript.

Un po' di storia

Il progetto web client è iniziato nel 2006 con un team (medio) di 5 persone. In alcune fasi del progetto, gli sviluppatori sono stati coinvolti per implementare funzionalità specifiche (documento foglio di calcolo, diagrammi, ecc.); di norma, questi erano gli stessi sviluppatori che hanno realizzato questa funzionalità nel thin client. Quelli. gli sviluppatori hanno riscritto i componenti in JavaScript che avevano precedentemente creato in C++.

Fin dall'inizio abbiamo scartato l'idea di una eventuale conversione automatica (almeno parziale) del codice C++ del thin client in JavaScript del web client a causa delle forti differenze concettuali tra i due linguaggi; il client Web è stato scritto in JavaScript da zero.

Nelle prime iterazioni del progetto, il client Web ha convertito il codice client nel linguaggio 1C integrato direttamente in JavaScript. Il thin client agisce in modo diverso: il codice nel linguaggio 1C integrato viene compilato in bytecode e quindi questo bytecode viene interpretato sul client. Successivamente, il client web ha iniziato a fare lo stesso: in primo luogo, ha dato un aumento delle prestazioni e, in secondo luogo, ha permesso di unificare l'architettura dei client thin e web.

La prima versione della piattaforma 1C:Enterprise con supporto client Web è stata rilasciata nel 2009. Il client Web a quel tempo supportava 2 browser: Internet Explorer e Firefox. I piani originali erano di supportare Opera, ma a causa di problemi insormontabili con i gestori di chiusura dell'applicazione in Opera in quel momento (non era possibile tracciare con certezza al 100% che l'applicazione si stava chiudendo, e in quel momento eseguire la procedura di disconnessione da l'application server 1C) da questi piani doveva essere abbandonato.

Struttura del progetto

In totale, la piattaforma 1C:Enterprise ha 4 progetti scritti in JavaScript:
  1. I WebTools sono librerie condivise utilizzate da altri progetti (includiamo anche la Google Closure Library qui).
  2. Controllo FormattedDocument
  3. Controllo dello scheduler (implementato in JavaScript sia nel thin client che nel client Web)
  4. Cliente web
La struttura di ciascun progetto ricorda la struttura dei progetti Java (o progetti .NET, a seconda di quale sia più vicino a te); abbiamo spazi dei nomi e ogni spazio dei nomi si trova cartella separata. All'interno della cartella ci sono i file e le classi dello spazio dei nomi. Ci sono circa 1000 file nel progetto web client.

Strutturalmente, il client Web è in gran parte suddiviso nei seguenti sottosistemi:

  • Interfaccia dell'applicazione client gestita
    • Interfaccia generale dell'applicazione (menu di sistema, pannelli)
    • Interfaccia forme gestite, che comprende, tra l'altro, circa 30 controlli (pulsanti, tipi diversi campi di input - testo, digitale, data/ora, ecc., tabelle, elenchi, grafici, ecc.)
  • Modello a oggetti disponibile per gli sviluppatori sul client (più di 400 tipi in totale: modello a oggetti dell'interfaccia gestita, impostazioni di composizione dei dati, formattazione condizionale, ecc.)
  • Interprete linguistico integrato 1C
  • Estensioni del browser (utilizzate per funzionalità non supportate in JavaScript)
    • Lavorare con la crittografia
    • Lavorare con i file
    • Tecnologia componenti esterni, consentendone l'utilizzo sia nei thin client che nei web client

Caratteristiche di sviluppo

Implementare tutto quanto sopra in JavaScript non è un compito facile. Forse il client Web 1C è una delle più grandi applicazioni lato client scritte in JavaScript: circa 450.000 righe. Utilizziamo attivamente un approccio orientato agli oggetti nel codice del client web, che semplifica il lavoro con un progetto così grande.

Per ridurre al minimo le dimensioni del codice client, abbiamo prima utilizzato il nostro offuscatore e, a partire dalla versione 8.3.6 della piattaforma (ottobre 2014), abbiamo iniziato a utilizzare Google Closure Compiler . L'effetto dell'utilizzo in numeri è la dimensione del framework del client Web dopo l'offuscamento:

  • Offuscatore proprio - 1556 kb
  • Compilatore di chiusura di Google - 1073 kb
L'utilizzo di Google Closure Compiler ci ha aiutato a migliorare le prestazioni del client web del 30% rispetto al nostro offuscatore. Inoltre, la quantità di memoria consumata dall'applicazione è diminuita del 15-25% (a seconda del browser).

Google Closure Compiler funziona molto bene con il codice orientato agli oggetti, quindi la sua efficienza è la più alta per un client web. Il compilatore di chiusura fa alcune cose buone per noi:

  • Controllo del tipo statico nella fase di compilazione del progetto (fornito dal fatto che copriamo il codice con annotazioni JSDoc). Il risultato è una tipizzazione statica, molto vicina al livello della digitazione in C++. Questo aiuta a rilevare una percentuale piuttosto elevata di errori nella fase di compilazione del progetto.
  • Riduzione delle dimensioni del codice attraverso l'offuscamento
  • Una serie di ottimizzazioni del codice eseguibile, ad esempio, come:
    • sostituzioni di funzioni inline. Chiamare una funzione in JavaScript è un'operazione piuttosto costosa e le sostituzioni in linea di piccoli metodi usati di frequente possono velocizzare notevolmente il codice.
    • Conteggio delle costanti in fase di compilazione. Se l'espressione dipende da una costante, verrà sostituita con il valore effettivo della costante
Utilizziamo WebStorm come ambiente di sviluppo del nostro client web.

Per l'analisi del codice utilizziamo SonarQube, dove integriamo analizzatori di codice statici. Con l'aiuto di analizzatori, monitoriamo il degrado della qualità del codice sorgente JavaScript e cerchiamo di prevenirlo.

Quali compiti abbiamo risolto/stiamo risolvendo

Durante l'implementazione del progetto, abbiamo dovuto affrontare una serie di compiti interessanti che dovevamo risolvere.

Scambio dati con il server e tra finestre

Ci sono situazioni in cui l'offuscamento del codice sorgente può interferire con il funzionamento del sistema. Il codice esterno al codice eseguibile del client Web, a causa dell'offuscamento, può avere nomi di funzioni e parametri diversi da quelli previsti dal nostro codice eseguibile. Il codice esterno per noi è:
  • Codice proveniente dal server come strutture dati
  • Codice per un'altra finestra dell'applicazione
Per evitare l'offuscamento durante l'interazione con il server, utilizziamo il tag @expose:

/** * @constructor * @extends(Base.SrvObject) */ Srv.Core.GenericException = function () ( /** * @type (string) * @expose */ this.descr; /** * @type (Srv.Core.GenericException) * @expose */ this.inner; /** * @type (stringa) * @expose */ this.clsid; /** * @type (boolean) * @expose */ this. codificato;)
E per evitare l'offuscamento durante l'interazione con altre finestre, utilizziamo le cosiddette interfacce esportate (interfacce in cui vengono esportati tutti i metodi).

/** * Interfaccia esportata del controllo DropDownWindow * * @interface * @struct */ WebUI.IDropDownWindowExp = function()() /** * Sposta la selezione avanti o indietro di 1 * * @param (boolean) isForward * @ param (boolean ) checkOnly * @return (boolean) * @expose */ WebUI.IDropDownWindowExp.prototype.moveMarker = function (isForward, checkOnly)() /** * Sposta la selezione all'inizio o alla fine * * @param (boolean ) isFirst * @param (booleano) checkOnly * @return (booleano) * @expose */ WebUI.IDropDownWindowExp.prototype.moveMarkerTo = function (isFirst, checkOnly)() /** * @return (booleano) * @expose */ WebUI.IDropDownWindowExp.prototype .selectValue = function()()

Abbiamo usato Virtual DOM prima che diventasse mainstream)

Come tutti gli sviluppatori che si occupano di interfacce utente Web complesse, ci siamo subito resi conto che il DOM non è adatto alle interfacce utente dinamiche. Quasi immediatamente, è stato implementato un analogo del Virtual DOM per ottimizzare il lavoro con l'interfaccia utente. Durante l'elaborazione degli eventi, tutte le modifiche del DOM vengono archiviate in memoria e, solo quando tutte le operazioni sono state completate, le modifiche accumulate vengono applicate all'albero del DOM.

Ottimizzazione del client web

Per rendere il nostro client web più veloce, cerchiamo di utilizzare al massimo le funzionalità standard del browser (CSS, ecc.). Quindi, la barra dei comandi del modulo (che si trova su quasi tutti i moduli di domanda) è disegnata esclusivamente dal browser, layout dinamico basato su CSS.

Test

Per i test funzionali e delle prestazioni, utilizziamo uno strumento proprietario (scritto in Java e C++) e una suite di test costruita su Selenium .

Il nostro strumento è universale: ti consente di testare quasi tutti i programmi per finestre e quindi è adatto per testare sia un thin client che un client Web. Lo strumento registra le azioni dell'utente che ha avviato la soluzione applicativa 1C in un file di script. Allo stesso tempo, vengono registrate le immagini dell'area di lavoro dello schermo - riferimenti. Durante il monitoraggio delle nuove versioni del client Web, gli scenari vengono riprodotti senza la partecipazione dell'utente. Nei casi in cui lo screenshot non corrisponde a quello di riferimento in nessuna fase, il test viene considerato fallito, dopodiché lo specialista della qualità conduce un'indagine: si tratta di un errore o di una modifica pianificata nel comportamento del sistema. In caso di comportamento pianificato, gli standard vengono automaticamente sostituiti da nuovi.

Lo strumento misura anche le prestazioni dell'applicazione con una precisione di 25 millisecondi. In alcuni casi, eseguiamo il loop di parti dello script (ad esempio, ripetendo più volte l'inserimento dell'ordine) per analizzare il degrado del tempo di esecuzione nel tempo. I risultati di tutte le misurazioni vengono registrati in un registro per l'analisi.


Il nostro strumento di test e l'applicazione in fase di test

Il nostro strumento e il selenio si completano a vicenda; ad esempio, se un pulsante su uno degli schermi ha cambiato posizione, Selenium potrebbe non rintracciarlo, ma il nostro strumento lo noterà, perché effettua un confronto pixel per pixel dello screenshot con lo standard. Inoltre, lo strumento è in grado di rintracciare i problemi con l'elaborazione dell'input dalla tastiera o dal mouse, poiché è quello che riproduce.

I test su entrambi gli strumenti (il nostro e Selenium) eseguono scenari di lavoro tipici delle nostre soluzioni applicative. I test vengono avviati automaticamente dopo la build giornaliera della piattaforma 1C:Enterprise. Se gli script rallentano (rispetto alla build precedente), indagheremo e risolveremo la causa del rallentamento. Il nostro criterio è semplice: il nuovo assemblaggio non dovrebbe funzionare più lentamente del precedente.

Gli sviluppatori utilizzano diversi strumenti per indagare sugli incidenti di rallentamento; utilizzato principalmente è Dynatrace AJAX Edition di DynaTrace. Vengono registrati i registri dell'esecuzione dell'operazione problematica sul precedente e sul nuovo assemblaggio, quindi vengono analizzati i registri. Allo stesso tempo, il tempo di esecuzione delle singole operazioni (in millisecondi) potrebbe non essere un fattore decisivo: i processi di servizio come la raccolta dei rifiuti vengono periodicamente avviati nel browser, possono sovrapporsi al tempo di esecuzione delle funzioni e distorcere l'immagine. Parametri più rilevanti in questo caso sarebbero il numero di istruzioni JavaScript eseguite, il numero di operazioni atomiche sul DOM e così via. Se il numero di istruzioni/operazioni nello stesso scenario in nuova versione aumentato - questo significa quasi sempre un calo delle prestazioni che deve essere corretto.

Inoltre, uno dei motivi del calo delle prestazioni potrebbe essere che il compilatore di chiusura di Google per qualche motivo non è riuscito a effettuare una sostituzione in linea della funzione (ad esempio, perché la funzione è ricorsiva o virtuale). In questo caso si cerca di rimediare alla situazione riscrivendo il codice sorgente.

Estensioni del browser

Nel caso in cui una soluzione applicata necessiti di funzionalità che non sono in JavaScript, utilizziamo le estensioni del browser:
  • per lavorare con i file
  • lavorare con la crittografia
  • lavorando con componenti esterni
Le nostre estensioni sono composte da due parti. La prima parte è quella che viene chiamata un'estensione del browser (solitamente estensioni JavaScript per Chrome e Firefox) che interagiscono con la seconda parte, un'estensione binaria che implementa la funzionalità di cui abbiamo bisogno. Va detto che scriviamo 3 versioni di estensioni binarie - per Windows, Linux e MacOS. L'estensione binaria viene fornita come parte della piattaforma 1C:Enterprise e si trova sul server delle applicazioni 1C. La prima volta che viene richiamato dal client Web, viene scaricato sul computer client e installato nel browser.

Durante l'esecuzione in Safari, le nostre estensioni utilizzano NPAPI, durante l'esecuzione Internet Explorer- Tecnologia ActiveX. Microsoft Edge non supporta ancora le estensioni, quindi il client Web è limitato.

Ulteriori sviluppi

Uno dei gruppi di attività per il team di sviluppo del client Web è ulteriori sviluppi funzionalità. La funzionalità del client Web dovrebbe essere identica alla funzionalità del thin client, tutte le nuove funzionalità vengono implementate contemporaneamente sia nel thin client che nel client Web.

Altre attività sono lo sviluppo dell'architettura, il refactoring, il miglioramento delle prestazioni e dell'affidabilità. Ad esempio, una delle direzioni è l'ulteriore movimento verso un modello di lavoro asincrono. Parte della funzionalità del web client è attualmente costruita su un modello sincrono di interazione con il server. Il modello asincrono sta diventando sempre più rilevante nei browser (e non solo nei browser), e questo ci costringe a modificare il web client sostituendo le chiamate sincrone con quelle asincrone (e refactoring del codice di conseguenza). Il passaggio graduale a un modello asincrono è spiegato dalla necessità di supportare le soluzioni rilasciate e adattarle gradualmente.

Tag: aggiungi tag