{"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\/da\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom","title":{"rendered":"Platformen \"1C: Enterprise\" - hvad er der under motorhjelmen?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hello, Habr! <br \/>\nI denne artikel vil vi begynde at fort\u00e6lle om, hvordan det er indvendigt <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Platform.htm\">platformen '1C:Enterprise 8'<\/a><\/noindex> og hvilke teknologier der anvendes i dens udvikling.<\/p>\n<p><img decoding=\"async\" alt=\"Platformen &quot;1C: Enterprise&quot; - hvad er der under motorhjelmen?\" src=\"\/wp-content\/uploads\/2019\/04\/9375ea3be32979a7d8c72239dfd50f07.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHvorfor mener vi, at dette er interessant? For det f\u00f8rste, fordi platformen '1C:Enterprise 8' er en stor (mere end 10 millioner kode-linjer) applikation skrevet i C++ (klient, server osv.), JavaScript (webklient) og, for nylig, ogs\u00e5 <noindex><a rel=\"nofollow\" href=\"http:\/\/www.1c.ru\/news\/info.jsp?id=19821\">Java<\/a><\/noindex>. Store projekter er interessante blot p\u00e5 grund af deres omfang, da sp\u00f8rgsm\u00e5l, der er usynlige i en lille kodebase, tr\u00e6der fuldt frem i s\u00e5danne projekter. For det andet er '1C:Enterprise' et massedistribueret, 'boks'-produkt, og der er meget f\u00e5 artikler om s\u00e5danne udviklinger p\u00e5 Habr. Og det er ogs\u00e5 altid interessant at finde ud af, hvordan andre teams og firmaer arbejder.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nS\u00e5 lad os komme i gang. I denne artikel vil vi give en oversigt over nogle af de teknologier, der anvendes i platformen, og skitsere landskabet uden at dykke dybt ned i implementeringen. For mange mekanismer vil en detaljeret beskrivelse kr\u00e6ve en s\u00e6rskilt artikel, og for nogle endda en hel bog!<br \/>\nFor at starte med, skal vi definere nogle grundl\u00e6ggende ting - hvad er platformen '1C:Enterprise' og hvilke komponenter best\u00e5r den af. Svaret p\u00e5 dette sp\u00f8rgsm\u00e5l er ikke s\u00e5 simpelt, for under termen 'Platform' (for korthed vil vi kalde den s\u00e5ledes) forst\u00e5s b\u00e5de et udviklingsv\u00e6rkt\u00f8j til forretningsapplikationer, en k\u00f8remilj\u00f8 og administrationsv\u00e6rkt\u00f8jer. Man kan groft sagt skelne mellem f\u00f8lgende komponenter:<\/p>\n<ul>\n<li>serverklynge<\/li>\n<li>'tynd' klient, der kan oprette forbindelse til serveren via http og et eget bin\u00e6rt protokol<\/li>\n<li>klient til arbejde i en to-lags arkitektur med en database, der er placeret p\u00e5 en harddisk eller netv\u00e6rksmappe<\/li>\n<li>webklient<\/li>\n<li>administrationsv\u00e6rkt\u00f8jer til applikationsserveren<\/li>\n<li>udviklingsmilj\u00f8 (kendt som Konfigurator)<\/li>\n<li>k\u00f8remilj\u00f8 til iOS, Android og Windows Phone (mobil platform for 1C)<\/li>\n<\/ul>\n<p>\nAlle disse dele, bortset fra webklienten, er skrevet i C++. Derudover er der for nylig blevet annonceret <noindex><a rel=\"nofollow\" href=\"http:\/\/www.1c.ru\/news\/info.jsp?id=19821\">en ny generation Konfigurator<\/a><\/noindex>, skrevet i Java.<\/p>\n<h3>Native applikationer<\/h3>\n<p>\nC++03 anvendes til udvikling af native applikationer. P\u00e5 Windows bruges Microsoft Visual C++ 12 (profil kompatibel med Windows XP) som kompilator, mens gcc 4.8 bruges til Linux og Android, og clang 5.0 til iOS. Den standardbibliotek, der anvendes, er ens for alle operativsystemer og kompilatorer \u2014 STLPort. Denne l\u00f8sning reducerer sandsynligheden for fejl, der er specifik for STL-implementeringen. Vi planl\u00e6gger nu overgangen til STL-implementeringen, der leveres med CLang, da STLPort har stoppet sin udvikling og ikke er kompatibelt med den aktiverede C++11 underst\u00f8ttelse i gcc.<br \/>\nServerens kodebase er generelt 99% f\u00e6lles, mens klientens er 95%. Desuden bruger selv mobilplatformen den samme C++-kode som den 'store' version, selvom graden af enhed der er noget lavere. <br \/>\nSom de fleste C++-brugere g\u00f8r vi ikke krav p\u00e5 at udnytte 100% af sprog- og biblioteksfunktionerne. For eksempel anvender vi n\u00e6sten ikke Boost, og blandt sprogfeatures er det dynamisk typecasting, vi sj\u00e6ldent bruger. Vi anvender dog aktivt:<\/p>\n<ul>\n<li>STL (is\u00e6r strenge, containere og algoritmer)<\/li>\n<li>flersidig arv, herunder flersidig arv af implementering<\/li>\n<li>skabeloner<\/li>\n<li>undtagelser<\/li>\n<li>smarte pointere (egen implementering)<\/li>\n<\/ul>\n<p>\nVed at anvende flersidig arv af interfaces (fuldst\u00e6ndigt abstrakte klasser) bliver en komponentmodel mulig, som vil blive beskrevet senere.<\/p>\n<h3>Komponenter<\/h3>\n<p>\nFor at sikre modularitet er al funktion delt op i komponenter, som er dynamiske biblioteker (*.dll til Windows, *.so til Linux). I alt er der mere end 150 komponenter, vi vil give beskrivelser af nogle af dem:<\/p>\n<p>backend<br \/>\nIndeholder 'motoren' for platformens metadata.<\/p>\n<p>accnt<br \/>\nObjekterne, som applikationsudviklere bruger til at opbygge regnskab (kontoplaner og regnskabsregistre)<\/p>\n<p>bsl<br \/>\nMotoren for udf\u00f8relse af det indbyggede sprog.<\/p>\n<p>nuke<br \/>\nEgen implementering af hukommelsesallokatoren.<\/p>\n<p>dbeng8<br \/>\nMotoren for filbasen. En simpel fil-server database maskine baseret p\u00e5 ISAM, som ogs\u00e5 inkluderer en simpel SQL-proces.<\/p>\n<p>wbase<br \/>\nIndeholder grundl\u00e6ggende klasser og funktioner til realisering af Windows-brugerfladen \u2014 vinduesklasser, adgang til GDI osv.<\/p>\n<p>\nOpdelingen i mange komponenter er nyttig ud fra flere perspektiver:<\/p>\n<ul>\n<li>Opdelingen fremmer bedre design, specielt en bedre isolering af koden.<\/li>\n<li>Fra komponenterne kan forskellige leveringsmuligheder sammens\u00e6ttes fleksibelt:\n<ul>\n<li>For eksempel vil installationen af en tynd klient indeholde wbase, men ikke backend.<\/li>\n<li>og p\u00e5 serveren vil wbase omvendt ikke v\u00e6re til stede.<\/li>\n<li>Begge varianter vil naturligvis indeholde nuke og bsl.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\nAlle n\u00f8dvendige komponenter til denne k\u00f8rselsvariant indl\u00e6ses ved programmets start. Dette er blandt andet n\u00f8dvendigt for registreringen af SCOM-klasser, som der vil blive talt om nedenfor.<\/p>\n<h3>SCOM<\/h3>\n<p>\nTil dekomponering p\u00e5 et lavere niveau anvendes SCOM-systemet, som er ideologisk lig ATL-biblioteket. For dem, der ikke har arbejdet med ATL, n\u00e6vnes nogle af hovedfunktionerne og egenskaberne kort. <br \/>\nFor den specielt designede SCOM-klasse:<\/p>\n<ul>\n<li>Tilvejebringer fabriksmetoder, der muligg\u00f8r skabelse af en klasse fra en anden komponent ved kun at kende dens navn (uden at afsl\u00f8re implementeringen).<\/li>\n<li>Tilvejebringer infrastrukturen for smarte pegepinde med referencez\u00e6lling. Der er ikke behov for manuelt at overv\u00e5ge livscyklussen for SCOM-klassen.<\/li>\n<li>Muligg\u00f8r at finde ud af, om et objekt implementerer en specifik gr\u00e6nseflade, og automatisk konvertere en pegepind til objektet til en pegepind til gr\u00e6nsefladen.<\/li>\n<li>Oprette en service-objekt, der altid er tilg\u00e6ngelig via metoden get_service osv.<\/li>\n<\/ul>\n<p>\nFor eksempel kan man i komponenten json.dll beskrive en klasse til l\u00e6sning af JSON (for eksempel JSONStreamReader).<br \/>\nKlasser og instanser, der kan oprettes fra andre komponenter, skal registreres i SCOM-maskinen:<\/p>\n<pre><code class=\"cpp\">SCOM_CLASS_ENTRY(JSONStreamReader)\n<\/code><\/pre>\n<p>\nDenne makro vil beskrive en speciel statisk klasse-registrator, hvis konstruktor vil blive kaldt ved indl\u00e6sning af komponenten i hukommelsen.<br \/>\nDerefter kan der oprettes en instans i en anden komponent:<\/p>\n<pre><code class=\"cpp\">IJSONStreamReaderPtr jsonReader = create_instance&lt;IJSONStreamReader&gt;(SCOM_CLSIDOF(JSONStreamReader));\n<\/code><\/pre>\n<p>\nFor at underst\u00f8tte tjenester tilbyder SCOM en ekstra, ganske kompleks infrastruktur. Centralt i denne infrastruktur findes begrebet SCOM-proces, der fungerer som container for de k\u00f8rte tjenester (dvs. fungerer som Service Locator) samt indeholder bindingen til lokaliserede ressourcer. SCOM-processen bindes til OS-tr\u00e5den. Dette g\u00f8r det muligt at f\u00e5 tjenester p\u00e5 f\u00f8lgende m\u00e5de inden for applikationen:<\/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>\nDesuden, ved at skifte mellem logiske (SCOM) processer knyttet til str\u00f8mmen, kan man opn\u00e5 praktisk uafh\u00e6ngige applikationer med hensyn til informationsrum, der k\u00f8rer inden for \u00e9n str\u00f8m. S\u00e5dan er vores tynde klient designet, som arbejder med en filbaseret database \u2013 inden for \u00e9n OS-proces er der to SCOM-processer, \u00e9n knyttet til klienten og den anden til serveren. Denne tilgang muligg\u00f8r en ensartet kodning, der fungerer b\u00e5de med lokalt filsystem og i en \"\u00e6gte\" klient-server version. Prisen for s\u00e5dan ensartethed er overhead, men erfaring viser, at det er det v\u00e6rd.<\/p>\n<p>P\u00e5 baggrund af den komponentbaserede model SCOM er b\u00e5de forretningslogikken og brugerfladedelen af 1C: Enterprise implementeret.<\/p>\n<h3>Brugergr\u00e6nseflade<\/h3>\n<p>\nFor \u00f8vrigt, hvad ang\u00e5r brugerflader. Vi bruger ikke standard Windows-kontroller; vores betjeningselementer er direkte implementeret p\u00e5 Windows API. Til Linux-versionen er der lavet et lag, der arbejder gennem wxWidgets-biblioteket.<br \/>\nBiblioteket af kontrolelementer er uafh\u00e6ngigt af andre dele af \"1C: Enterprise\" og bruges af os i flere sm\u00e5 interne v\u00e6rkt\u00f8jer.<\/p>\n<p>Gennem \u00e5rene har udseendet af kontrollerne \u00e6ndret sig, men der skete kun \u00e9n v\u00e6sentlig \u00e6ndring af principperne, nemlig i 2009 med udgivelsen af version 8.2 og introduktionen af \"styrede formularer\". Udover \u00e6ndringer i udseendet blev principperne for formularlayouts fundamentalt \u00e6ndret \u2013 der blev opgivet pixel-for-pixel placering af elementer til fordel for flow-layout af elementer. Desuden arbejder kontrolelementerne i den nye model ikke direkte med dom\u00e6neobjekter, men med s\u00e6rlige DTO (<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/DTO\">Data Transfer Objects<\/a><\/noindex>).<br \/>\nDisse \u00e6ndringer har gjort det muligt at skabe webklienten til \"1C: Enterprise\", som gentager C++ logikken af kontrollerne p\u00e5 JavaScript. Vi str\u00e6ber efter at opretholde funktionel \u00e6kvivalens mellem den tynde og den webbaserede klient. I de tilf\u00e6lde, hvor dette ikke er muligt, for eksempel p\u00e5 grund af begr\u00e6nsningerne i det tilg\u00e6ngelige JavaScript API (f.eks. er muligheden for at arbejde med filer meget begr\u00e6nset), implementerer vi ofte den n\u00f8dvendige funktionalitet ved hj\u00e6lp af browserudvidelser skrevet i C++. P\u00e5 nuv\u00e6rende tidspunkt underst\u00f8tter vi Internet Explorer og Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows og Linux) og Safari (MacOS).<\/p>\n<p>Derudover bruges teknologien til styrede formularer til at skabe gr\u00e6nsefladen til mobilapplikationer p\u00e5 1C-platformen. P\u00e5 mobile enheder tegnes kontrollerne ved hj\u00e6lp af 'native' teknologier til operativsystemet, men for logikken i layoutet af formularerne og gr\u00e6nsefladens reaktion bruges den samme kode som p\u00e5 den 'store' platform '1C:Enterprise'.<\/p>\n<p><img decoding=\"async\" alt=\"Platformen &quot;1C: Enterprise&quot; - hvad er der under motorhjelmen?\" src=\"\/wp-content\/uploads\/2019\/04\/a4a87ca99cef465e82429739a8845300.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>1C-gr\u00e6nseflade p\u00e5 Linux<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Platformen &quot;1C: Enterprise&quot; - hvad er der under motorhjelmen?\" src=\"\/wp-content\/uploads\/2019\/04\/23f48ade4e28242104bfd4e9099800e2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>1C-gr\u00e6nseflade p\u00e5 mobile enheder<\/i><\/p>\n<p><b class=\"spoiler_title\">1C-gr\u00e6nseflade p\u00e5 andre platforme<\/b> <img decoding=\"async\" alt=\"Platformen &quot;1C: Enterprise&quot; - hvad er der under motorhjelmen?\" src=\"\/wp-content\/uploads\/2019\/04\/d04d2431d8c5240d44acce675d837018.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>1C-gr\u00e6nseflade p\u00e5 Windows<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Platformen &quot;1C: Enterprise&quot; - hvad er der under motorhjelmen?\" src=\"\/wp-content\/uploads\/2019\/04\/a443f6e2d1cb95e256e0dcff4fe139d2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>1C - webklient<\/i><\/p>\n<p><\/p>\n<h3>Open source<\/h3>\n<p>\nSelvom vi ikke bruger de standardbiblioteker, som en C++-udvikler ville anvende under Windows (MFC, kontroller fra WinAPI), er vi ikke ansvarlige for at skrive alle komponenter selv. Biblioteket <noindex><a rel=\"nofollow\" href=\"http:\/\/www.wxwidgets.org\/\">wxWidgets<\/a><\/noindex>, og vi bruger ogs\u00e5:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/curl.haxx.se\/libcurl\/\">cURL<\/a><\/noindex> til arbejde med HTTP og FTP. <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/openssl.org\/\">OpenSSL<\/a><\/noindex> til arbejde med kryptografi og etablering af TLS-forbindelser<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.xmlsoft.org\/\">libxml2 og libxslt<\/a><\/noindex> til parsing af XML<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dinhviethoa\/libetpan\">libetpan<\/a><\/noindex> til arbejde med e-mailprotokoller (POP3, SMTP, IMAP)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.codesink.org\/mimetic_mime_library.html\">mimetic<\/a><\/noindex> til parsing af e-mailbeskeder<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.sqlite.org\/\">sqllite<\/a><\/noindex> til at opbevare brugernes aktivitetslogs<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/site.icu-project.org\/\">ICU<\/a><\/noindex> til internationalisering<\/li>\n<\/ul>\n<p>\nListen kan forts\u00e6tte.<br \/>\nDerudover bruger vi en st\u00e6rkt modificeret version af <noindex><a rel=\"nofollow\" href=\"http:\/\/code.google.com\/p\/googletest\/\">Google Test<\/a><\/noindex> og <noindex><a rel=\"nofollow\" href=\"http:\/\/code.google.com\/p\/googlemock\/\">Google Mock<\/a><\/noindex> til udvikling af unit tests.<br \/>\nBibliotekerne kr\u00e6vede tilpasning for at v\u00e6re kompatible med SCOM-modellen af komponenter.<br \/>\nUdbredelsen af 1C g\u00f8r platformen til en fremragende stress-test for de biblioteker, der bruges i den. Variation i brugere og scenarier afsl\u00f8rer hurtigt fejl selv i de sj\u00e6ldent brugte dele af koden. Vi retter dem internt og fors\u00f8ger at give dem tilbage til biblioteksforfatterne. Erfaringerne fra samarbejdet har v\u00e6ret meget varierede.<br \/>\nUdviklere <noindex><a rel=\"nofollow\" href=\"http:\/\/curl.haxx.se\/libcurl\/\">cURL<\/a><\/noindex> og <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dinhviethoa\/libetpan\">libetpan<\/a><\/noindex> reagerer hurtigt p\u00e5 pull-request, men en patch, for eksempel til <noindex><a rel=\"nofollow\" href=\"http:\/\/openssl.org\/\">OpenSSL<\/a><\/noindex> fik vi aldrig sendt.<\/p>\n<h3>Konklusion<\/h3>\n<p>\nI artiklen ber\u00f8rte vi flere centrale aspekter af udviklingen af 1C-platformen. I artiklens begr\u00e6nsede omfang ber\u00f8rte vi kun nogle interessante aspekter efter vores mening. <br \/>\nEn generel beskrivelse af forskellige mekanismer p\u00e5 platformen kan findes <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Platform.htm\">her<\/a><\/noindex>.<br \/>\nHvilke emner ville v\u00e6re interessante for dig i de n\u00e6ste artikler?<\/p>\n<p>Hvordan er 1C mobilplatform implementeret?<br \/>\nBeskrivelse af webklientens interne struktur? <br \/>\nEller er du m\u00e5ske interesseret i udv\u00e6lgelsesprocessen for funktioner til nye versioner, udvikling og testning?<\/p>\n<p>Skriv i kommentarerne!<br \/>\n<br \/>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Platformen \"1C: Professionel\" \u2013 hvad er der under motorhjelmen? | ProHoster","description":"Hello, Habr!","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/32475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=32475"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/32475\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/24279"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=32475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=32475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=32475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}