{"id":32475,"date":"2019-10-31T21:47:15","date_gmt":"2019-10-31T18:47:15","guid":{"rendered":"https:\/\/prohoster.info\/blog\/platforma-1s-predpriyatie-chto-pod-kapotom\/"},"modified":"2019-10-31T21:47:15","modified_gmt":"2019-10-31T18:47:15","slug":"platforma-1s-predpriyatie-chto-pod-kapotom","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom","title":{"rendered":"Piattaforma \"1C: Enterprise\" \u2014 cosa c'\u00e8 sotto il cofano?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao, Habr! <br \/>\nIn questo articolo inizieremo a raccontare come \u00e8 organizzata internamente <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Platform.htm\">la piattaforma \u00ab1C:Enterprise 8\u00bb<\/a><\/noindex> e quali tecnologie vengono utilizzate nel suo sviluppo.<\/p>\n<p><img decoding=\"async\" alt=\"Piattaforma &quot;1C: Enterprise&quot; \u2014 cosa c&#039;\u00e8 sotto il cofano?\" src=\"\/wp-content\/uploads\/2019\/04\/9375ea3be32979a7d8c72239dfd50f07.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPerch\u00e9 consideriamo interessante questo argomento? In primo luogo, perch\u00e9 la piattaforma \u00ab1C:Enterprise 8\u00bb \u00e8 un grande (oltre 10 milioni di righe di codice) applicativo in C++ (client, server, ecc.), JavaScript (client web) e, da poco, anche <noindex><a rel=\"nofollow\" href=\"http:\/\/www.1c.ru\/news\/info.jsp?id=19821\">Java<\/a><\/noindex>. I grandi progetti sono interessanti almeno per la loro portata, poich\u00e9 questioni che passano inosservate in una piccola base di codice diventano evidenti in questi progetti. In secondo luogo, \u00ab1C:Enterprise\u00bb \u00e8 un prodotto commercializzabile, e ci sono poche articoli su tali sviluppi su Habrahabr. Inoltre, \u00e8 sempre interessante scoprire come lavorano altre squadre e aziende.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nDunque, iniziamo. In questo articolo forniremo una panoramica di alcune tecnologie utilizzate nella piattaforma, delineando il panorama senza approfondire la realizzazione. Infatti, per molti meccanismi una descrizione dettagliata richiederebbe un articolo a parte, e per alcuni \u2014 un intero libro!<br \/>\nPer cominciare, \u00e8 importante chiarire alcuni aspetti fondamentali: cos'\u00e8 la piattaforma \"1C:Enterprise\" e quali componenti la costituiscono. La risposta a questa domanda non \u00e8 semplice, poich\u00e9 con il termine \"Piattaforma\" (per brevit\u00e0, la chiameremo cos\u00ec) si intendono sia uno strumento di sviluppo di applicazioni aziendali, sia un ambiente di esecuzione e sia strumenti di amministrazione. Si possono distinguere, in modo approssimativo, i seguenti componenti:<\/p>\n<ul>\n<li>cluster di server<\/li>\n<li>\"client leggero\" capace di connettersi al server tramite http e un proprio protocollo binario<\/li>\n<li>client per operare in architettura a due livelli con il database situato su disco rigido o in una cartella di rete<\/li>\n<li>web client<\/li>\n<li>strumenti di amministrazione del server delle applicazioni<\/li>\n<li>ambiente di sviluppo (noto come Configuratore)<\/li>\n<li>ambiente di esecuzione per iOS, Android e Windows Phone (piattaforma mobile 1C)<\/li>\n<\/ul>\n<p>\nTutti questi elementi, ad eccezione del web client, sono scritti in C++. Inoltre, \u00e8 stato recentemente annunciato il <noindex><a rel=\"nofollow\" href=\"http:\/\/www.1c.ru\/news\/info.jsp?id=19821\">Configuratore di nuova generazione<\/a><\/noindex>, scritto in Java.<\/p>\n<h3>Applicazioni native<\/h3>\n<p>\nPer lo sviluppo di applicazioni native utilizziamo C++03. Su Windows viene utilizzato Microsoft Visual C++ 12 (profilo compatibile con Windows XP), mentre su Linux e Android si usa gcc 4.8, e su iOS \u2013 clang 5.0. La libreria standard \u00e8 unica per tutti i sistemi operativi e compilatori \u2013 STLPort. Questa soluzione riduce la probabilit\u00e0 di errori specifici dell'implementazione di STL. Attualmente stiamo pianificando il passaggio all'implementazione di STL fornita con CLang, poich\u00e9 STLPort ha cessato il suo sviluppo ed \u00e8 incompatibile con la modalit\u00e0 di supporto C++11 attivata in gcc.<br \/>\nLa base di codice del server \u00e8 comune al 99%, quella del client al 95%. Inoltre, anche la piattaforma mobile utilizza lo stesso codice C++ della \"grande\" piattaforma, sebbene il grado di unificazione sia leggermente inferiore. <br \/>\nCome la maggior parte degli utenti di C++, non pretendiamo di utilizzare il 100% delle funzionalit\u00e0 del linguaggio e delle sue librerie. Ad esempio, non utilizziamo praticamente Boost e, tra le capacit\u00e0 del linguaggio, ci serve solo il casting dinamico dei tipi. Tuttavia, usiamo attivamente:<\/p>\n<ul>\n<li>STL (in particolare, stringhe, contenitori e algoritmi)<\/li>\n<li>ereditariet\u00e0 multipla, inclusa l'ereditariet\u00e0 multipla di implementazione<\/li>\n<li>template<\/li>\n<li>eccezioni<\/li>\n<li>puntatori intelligenti (implementazione proprietaria)<\/li>\n<\/ul>\n<p>\nL'uso dell'ereditariet\u00e0 multipla delle interfacce (classi completamente astratte) rende possibile un modello a componenti, di cui parleremo pi\u00f9 avanti.<\/p>\n<h3>Componenti<\/h3>\n<p>\nPer garantire la modularit\u00e0, tutta la funzionalit\u00e0 \u00e8 suddivisa in componenti che si presentano come librerie dinamiche (*.dll per Windows, *.so per Linux). Ci sono oltre centocinquanta componenti, diamo una descrizione di alcuni di essi:<\/p>\n<p>backend<br \/>\nContiene il \u00abmotore\u00bb dei metadati della piattaforma<\/p>\n<p>accnt<br \/>\nOggetti che gli sviluppatori applicativi utilizzano per costruire la contabilit\u00e0 (piani dei conti e registri contabili)<\/p>\n<p>bsl<br \/>\nMotore di esecuzione del linguaggio incorporato<\/p>\n<p>nuke<br \/>\nImplementazione proprietaria dell'allocatore di memoria<\/p>\n<p>dbeng8<br \/>\nMotore della base dati file. Macchina di database file-server semplice, basata su ISAM, che include anche un semplice processore SQL<\/p>\n<p>wbase<br \/>\nContiene classi e funzioni di base per l'implementazione dell'interfaccia utente di Windows \u2014 classi delle finestre, accesso a GDI, ecc.<\/p>\n<p>\nLa suddivisione in vari componenti \u00e8 utile da diversi punti di vista:<\/p>\n<ul>\n<li>La divisione contribuisce a una migliore progettazione, in particolare a una maggiore isolamento del codice<\/li>\n<li>Dal set di componenti \u00e8 possibile assemblare vari modelli di fornitura in modo flessibile:\n<ul>\n<li>Ad esempio, l'installazione di un thin client includer\u00e0 wbase, ma non includer\u00e0 il backend.<\/li>\n<li>E sul server wbase, al contrario, non sar\u00e0 presente.<\/li>\n<li>Entrambi i modelli conterranno, ovviamente, nuke e bsl.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\nTutti i componenti necessari per questo modello di avvio vengono caricati all'avvio del programma. Questo \u00e8, in particolare, necessario per la registrazione delle classi SCOM, di cui si parler\u00e0 pi\u00f9 avanti.<\/p>\n<h3>SCOM<\/h3>\n<p>\nPer la decomposizione a un livello pi\u00f9 basso viene utilizzato il sistema SCOM, simile per ideologia alla libreria ATL. Per coloro che non hanno mai lavorato con ATL, elenchiamo brevemente le principali funzionalit\u00e0 e caratteristiche. <br \/>\nPer una classe SCOM appositamente definita:<\/p>\n<ul>\n<li>Fornisce metodi factory che consentono di creare una classe da un altro componente conoscendo solo il suo nome (senza rivelare l'implementazione).<\/li>\n<li>Fornisce un'infrastruttura per smart pointer con conteggio dei riferimenti. Non \u00e8 necessario monitorare manualmente il ciclo di vita della classe SCOM.<\/li>\n<li>Permette di verificare se un oggetto implementa un'interfaccia specifica e di convertire automaticamente un puntatore all'oggetto in un puntatore all'interfaccia.<\/li>\n<li>Creare un oggetto-servizio sempre disponibile tramite il metodo get_service, e cos\u00ec via.<\/li>\n<\/ul>\n<p>\nAd esempio, \u00e8 possibile descrivere nella componente json.dll una classe per la lettura di JSON (ad esempio, JSONStreamReader).<br \/>\nLe classi e le istanze possono essere create da altre componenti che devono essere registrate nella macchina SCOM:<\/p>\n<pre><code class=\"cpp\">SCOM_CLASS_ENTRY(JSONStreamReader)\n<\/code><\/pre>\n<p>\nQuesto macro descriver\u00e0 una speciale classe registratrice statica, il cui costruttore verr\u00e0 chiamato al caricamento della componente in memoria.<br \/>\nDopo ci\u00f2, \u00e8 possibile creare la sua istanza in un'altra componente:<\/p>\n<pre><code class=\"cpp\">IJSONStreamReaderPtr jsonReader = create_instance&lt;IJSONStreamReader&gt;(SCOM_CLSIDOF(JSONStreamReader));\n<\/code><\/pre>\n<p>\nPer supportare i servizi, SCOM offre un'infrastruttura aggiuntiva, abbastanza complessa. Centrale in essa \u00e8 il concetto di processo SCOM, che funge da contenitore per i servizi in esecuzione (cio\u00e8 svolge il ruolo di Service Locator) e contiene anche il legame con le risorse localizzabili. Il processo SCOM \u00e8 legato al thread del sistema operativo. Grazie a ci\u00f2, all'interno dell'applicazione \u00e8 possibile ottenere i servizi in questo modo:<\/p>\n<pre><code class=\"cpp\">SCOM_Process* process = core::current_process();\nif (process)\n         return get_service&lt;IMyService&gt;(process);\n<\/code><\/pre>\n<p>\nInoltre, passando ai processi logici (SCOM) legati al flusso, si possono ottenere fondamentalmente indipendenti dal punto di vista dello spazio informativo delle applicazioni, eseguiti all'interno dello stesso flusso. Questo \u00e8 il funzionamento del nostro client snello, che lavora con il database di file: all'interno di un unico processo OS ci sono due processi SCOM, uno associato al client e l'altro al server. Questo approccio consente di uniformare la scrittura del codice, che funzioner\u00e0 sia su un database di file locale che in una vera architettura client-server. Il prezzo per questa uniformit\u00e0 sono le overhead, ma la pratica dimostra che ne vale la pena.<\/p>\n<p>La logica aziendale e la parte interfaccia di 1C: Enterprise sono implementate sulla base di un modello a componenti SCOM.<\/p>\n<h3>Interfaccia utente<\/h3>\n<p>\nA proposito di interfacce. Non utilizziamo i controlli standard di Windows, i nostri elementi di controllo sono implementati direttamente sull'API di Windows. Per la versione Linux \u00e8 stato creato uno strato che lavora attraverso la libreria wxWidgets.<br \/>\nLa libreria degli elementi di controllo \u00e8 indipendente dalle altre parti di \"1C:Enterprise\" e viene utilizzata anche in altre piccole utility interne.<\/p>\n<p>Nel corso degli anni, l'aspetto dei controlli di 1C:Enterprise \u00e8 cambiato, ma un cambiamento significativo nei principi si \u00e8 verificato solo una volta, nel 2009, con il rilascio della versione 8.2 e l'introduzione delle \"package forms\". Oltre alla modifica dell'aspetto estetico, il principio di layout del modulo \u00e8 stato radicalmente cambiato: si \u00e8 abbandonata la posizione pixel-per-pixel degli elementi a favore di un layout a flusso. Inoltre, nel nuovo modello, i controlli non operano pi\u00f9 direttamente con gli oggetti di dominio, ma con speciali DTO (<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/DTO\">Data Transfer Objects<\/a><\/noindex>).<br \/>\nQuesti cambiamenti hanno consentito di creare un client web per \"1C:Enterprise\" che replica la logica dei controlli in C++ utilizzando JavaScript. Ci sforziamo di mantenere l'equivalenza funzionale tra client thin e web. Quando ci\u00f2 non \u00e8 possibile, ad esempio a causa delle limitazioni delle API disponibili in JavaScript (come le capacit\u00e0 di gestione dei file che sono molto limitate), spesso implementiamo la funzionalit\u00e0 necessaria tramite estensioni del browser scritte in C++. Attualmente supportiamo Internet Explorer e Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows e Linux) e Safari (MacOS).<\/p>\n<p>Inoltre, la tecnologia delle forme gestite viene utilizzata per creare l'interfaccia delle applicazioni mobili sulla piattaforma 1C. Su dispositivi mobili, il rendering dei controlli \u00e8 implementato utilizzando tecnologie 'native' per il sistema operativo, ma per la logica di layout delle forme e le reazioni dell'interfaccia si utilizza lo stesso codice della 'grande' piattaforma '1C:Enterprise'.<\/p>\n<p><img decoding=\"async\" alt=\"Piattaforma &quot;1C: Enterprise&quot; \u2014 cosa c&#039;\u00e8 sotto il cofano?\" src=\"\/wp-content\/uploads\/2019\/04\/a4a87ca99cef465e82429739a8845300.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Interfaccia 1C su OS Linux<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Piattaforma &quot;1C: Enterprise&quot; \u2014 cosa c&#039;\u00e8 sotto il cofano?\" src=\"\/wp-content\/uploads\/2019\/04\/23f48ade4e28242104bfd4e9099800e2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Interfaccia 1C su dispositivo mobile<\/i><\/p>\n<p><b class=\"spoiler_title\">Interfaccia 1C su altre piattaforme<\/b> <img decoding=\"async\" alt=\"Piattaforma &quot;1C: Enterprise&quot; \u2014 cosa c&#039;\u00e8 sotto il cofano?\" src=\"\/wp-content\/uploads\/2019\/04\/d04d2431d8c5240d44acce675d837018.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Interfaccia 1C su OS Windows<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Piattaforma &quot;1C: Enterprise&quot; \u2014 cosa c&#039;\u00e8 sotto il cofano?\" src=\"\/wp-content\/uploads\/2019\/04\/a443f6e2d1cb95e256e0dcff4fe139d2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Interfaccia 1C - client web<\/i><\/p>\n<p><\/p>\n<h3>Open source<\/h3>\n<p>\nSebbene non utilizziamo le librerie standard per sviluppatori C++ su Windows (MFC, controlli da WinAPI), non scriviamo noi stessi tutti i componenti. \u00c8 gi\u00e0 stata menzionata la libreria <noindex><a rel=\"nofollow\" href=\"http:\/\/www.wxwidgets.org\/\">wxWidgets<\/a><\/noindex>, e utilizziamo anche:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/curl.haxx.se\/libcurl\/\">cURL<\/a><\/noindex> per lavorare con HTTP e FTP. <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/openssl.org\/\">OpenSSL<\/a><\/noindex> per la crittografia e la configurazione delle connessioni TLS<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.xmlsoft.org\/\">libxml2 e libxslt<\/a><\/noindex> per il parsing XML<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dinhviethoa\/libetpan\">libetpan<\/a><\/noindex> per lavorare con i protocolli di posta (POP3, SMTP, IMAP)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.codesink.org\/mimetic_mime_library.html\">mimetic<\/a><\/noindex> per il parsing dei messaggi di posta elettronica<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.sqlite.org\/\">sqllite<\/a><\/noindex> per memorizzare i log delle attivit\u00e0 degli utenti<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/site.icu-project.org\/\">ICU<\/a><\/noindex> per l'internazionalizzazione<\/li>\n<\/ul>\n<p>\nLa lista potrebbe continuare.<br \/>\nInoltre, utilizziamo versioni fortemente modificate di <noindex><a rel=\"nofollow\" href=\"http:\/\/code.google.com\/p\/googletest\/\">Google Test<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"http:\/\/code.google.com\/p\/googlemock\/\">Google Mock<\/a><\/noindex> nella creazione di unit test.<br \/>\nLe librerie hanno richiesto adattamenti per garantire la compatibilit\u00e0 con il modello SCOM dell'organizzazione dei componenti.<br \/>\nLa diffusione di 1C rende la piattaforma un ottimo collaudo per le librerie usate. La variet\u00e0 di utenti e scenari scova rapidamente errori anche nelle parti di codice meno utilizzate. Noi li correggiamo e cerchiamo di restituirli agli autori delle librerie. L\u2019esperienza di interazione risulta molto varia.<br \/>\nGli sviluppatori <noindex><a rel=\"nofollow\" href=\"http:\/\/curl.haxx.se\/libcurl\/\">cURL<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dinhviethoa\/libetpan\">libetpan<\/a><\/noindex> rispondono rapidamente alle pull request, ma il patch, ad esempio, in <noindex><a rel=\"nofollow\" href=\"http:\/\/openssl.org\/\">OpenSSL<\/a><\/noindex> non siamo riusciti a restituirlo.<\/p>\n<h3>Conclusione<\/h3>\n<p>\nNell'articolo abbiamo toccato alcuni aspetti fondamentali dello sviluppo della piattaforma '1C: Enterprise'. Nel limitato volume dell'articolo abbiamo trattato solo alcuni aspetti che riteniamo interessanti. <br \/>\nUna descrizione generale dei vari meccanismi della piattaforma pu\u00f2 essere consultata <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Platform.htm\">qui<\/a><\/noindex>.<br \/>\nQuali argomenti sarebbero di suo interesse per i prossimi articoli?<\/p>\n<p>Come \u00e8 realizzata la piattaforma mobile 1C?<br \/>\nDescrizione della struttura interna del client web? <br \/>\nO, forse, le interessa il processo di selezione delle funzionalit\u00e0 per le nuove versioni, sviluppo e test?<\/p>\n<p>Scrivi nei commenti!<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/269611\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u00ab1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 8\u00bb \u0438 \u043a\u0430\u043a\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0435\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e? \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u00ab1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 8\u00bb \u2014 \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 (\u0431\u043e\u043b\u0435\u0435 10 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430) \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 C++ (\u043a\u043b\u0438\u0435\u043d\u0442, \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0442.\u0434.), JavaScript (\u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442), \u0438, \u0441 \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24279,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32475","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=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u00ab1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 8\u00bb \u0438 \u043a\u0430\u043a\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0435\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e? \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u00ab1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 8\u00bb \u2014 \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 (\u0431\u043e\u043b\u0435\u0435 10 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430) \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 C++ (\u043a\u043b\u0438\u0435\u043d\u0442, \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0442.\u0434.), JavaScript (\u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442), \u0438, \u0441 \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445\" \/>\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\/platforma-1s-predpriyatie-chto-pod-kapotom\" \/>\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\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u00ab1\u0421: \u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435\u00bb \u2014 \u0447\u0442\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u00ab1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 8\u00bb \u0438 \u043a\u0430\u043a\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0435\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e? \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u00ab1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 8\u00bb \u2014 \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 (\u0431\u043e\u043b\u0435\u0435 10 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430) \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 C++ (\u043a\u043b\u0438\u0435\u043d\u0442, \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0442.\u0434.), JavaScript (\u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442), \u0438, \u0441 \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom\" \/>\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:15+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:47:15+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\udd47Piattaforma \u00ab1C: Enterprise\u00bb \u2014 cosa c'\u00e8 sotto il cofano? | ProHoster","description":"Ciao, Habr! In questo articolo inizieremo a parlare di come \u00e8 strutturata internamente la piattaforma \u00ab1C:Enterprise 8\u00bb e quali tecnologie vengono utilizzate per il suo sviluppo. Perch\u00e9 riteniamo che sia interessante? In primo luogo, perch\u00e9 la piattaforma \u00ab1C:Enterprise 8\u00bb \u00e8 una grande applicazione (oltre 10 milioni di righe di codice) scritta in C++ (client, server, ecc.), JavaScript (client web) e, da poco,","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom","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\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u00ab1\u0421: \u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435\u00bb \u2014 \u0447\u0442\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c? | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u00ab1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 8\u00bb \u0438 \u043a\u0430\u043a\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0435\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e? \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u00ab1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 8\u00bb \u2014 \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 (\u0431\u043e\u043b\u0435\u0435 10 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430) \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 C++ (\u043a\u043b\u0438\u0435\u043d\u0442, \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0442.\u0434.), JavaScript (\u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442), \u0438, \u0441 \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom","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:15+00:00","article:modified_time":"2019-10-31T18:47:15+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32475","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:03: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:03:20"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/32475","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=32475"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/32475\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/24279"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=32475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=32475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=32475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}