{"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\/pt\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom","title":{"rendered":"Plataforma \"1C: Enterprise\" \u2014 o que h\u00e1 debaixo do cap\u00f4?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ol\u00e1, Habr! <br \/>\nNeste artigo, come\u00e7aremos a discutir como \u00e9 a estrutura interna <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Platform.htm\">da plataforma '1C:Enterprise 8'<\/a><\/noindex> e quais tecnologias s\u00e3o usadas em seu desenvolvimento.<\/p>\n<p><img decoding=\"async\" alt=\"Plataforma &quot;1C: Enterprise&quot; \u2014 o que h\u00e1 debaixo do cap\u00f4?\" src=\"\/wp-content\/uploads\/2019\/04\/9375ea3be32979a7d8c72239dfd50f07.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPor que acreditamos que isso \u00e9 interessante? Em primeiro lugar, porque a plataforma '1C:Enterprise 8' \u00e9 um grande (mais de 10 milh\u00f5es de linhas de c\u00f3digo) aplicativo em C++ (cliente, servidor etc.), JavaScript (cliente web), e, recentemente, tamb\u00e9m <noindex><a rel=\"nofollow\" href=\"http:\/\/www.1c.ru\/news\/info.jsp?id=19821\">Java<\/a><\/noindex>. Grandes projetos s\u00e3o interessantes simplesmente pela escala, pois quest\u00f5es que passam despercebidas em pequenas bases de c\u00f3digo se tornam evidentes nesses projetos. Em segundo lugar, '1C:Enterprise' \u00e9 um produto replic\u00e1vel, 'pronto para uso', e h\u00e1 muito poucos artigos sobre esses tipos de desenvolvimentos no Habrahabr. E tamb\u00e9m \u00e9 sempre interessante saber como as coisas funcionam em outras equipes e empresas.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nEnt\u00e3o, vamos come\u00e7ar. Neste artigo, iremos revisar algumas tecnologias utilizadas na plataforma, delinear o panorama sem nos aprofundar na implementa\u00e7\u00e3o. Afinal, para muitos mecanismos, um relato detalhado demandaria um artigo separado, e para alguns, at\u00e9 um livro inteiro!<br \/>\nPara come\u00e7ar, \u00e9 importante definir algumas quest\u00f5es b\u00e1sicas \u2014 o que \u00e9 a plataforma '1C:Enterprise' e de quais componentes ela \u00e9 composta. A resposta a essa pergunta n\u00e3o \u00e9 simples, pois o termo 'Plataforma' (para abreviar, vamos cham\u00e1-la assim) refere-se tanto a uma ferramenta de desenvolvimento de aplicativos de neg\u00f3cios quanto a um ambiente de execu\u00e7\u00e3o e a ferramentas de administra\u00e7\u00e3o. Podemos, de forma condicional, destacar os seguintes componentes:<\/p>\n<ul>\n<li>cluster de servidores<\/li>\n<li>um cliente 'fino' que pode se conectar ao servidor via http e seu pr\u00f3prio protocolo bin\u00e1rio<\/li>\n<li>um cliente para operar em arquitetura de duas camadas com um banco de dados localizado em um disco r\u00edgido ou pasta de rede<\/li>\n<li>cliente web<\/li>\n<li>ferramentas de administra\u00e7\u00e3o do servidor de aplicativos<\/li>\n<li>ambiente de desenvolvimento (conhecido como Configurador)<\/li>\n<li>ambiente de execu\u00e7\u00e3o para iOS, Android e Windows Phone (plataforma m\u00f3vel 1C)<\/li>\n<\/ul>\n<p>\nTodas essas partes, exceto o cliente web, s\u00e3o escritas em C++. Al\u00e9m disso, existe um rec\u00e9m-anunciado <noindex><a rel=\"nofollow\" href=\"http:\/\/www.1c.ru\/news\/info.jsp?id=19821\">Configurador de nova gera\u00e7\u00e3o<\/a><\/noindex>, escrito em Java.<\/p>\n<h3>Aplicativos nativos<\/h3>\n<p>\nPara o desenvolvimento de aplicativos nativos, utiliza-se C++03. No Windows, o compilador usado \u00e9 o Microsoft Visual C++ 12 (perfil compat\u00edvel com Windows XP), enquanto para Linux e Android usa-se gcc 4.8, e para iOS \u2014 clang 5.0. A biblioteca padr\u00e3o utilizada \u00e9 \u00fanica para todos os sistemas operacionais e compiladores \u2014 STLPort. Esta solu\u00e7\u00e3o reduz a probabilidade de erros espec\u00edficos da implementa\u00e7\u00e3o do STL. Atualmente, estamos planejando a transi\u00e7\u00e3o para a implementa\u00e7\u00e3o do STL fornecida com o CLang, uma vez que o STLPort interrompeu seu desenvolvimento e n\u00e3o \u00e9 compat\u00edvel com o modo de suporte ao C++11 ativado no gcc.<br \/>\nA base de c\u00f3digo do servidor \u00e9 99% comum, enquanto a do cliente \u00e9 em torno de 95%. Al\u00e9m disso, at\u00e9 a plataforma m\u00f3vel utiliza o mesmo c\u00f3digo C++ que a \u2018grande\u2019, embora a percentagem de unifica\u00e7\u00e3o seja um pouco menor. <br \/>\nComo a maioria dos usu\u00e1rios de C++, n\u00e3o pretendemos usar 100% das funcionalidades da linguagem e suas bibliotecas. Assim, quase n\u00e3o utilizamos Boost e, em termos de recursos da linguagem, fazemos pouco uso da convers\u00e3o de tipos din\u00e2mica. Contudo, aplicamos ativamente:<\/p>\n<ul>\n<li>STL (em particular, strings, cont\u00eaineres e algoritmos)<\/li>\n<li>heran\u00e7a m\u00faltipla, incluindo heran\u00e7a m\u00faltipla de implementa\u00e7\u00e3o<\/li>\n<li>templates<\/li>\n<li>exce\u00e7\u00f5es<\/li>\n<li>ponteiros inteligentes (implementa\u00e7\u00e3o pr\u00f3pria)<\/li>\n<\/ul>\n<p>\nGra\u00e7as ao uso da heran\u00e7a m\u00faltipla de interfaces (classes completamente abstratas), um modelo componente se torna vi\u00e1vel, sobre o qual falaremos a seguir.<\/p>\n<h3>Componentes<\/h3>\n<p>\nPara garantir a modularidade, toda a funcionalidade \u00e9 dividida em componentes, que s\u00e3o bibliotecas din\u00e2micas (*.dll para Windows, *.so \u2014 para Linux). Existem mais de uma centena de componentes, a seguir apresentamos descri\u00e7\u00f5es de alguns deles:<\/p>\n<p>backend<br \/>\nCont\u00e9m o \u2018motor\u2019 de metadados da plataforma<\/p>\n<p>accnt<br \/>\nObjetos que desenvolvedores de aplica\u00e7\u00e3o usam para construir a contabilidade (planos de contas e registros cont\u00e1beis)<\/p>\n<p>bsl<br \/>\nMotor de execu\u00e7\u00e3o da linguagem embutida<\/p>\n<p>nuke<br \/>\nImplementa\u00e7\u00e3o pr\u00f3pria do alocador de mem\u00f3ria<\/p>\n<p>dbeng8<br \/>\nMotor de banco de dados baseado em arquivos. Uma simples m\u00e1quina de banco de dados tipo servidor de arquivos, fundamentada no ISAM, incluindo um processador SQL simples<\/p>\n<p>wbase<br \/>\nCont\u00e9m classes e fun\u00e7\u00f5es b\u00e1sicas para a implementa\u00e7\u00e3o da interface do usu\u00e1rio do Windows \u2014 classes de janelas, acesso ao GDI, etc.<\/p>\n<p>\nA divis\u00e3o em m\u00faltiplos componentes \u00e9 ben\u00e9fica sob v\u00e1rios aspectos:<\/p>\n<ul>\n<li>A separa\u00e7\u00e3o favorece um melhor design, especialmente uma melhor isolamento do c\u00f3digo<\/li>\n<li>Com um conjunto de componentes, \u00e9 poss\u00edvel montar diferentes variantes de entrega:\n<ul>\n<li>Por exemplo, a instala\u00e7\u00e3o de um cliente leve incluir\u00e1 wbase, mas n\u00e3o ter\u00e1 backend<\/li>\n<li>enquanto no servidor wbase, inversamente, n\u00e3o estar\u00e1 presente<\/li>\n<li>Ambas as variantes, claro, conter\u00e3o nuke e bsl<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\nTodos os componentes necess\u00e1rios para essa variante de execu\u00e7\u00e3o s\u00e3o carregados quando o programa \u00e9 iniciado. Isso \u00e9 especialmente importante para o registro de classes SCOM, que ser\u00e1 discutido a seguir.<\/p>\n<h3>SCOM<\/h3>\n<p>\nPara decomposi\u00e7\u00e3o em um n\u00edvel mais baixo, utiliza-se o sistema SCOM \u2014 semelhante em ideologia \u00e0 biblioteca ATL. Para aqueles que n\u00e3o trabalharam com ATL, listarei brevemente suas principais funcionalidades e caracter\u00edsticas. <br \/>\nPara a classe SCOM especialmente projetada:<\/p>\n<ul>\n<li>Fornece m\u00e9todos de f\u00e1brica que permitem criar uma classe de outro componente conhecendo apenas seu nome (sem divulgar a implementa\u00e7\u00e3o)<\/li>\n<li>Fornece infraestrutura de ponteiros inteligentes com contagem de refer\u00eancias. N\u00e3o \u00e9 necess\u00e1rio monitorar manualmente a vida \u00fatil da classe SCOM<\/li>\n<li>Permite verificar se um objeto implementa uma interface espec\u00edfica e automaticamente converter um ponteiro para o objeto em um ponteiro para a interface<\/li>\n<li>Criar um objeto-servi\u00e7o, sempre dispon\u00edvel atrav\u00e9s do m\u00e9todo get_service, etc.<\/li>\n<\/ul>\n<p>\nPor exemplo, pode-se descrever na componente json.dll uma classe para leitura de JSON (por exemplo, JSONStreamReader).<br \/>\nClasses e inst\u00e2ncias podem ser criadas a partir de outros componentes que precisam ser registrados na m\u00e1quina SCOM:<\/p>\n<pre><code class=\"cpp\">SCOM_CLASS_ENTRY(JSONStreamReader)\n<\/code><\/pre>\n<p>\nEsse macro descrever\u00e1 uma classe registradora est\u00e1tica especial, cujo construtor ser\u00e1 chamado ao carregar o componente na mem\u00f3ria.<br \/>\nDepois disso, \u00e9 poss\u00edvel criar sua inst\u00e2ncia em outro componente:<\/p>\n<pre><code class=\"cpp\">IJSONStreamReaderPtr jsonReader = create_instance(SCOM_CLSIDOF(JSONStreamReader));\n<\/code><\/pre>\n<p>\nPara suporte a servi\u00e7os, o SCOM oferece uma infraestrutura adicional, bastante complexa. O conceito central \u00e9 o processo SCOM, que serve como cont\u00eainer para os servi\u00e7os em execu\u00e7\u00e3o (ou seja, atua como um Localizador de Servi\u00e7os), e tamb\u00e9m cont\u00e9m a vincula\u00e7\u00e3o a recursos localiz\u00e1veis. O processo SCOM \u00e9 vinculado ao fluxo do sistema operacional. Gra\u00e7as a isso, dentro do aplicativo, \u00e9 poss\u00edvel obter servi\u00e7os da seguinte maneira:<\/p>\n<pre><code class=\"cpp\">SCOM_Process* process = core::current_process();\nif (process)\n         return get_service(process);\n<\/code><\/pre>\n<p>\nAl\u00e9m disso, ao alternar processos l\u00f3gicos (SCOM) vinculados ao fluxo, \u00e9 poss\u00edvel obter aplicativos praticamente independentes em termos de espa\u00e7o informacional, funcionando dentro de um \u00fanico fluxo. Assim \u00e9 o nosso cliente leve, que opera com uma base de dados de arquivos \u2014 dentro de um processo do sistema operacional, existem dois processos SCOM, um ligado ao cliente e o outro ao servidor. Essa abordagem permite padronizar a escrita de c\u00f3digo, que funcionar\u00e1 tanto em uma base de dados local quanto na vers\u00e3o 'real' cliente-servidor. O custo dessa uniformidade s\u00e3o os gastos operacionais, mas a pr\u00e1tica mostra que eles valem a pena.<\/p>\n<p>A l\u00f3gica de neg\u00f3cios e a parte de interface do 1C:Enterprise s\u00e3o implementadas com base no modelo de componentes SCOM.<\/p>\n<h3>Interface do usu\u00e1rio<\/h3>\n<p>\nFalando em interfaces. N\u00e3o utilizamos os controles padr\u00e3o do Windows, nossos elementos de controle s\u00e3o implementados diretamente na API do Windows. Para a vers\u00e3o Linux, foi criada uma camada que funciona atrav\u00e9s da biblioteca wxWidgets.<br \/>\nA biblioteca de elementos de controle n\u00e3o depende de outras partes do '1C:Enterprise' e \u00e9 utilizada tamb\u00e9m em v\u00e1rias pequenas utilidades internas.<\/p>\n<p>Ao longo dos anos de desenvolvimento do 1C:Enterprise, a apar\u00eancia dos controles mudou, mas a mudan\u00e7a significativa nos princ\u00edpios ocorreu apenas uma vez, em 2009, com o lan\u00e7amento da vers\u00e3o 8.2 e o surgimento das 'formas gerenciadas'. Al\u00e9m da mudan\u00e7a na apar\u00eancia, o princ\u00edpio de montagem de formul\u00e1rios foi fundamentalmente alterado \u2014 houve a substitui\u00e7\u00e3o da posicionamento pixel a pixel dos elementos em favor da montagem em fluxo. Al\u00e9m disso, na nova modelo, os elementos de controle n\u00e3o trabalham diretamente com objetos de dom\u00ednio, mas com DTOs especiais (<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/DTO\">Data Transfer Objects<\/a><\/noindex>).<br \/>\nEssas mudan\u00e7as permitiram criar o cliente web do '1C:Enterprise', que replica a l\u00f3gica dos controles em C++ em JavaScript. Esfor\u00e7amo-nos para manter a equival\u00eancia funcional entre os clientes leve e web. Nos casos em que isso n\u00e3o \u00e9 poss\u00edvel, por exemplo, devido a limita\u00e7\u00f5es do API dispon\u00edvel em JavaScript (como as possibilidades de manipula\u00e7\u00e3o de arquivos, que s\u00e3o muito limitadas), frequentemente implementamos a funcionalidade necess\u00e1ria por meio de extens\u00f5es de navegador escritas em C++. No momento, suportamos o Internet Explorer e Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows e Linux) e Safari (MacOS).<\/p>\n<p>Al\u00e9m disso, a tecnologia de formul\u00e1rios gerenciados \u00e9 usada para criar a interface de aplicativos m\u00f3veis na plataforma 1C. Em dispositivos m\u00f3veis, a renderiza\u00e7\u00e3o dos controles \u00e9 implementada utilizando tecnologias 'nativas' do sistema operacional, mas para a l\u00f3gica de layout do formul\u00e1rio e a resposta da interface, o mesmo c\u00f3digo da 'grande' plataforma '1C:Enterprise' \u00e9 utilizado.<\/p>\n<p><img decoding=\"async\" alt=\"Plataforma &quot;1C: Enterprise&quot; \u2014 o que h\u00e1 debaixo do cap\u00f4?\" src=\"\/wp-content\/uploads\/2019\/04\/a4a87ca99cef465e82429739a8845300.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Interface 1C no sistema operacional Linux<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Plataforma &quot;1C: Enterprise&quot; \u2014 o que h\u00e1 debaixo do cap\u00f4?\" src=\"\/wp-content\/uploads\/2019\/04\/23f48ade4e28242104bfd4e9099800e2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Interface 1C em dispositivo m\u00f3vel<\/i><\/p>\n<p><b class=\"spoiler_title\">Interface 1C em outras plataformas<\/b> <img decoding=\"async\" alt=\"Plataforma &quot;1C: Enterprise&quot; \u2014 o que h\u00e1 debaixo do cap\u00f4?\" src=\"\/wp-content\/uploads\/2019\/04\/d04d2431d8c5240d44acce675d837018.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Interface 1C no sistema operacional Windows<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Plataforma &quot;1C: Enterprise&quot; \u2014 o que h\u00e1 debaixo do cap\u00f4?\" src=\"\/wp-content\/uploads\/2019\/04\/a443f6e2d1cb95e256e0dcff4fe139d2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Interface 1C \u2014 cliente web<\/i><\/p>\n<p><\/p>\n<h3>C\u00f3digo aberto<\/h3>\n<p>\nEmbora n\u00e3o usemos bibliotecas padr\u00e3o para desenvolvedores C++ no Windows (MFC, controles da WinAPI), n\u00e3o escrevemos todos os componentes n\u00f3s mesmos. J\u00e1 mencionamos a biblioteca <noindex><a rel=\"nofollow\" href=\"http:\/\/www.wxwidgets.org\/\">wxWidgets<\/a><\/noindex>, e tamb\u00e9m usamos:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/curl.haxx.se\/libcurl\/\">cURL<\/a><\/noindex> para trabalhar com HTTP e FTP. <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/openssl.org\/\">OpenSSL<\/a><\/noindex> para trabalhar com criptografia e estabelecer conex\u00f5es TLS<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.xmlsoft.org\/\">libxml2 e libxslt<\/a><\/noindex> para an\u00e1lise de XML<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dinhviethoa\/libetpan\">libetpan<\/a><\/noindex> para trabalhar com protocolos de e-mail (POP3, SMTP, IMAP)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.codesink.org\/mimetic_mime_library.html\">mimetic<\/a><\/noindex> para an\u00e1lise de mensagens de e-mail<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.sqlite.org\/\">sqllite<\/a><\/noindex> para armazenar logs de atividades dos usu\u00e1rios<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/site.icu-project.org\/\">ICU<\/a><\/noindex> para internacionaliza\u00e7\u00e3o<\/li>\n<\/ul>\n<p>\nA lista pode ser continuada.<br \/>\nAl\u00e9m disso, usamos vers\u00f5es fortemente modificadas de <noindex><a rel=\"nofollow\" href=\"http:\/\/code.google.com\/p\/googletest\/\">Google Test<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"http:\/\/code.google.com\/p\/googlemock\/\">Google Mock<\/a><\/noindex> na cria\u00e7\u00e3o de testes unit\u00e1rios.<br \/>\nAs bibliotecas exigiram adapta\u00e7\u00f5es para compatibilidade com o modelo SCOM da organiza\u00e7\u00e3o de componentes.<br \/>\nA popularidade da 1C faz da plataforma uma excelente avalia\u00e7\u00e3o para as bibliotecas utilizadas nela. A diversidade de usu\u00e1rios e cen\u00e1rios rapidamente revela bugs mesmo nas partes de c\u00f3digo mais raramente usadas. N\u00f3s os corrigimos internamente e tentamos devolver os patches aos autores das bibliotecas. A experi\u00eancia de intera\u00e7\u00e3o varia muito.<br \/>\nDesenvolvedores <noindex><a rel=\"nofollow\" href=\"http:\/\/curl.haxx.se\/libcurl\/\">cURL<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dinhviethoa\/libetpan\">libetpan<\/a><\/noindex> responde rapidamente a pull-requests, mas o patch, por exemplo, em <noindex><a rel=\"nofollow\" href=\"http:\/\/openssl.org\/\">OpenSSL<\/a><\/noindex> n\u00e3o conseguimos devolver.<\/p>\n<h3>Conclus\u00e3o<\/h3>\n<p>\nNeste artigo, abordamos alguns aspectos principais do desenvolvimento da plataforma '1C:Enterprise'. Em um artigo de tamanho limitado, abordamos apenas alguns aspectos que consideramos interessantes. <br \/>\nUma descri\u00e7\u00e3o geral dos v\u00e1rios mecanismos da plataforma pode ser vista <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Platform.htm\">aqui<\/a><\/noindex>.<br \/>\nQuais t\u00f3picos voc\u00ea gostaria de ver em artigos futuros?<\/p>\n<p>Como a plataforma m\u00f3vel 1C foi implementada?<br \/>\nDescri\u00e7\u00e3o da estrutura interna do cliente web? <br \/>\nOu, talvez, voc\u00ea esteja interessado no processo de sele\u00e7\u00e3o de recursos para novas vers\u00f5es, desenvolvimento e testes?<\/p>\n<p>Escreva nos coment\u00e1rios!<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/269611\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u00ab1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 8\u00bb \u0438 \u043a\u0430\u043a\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0435\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e? \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u00ab1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 8\u00bb \u2014 \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 (\u0431\u043e\u043b\u0435\u0435 10 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430) \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 C++ (\u043a\u043b\u0438\u0435\u043d\u0442, \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0442.\u0434.), JavaScript (\u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442), \u0438, \u0441 \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24279,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32475","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 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\/pt\/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=\"pt_PT\" \/>\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\/pt\/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\udd47Plataforma '1C:Enterprise' \u2014 o que est\u00e1 por tr\u00e1s? | ProHoster","description":"Ol\u00e1, Habr!","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/platforma-1s-predpriyatie-chto-pod-kapotom","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/32475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=32475"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/32475\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/24279"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=32475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=32475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=32475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}