{"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\/sv\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom","title":{"rendered":"Plattformen \"1C: Enterprise\" \u2013 vad finns under ytan?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej, Habr! <br \/>\nI den h\u00e4r artikeln b\u00f6rjar vi ber\u00e4tta om hur den \u00e4r strukturerad inuti <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Platform.htm\">plattformen \"1C:Enterprise 8\"<\/a><\/noindex> och vilka teknologier som anv\u00e4nds vid dess utveckling.<\/p>\n<p><img decoding=\"async\" alt=\"Plattformen &quot;1C: Enterprise&quot; \u2013 vad finns under ytan?\" src=\"\/wp-content\/uploads\/2019\/04\/9375ea3be32979a7d8c72239dfd50f07.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVarf\u00f6r anser vi att detta \u00e4r intressant? F\u00f6r det f\u00f6rsta eftersom plattformen \"1C:Enterprise 8\" \u00e4r en stor (mer \u00e4n 10 miljoner kodrader) applikation skriven i C++ (klient, server osv.), JavaScript (webbklient), och, nyligen \u00e4ven <noindex><a rel=\"nofollow\" href=\"http:\/\/www.1c.ru\/news\/info.jsp?id=19821\">Java<\/a><\/noindex>. Stora projekt kan vara intressanta just p\u00e5 grund av sin omfattning, \u00e4ven om fr\u00e5gor som g\u00e5r obem\u00e4rkt f\u00f6rbi i en liten kodbas blir framtr\u00e4dande i s\u00e5dana projekt. F\u00f6r det andra \u00e4r \"1C:Enterprise\" en reproducerbar, \"boxad\" produkt, och det finns inte m\u00e5nga artiklar om s\u00e5dana utvecklingar p\u00e5 Habr\u00e9. Dessutom \u00e4r det alltid intressant att veta hur det g\u00e5r till i andra team och f\u00f6retag.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nS\u00e5, l\u00e5t oss b\u00f6rja. I den h\u00e4r artikeln ger vi en \u00f6versikt \u00f6ver vissa teknologier som anv\u00e4nds p\u00e5 plattformen, vi skisserar landskapet utan att g\u00e5 djupt in i implementationen. M\u00e5nga mekanismer skulle kr\u00e4va en detaljerad ber\u00e4ttelse som skulle fylla en egen artikel, och f\u00f6r vissa \u2013 en hel bok!<br \/>\nF\u00f6r att b\u00f6rja m\u00e5ste vi klarg\u00f6ra grundl\u00e4ggande saker \u2013 vad \u00e4r plattformen \"1C:Enterprise\" och av vilka komponenter best\u00e5r den? Svaret p\u00e5 denna fr\u00e5ga \u00e4r inte s\u00e5 enkelt, eftersom termen \"Plattform\" (f\u00f6r kort kommer vi att kalla den s\u00e5) omfattar b\u00e5de verktyget f\u00f6r att utveckla aff\u00e4rsapplikationer, runtime-milj\u00f6n, och administrationsverktygen. Man kan grovt dela upp f\u00f6ljande komponenter:<\/p>\n<ul>\n<li>kluster av servrar<\/li>\n<li>\"tunn\" klient som kan ansluta till servern via http och eget bin\u00e4rt protokoll<\/li>\n<li>klient f\u00f6r arbete i en tv\u00e5ledsarkitektur med en databas, placerad p\u00e5 h\u00e5rddisken eller i en n\u00e4tverksmapp<\/li>\n<li>webbklient<\/li>\n<li>administrationsverktyg f\u00f6r applikationsservern<\/li>\n<li>utvecklingsmilj\u00f6 (k\u00e4nd som Konfigurator)<\/li>\n<li>k\u00f6rmilj\u00f6 f\u00f6r iOS, Android och Windows Phone (mobil plattform 1C)<\/li>\n<\/ul>\n<p>\nAlla dessa delar, f\u00f6rutom webbklienten, \u00e4r skrivna i C++. Dessutom finns det en nyligen tillk\u00e4nnagiven <noindex><a rel=\"nofollow\" href=\"http:\/\/www.1c.ru\/news\/info.jsp?id=19821\">Konfigurator av n\u00e4sta generation<\/a><\/noindex>, skriven i Java.<\/p>\n<h3>Inbyggda applikationer<\/h3>\n<p>\nF\u00f6r utvecklingen av inhemska applikationer anv\u00e4nds C++03. P\u00e5 Windows anv\u00e4nds Microsoft Visual C++ 12 som kompilator (profil som \u00e4r kompatibel med Windows XP), medan gcc 4.8 anv\u00e4nds f\u00f6r Linux och Android, och clang 5.0 anv\u00e4nds f\u00f6r iOS. Den standardbibliotek som anv\u00e4nds \u00e4r gemensamt f\u00f6r alla OS och kompilatorer - STLPort. Detta beslut minskar sannolikheten f\u00f6r fel som \u00e4r specifika f\u00f6r STL-implementeringen. F\u00f6r n\u00e4rvarande planerar vi att \u00f6verg\u00e5 till den STL-implementation som levereras med CLang, eftersom STLPort har upph\u00f6rt att utvecklas och \u00e4r inkompatibel med det aktiverade C++11-st\u00f6det i gcc.<br \/>\nServerns kodbas \u00e4r gemensam till 99 %, medan klienten \u00e4r gemensam till cirka 95 %. Dessutom anv\u00e4nder \u00e4ven mobilplattformen samma C++-kod som \u201dden stora\u201d, \u00e4ven om graden av enhetlighet \u00e4r n\u00e5got l\u00e4gre. <br \/>\nPrecis som de flesta C++-anv\u00e4ndare g\u00f6r vi inte anspr\u00e5k p\u00e5 att anv\u00e4nda 100 % av spr\u00e5kets och dess bibliotekens m\u00f6jligheter. Vi anv\u00e4nder till exempel praktiskt taget inte Boost, och av spr\u00e5kets m\u00f6jligheter anv\u00e4nder vi dynamisk typkonvertering. Samtidigt till\u00e4mpar vi aktivt:<\/p>\n<ul>\n<li>STL (i synnerhet str\u00e4ngar, beh\u00e5llare och algoritmer)<\/li>\n<li>flert\u00e4rning, inklusive flert\u00e4rning av implementeringar<\/li>\n<li>mallar<\/li>\n<li>hot swap av kod<\/li>\n<li>kloka pekare (egen implementation)<\/li>\n<\/ul>\n<p>\nGenom att anv\u00e4nda flert\u00e4rning av gr\u00e4nssnitt (helt abstrakta klasser) blir det m\u00f6jligt med en komponentmodell, som vi kommer att diskutera nedan.<\/p>\n<h3>Komponenter<\/h3>\n<p>\nF\u00f6r att s\u00e4kerst\u00e4lla modularitet \u00e4r all funktionalitet uppdelad i komponenter, som representerar dynamiska bibliotek (*.dll f\u00f6r Windows, *.so - f\u00f6r Linux). Det finns \u00f6ver ett och ett halvt hundra komponenter, och vi ger en beskrivning av n\u00e5gra av dem:<\/p>\n<p>backend<br \/>\nInneh\u00e5ller plattformens metadata \"motor\".<\/p>\n<p>accnt<br \/>\nObjekt som applikationsutvecklare anv\u00e4nder f\u00f6r att bygga bokf\u00f6ring (kontoplaner och redovisningsregister)<\/p>\n<p>bsl<br \/>\nMotor f\u00f6r exekvering av det inbyggda spr\u00e5ket.<\/p>\n<p>nuke<br \/>\nEgen implementation av minnesallokator.<\/p>\n<p>dbeng8<br \/>\nFilbaserad databasmotor. En enkel filserverdatabas, baserad p\u00e5 ISAM, som ocks\u00e5 inkluderar en enkel SQL-processor.<\/p>\n<p>wbase<br \/>\nInneh\u00e5ller grundklasser och funktioner f\u00f6r att implementera anv\u00e4ndargr\u00e4nssnittet i Windows \u2013 f\u00f6nsterklasser, \u00e5tkomst till GDI, osv.<\/p>\n<p>\nUppdelningen i flera komponenter \u00e4r f\u00f6rdelaktig ur flera synvinklar:<\/p>\n<ul>\n<li>Uppdelningen fr\u00e4mjar b\u00e4ttre design, s\u00e4rskilt b\u00e4ttre kodisolering.<\/li>\n<li>Fr\u00e5n upps\u00e4ttningen av komponenter kan man flexibelt sammanst\u00e4lla olika leveransalternativ:\n<ul>\n<li>Till exempel kommer installationen av en tunn klient att inneh\u00e5lla wbase, men inte backend.<\/li>\n<li>Och p\u00e5 servern kommer wbase \u00e5 sin sida inte att finnas.<\/li>\n<li>B\u00e5da alternativen kommer sj\u00e4lvklart att inneh\u00e5lla nuke och bsl.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\nAlla komponenter som beh\u00f6vs f\u00f6r detta startalternativ laddas vid programstart. Detta \u00e4r s\u00e4rskilt viktigt f\u00f6r registrering av SCOM-klasser, som vi kommer att diskutera nedan.<\/p>\n<h3>SCOM<\/h3>\n<p>\nF\u00f6r dekomponering p\u00e5 en l\u00e4gre niv\u00e5 anv\u00e4nds SCOM-systemet \u2013 liknande i ideologi med ATL-biblioteket. F\u00f6r dem som inte har arbetat med ATL, h\u00e4r \u00e4r en kort sammanst\u00e4llning av de viktigaste m\u00f6jligheterna och funktionerna. <br \/>\nF\u00f6r en s\u00e4rskilt utformad SCOM-klass:<\/p>\n<ul>\n<li>Ger fabriksmetoder som g\u00f6r att man kan skapa en klass fr\u00e5n en annan komponent, med endast namnet k\u00e4nt (utan avsl\u00f6jande av implementationen).<\/li>\n<li>Ger infrastruktur f\u00f6r smarta pekare med referensr\u00e4kning. Man beh\u00f6ver inte \u00f6vervaka livsl\u00e4ngden av SCOM-klassen manuellt.<\/li>\n<li>M\u00f6jligg\u00f6r att samma objekt om det implementerar ett visst gr\u00e4nssnitt och automatiskt konverterar pekaren till objektet till en pekare p\u00e5 gr\u00e4nssnittet.<\/li>\n<li>Skapa ett tj\u00e4nsteobjekt som alltid \u00e4r tillg\u00e4ngligt via metoden get_service osv.<\/li>\n<\/ul>\n<p>\nTill exempel kan man i komponenten json.dll beskriva en klass f\u00f6r att l\u00e4sa JSON (t.ex. JSONStreamReader).<br \/>\nKlasser, instanser kan skapas fr\u00e5n andra komponenter m\u00e5ste registreras i SCOM-maskinen:<\/p>\n<pre><code class=\"cpp\">SCOM_CLASS_ENTRY(JSONStreamReader)\n<\/code><\/pre>\n<p>\nDenna makro beskriver en s\u00e4rskild statisk klassregistrator vars konstrukt\u00f6r kommer att anropas vid inl\u00e4sning av komponenten i minnet.<br \/>\nEfter det kan man skapa dess instans i en annan komponent:<\/p>\n<pre><code class=\"cpp\">IJSONStreamReaderPtr jsonReader = create_instance(SCOM_CLSIDOF(JSONStreamReader));\n<\/code><\/pre>\n<p>\nF\u00f6r att st\u00f6dja tj\u00e4nster erbjuder SCOM en ytterligare, ganska komplex infrastruktur. Centralt i den \u00e4r begreppet SCOM-process, som fungerar som en beh\u00e5llare f\u00f6r aktiva tj\u00e4nster (dvs. fungerar som en Service Locator) samt inneh\u00e5ller bindning till lokaliserade resurser. SCOM-processen binds till OS-tr\u00e5den. Tack vare detta kan man s\u00e5 h\u00e4r f\u00e5 tj\u00e4nster inuti applikationen:<\/p>\n<pre><code class=\"cpp\">SCOM_Process* process = core::current_process();\nif (process)\n         return get_service(process);\n<\/code><\/pre>\n<p>\nDessutom, genom att v\u00e4xla logiska (SCOM) processer kopplade till fl\u00f6det kan man f\u00e5 n\u00e4stan oberoende applikationer, sett ur informationsutrymmets perspektiv, som k\u00f6rs inom ett och samma fl\u00f6de. S\u00e5 h\u00e4r \u00e4r v\u00e5r tunna klient utformad, som arbetar med en filbas \u2014 inom en OS-process finns det tv\u00e5 SCOM-processer, en kopplad till klienten och den andra till servern. Denna metod m\u00f6jligg\u00f6r en enhetlig kodning, som fungerar b\u00e5de p\u00e5 den lokala filbasen och i den \"\u00e4kta\" klient-server-versionen. Kostnaden f\u00f6r s\u00e5dan enhetlighet \u00e4r overhead, men praktiken visar att det \u00e4r v\u00e4rt det.<\/p>\n<p>Baserat p\u00e5 komponentmodellen f\u00f6r SCOM har b\u00e5de aff\u00e4rslogik och gr\u00e4nssnittets del av 1C: F\u00f6retaget implementerats.<\/p>\n<h3>Anv\u00e4ndargr\u00e4nssnitt<\/h3>\n<p>\nF\u00f6rresten, ang\u00e5ende gr\u00e4nssnitt. Vi anv\u00e4nder inte standardkontrollerna fr\u00e5n Windows; v\u00e5ra kontroller \u00e4r direkt implementerade via Windows API. F\u00f6r Linux-versionen anv\u00e4nds ett lager som fungerar genom biblioteket wxWidgets.<br \/>\nBiblioteket med kontroller \u00e4r oberoende av andra delar av \"1C: F\u00f6retaget\" och anv\u00e4nds ocks\u00e5 i flera andra interna verktyg.<\/p>\n<p>Under \u00e5ren har utseendet p\u00e5 kontrollerna i 1C: F\u00f6retaget f\u00f6r\u00e4ndrats, men en signifikant f\u00f6r\u00e4ndring i principerna har intr\u00e4ffat endast en g\u00e5ng, \u00e5r 2009, med lanseringen av version 8.2 och introduktionen av \"styrda formul\u00e4r\". F\u00f6rutom f\u00f6r\u00e4ndringen av utseendet har principen f\u00f6r formkomposition grundligt f\u00f6r\u00e4ndrats \u2014 man har \u00f6vergivit pixelpositionering till f\u00f6rm\u00e5n f\u00f6r fl\u00f6deskomposition av elementen. Dessutom, i den nya modellen arbetar kontrollerna inte direkt med dom\u00e4nobjekten, utan med speciella DTO (<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/DTO\">Data Transfer Objects<\/a><\/noindex>).<br \/>\nDessa f\u00f6r\u00e4ndringar har gjort det m\u00f6jligt att skapa webbklienten f\u00f6r \"1C: F\u00f6retaget\", som \u00e5terspeglar C++-logiken f\u00f6r kontroller i JavaScript. Vi f\u00f6rs\u00f6ker uppr\u00e4tth\u00e5lla funktionell likv\u00e4rdighet mellan den tunna och webbklienten. N\u00e4r detta inte \u00e4r m\u00f6jligt, till exempel p\u00e5 grund av begr\u00e4nsningar i det tillg\u00e4ngliga JavaScript API (till exempel \u00e4r m\u00f6jligheterna att arbeta med filer mycket begr\u00e4nsade), implementerar vi ofta den n\u00f6dv\u00e4ndiga funktionaliteten genom webbl\u00e4sartill\u00e4gg skrivna i C++. F\u00f6r n\u00e4rvarande st\u00f6djer vi Internet Explorer och Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows och Linux) och Safari (MacOS).<\/p>\n<p>Dessutom anv\u00e4nds teknologin f\u00f6r hanterade formul\u00e4r f\u00f6r att skapa mobilapplikationsgr\u00e4nssnitt p\u00e5 1C-plattformen. P\u00e5 mobila enheter renderas kontroller med hj\u00e4lp av 'inhemska' teknologier f\u00f6r operativsystemet, men samma kod anv\u00e4nds f\u00f6r logiken f\u00f6r formul\u00e4rlayout och gr\u00e4nssnittets reaktioner, som i den 'stora' plattformen '1C:Enterprise'.<\/p>\n<p><img decoding=\"async\" alt=\"Plattformen &quot;1C: Enterprise&quot; \u2013 vad finns under ytan?\" src=\"\/wp-content\/uploads\/2019\/04\/a4a87ca99cef465e82429739a8845300.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>1C-gr\u00e4nssnitt p\u00e5 Linux<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Plattformen &quot;1C: Enterprise&quot; \u2013 vad finns under ytan?\" src=\"\/wp-content\/uploads\/2019\/04\/23f48ade4e28242104bfd4e9099800e2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>1C-gr\u00e4nssnitt p\u00e5 en mobil enhet<\/i><\/p>\n<p><b class=\"spoiler_title\">1C-gr\u00e4nssnitt p\u00e5 andra plattformar<\/b> <img decoding=\"async\" alt=\"Plattformen &quot;1C: Enterprise&quot; \u2013 vad finns under ytan?\" src=\"\/wp-content\/uploads\/2019\/04\/d04d2431d8c5240d44acce675d837018.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>1C-gr\u00e4nssnitt p\u00e5 Windows<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Plattformen &quot;1C: Enterprise&quot; \u2013 vad finns under ytan?\" src=\"\/wp-content\/uploads\/2019\/04\/a443f6e2d1cb95e256e0dcff4fe139d2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>1C - webbklient<\/i><\/p>\n<p><\/p>\n<h3>\u00d6ppen k\u00e4llkod<\/h3>\n<p>\n\u00c4ven om vi inte anv\u00e4nder standardbibliotek som \u00e4r vanliga f\u00f6r C++-utvecklare p\u00e5 Windows (MFC, kontroller fr\u00e5n WinAPI), skriver vi inte allt sj\u00e4lva. Biblioteket som redan n\u00e4mnts \u00e4r <noindex><a rel=\"nofollow\" href=\"http:\/\/www.wxwidgets.org\/\">wxWidgets<\/a><\/noindex>, och vi anv\u00e4nder ocks\u00e5:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/curl.haxx.se\/libcurl\/\">cURL<\/a><\/noindex> f\u00f6r att arbeta med HTTP och FTP. <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/openssl.org\/\">OpenSSL<\/a><\/noindex> f\u00f6r att arbeta med kryptografi och uppr\u00e4tta TLS-anslutningar<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.xmlsoft.org\/\">libxml2 och libxslt<\/a><\/noindex> f\u00f6r att bearbeta XML<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dinhviethoa\/libetpan\">libetpan<\/a><\/noindex> f\u00f6r att arbeta med e-postprotokoll (POP3, SMTP, IMAP)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.codesink.org\/mimetic_mime_library.html\">mimetic<\/a><\/noindex> f\u00f6r att bearbeta e-postmeddelanden<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.sqlite.org\/\">sqllite<\/a><\/noindex> f\u00f6r att lagra anv\u00e4ndarens aktivitetsloggar<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/site.icu-project.org\/\">ICU<\/a><\/noindex> f\u00f6r internationalisering<\/li>\n<\/ul>\n<p>\nListan skulle kunna forts\u00e4tta.<br \/>\nDessutom anv\u00e4nder vi en kraftigt modifierad version av <noindex><a rel=\"nofollow\" href=\"http:\/\/code.google.com\/p\/googletest\/\">Google Test<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"http:\/\/code.google.com\/p\/googlemock\/\">Google Mock<\/a><\/noindex> n\u00e4r vi utvecklar enhetstester.<br \/>\nBiblioteken kr\u00e4vde anpassning f\u00f6r att vara kompatibla med SCOM-modellen f\u00f6r komponentorganisation.<br \/>\nSpridningen av 1C g\u00f6r plattformen till ett utm\u00e4rkt test f\u00f6r h\u00e5llbarheten hos de bibliotek som anv\u00e4nds. M\u00e5ngfalden av anv\u00e4ndare och scenarier avsl\u00f6jar snabbt fel \u00e4ven i de mest s\u00e4llan anv\u00e4nda delarna av koden. Vi \u00e5tg\u00e4rdar dem hos oss och f\u00f6rs\u00f6ker ge tillbaka till bibliotekens skapare. Erfarenheten av samarbetet varierar mycket.<br \/>\nUtvecklare <noindex><a rel=\"nofollow\" href=\"http:\/\/curl.haxx.se\/libcurl\/\">cURL<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dinhviethoa\/libetpan\">libetpan<\/a><\/noindex> snabbt svarar p\u00e5 pull-request, men patchen, till exempel, i <noindex><a rel=\"nofollow\" href=\"http:\/\/openssl.org\/\">OpenSSL<\/a><\/noindex> kunde vi aldrig ge tillbaka.<\/p>\n<h3>Slutsats<\/h3>\n<p>\nI artikeln ber\u00f6rde vi n\u00e5gra grundl\u00e4ggande aspekter av utvecklingen av plattformen \u20181C: Enterprise\u2019. I artikelns begr\u00e4nsade omfattning har vi endast ber\u00f6rt n\u00e5gra intressanta aspekter, enligt v\u00e5r mening. <br \/>\nEn allm\u00e4n beskrivning av olika mekanismer i plattformen kan ses <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Platform.htm\">). Ett typiskt exempel p\u00e5 anv\u00e4ndning:<\/a><\/noindex>.<br \/>\nVilka \u00e4mnen skulle intressera dig i kommande artiklar?<\/p>\n<p>Hur \u00e4r den mobila plattformen f\u00f6r 1C implementerad?<br \/>\nBeskrivning av webbklientens interna struktur? <br \/>\nEller kanske \u00e4r du intresserad av processen f\u00f6r att v\u00e4lja funktioner f\u00f6r nya versioner, utveckling och testning?<\/p>\n<p>Skriv i kommentarerna!<br \/>\n<br \/>K\u00e4lla: <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 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!\" \/>\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\/sv\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/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\udd47Plattformen \u20181C: Enterprise\u2019 \u2013 vad finns under huven? | ProHoster","description":"Hej, Habr!","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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!","og:url":"https:\/\/prohoster.info\/sv\/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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/32475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=32475"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/32475\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/24279"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=32475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=32475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=32475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}