{"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\/pl\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom","title":{"rendered":"Platforma \u201e1C: Enterprise\u201d \u2013 co kryje si\u0119 pod mask\u0105?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Cze\u015b\u0107, Habr! <br \/>\nW tym artykule rozpoczniemy opowie\u015b\u0107 o tym, jak dzia\u0142a wewn\u0119trznie <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Platform.htm\">platforma \u00ab1C:Enterprise 8\u00bb<\/a><\/noindex> i jakie technologie s\u0105 u\u017cywane w jej rozwoju.<\/p>\n<p><img decoding=\"async\" alt=\"Platforma \u201e1C: Enterprise\u201d \u2013 co kryje si\u0119 pod mask\u0105?\" src=\"\/wp-content\/uploads\/2019\/04\/9375ea3be32979a7d8c72239dfd50f07.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDlaczego uwa\u017camy, \u017ce to jest interesuj\u0105ce? Po pierwsze, poniewa\u017c platforma \u00ab1C:Enterprise 8\u00bb to du\u017ca (ponad 10 milion\u00f3w linijek kodu) aplikacja napisana w C++ (klient, serwer itd.), JavaScript (klient webowy), a od niedawna tak\u017ce <noindex><a rel=\"nofollow\" href=\"http:\/\/www.1c.ru\/news\/info.jsp?id=19821\">Java<\/a><\/noindex>. Du\u017ce projekty s\u0105 interesuj\u0105ce chocia\u017cby ze wzgl\u0119du na ich skal\u0119, poniewa\u017c problemy, kt\u00f3re w ma\u0142ej bazie kodu s\u0105 niewidoczne, w takich projektach staj\u0105 si\u0119 wyra\u017anie widoczne. Po drugie, \u00ab1C:Enterprise\u00bb to replikowany, \"pude\u0142kowy\" produkt, a artyku\u0142\u00f3w o takich rozwi\u0105zaniach na Habrze jest bardzo ma\u0142o. Zawsze interesuje r\u00f3wnie\u017c, jak to wygl\u0105da w innych zespo\u0142ach i firmach.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nZatem zaczynamy. W tym artykule przedstawimy przegl\u0105d niekt\u00f3rych technologii stosowanych w platformie, nakre\u015blimy krajobraz, bez g\u0142\u0119bokiego zag\u0142\u0119biania si\u0119 w implementacj\u0119. Wiele mechanizm\u00f3w wymaga\u0142oby szczeg\u00f3\u0142owego opisu na osobny artyku\u0142, a niekt\u00f3re \u2014 na ca\u0142\u0105 ksi\u0105\u017ck\u0119!<br \/>\nNa pocz\u0105tek warto okre\u015bli\u0107 podstawowe rzeczy \u2014 czym jest platforma \u00ab1C:Enterprise\u00bb i z jakich komponent\u00f3w si\u0119 sk\u0142ada. Odpowied\u017a na to pytanie nie jest prosta, poniewa\u017c termin \u201ePlatforma\u201d (dla uproszczenia b\u0119dziemy j\u0105 tak nazywa\u0107) obejmuje zar\u00f3wno narz\u0119dzie do tworzenia aplikacji biznesowych, jak i \u015brodowisko wykonawcze oraz narz\u0119dzia administracyjne. Mo\u017cna w przybli\u017ceniu wyr\u00f3\u017cni\u0107 nast\u0119puj\u0105ce sk\u0142adniki:<\/p>\n<ul>\n<li>klaster serwer\u00f3w<\/li>\n<li>\u201ecienki\u201d klient, mog\u0105cy \u0142\u0105czy\u0107 si\u0119 z serwerem przez HTTP oraz w\u0142asny protok\u00f3\u0142 binarny<\/li>\n<li>klient do pracy w architekturze dwuwarstwowej z baz\u0105 danych, umieszczon\u0105 na dysku twardym lub w folderze sieciowym<\/li>\n<li>klient webowy<\/li>\n<li>narz\u0119dzia administracyjne dla serwera aplikacji<\/li>\n<li>\u015brodowisko programistyczne (znane jako Konfigurator)<\/li>\n<li>\u015brodowisko wykonawcze dla iOS, Android i Windows Phone (mobilna platforma 1C)<\/li>\n<\/ul>\n<p>\nWszystkie te cz\u0119\u015bci, z wyj\u0105tkiem klienta webowego, s\u0105 napisane w C++. Ponadto, niedawno og\u0142oszono <noindex><a rel=\"nofollow\" href=\"http:\/\/www.1c.ru\/news\/info.jsp?id=19821\">Konfigurator nowej generacji<\/a><\/noindex>, napisany w Javie.<\/p>\n<h3>Aplikacje natywne<\/h3>\n<p>\nDo rozwijania aplikacji natywnych u\u017cywa si\u0119 C++03. W systemie Windows jako kompilatora u\u017cywa si\u0119 Microsoft Visual C++ 12 (profil zgodny z Windows XP), a w systemach Linux i Android \u2014 gcc 4.8, dla iOS \u2014 clang 5.0. Standardowa biblioteka jest wsp\u00f3lna dla wszystkich system\u00f3w operacyjnych i kompilator\u00f3w \u2014 STLPort. To rozwi\u0105zanie pozwala zredukowa\u0107 ryzyko b\u0142\u0119d\u00f3w specyficznych dla implementacji STL. W tej chwili planujemy przej\u015bcie na implementacj\u0119 STL dostarczan\u0105 z CLang, poniewa\u017c STLPort przesta\u0142 by\u0107 rozwijany i nie jest zgodny z w\u0142\u0105czonym trybem wsparcia C++11 w gcc.<br \/>\nBaza kodu serwera jest przy tym wsp\u00f3lna w 99%, a klienta \u2014 w 95%. Co wi\u0119cej, nawet platforma mobilna u\u017cywa tego samego kodu C++, co \u201edu\u017ca\u201d, chocia\u017c tam stopie\u0144 unifikacji jest nieco ni\u017cszy. <br \/>\nJak wi\u0119kszo\u015b\u0107 u\u017cytkownik\u00f3w C++, nie korzystamy z 100% mo\u017cliwo\u015bci j\u0119zyka i jego bibliotek. Tak, w praktyce klient nie u\u017cywa Boost, a z mo\u017cliwo\u015bci j\u0119zyka \u2014 dynamicznego rzutowania typ\u00f3w. Przy tym aktywnie stosujemy:<\/p>\n<ul>\n<li>STL (w szczeg\u00f3lno\u015bci \u0142a\u0144cuchy, kontenery i algorytmy)<\/li>\n<li>dziedziczenie wielokrotne, w tym dziedziczenie implementacji<\/li>\n<li>szablony<\/li>\n<li>wyj\u0105tki<\/li>\n<li>inteligentne wska\u017aniki (w\u0142asna implementacja)<\/li>\n<\/ul>\n<p>\nDzi\u0119ki stosowaniu wielokrotnego dziedziczenia interfejs\u00f3w (ca\u0142kowicie abstrakcyjnych klas) staje si\u0119 mo\u017cliwy model komponentowy, o kt\u00f3rym mowa b\u0119dzie poni\u017cej.<\/p>\n<h3>Sk\u0142adniki<\/h3>\n<p>\nAby zapewni\u0107 modularno\u015b\u0107, ca\u0142a funkcjonalno\u015b\u0107 zosta\u0142a podzielona na komponenty, kt\u00f3re stanowi\u0105 dynamiczne biblioteki (*.dll w systemie Windows, *.so \u2014 w systemie Linux). \u0141\u0105cznie jest ponad p\u00f3\u0142tora setki komponent\u00f3w, oto opisy niekt\u00f3rych z nich:<\/p>\n<p>backend<br \/>\nZawiera \u00absilnik\u00bb metadanych platformy<\/p>\n<p>accnt<br \/>\nObiekty, kt\u00f3re programi\u015bci aplikacji u\u017cywaj\u0105 do tworzenia ksi\u0119gowo\u015bci (plany kont i rejestry ksi\u0119gowe)<\/p>\n<p>bsl<br \/>\nSilnik wykonawczy wbudowanego j\u0119zyka<\/p>\n<p>nuke<br \/>\nW\u0142asna implementacja alokatora pami\u0119ci<\/p>\n<p>dbeng8<br \/>\nSilnik bazy plik\u00f3w. Prosta maszyna baz danych typu plik-serwer oparta na ISAM, obejmuj\u0105ca r\u00f3wnie\u017c prosty procesor SQL<\/p>\n<p>wbase<br \/>\nZawiera podstawowe klasy i funkcje do realizacji interfejsu u\u017cytkownika w systemie Windows \u2014 klasy okien, dost\u0119p do GDI itd.<\/p>\n<p>\nPodzia\u0142 na wiele komponent\u00f3w jest korzystny z kilku punkt\u00f3w widzenia:<\/p>\n<ul>\n<li>Podzia\u0142 sprzyja lepszemu projektowaniu, a w szczeg\u00f3lno\u015bci lepszej izolacji kodu<\/li>\n<li>Z zestawu komponent\u00f3w mo\u017cna elastycznie konfigurowa\u0107 r\u00f3\u017cne opcje dostawy:\n<ul>\n<li>Na przyk\u0142ad instalacja cienkiego klienta b\u0119dzie zawiera\u0107 wbase, ale nie b\u0119dzie zawiera\u0107 backendu.<\/li>\n<li>Z kolei na serwerze wbase nie b\u0119dzie.<\/li>\n<li>Oba warianty b\u0119d\u0105 oczywi\u015bcie zawiera\u0142y nuke i bsl.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\nWszystkie komponenty potrzebne do uruchomienia tej wersji s\u0105 \u0142adowane przy starcie programu. To jest szczeg\u00f3lnie wa\u017cne dla rejestracji klas SCOM, o kt\u00f3rych b\u0119dzie mowa poni\u017cej.<\/p>\n<h3>SCOM<\/h3>\n<p>\nDo dekompozycji na ni\u017cszym poziomie u\u017cywana jest system SCOM \u2014 ideologicznie podobny do biblioteki ATL. Dla tych, kt\u00f3rzy nie pracowali z ATL, kr\u00f3tko wymieni\u0119 g\u0142\u00f3wne mo\u017cliwo\u015bci i cechy. <br \/>\nDla specjalnie sformatowanej klasy SCOM:<\/p>\n<ul>\n<li>Oferuje metody fabryczne, kt\u00f3re pozwalaj\u0105 stworzy\u0107 klas\u0119 z innego komponentu, znaj\u0105c tylko jego nazw\u0119 (bez odkrywania implementacji).<\/li>\n<li>Oferuje infrastruktur\u0119 inteligentnych wska\u017anik\u00f3w z liczeniem odniesie\u0144. Nie trzeba r\u0119cznie monitorowa\u0107 czasu \u017cycia klasy SCOM.<\/li>\n<li>Pozwala ustali\u0107, czy obiekt implementuje dany interfejs i automatycznie przekszta\u0142ca wska\u017anik na obiekt w wska\u017anik na interfejs.<\/li>\n<li>Umo\u017cliwia stworzenie obiektu-us\u0142ugi, zawsze dost\u0119pnego przez metod\u0119 get_service itd.<\/li>\n<\/ul>\n<p>\nNa przyk\u0142ad mo\u017cna opisa\u0107 w komponencie json.dll klas\u0119 do odczytu JSON (np. JSONStreamReader).<br \/>\nKlasy, instancje mo\u017cna tworzy\u0107 z innych komponent\u00f3w, kt\u00f3re musz\u0105 by\u0107 zarejestrowane w maszynie SCOM:<\/p>\n<pre><code class=\"cpp\">SCOM_CLASS_ENTRY(JSONStreamReader)\n<\/code><\/pre>\n<p>\nTen makro opisze specjaln\u0105 statyczn\u0105 klas\u0119-rejestrator, kt\u00f3rej konstruktor zostanie wywo\u0142any przy \u0142adowaniu komponentu do pami\u0119ci.<br \/>\nPo tym mo\u017cna stworzy\u0107 jej instancj\u0119 w innym komponencie:<\/p>\n<pre><code class=\"cpp\">IJSONStreamReaderPtr jsonReader = create_instance(SCOM_CLSIDOF(JSONStreamReader));\n<\/code><\/pre>\n<p>\nAby wspiera\u0107 us\u0142ugi, SCOM oferuje dodatkow\u0105, do\u015b\u0107 z\u0142o\u017con\u0105 infrastruktur\u0119. Centralnym poj\u0119ciem jest proces SCOM, kt\u00f3ry s\u0142u\u017cy jako kontener dla uruchomionych us\u0142ug (tzn. pe\u0142ni rol\u0119 Service Locator) oraz zawiera powi\u0105zania z lokalizowanymi zasobami. Proces SCOM jest powi\u0105zany z w\u0105tkiem OS. Dzi\u0119ki temu wewn\u0105trz aplikacji mo\u017cna w ten spos\u00f3b uzyskiwa\u0107 us\u0142ugi:<\/p>\n<pre><code class=\"cpp\">SCOM_Process* process = core::current_process();\nif (process)\n         return get_service(process);\n<\/code><\/pre>\n<p>\nCo wi\u0119cej, prze\u0142\u0105czaj\u0105c procesy logiczne (SCOM) zwi\u0105zane z w\u0105tkiem, mo\u017cna uzyska\u0107 praktycznie niezale\u017cne, z punktu widzenia przestrzeni informacyjnej, aplikacje dzia\u0142aj\u0105ce w ramach jednego w\u0105tku. Tak dzia\u0142a nasz cienki klient, wsp\u00f3\u0142pracuj\u0105cy z baz\u0105 plik\u00f3w \u2014 w jednym procesie systemu operacyjnego znajduj\u0105 si\u0119 dwa procesy SCOM, jeden zwi\u0105zany z klientem, a drugi z serwerem. Takie podej\u015bcie pozwala na ujednolicenie pisania kodu, kt\u00f3ry b\u0119dzie dzia\u0142a\u0142 zar\u00f3wno na lokalnej bazie plik\u00f3w, jak i w \u201eprawdziwym\u201d wariancie klient-serwer. Cena za tak\u0105 jednolito\u015b\u0107 to koszty dodatkowe, ale praktyka pokazuje, \u017ce s\u0105 tego warte.<\/p>\n<p>Na podstawie komponentowej modelu SCOM zrealizowano zar\u00f3wno logik\u0119 biznesow\u0105, jak i cz\u0119\u015b\u0107 interfejsu 1C: Enterprise.<\/p>\n<h3>Interfejs u\u017cytkownika<\/h3>\n<p>\nA propos interfejs\u00f3w. Nie u\u017cywamy standardowych kontrolek Windows, nasze elementy steruj\u0105ce s\u0105 zrealizowane bezpo\u015brednio na Windows API. Dla wersji Linux zosta\u0142a stworzona warstwa po\u015brednia, dzia\u0142aj\u0105ca poprzez bibliotek\u0119 wxWidgets.<br \/>\nBiblioteka element\u00f3w steruj\u0105cych nie zale\u017cy od innych cz\u0119\u015bci \u201e1C: Enterprise\u201d i jest u\u017cywana przez nas tak\u017ce w kilku niewielkich wewn\u0119trznych narz\u0119dziach.<\/p>\n<p>Na przestrzeni lat rozwoju 1C: Enterprise wygl\u0105d kontrolek zmienia\u0142 si\u0119, ale powa\u017cne zmiany zasad mia\u0142y miejsce tylko raz, w 2009 roku, wraz z wydaniem wersji 8.2 i pojawieniem si\u0119 \u201esterowanych formularzy\u201d. Opr\u00f3cz zmiany wygl\u0105du fundamentalnie zmieni\u0142a si\u0119 zasada kompozycji formularzy \u2014 zrezygnowano z pozycji element\u00f3w piksel po pikselu na rzecz kompozycji element\u00f3w w stylu flow. Ponadto w nowym modelu elementy steruj\u0105ce nie dzia\u0142aj\u0105 bezpo\u015brednio z obiektami domeny, lecz ze specjalnymi DTO (<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/DTO\">Data Transfer Objects<\/a><\/noindex>).<br \/>\nTe zmiany pozwoli\u0142y stworzy\u0107 klienta webowego \u201e1C: Enterprise\u201d, kt\u00f3ry odzwierciedla logik\u0119 kontrolek C++ w JavaScript. Staramy si\u0119 utrzyma\u0107 funkcjonaln\u0105 r\u00f3wnowa\u017cno\u015b\u0107 mi\u0119dzy cienkim a webowym klientem. W przypadku, gdy to niemo\u017cliwe, na przyk\u0142ad z powodu ogranicze\u0144 dost\u0119pnych z JavaScript API (na przyk\u0142ad mo\u017cliwo\u015bci pracy z plikami s\u0105 bardzo ograniczone), cz\u0119sto realizujemy potrzebn\u0105 funkcjonalno\u015b\u0107 za pomoc\u0105 rozszerze\u0144 przegl\u0105darek, napisanych w C++. Obecnie wspieramy Internet Explorer i Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows i Linux) oraz Safari (MacOS).<\/p>\n<p>Ponadto technologia zarz\u0105dzanych formularzy jest wykorzystywana do tworzenia interfejsu aplikacji mobilnych na platformie 1C. Na urz\u0105dzeniach mobilnych renderowanie kontrolek jest realizowane z u\u017cyciem technologii \u201erodzimych\u201d dla systemu operacyjnego, ale logika uk\u0142adu formularza i reakcje interfejsu korzystaj\u0105 z tego samego kodu, co w \u201edu\u017cej\u201d platformie \u201e1C:Przedsi\u0119biorstwo\u201d.<\/p>\n<p><img decoding=\"async\" alt=\"Platforma \u201e1C: Enterprise\u201d \u2013 co kryje si\u0119 pod mask\u0105?\" src=\"\/wp-content\/uploads\/2019\/04\/a4a87ca99cef465e82429739a8845300.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Interfejs 1C na systemie Linux<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Platforma \u201e1C: Enterprise\u201d \u2013 co kryje si\u0119 pod mask\u0105?\" src=\"\/wp-content\/uploads\/2019\/04\/23f48ade4e28242104bfd4e9099800e2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Interfejs 1C na urz\u0105dzeniu mobilnym<\/i><\/p>\n<p><b class=\"spoiler_title\">Interfejs 1C na innych platformach<\/b> <img decoding=\"async\" alt=\"Platforma \u201e1C: Enterprise\u201d \u2013 co kryje si\u0119 pod mask\u0105?\" src=\"\/wp-content\/uploads\/2019\/04\/d04d2431d8c5240d44acce675d837018.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Interfejs 1C na systemie Windows<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Platforma \u201e1C: Enterprise\u201d \u2013 co kryje si\u0119 pod mask\u0105?\" src=\"\/wp-content\/uploads\/2019\/04\/a443f6e2d1cb95e256e0dcff4fe139d2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Interfejs 1C \u2014 klient internetowy<\/i><\/p>\n<p><\/p>\n<h3>Open source<\/h3>\n<p>\nChocia\u017c nie u\u017cywamy standardowych bibliotek C++ dla systemu Windows (MFC, kontrolki z WinAPI), nie wszystkie komponenty piszemy sami. Ju\u017c wspomniana biblioteka <noindex><a rel=\"nofollow\" href=\"http:\/\/www.wxwidgets.org\/\">wxWidgets<\/a><\/noindex>, a ponadto u\u017cywamy:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/curl.haxx.se\/libcurl\/\">cURL<\/a><\/noindex> do pracy z HTTP i FTP. <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/openssl.org\/\">OpenSSL<\/a><\/noindex> do pracy z kryptografi\u0105 i nawi\u0105zywania po\u0142\u0105cze\u0144 TLS<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.xmlsoft.org\/\">libxml2 i libxslt<\/a><\/noindex> do analizy XML<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dinhviethoa\/libetpan\">libetpan<\/a><\/noindex> do pracy z protoko\u0142ami pocztowymi (POP3, SMTP, IMAP)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.codesink.org\/mimetic_mime_library.html\">mimetic<\/a><\/noindex> do analizy wiadomo\u015bci e-mail<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.sqlite.org\/\">sqllite<\/a><\/noindex> do przechowywania dziennik\u00f3w aktywno\u015bci u\u017cytkownik\u00f3w<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/site.icu-project.org\/\">ICU<\/a><\/noindex> do internacjonalizacji<\/li>\n<\/ul>\n<p>\nList\u0119 mo\u017cna by kontynuowa\u0107.<br \/>\nPonadto u\u017cywamy mocno zmodyfikowanej wersji <noindex><a rel=\"nofollow\" href=\"http:\/\/code.google.com\/p\/googletest\/\">Google Test<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"http:\/\/code.google.com\/p\/googlemock\/\">Google Mock<\/a><\/noindex> przy tworzeniu test\u00f3w jednostkowych.<br \/>\nBiblioteki wymaga\u0142y dostosowania do zgodno\u015bci z modelem SCOM organizacji komponent\u00f3w.<br \/>\nPowszechno\u015b\u0107 1C sprawia, \u017ce platforma jest doskona\u0142ym testem wytrzyma\u0142o\u015bci dla wykorzystywanych w niej bibliotek. R\u00f3\u017cnorodno\u015b\u0107 u\u017cytkownik\u00f3w i scenariuszy szybko ujawnia b\u0142\u0119dy nawet w najrzadziej u\u017cywanych fragmentach kodu. Naprawiamy je u siebie i staramy si\u0119 przekaza\u0107 je z powrotem autorom bibliotek. Do\u015bwiadczenie interakcji bywa bardzo r\u00f3\u017cne.<br \/>\nDeweloperzy <noindex><a rel=\"nofollow\" href=\"http:\/\/curl.haxx.se\/libcurl\/\">cURL<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dinhviethoa\/libetpan\">libetpan<\/a><\/noindex> szybko reaguj\u0105 na pull-request, ale \u0142atka, na przyk\u0142ad, w <noindex><a rel=\"nofollow\" href=\"http:\/\/openssl.org\/\">OpenSSL<\/a><\/noindex> nigdy nie uda\u0142o si\u0119 nam odda\u0107.<\/p>\n<h3>Podsumowanie<\/h3>\n<p>\nW artykule poruszyli\u015bmy kilka podstawowych aspekt\u00f3w rozwoju platformy \u201e1C: Przedsi\u0119biorstwo\u201d. W ograniczonym zakresie artyku\u0142u dotkn\u0119li\u015bmy tylko niekt\u00f3rych interesuj\u0105cych, naszym zdaniem, aspekt\u00f3w. <br \/>\nOg\u00f3lny opis r\u00f3\u017cnych mechanizm\u00f3w platformy mo\u017cna zobaczy\u0107 <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Platform.htm\">tutaj<\/a><\/noindex>.<br \/>\nJakie tematy by\u0142yby dla Ciebie interesuj\u0105ce w kolejnych artyku\u0142ach?<\/p>\n<p>Jak zrealizowano mobiln\u0105 platform\u0119 1C?<br \/>\nOpis wewn\u0119trznej struktury klienta internetowego? <br \/>\nA mo\u017ce interesuje Ci\u0119 proces wyboru funkcji do nowych wyda\u0144, tworzenia i testowania?<\/p>\n<p>Napisz w komentarzach!<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <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.1.1 - 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\/pl\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\/pl\/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: Przedsi\u0119biorstwo\u201d \u2014 co kryje si\u0119 pod mask\u0105? | ProHoster","description":"Cze\u015b\u0107, Habr!","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\/pl\/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\/pl\/wp-json\/wp\/v2\/posts\/32475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=32475"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/32475\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/24279"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=32475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=32475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=32475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}