{"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\/it\/blog\/administrirovanie\/pro-veb-klient-1s__trashed","title":{"rendered":"Sul web client 1C","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Una delle caratteristiche piacevoli della tecnologia 1C:Enterprise \u00e8 che la soluzione applicativa, sviluppata con la tecnologia delle forme gestite, pu\u00f2 essere eseguita sia in un client sottile (eseguibile) su Windows, Linux, MacOS X, sia come client web su 5 browser \u2013 Chrome, Internet Explorer, Firefox, Safari, Edge, il tutto senza modificare il codice sorgente dell'applicazione. Inoltre, l'applicazione in un client sottile e nel browser funziona e appare praticamente identica.<br \/>\nTrova 10 differenze (sotto ci sono 2 immagini):<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nFinestra del client sottile su Linux:<\/p>\n<p><img decoding=\"async\" alt=\"Sul web client 1C\" src=\"\/wp-content\/uploads\/2019\/04\/6a836d01f80f447302e04d1827d5eebb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa stessa finestra nel client web (nel browser Chrome):<\/p>\n<p><img decoding=\"async\" alt=\"Sul web client 1C\" src=\"\/wp-content\/uploads\/2019\/04\/1cab8bdf0d9d1c9d6601219c3ae6018c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPerch\u00e9 abbiamo creato il client web? Detto in termini un po' pomposi, questa sfida ci \u00e8 stata imposta dal tempo. Gi\u00e0 da tempo, lavorare tramite Internet \u00e8 diventato una condizione necessaria per le applicazioni aziendali. Inizialmente abbiamo aggiunto la possibilit\u00e0 di lavorare tramite Internet per il nostro client sottile (alcuni dei nostri concorrenti, peraltro, si sono fermati qui; altri, al contrario, hanno abbandonato il client sottile e si sono limitati all'implementazione del client web). Abbiamo deciso di offrire ai nostri utenti la possibilit\u00e0 di scegliere la variante di client che meglio si adatta alle loro esigenze.<\/p>\n<p><img decoding=\"async\" alt=\"Sul web client 1C\" src=\"\/wp-content\/uploads\/2019\/04\/345d070d695cfc4854c485148d22d24c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nL'aggiunta della possibilit\u00e0 di lavorare tramite Internet per il client leggero \u00e8 stata un grande progetto che ha comportato un completo cambiamento dell'architettura dell'interazione client-server. La creazione di un web client, invece, \u00e8 un progetto del tutto nuovo, iniziato da zero.<\/p>\n<h3>Definizione del compito<\/h3>\n<p>\nQuindi, i requisiti del progetto: il web client deve fare le stesse cose del client leggero, ovvero:<\/p>\n<ol>\n<li>Mostrare l'interfaccia utente<\/li>\n<li>Eseguire il codice client scritto in linguaggio 1C<\/li>\n<\/ol>\n<p>\nL'interfaccia utente in 1C \u00e8 descritta nell'editor visivo, ma in modo dichiarativo, senza collocazione pixel per pixel degli elementi; sono utilizzati circa una trentina di tipi di elementi dell'interfaccia: pulsanti, campi di input (testo, numerici, data\/ora), elenchi, tabelle, grafici, ecc. <\/p>\n<p>Il codice client in linguaggio 1C pu\u00f2 contenere chiamate server, lavorare con risorse locali (file, ecc.), stampare e molto altro.<\/p>\n<p>Sia il client leggero (quando si lavora tramite il web) che il web client utilizzano lo stesso set di servizi web per comunicare con il server delle applicazioni 1C. L'implementazione nei client, ovviamente, \u00e8 diversa: il client leggero \u00e8 scritto in C++, mentre il web client \u00e8 sviluppato in JavaScript.<\/p>\n<h3>Un po' di storia<\/h3>\n<p>\nIl progetto per la creazione di un client web \u00e8 iniziato nel 2006, con una squadra media di 5 persone coinvolte. In fasi specifiche del progetto, sono stati coinvolti sviluppatori per implementare funzionalit\u00e0 particolari (documenti tabellari, diagrammi, ecc.); in genere, si trattava degli stessi sviluppatori che avevano realizzato queste funzionalit\u00e0 nel client leggero. Cio\u00e8, gli sviluppatori hanno riscritto in JavaScript i componenti che avevano precedentemente creato in C++.<\/p>\n<p>Sin dall\u2019inizio, abbiamo respinto l\u2019idea di una conversione automatica (anche solo parziale) del codice C++ del client leggero in JavaScript per il client web, a causa delle forti differenze concettuali tra i due linguaggi; il client web \u00e8 stato scritto in JavaScript partendo da zero.<\/p>\n<p>Nelle prime iterazioni del progetto, il client web convertiva il codice client basato sul linguaggio incorporato 1C direttamente in JavaScript. Il client leggero funziona diversamente: il codice in linguaggio incorporato 1C viene compilato in bytecode, e poi questo bytecode viene interpretato dal client. In seguito, anche il client web ha cominciato a fare lo stesso: da un lato, ci\u00f2 ha portato a un miglioramento delle prestazioni, dall'altro \u2013 ha permesso di unificare l'architettura dei client leggero e web.<\/p>\n<p>La prima versione della piattaforma 1C:Enterprise con supporto per il client web \u00e8 stata rilasciata nel 2009. A quel tempo, il client web supportava 2 browser: Internet Explorer e Firefox. Nei piani iniziali era prevista anche la compatibilit\u00e0 con Opera, ma a causa di problemi insormontabili con i gestori della chiusura dell'applicazione in Opera (non era possibile monitorare con certezza al 100% la chiusura dell'applicazione e, in quel momento, eseguire la procedura di disconnessione dal server delle applicazioni 1C) si \u00e8 dovuto rinunciare a questi piani.<\/p>\n<h3>Struttura del progetto<\/h3>\n<p>\nIn totale, la piattaforma 1C:Enterprise comprende 4 progetti scritti in JavaScript:<\/p>\n<ol>\n<li>WebTools \u2013 librerie generali utilizzate dagli altri progetti (includiamo anche qui <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Google_Closure_Tools#Closure_Library\">Google Closure Library<\/a><\/noindex>).<\/li>\n<li>Controllo dell'elemento <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000785.htm\">Documento formattato<\/a><\/noindex> (implementato in JavaScript sia nel client sottile che nel client web)<\/li>\n<li>Controllo dell'elemento <noindex><a rel=\"nofollow\" href=\"https:\/\/wonderland.v8.1c.ru\/blog\/planirovshchik\/\">Pianificatore<\/a><\/noindex> (implementato in JavaScript sia nel client sottile che nel client web)<\/li>\n<li>Web client<\/li>\n<\/ol>\n<p>\nLa struttura di ciascun progetto ricorda la struttura dei progetti Java (o dei progetti .NET \u2013 a chi sta pi\u00f9 a cuore); abbiamo degli spazi dei nomi, e ogni spazio dei nomi si trova in una cartella separata. All'interno della cartella ci sono file e classi dello spazio dei nomi. Nel progetto del client web ci sono circa 1000 file.<\/p>\n<p>Strutturalmente, il client web \u00e8 generalmente suddiviso nelle seguenti sottosistemi:<\/p>\n<ul>\n<li>Interfaccia gestita dell'applicazione client\n<ul>\n<li>Interfaccia generale dell'applicazione (menu di sistema, pannelli)<\/li>\n<li>Interfaccia dei moduli gestiti, che include circa 30 controlli (pulsanti, diversi tipi di campi di input \u2013 testuali, numerici, data\/ora, ecc., tabelle, elenchi, grafici, ecc.)<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Modello ad oggetti accessibile agli sviluppatori sul client (oltre 400 tipi in totale: modello ad oggetti dell'interfaccia gestita, impostazioni di layout dei dati, formattazione condizionale, ecc.)<\/li>\n<li>Interprete del linguaggio incorporato 1C<\/li>\n<li>Estensioni del browser (utilizzate per funzionalit\u00e0 non supportate in JavaScript)\n<ul>\n<li>Lavorare con la crittografia<\/li>\n<li>Lavorare con i file<\/li>\n<li>Tecnologia dei componenti esterni, che consente di utilizzarli sia nel client leggero che nel web client<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<h3>Caratteristiche dello sviluppo<\/h3>\n<p>\nImplementare tutto quanto sopra in JavaScript non \u00e8 un compito facile. Il web client 1C \u00e8 forse una delle applicazioni client-side pi\u00f9 grandi scritte in JavaScript, con circa 450.000 righe. Utilizziamo attivamente un approccio orientato agli oggetti nel codice del web client, semplificando il lavoro con un progetto cos\u00ec grande.<\/p>\n<p>Per ridurre la dimensione del codice cliente, inizialmente abbiamo utilizzato il nostro obfuscator, ma a partire dalla versione della piattaforma 8.3.6 (ottobre 2014) abbiamo iniziato a usare <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Google_Closure_Tools#Closure_Compiler\">Google Closure Compiler<\/a><\/noindex>. L'effetto dell'uso in cifre \u2013 la dimensione del framework del client web dopo l'obfuscazione:<\/p>\n<ul>\n<li>Obfuscator proprietario \u2013 1556 kB<\/li>\n<li>Google Closure Compiler \u2013 1073 kB<\/li>\n<\/ul>\n<p>\nL'uso di Google Closure Compiler ci ha aiutato a migliorare le prestazioni del client web del 30% rispetto al nostro obfuscator. Inoltre, il consumo di memoria dell'applicazione \u00e8 diminuito del 15-25% (a seconda del browser).<\/p>\n<p>Google Closure Compiler funziona molto bene con il codice orientato agli oggetti, quindi la sua efficienza per il client web \u00e8 massima. Closure Compiler fa per noi diverse buone cose:<\/p>\n<ul>\n<li>Controllo statico dei tipi al momento della compilazione del progetto (ci\u00f2 \u00e8 garantito dal fatto che copriamo il codice con annotazioni JSDoc). Di conseguenza, otteniamo una tipizzazione statica molto simile a quella di C++. Questo aiuta a catturare un'alta percentuale di errori nella fase di compilazione del progetto.<\/li>\n<li>Riduzione della dimensione del codice attraverso l'obfuscazione<\/li>\n<li>Una serie di ottimizzazioni del codice eseguito, come ad esempio:\n<ul>\n<li>sostituzioni inline di funzioni. La chiamata di una funzione in JavaScript \u00e8 un'operazione abbastanza costosa, e le sostituzioni inline di metodi piccoli e frequentemente utilizzati accelerano notevolmente le prestazioni del codice.<\/li>\n<li>Calcolo delle costanti durante la fase di compilazione. Se un'espressione dipende da una costante, verr\u00e0 sostituito il valore reale della costante.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\nCome ambiente di sviluppo per il client web utilizziamo WebStorm.<\/p>\n<p>Per l'analisi del codice utilizziamo <noindex><a rel=\"nofollow\" href=\"http:\/\/www.sonarqube.org\/\">SonarQube<\/a><\/noindex>, dove integriamo analizzatori statici del codice. Con questi analizzatori monitoriamo la degradazione della qualit\u00e0 del codice sorgente in JavaScript e ci sforziamo di evitarla.<\/p>\n<p><img decoding=\"async\" alt=\"Sul web client 1C\" src=\"\/wp-content\/uploads\/2019\/04\/886fe89a8c12d29d940b6b59316ea627.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Quali problemi abbiamo risolto\/stiamo risolvendo<\/h3>\n<p>\nDurante l'implementazione del progetto ci siamo trovati di fronte a una serie di sfide interessanti che abbiamo dovuto affrontare.<\/p>\n<h4>Scambio di dati con il server e tra finestre<\/h4>\n<p>\nCi sono situazioni in cui l offuscamento del codice sorgente pu\u00f2 ostacolare il funzionamento del sistema. Un codice esterno rispetto a quello eseguito dal client web, a causa dell offuscamento, pu\u00f2 avere nomi di funzioni e parametri diversi da quelli che il nostro codice eseguito si aspetta. Il codice esterno per noi \u00e8:<\/p>\n<ul>\n<li>Codice che arriva dal server come dati strutturati<\/li>\n<li>Codice di un'altra finestra dell'applicazione<\/li>\n<\/ul>\n<p>\nPer evitare offuscamenti durante l'interazione con il server utilizziamo il tag @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>\nE per evitare offuscamenti durante l'interazione con altre finestre, utilizziamo quelli che chiamano interfacce esportabili (interfacce in cui tutti i metodi sono esportabili).<\/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>Abbiamo utilizzato il Virtual DOM prima che diventasse mainstream.<\/h4>\n<p>\nCome tutti gli sviluppatori che si occupano di interfacce Web complesse, abbiamo capito rapidamente che il DOM non \u00e8 adatto per lavorare con interfacce utente dinamiche. Quasi immediatamente \u00e8 stato implementato un equivalente del Virtual DOM per ottimizzare il lavoro con l'interfaccia utente. Durante l'elaborazione degli eventi, tutte le modifiche al DOM vengono memorizzate in memoria e, solo al termine di tutte le operazioni, le modifiche accumulate vengono applicate all'albero DOM.<\/p>\n<h4>Ottimizzazione delle prestazioni del web client<\/h4>\n<p>\nPer rendere pi\u00f9 veloce il nostro web client, cerchiamo di sfruttare al massimo le capacit\u00e0 native del browser (CSS, ecc.). Cos\u00ec, la barra degli strumenti dei moduli (presenti in praticamente ogni modulo dell'applicazione) viene disegnata esclusivamente con gli strumenti del browser, con layout dinamici basati su CSS.<\/p>\n<p><img decoding=\"async\" alt=\"Sul web client 1C\" src=\"\/wp-content\/uploads\/2019\/04\/116261ca79218eaa2bee9a4f5104092b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>Test<\/h4>\n<p>\nPer il test funzionale e il test delle prestazioni utilizziamo uno strumento sviluppato internamente (scritto in Java e C++), insieme a un insieme di test basati su <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Selenium\">Selenium<\/a><\/noindex>.<\/p>\n<p>Il nostro strumento \u00e8 versatile: consente di testare praticamente qualsiasi applicazione desktop, rendendolo adatto sia per il test di client leggeri che per il test di client web. Lo strumento registra le azioni dell'utente che avvia l'applicazione \"1C\" in un file di script. Allo stesso tempo, vengono registrate le immagini dell'area di lavoro dello schermo, che fungono da riferimenti. Durante il controllo delle nuove versioni del client web, gli script vengono eseguiti senza intervento dell'utente. Se uno screenshot non corrisponde al riferimento in un qualsiasi passaggio, il test viene considerato fallito, dopodich\u00e9 un esperto di qualit\u00e0 conduce un'indagine per verificare se si tratta di un errore o di una modifica pianificata del comportamento del sistema. In caso di comportamento pianificato, i riferimenti vengono automaticamente sostituiti con nuovi.<\/p>\n<p>Lo strumento esegue anche misurazioni delle prestazioni delle applicazioni con una precisione di 25 millisecondi. In alcuni casi, cicliamo parti dello script (ad esempio, ripetiamo pi\u00f9 volte l'inserimento di un ordine) per analizzare la degradazione dei tempi di esecuzione nel tempo. I risultati di tutte le misurazioni vengono registrati in un log per l'analisi.<\/p>\n<p><img decoding=\"async\" alt=\"Sul web client 1C\" src=\"\/wp-content\/uploads\/2019\/04\/058bab976becf6fd38b2ec668492043b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Il nostro strumento di test e l'applicazione testata<\/b><\/p>\n<p>Il nostro strumento e Selenium si completano a vicenda; ad esempio, se un pulsante su uno degli schermi cambia posizione, Selenium potrebbe non riuscire a tracciarlo, ma il nostro strumento lo noter\u00e0, poich\u00e9 esegue un confronto pixel per pixel dello screenshot con il riferimento. Inoltre, lo strumento \u00e8 in grado di rilevare problemi con la gestione dell'input da tastiera o mouse, poich\u00e9 \u00e8 proprio questo che riproduce.<\/p>\n<p>I test both tools (ours and Selenium) running standard operation scenarios from our applications. The tests are automatically triggered after the daily build of the \"1C:Enterprise\" platform. If there is a slowdown in the execution of scenarios (compared to the previous build), we investigate and eliminate the cause of the slowdown. Our criterion is simple: the new build must not operate slower than the previous one.<\/p>\n<p>To investigate incidents of slowdown, developers use various tools; the main one used is <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> produced by <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Dynatrace\">DynaTrace<\/a><\/noindex>. Viene condotta la registrazione dei log delle operazioni problematiche sia sulla versione precedente che su quella nuova, successivamente i log vengono analizzati. In questo caso, il tempo di esecuzione delle singole operazioni (in millisecondi) potrebbe non essere un fattore decisivo: nel browser vengono occasionalmente avviati processi di servizio come la pulizia della memoria, che possono sovrapporsi al tempo di esecuzione delle funzioni e distorcere il quadro. Parametri pi\u00f9 rilevanti in questo caso saranno il numero di istruzioni JavaScript eseguite, il numero di operazioni atomiche sul DOM, ecc. Se il numero di istruzioni\/operazioni nello stesso scenario nella nuova versione \u00e8 aumentato, questo quasi sempre indica una diminuzione delle prestazioni che necessita di correzione.<\/p>\n<p>Anche una delle cause della diminuzione delle prestazioni pu\u00f2 essere che Google Closure Compiler non \u00e8 riuscito a effettuare per qualche motivo la sostituzione inline della funzione (ad esempio, perch\u00e9 la funzione \u00e8 ricorsiva o virtuale). In questo caso, cerchiamo di risolvere la situazione riscrivendo il codice sorgente.<\/p>\n<h3>Estensioni del browser<\/h3>\n<p>\nNel caso in cui la soluzione applicativa richieda funzionalit\u00e0 non disponibili in JavaScript, utilizziamo estensioni del browser:<\/p>\n<ul>\n<li>per lavorare con i file<\/li>\n<li>per lavorare con la crittografia<\/li>\n<li>lavorare con <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000545.htm\">componenti esterni<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nLe nostre estensioni sono costituite da due parti. La prima parte \u00e8 quella che viene chiamata estensione del browser (di norma, estensioni scritte in JavaScript per Chrome e Firefox), che interagisce con la seconda parte: l'estensione binaria, che implementa la funzionalit\u00e0 di cui abbiamo bisogno. \u00c8 importante menzionare che scriviamo 3 versioni di estensioni binarie \u2013 per Windows, Linux e MacOS. L'estensione binaria \u00e8 fornita con la piattaforma 1C:Enterprise ed \u00e8 situata sul server delle applicazioni 1C. Allo primo avvio dal client web, viene scaricata sul computer client e installata nel browser.<\/p>\n<p>Durante l'uso di Safari, le nostre estensioni utilizzano NPAPI, mentre con Internet Explorer sfruttano la tecnologia ActiveX. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Microsoft_Edge\">Microsoft Edge<\/a><\/noindex> non supporta ancora le estensioni, quindi il client web funziona con limitazioni.<\/p>\n<h3>Sviluppo futuro<\/h3>\n<p>\nUno dei gruppi di compiti per il team di sviluppo del client web \u00e8 quello di migliorare ulteriormente le funzionalit\u00e0. Le funzionalit\u00e0 del client web devono essere identiche a quelle del client sottile; tutte le nuove funzionalit\u00e0 vengono implementate simultaneamente nei client sottile e web.<\/p>\n<p>Altri compiti includono lo sviluppo dell'architettura, il refactoring, e l'aumento delle prestazioni e dell'affidabilit\u00e0. Ad esempio, una delle direzioni \u00e8 il passaggio verso un modello di lavoro asincrono. Attualmente, alcune funzionalit\u00e0 del client web sono basate su un modello di interazione sincrona con il server. Il modello asincrono sta diventando sempre pi\u00f9 rilevante nei browser (e non solo) e questo ci costringe a modificare il client web sostituendo le chiamate sincrone con chiamate asincrone e a rifattorizzare il codice di conseguenza. Il passaggio graduale al modello asincrono \u00e8 spiegato dalla necessit\u00e0 di supportare le soluzioni rilasciate e di adattarle progressivamente.<br \/>\n<br \/>Fonte: <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 4.9.10 - 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 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\" \/>\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\/it\/blog\/administrirovanie\/pro-veb-klient-1s__trashed\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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 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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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\udd47Su 1C Web Client | ProHoster","description":"Una delle caratteristiche pi\u00f9 piacevoli della tecnologia 1C:Enterprise \u00e8 che la soluzione applicativa, sviluppata con la tecnologia delle forme gestite, pu\u00f2 essere eseguita sia in client leggero (eseguibile) su Windows, Linux, MacOS X, sia come client web su 5 browser \u2013 Chrome, Internet Explorer, Firefox, Safari, Edge, il tutto senza modificare il codice sorgente dell'applicazione. Inoltre, esternamente","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/pro-veb-klient-1s__trashed","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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 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","og:url":"https:\/\/prohoster.info\/it\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/32465","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=32465"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/32465\/revisions"}],"predecessor-version":[{"id":173305,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/32465\/revisions\/173305"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/24269"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=32465"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=32465"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=32465"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}