{"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\/sl\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom","title":{"rendered":"Platforma \u00ab1C: Pret enterprise\u00bb \u2014 kaj se skriva pod pokrovom?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hello, Habr! <br \/>\nV tem \u010dlanku bomo za\u010deli govoriti o tem, kako je znotraj <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Platform.htm\">platforme '1C:Podjetje 8'<\/a><\/noindex> in katere tehnologije se uporabljajo pri njeni razvoj.<\/p>\n<p><img decoding=\"async\" alt=\"Platforma \u00ab1C: Pret enterprise\u00bb \u2014 kaj se skriva pod pokrovom?\" src=\"\/wp-content\/uploads\/2019\/04\/9375ea3be32979a7d8c72239dfd50f07.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZakaj menimo, da je to zanimivo? Prvi\u010d, ker je platforma '1C:Podjetje 8' velika (ve\u010d kot 10 milijonov vrstic kode) aplikacija v C++ (odjemalec, stre\u017enik itd.), JavaScript (spletni odjemalec), in, od nedavnega, tudi <noindex><a rel=\"nofollow\" href=\"http:\/\/www.1c.ru\/news\/info.jsp?id=19821\">Java<\/a><\/noindex>. Veliki projekti so zanimivi \u017ee zaradi njihove velikosti, saj se vpra\u0161anja, ki ostanejo neopa\u017eena v manj\u0161ih kodnih osnovah, pri tak\u0161nih projektih pojavijo v polni meri. Drugi\u010d, '1C:Podjetje' je repliciran, '\u0161katelni' izdelek, o takih razvoju na Habrju pa je zelo malo \u010dlankov. In vedno je zanimivo izvedeti, kako \u017eivijo v drugih ekipah in podjetjih.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nTorej, za\u010dnimo. V tem \u010dlanku bomo dali pregled nekaterih tehnologij, ki se uporabljajo v platformi, in orisali pokrajino, brez globokega potapljanja v realizacijo. Kajti za mnoge mehanizme bi podroben opis zahteval lo\u010den \u010dlanek, za nekatere pa celo celotno knjigo!<br \/>\nNajprej je treba dolo\u010diti osnovne stvari - kaj je platforma '1C:Podjetje' in kateri sestavni deli jo sestavljajo. Odgovor na to vpra\u0161anje ni tako preprost, saj pod pojmom 'Platforma' (za kraj\u0161o bomo tako imenovali) razumemo tako orodje za razvoj poslovnih aplikacij, kot tudi okolje za izvajanje in sredstva za upravljanje. Novi deljivci so:<\/p>\n<ul>\n<li>klaster stre\u017enikov<\/li>\n<li>'tanki' odjemalec, sposoben povezovanja s stre\u017enikom preko http in lastnega binarnega protokola<\/li>\n<li>odjemalec za delo v dvojnem arhitekturi s podatkovno bazo, shranjeno na trdem disku ali omre\u017eni map<\/li>\n<li>spletni odjemalec<\/li>\n<li>sredstva za upravljanje stre\u017enika aplikacij<\/li>\n<li>razvojno okolje (znano kot Konfigurator)<\/li>\n<li>izvedbeno okolje za iOS, Android in Windows Phone (mobilna platforma 1C)<\/li>\n<\/ul>\n<p>\nVse te komponente, razen spletnega odjemalca, so napisane v C++. Poleg tega je nedavno napovedano <noindex><a rel=\"nofollow\" href=\"http:\/\/www.1c.ru\/news\/info.jsp?id=19821\">Konfigurator nove generacije<\/a><\/noindex>, napisan v Javi.<\/p>\n<h3>Nativen aplikacij<\/h3>\n<p>\nZa razvoj nativnih aplikacij se uporablja C++03. V operacijskem sistemu Windows kot prevajalnik uporabljamo Microsoft Visual C++ 12 (profil zdru\u017eljiv s Windows XP), pod Linuxom in Androidom pa gcc 4.8, za iOS pa clang 5.0. Standardna knji\u017enica, ki se uporablja, je enotna za vse operacijske sisteme in prevajalnike \u2014 STLPort. To re\u0161itev omogo\u010da zmanj\u0161anje verjetnosti napak, specifi\u010dnih za implementacijo STL. Trenutno na\u010drtujemo prehod na implementacijo STL, ki jo dobimo s CLang, ker je STLPort prenehal z razvojem in ni zdru\u017eljiv s podporo C++11 v gcc.<br \/>\nKodna baza stre\u017enika je pri tem skupna 99%, odjemalska pa pribli\u017eno 95%. Poleg tega celo mobilna platforma uporablja enako C++ kodo kot 'velika', \u010deprav je tam odstotek unifikacije nekoliko ni\u017eji. <br \/>\nKot ve\u010dina uporabnikov C++ ne trdimo, da izkori\u0161\u010damo 100% zmogljivosti jezika in njegovih knji\u017enic. Tako prakti\u010dno ne uporabljamo Boost, od zmo\u017enosti jezika pa samo dinami\u010dno preusmerjanje tipov. Kljub temu aktivno uporabljamo:<\/p>\n<ul>\n<li>STL (zlasti nizi, kontejnerji in algoritmi)<\/li>\n<li>ve\u010dkratno dedovanje, vklju\u010dno z ve\u010dkratnim dedovanjem implementacij<\/li>\n<li>predloge<\/li>\n<li>izjem<\/li>\n<li>pametni kazalci (lastna implementacija)<\/li>\n<\/ul>\n<p>\nZ uporabo ve\u010dkratnega dedovanja vmesnikov (popolnoma abstraktne razrede) je mo\u017eno dose\u010di komponentno model, o katerem bomo govorili naprej.<\/p>\n<h3>Komponente<\/h3>\n<p>\nZa zagotavljanje modularnosti je celotna funkcionalnost razdeljena na komponente, ki predstavljajo dinami\u010dne knji\u017enice (*.dll pod Windows, *.so pod Linux). Skupaj je ve\u010d kot sto komponent, opisana bomo nekatere izmed njih:<\/p>\n<p>backend<br \/>\nVsebuje 'motor' metapodatkov platforme<\/p>\n<p>accnt<br \/>\nObjekti, ki jih uporabni\u0161ki razvijalci uporabljajo za gradnjo knjigovodstva (ra\u010dunovodski na\u010drti in registri ra\u010dunovodstva)<\/p>\n<p>bsl<br \/>\nMotor za izvajanje vgrajenega jezika<\/p>\n<p>nuke<br \/>\nLastna implementacija allocatorja pomnilnika<\/p>\n<p>dbeng8<br \/>\nMotor za datote\u010dno bazo. Preprosta datote\u010dno-stre\u017eni\u0161ka baza podatkov, temelje\u010da na ISAM, ki vklju\u010duje tudi preprost SQL procesor.<\/p>\n<p>wbase<br \/>\nVsebuje osnovne razrede in funkcije za implementacijo uporabni\u0161kega vmesnika Windows \u2014 okenske razrede, dostop do GDI itd.<\/p>\n<p>\nRazdelitev na ve\u010d komponent je koristna z ve\u010d vidikov:<\/p>\n<ul>\n<li>Razdelitev spodbuja bolj\u0161e na\u010drtovanje, zlasti bolj\u0161o izolacijo kode.<\/li>\n<li>Iz nabora komponentov lahko prilagodljivo sestavljate razli\u010dne mo\u017enosti dobave:\n<ul>\n<li>Na primer, namestitev tanke stranke bo vsebovala wbase, vendar ne bo imela backend-a<\/li>\n<li>medtem ko na stre\u017eniku wbase, nasprotno, ne bo<\/li>\n<li>oba razli\u010dna primera bosta seveda vsebovala nuke in bsl<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\nVse potrebne komponente za to razli\u010dico zagon programa se nalo\u017eijo ob zagonu. To je potrebno predvsem za registracijo SCOM razredov, o katerih bomo govorili kasneje.<\/p>\n<h3>SCOM<\/h3>\n<p>\nZa dekompozicijo na ni\u017eji ravni se uporablja sistem SCOM \u2014 ideolo\u0161ko podoben ATL knji\u017enici. Za tiste, ki z ATL niso delali, na kratko na\u0161tejemo glavne mo\u017enosti in zna\u010dilnosti. <br \/>\nZa posebej oblikovan razred SCOM:<\/p>\n<ul>\n<li>Nudi tovarni\u0161ke metode, ki omogo\u010dajo ustvarjanje razreda iz druge komponente, poznavajo\u010d le njeno ime (brez razkrivanja implementacije)<\/li>\n<li>Nudi infrastrukturo pametnih kazalcev s \u0161tevcem referenc. Za \u010das \u017eivljenja SCOM razreda ni potrebno ro\u010dno skrbeti<\/li>\n<li>Omogo\u010da ugotavljanje, ali predmet implementira dolo\u010den vmesnik, in samodejno pretvori kazalec na predmet v kazalec na vmesnik<\/li>\n<li>Ustvariti objekt-storitev, ki je vedno dostopen prek metode get_service itd.<\/li>\n<\/ul>\n<p>\nNa primer, lahko v komponenti json.dll opi\u0161ete razred za branje JSON (na primer, JSONStreamReader).<br \/>\nRazrede, primerke je mogo\u010de ustvariti iz drugih komponent, potrebno je registrirati v SCOM napravi:<\/p>\n<pre><code class=\"cpp\">SCOM_CLASS_ENTRY(JSONStreamReader)\n<\/code><\/pre>\n<p>\nTa makro bo opisal poseben stati\u010dni razred-regenerator, katerega konstruktor bo poklican ob nalaganju komponente v pomnilnik.<br \/>\nPo tem lahko ustvarite njegov primer v drugi komponenti:<\/p>\n<pre><code class=\"cpp\">IJSONStreamReaderPtr jsonReader = create_instance(SCOM_CLSIDOF(JSONStreamReader));\n<\/code><\/pre>\n<p>\nZa podporo storitvam SCOM nudi dodatno, precej zapleteno infrastrukturo. Osrednji element je pojem SCOM procesa, ki slu\u017ei kot vsebnik za zagnane storitve (tj. opravlja funkcijo Service Locator), hkrati pa vsebuje povezavo do lokaliziranih virov. SCOM proces se pove\u017ee s tok OS. Tako lahko znotraj aplikacije enostavno pridobite storitve:<\/p>\n<pre><code class=\"cpp\">SCOM_Process* process = core::current_process();\nif (process)\n         return get_service(process);\n<\/code><\/pre>\n<p>\nBolj, ko preklapljamo logi\u010dne (SCOM) procese, povezane s tokom, lahko dobimo skoraj neodvisne aplikacije z vidika informacijskega prostora, ki delujejo v okviru enega toka. Tako deluje na\u0161 tanka stranka, ki deluje s podatkovno bazo \u2014 znotraj enega procesa OS sta dva SCOM-procesa, en je povezan s stranko, drugi pa s stre\u017enikom. Tak pristop omogo\u010da enotno pisanje kode, ki bo delovala tako na lokalni podatkovni bazi kot tudi v \"pravi\" razli\u010dici odjemalec-stre\u017enik. Cena za to enotnost so dodatni stro\u0161ki, vendar praksa ka\u017ee, da so vredni truda.<\/p>\n<p>Na podlagi komponentnega modela SCOM sta uresni\u010dena tako poslovna logika kot tudi vmesni\u0161ka komponenta 1C: Podjetja.<\/p>\n<h3>Uporabni\u0161ki vmesnik<\/h3>\n<p>\nMimogrede, o vmesnikih. Ne uporabljamo standardnih kontrol Windows, na\u0161i elementi upravljanja so realizirani neposredno na Windows API. Za razli\u010dico Linux je bila izdelana plast, ki deluje preko knji\u017enice wxWidgets.<br \/>\nKnji\u017enica elementov upravljanja ni odvisna od drugih delov \"1C: Podjetja\" in jo uporabljamo tudi v nekaj manj\u0161ih notranjih orodjih.<\/p>\n<p>S\u010dasoma se je videz kontrol 1C: Podjetja spreminjal, vendar so se pomembne spremembe na\u010del zgodile le enkrat, leta 2009, s prihodom razli\u010dice 8.2 in pojavom \"upravljanih obrazcev\". Poleg spremembe videza se je temeljno spremenil princip sestavljanja obrazca \u2014 pre\u0161lo se je od pozicioniranja elementov v vsakem pikselu k tokovnemu sestavljanju elementov. Poleg tega v novem modelu elementi upravljanja ne delujejo neposredno z domenami objektov, ampak s posebnimi DTO (<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/DTO\">Data Transfer Objects<\/a><\/noindex>).<br \/>\nTe spremembe so omogo\u010dile ustvarjanje spletnega odjemalca \"1C: Podjetja\", ki ponavlja C++ logiko kontrol na JavaScriptu. Trudimo se ohranjati funkcionalno ekvivalentnost med tankimi in spletnimi odjemalci. V primerih, ko to ni mogo\u010de, na primer zaradi omejitev, dostopnih iz JavaScript API (na primer, zmo\u017enost dela z datotekami je zelo omejena), pogosto implementiramo potrebno funkcionalnost preko raz\u0161iritev brskalnikov, napisanih v C++. Trenutno podpiramo Internet Explorer in Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows in Linux) in Safari (MacOS).<\/p>\n<p>Poleg tega se tehnologija upravljanih obrazcev uporablja za ustvarjanje vmesnika mobilnih aplikacij na platformi 1C. Na mobilnih napravah je risanje kontrolnikov izvedeno z uporabo \u201enativnih\u201c tehnologij operacijskega sistema, vendar se za logiko sestave obrazca in odziv vmesnika uporablja enaka koda kot na veliki platformi \u201e1C:Pred podjetje\u201c.<\/p>\n<p><img decoding=\"async\" alt=\"Platforma \u00ab1C: Pret enterprise\u00bb \u2014 kaj se skriva pod pokrovom?\" src=\"\/wp-content\/uploads\/2019\/04\/a4a87ca99cef465e82429739a8845300.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vmesnik 1C na operacijskem sistemu Linux<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Platforma \u00ab1C: Pret enterprise\u00bb \u2014 kaj se skriva pod pokrovom?\" src=\"\/wp-content\/uploads\/2019\/04\/23f48ade4e28242104bfd4e9099800e2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vmesnik 1C na mobilni napravi<\/i><\/p>\n<p><b class=\"spoiler_title\">Vmesnik 1C na drugih platformah<\/b> <img decoding=\"async\" alt=\"Platforma \u00ab1C: Pret enterprise\u00bb \u2014 kaj se skriva pod pokrovom?\" src=\"\/wp-content\/uploads\/2019\/04\/d04d2431d8c5240d44acce675d837018.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Vmesnik 1C na operacijskem sistemu Windows<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Platforma \u00ab1C: Pret enterprise\u00bb \u2014 kaj se skriva pod pokrovom?\" src=\"\/wp-content\/uploads\/2019\/04\/a443f6e2d1cb95e256e0dcff4fe139d2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Vmesnik 1C \u2014 spletni odjemalec<\/i><\/p>\n<p><\/p>\n<h3>Odprtokodni<\/h3>\n<p>\n\u010ceprav ne uporabljamo standardnih knji\u017enic, zna\u010dilnih za C++, za Windows (MFC, kontrole iz WinAPI), vsi sestavni deli niso napisana sami. \u017de smo omenili knji\u017enico <noindex><a rel=\"nofollow\" href=\"http:\/\/www.wxwidgets.org\/\">wxWidgets<\/a><\/noindex>, poleg tega pa uporabljamo:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/curl.haxx.se\/libcurl\/\">cURL<\/a><\/noindex> za delo z HTTP in FTP. <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/openssl.org\/\">OpenSSL<\/a><\/noindex> za delo s kriptografijo in vzpostavitev TLS povezav<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.xmlsoft.org\/\">libxml2 in libxslt<\/a><\/noindex> za obdelavo XML<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dinhviethoa\/libetpan\">libetpan<\/a><\/noindex> za delo s po\u0161tnimi protokoli (POP3, SMTP, IMAP)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.codesink.org\/mimetic_mime_library.html\">mimetic<\/a><\/noindex> za obdelavo sporo\u010dil e-po\u0161te<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.sqlite.org\/\">sqllite<\/a><\/noindex> za shranjevanje dnevnikov dela uporabnikov<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/site.icu-project.org\/\">ICU<\/a><\/noindex> za internacionalizacijo<\/li>\n<\/ul>\n<p>\nSeznam se lahko nadaljuje.<br \/>\nPoleg tega uporabljamo mo\u010dno prilagojeno razli\u010dico <noindex><a rel=\"nofollow\" href=\"http:\/\/code.google.com\/p\/googletest\/\">Google Test<\/a><\/noindex> in <noindex><a rel=\"nofollow\" href=\"http:\/\/code.google.com\/p\/googlemock\/\">Google Mock<\/a><\/noindex> pri razvoju enotnih testov.<br \/>\nKnji\u017enice so zahtevale prilagoditev za zdru\u017eljivost s SCOM-modelom organizacije komponent.<br \/>\nRaz\u0161irjenost 1C naredi platformo odli\u010dno preizku\u0161njo trdnosti za uporabljene knji\u017enice. Raznolikost uporabnikov in scenarijev hitro odkrije napake, tudi v redko uporabljenih delih kode. Te napake popravimo pri sebi in se trudimo, da jih vrnemo avtorjem knji\u017enic. Izku\u0161nje interakcije so zelo razli\u010dne.<br \/>\nRazvijalci <noindex><a rel=\"nofollow\" href=\"http:\/\/curl.haxx.se\/libcurl\/\">cURL<\/a><\/noindex> in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dinhviethoa\/libetpan\">libetpan<\/a><\/noindex> ob hitro odzivajo na pull-requests, a patch, na primer, v <noindex><a rel=\"nofollow\" href=\"http:\/\/openssl.org\/\">OpenSSL<\/a><\/noindex> nam do danes ni uspelo vrniti.<\/p>\n<h3>Zaklju\u010dek<\/h3>\n<p>\nV \u010dlanku smo obravnavali nekaj osnovnih vidikov razvoja platforme \u201e1C: Pred podjetje\u201c. V omejenem obsegu \u010dlanka smo se dotaknili samo nekaterih zanimivih, po na\u0161em mnenju, vidikov. <br \/>\nSplo\u0161en opis razli\u010dnih mehanizmov platforme si lahko ogledate <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Platform.htm\">tukaj<\/a><\/noindex>.<br \/>\nKatere teme bi vas zanimale v naslednjih \u010dlankih?<\/p>\n<p>Kako je \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 mobilna platforma 1C?<br \/>\nOpis notranje strukture spletnega odjemalca? <br \/>\nAli pa vas morda zanima postopek izbire funkcij za nove razli\u010dice, razvoj in testiranje?<\/p>\n<p>Pi\u0161ite v komentarjih!<br \/>\n<br \/>Izvor: <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\/sl\/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=\"sl_SI\" \/>\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\/sl\/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\udd47Platforma \u201e1C: Pred podjetje\u201c \u2014 kaj se skriva pod pokrovom? | ProHoster","description":"Hello, Habr!","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/32475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=32475"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/32475\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/24279"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=32475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=32475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=32475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}