1C - Bem e mal. Disposição de pontos em holivares em torno de 1C

1C - Bem e mal. Disposição de pontos em holivares em torno de 1C

Amigos e colegas, recentemente tem havido artigos mais frequentes sobre Habré com ódio ao 1C como plataforma de desenvolvimento, e discursos dos seus defensores. Esses artigos identificaram um problema sério: na maioria das vezes, os críticos de 1C o criticam na posição de “não dominá-lo”, repreendendo problemas que são de fato facilmente resolvidos e, pelo contrário, não abordando problemas que são realmente importantes, vale a pena discutindo e não são resolvidos pelo fornecedor. Acredito que faz sentido realizar uma revisão sóbria e equilibrada da plataforma 1C. O que pode fazer, o que não pode fazer, o que deveria fazer mas não faz e, para sobremesa, o que faz com força, e seus desenvolvedores em %technology_name% farão cem anos, jogando-o fora mais de um orçamento anual.

Como resultado, você, como gerente ou arquiteto, poderá ter uma compreensão clara de qual tarefa será benéfica para você usar 1C e onde ele precisa ser queimado com ferro quente. Como desenvolvedor no mundo “não-1C”, você poderá ver o que há em 1C que está causando confusão. E como desenvolvedor 1C, você poderá comparar seu sistema com os ecossistemas de outras linguagens e entender sua localização no sistema de coordenadas de desenvolvimento de software.

Sob o corte há muitos ataques grossos ao 1C, aos críticos do 1C, ao Java, .NET e em geral... O fã está cheio, seja bem-vindo!

Quem sou eu

Estou familiarizado com o assunto da conversa desde aproximadamente 2004. Eu programo provavelmente desde os 6 anos, desde o momento em que ganhei um livro sobre o professor Fortran com histórias em quadrinhos sobre um gato, um pardal e uma lagarta. Analisei os programas que o gato escreveu a partir das fotos do livro e descobri o que eles faziam. E sim, eu não tinha um computador de verdade naquela época, mas havia um desenho na página do livro e eu honestamente apertei os botões de papel, digitando os comandos que havia espionado no gato X.

Depois houve BK0011 e BASIC na escola, C++ e assemblers na universidade, depois 1C e tantas outras coisas que tenho preguiça de lembrar. Nos últimos 15 anos, estive envolvido principalmente em 1C, não apenas em termos de codificação, mas em 1C em geral. Definindo tarefas, administração e devops aqui. Nos últimos 5 anos tenho estado envolvido em atividades socialmente úteis em termos de desenvolvimento de ferramentas de desenvolvimento e automação para outros usuários 1C, escrevendo artigos e livros.

Vamos decidir sobre o assunto da discussão

Primeiramente, vamos definir sobre o que vamos falar, já que as letras “1C” podem significar muitas coisas. Neste caso, pelas letras “1C” queremos dizer exclusivamente o framework de desenvolvimento “1C: Enterprise” da oitava versão moderna. Não falaremos muito sobre o fabricante e suas políticas (mas teremos que fazer um pouco). Não discutiremos aplicações específicas escritas utilizando este framework. A tecnologia é separada, os aplicativos, também conhecidos como configurações, são separados.

Arquitetura de alto nível 1C:Enterprise

Não é à toa que menciono a palavra “framework”. Do ponto de vista do desenvolvedor, a plataforma 1C é precisamente uma estrutura. E você precisa tratá-lo exatamente como uma estrutura. Pense nisso como Spring ou ASP.NET, executado por algum tempo de execução (JVM ou CLR respectivamente). Acontece que no mundo da programação convencional (“não 1C”) a divisão em frameworks, máquinas virtuais e aplicações específicas é natural, pelo fato de esses componentes serem normalmente desenvolvidos por diferentes fabricantes. No mundo 1C, não é costume distinguir explicitamente a estrutura de desenvolvimento e o tempo de execução em si. Além disso, aplicativos específicos escritos usando a estrutura também são desenvolvidos principalmente pela própria 1C; Como resultado, surge alguma confusão. Portanto, no âmbito do artigo, teremos que considerar 1C de vários lados ao mesmo tempo e classificá-lo ao longo de vários eixos de coordenadas. E em cada eixo de coordenadas colocaremos uma pá de substância marrom e veremos as características, vantagens e desvantagens da solução existente.

Pontos de vista sobre 1C

1C para o comprador

O comprador adquire um sistema de automação com o qual pode resolver rapidamente os problemas de automatização do seu próprio negócio. Uma empresa pode ser uma pequena barraca ou uma grande holding. É claro que as necessidades dessas empresas são diferentes, mas ambas são suportadas por uma única base de código de plataforma.

Para o comprador 1C, este é um tempo de lançamento no mercado rápido. Rápido. Mais rápido que Java, C# ou JS. Média. Ao redor do hospital. É claro que um site de cartão de visita usando React terá um desempenho melhor, mas o backend de um sistema WMS será lançado mais rápido em 1C.

1C como ferramenta

Cada solução tecnológica tem limites de aplicabilidade. 1C não é uma linguagem de uso geral; ela não vive separada de sua estrutura. É aconselhável usar 1C quando você precisar:

  • aplicativo de servidor
  • aplicativo onde as finanças aparecem
  • com UI pronta, ORM, relatórios, XML/JSON/COM/PDF/YourDataTransferingFormat
  • com suporte para processos e trabalhos em segundo plano
  • com segurança baseada em funções
  • com lógica de negócios programável
  • com a capacidade de criar rapidamente um protótipo e baixo tempo de lançamento no mercado

Você não precisa de 1C se quiser:

  • aprendizado de máquina
  • Cálculos de GPU
  • computação gráfica
  • cálculos matemáticos
  • Sistema CAD
  • processamento de sinal (som, vídeo)
  • highload chamadas http com centenas de milhares de rps

1C como empresa de manufatura

Vale a pena entender qual é o negócio da 1C como fabricante de software. A empresa 1C vende soluções para problemas de negócios por meio da automação. Negócios diferentes, grandes ou pequenos, mas é isso que ela vende. Os meios para atingir esse objetivo são os aplicativos de negócios. Para contabilidade, folha de pagamento, etc. Para escrever esses aplicativos, a empresa usa sua própria plataforma de desenvolvimento de aplicativos de negócios. Especialmente adaptado para tarefas comuns destas mesmas aplicações de negócios:

  • contabilidade financeira
  • fácil personalização da lógica de negócios
  • amplas possibilidades de integração em cenários de TI heterogêneos

Como fabricante, a 1C acredita que esta é a estratégia que lhe permite trabalhar com parceiros e clientes de forma ganha-ganha. Você pode argumentar contra isso, mas é basicamente assim que a empresa se promove: soluções prontas para problemas de negócios que podem ser rapidamente personalizadas pelos parceiros e integradas em qualquer cenário de TI.

Todas as reivindicações ou desejos de 1C como estrutura devem ser vistos exclusivamente através deste prisma. “Queremos OOP em 1C”, dizem os desenvolvedores. “Quanto nos custará apoiar OOP na plataforma, isso nos ajudará a aumentar as vendas de caixas?”, diz 1C. Abre seu “prisma” de venda de soluções para problemas de negócios:

- Ei, negócio, você quer OOP no seu 1C?
- Isso vai me ajudar a resolver meus problemas?
- Quem sabe...
- Então não há necessidade

Essa abordagem pode ser boa ou ruim dependendo de quem a observa, mas é assim que as coisas são. Falando sobre o fato de não haver recurso X em 1C, é preciso entender que ele não existe por um motivo, mas no contexto da escolha “custo de implementação vs valor do lucro”.

classificação tecnológica

“Na verdade, os Odinesniks fazem o possível para usar os melhores padrões, cuidadosamente selecionados por metodologistas e desenvolvedores atenciosos da plataforma 1C.
Quando você escreve seu código estúpido para um formulário gerenciado simples, na realidade você está usando controlador de visualização de modelo с vinculação de dados bidirecional в mecanismo de aplicativo de dados de três camadas, aromatizado mapeamento de relação de objeto de alto nível baseado em descrição declarativa de metadadostendo o seu próprio linguagem de consulta independente de plataforma, C interface de usuário declarativa baseada em dados, serialização transparente completa e linguagem de programa orientada a domínio.

Onde os desenvolvedores 1C diferem de seus colegas ocidentais é nas relações públicas. Eles adoram dar um grande nome a qualquer besteira e andar com ela como um saco sujo.”
A. Orefkov

A plataforma 1C possui uma arquitetura clássica de 3 camadas, no centro da qual está o servidor de aplicativos (ou sua emulação por pouco dinheiro para pequenos lojistas). MS SQL ou Postgres são usados ​​​​como DBMS. Também há suporte para Oracle e IBM DB2, mas isso é bastante esotérico, ninguém sabe o que acontecerá se você implementar 1C nesses bancos de dados sob carga média e alta. Acredito que o próprio 1C não sabe disso.

A parte do cliente é um thin client instalado na máquina do usuário ou um web client. A principal característica é que os programadores não escrevem 2 códigos diferentes, eles escrevem um aplicativo, em um idioma, e você pode exibi-lo no navegador se desejar ou precisar. Quem aí queria um verdadeiro full stack e uma única linguagem para front e backend, node.js? Eles nunca conseguiram fazer exatamente a mesma coisa até o fim. Existe uma pilha completa real, mas você terá que escrevê-la em 1C. A ironia do destino, essas coisas :)

A solução SaaS em nuvem 1C:Fresh também funciona no modo navegador, no qual você não pode comprar 1C, mas alugar um pequeno banco de dados e acompanhar as vendas de shawarma lá. Apenas no navegador, sem instalar ou configurar nada.

Além disso, existe um cliente legado, que em 1C é chamado de “aplicativo regular”. Legado é legado, bem-vindo ao mundo das aplicações em 2002, mas ainda estamos falando do estado atual do ecossistema.

A parte do servidor 1C suporta clustering e escala adicionando novas máquinas ao cluster. Muitas cópias foram quebradas aqui e haverá uma seção separada no artigo sobre isso. Resumindo, isso não é exatamente o mesmo que adicionar algumas instâncias exatamente iguais por trás do HAProxy.

A estrutura de desenvolvimento de aplicativos usa sua própria linguagem de programação, que se assemelha aproximadamente a um VB6 ligeiramente melhorado, traduzido para o russo. Para pessoas que odeiam tudo que é russo, que não acreditam que “se” seja traduzido como “se”, a segunda opção de sintaxe é oferecida. Aqueles. Se desejar, você pode escrevê-lo em 1C de forma que seja indistinguível de VB.

1C - Bem e mal. Disposição de pontos em holivares em torno de 1C

Essa mesma linguagem de programação é o principal motivo do ódio dos apelidos 1C em relação à sua plataforma. Vamos enfrentá-lo, não sem razão. A linguagem foi concebida da forma mais simples possível, projetada para cumprir o mantra “DESENVOLVEDORES, DESENVOLVEDORES” em uma escala pelo menos no CIS. A essência comercial de tal solução, na minha opinião, é claramente visível: mais desenvolvedores, maior cobertura de mercado. Isto se tornou realidade, de acordo com várias estimativas, de 45% a 95%. Direi desde já que escrever no idioma que você acha é realmente mais fácil. E eu conheço muitas linguagens de programação.

Vamos começar com o idioma.

Linguagem de programação 1C

Ao mesmo tempo, o ponto forte e fraco do sistema. Fornece fácil entrada e legibilidade. Por outro lado, não foi atualizado desde o lançamento da versão 8 em 2002 e está moralmente desatualizado. Alguém dirá “a principal desvantagem é que não existe OOP” e estará errado. Em primeiro lugar, a OLP não gosta não só de Nuraliev, mas também de Torvalds. E em segundo lugar, a OOP ainda existe.

Do ponto de vista do desenvolvedor, ele tem à sua disposição um framework com classes base exibidas no SGBD. O desenvolvedor pode pegar a classe base “Diretório” e herdar dela o diretório “Clientes”. Ele pode adicionar novos campos de classe a ele, por exemplo, INN e Address, e também, se necessário, pode substituir (substituir) métodos da classe base, por exemplo, o método OnWrite/AtRecord.

A estrutura é projetada de tal forma que raramente é necessária uma herança mais profunda, e a restrição na OOP, na minha opinião, faz sentido. 1C foca no Desenvolvimento Orientado a Domínio e faz você pensar, antes de tudo, na área temática da solução que está sendo desenvolvida, e isso é bom. Não apenas não há tentação, mas também não há necessidade de escrever 10 DTOs e ViewModels diferentes apenas para mostrar alguns dados do domínio em algum lugar. O desenvolvedor 1C sempre opera com uma entidade, sem sobrecarregar o contexto de percepção com uma dezena de classes com nomes semelhantes, representando a mesma entidade, mas de um lado diferente. Qualquer aplicação .NET, por exemplo, conterá necessariamente cinco ou dois ViewModels e DTOs para serialização em JSON e transferência de dados do cliente para o servidor. E aproximadamente 10-15% do código do seu aplicativo será gasto na transferência de dados de uma classe para outra usando canetas ou muletas como o AutoMapper. Este código deve ser escrito e os programadores devem ser pagos para criá-lo e mantê-lo.

Acontece que a linguagem 1C é difícil de desenvolver sem complicá-la ao nível das linguagens convencionais, perdendo assim a vantagem da simplicidade. Qual é a tarefa do vendedor que está essencialmente sendo resolvida: emitir uma solução padrão que qualquer aluno pego na rua possa personalizar com o nível de qualidade exigido (ou seja, uma caixa que cobre desde uma barraca até uma grande fábrica está concluída). Se você é uma barraca, contrate um aluno; se você for uma fábrica, contrate um guru do seu parceiro de implementação. O facto de os parceiros de implementação venderem os estudantes ao preço de um guru não é um problema do enquadramento. Arquitetonicamente, o framework deve resolver os problemas de ambos, o código de configurações padrão (que vendemos para empresas com a promessa de customização) deve poder ser compreendido por um aluno, e um guru deve ser capaz de entender o que você quiser.

O que, na minha opinião, realmente falta na linguagem, o que obriga a escrever mais do que poderia, é o que desperdiça o tempo pago pelo cliente.

  • Possibilidade de digitação no nível, por exemplo, TypeScript (como resultado, ferramentas de análise de código mais desenvolvidas no IDE, refatoração, menos batentes ofensivos)
    Disponibilidade de funções como objetos de primeira classe. Um conceito um pouco mais complexo, mas a quantidade de código padrão típico pode ser bastante reduzida. A compreensão do código pelo aluno, IMHO, aumentaria até devido à redução do volume
  • Literais de coleção universal, inicializadores. A mesma coisa - reduzir a quantidade de código que precisa ser escrito e/ou visto com os olhos. O preenchimento de coleções ocupa mais de 9000% do tempo de programação 1C. Escrever isso sem açúcar sintático é longo, caro e sujeito a erros. Em geral, a quantidade de LOC em soluções 1C excede todos os limites concebíveis em comparação com estruturas abertas disponíveis e, em geral, com todos os Javas da sua empresa combinados. A linguagem é detalhada, e isso degenera em quantidade de dados, memória, freios IDE, tempo, dinheiro...
  • finalmente construções, tenho a hipótese de que esta construção está faltando devido ao fato de não terem encontrado uma tradução bem-sucedida dela para o russo :)
  • Tipos de dados próprios (sem OOP), análogos do Type do VB6. Isso permitirá que você não digite estruturas usando comentários no BSP e métodos mágicos que constroem essas estruturas. Obtemos: menos código, uma dica através de um ponto, solução mais rápida para o problema, menos erros devido a erros de digitação e falta de propriedades de estruturas. Agora, a digitação das estruturas do usuário cabe inteiramente à equipe de desenvolvimento da Standard Subsystem Library, que, para seu crédito, escreve cuidadosamente comentários sobre as propriedades esperadas das estruturas de parâmetros passadas.
  • Nada de açúcar ao trabalhar com chamadas assíncronas no cliente web. callback-hell na forma de ProcessingNotifications é uma muleta temporária causada por uma mudança repentina na API dos principais navegadores, mas você não pode viver assim o tempo todo, a vantagem da “compreensão do aluno” do código assíncrono está sendo perdida; mais e mais. Adicione nenhum suporte para esse paradigma no IDE principal e as coisas ficarão ainda piores.

Este é um dos problemas prementes, é claro que a lista poderia ser muito maior, mas não podemos esquecer que esta ainda não é uma linguagem de uso geral, não requer multithreading, funções lambda, acesso à GPU e velocidade cálculos de ponto flutuante. Esta é uma linguagem de script de lógica de negócios.

Um programador que já trabalhou muito com esta linguagem, olha para js ou c#, fica entediado com a estrutura desta linguagem. É um fato. Ele precisa de desenvolvimento. Do outro lado da escala para o fornecedor está o custo de implementação dos recursos especificados versus o aumento na receita após sua implementação. Aqui não tenho nenhuma informação sobre o que atualmente está pesando aos olhos da empresa.

Ambiente de desenvolvimento

As coisas também não estão indo bem aqui. Existem dois ambientes de desenvolvimento. O primeiro é o Configurador incluído na entrega. O segundo é o ambiente Enterprise Development Tools, ou EDT, desenvolvido com base no Eclipse.

O configurador oferece uma gama completa de tarefas de desenvolvimento, suporta todas as funcionalidades e é o principal ambiente do mercado. Também é moralmente obsoleto, não se desenvolve, segundo rumores - devido ao montante da dívida técnica dentro de si. A situação poderia ser melhorada abrindo uma API interna (na forma de amizade com Boneco de neve A. Orefkova ou de forma independente), mas não é o caso. A prática tem mostrado que a comunidade escreverá seus próprios recursos no IDE, desde que o fornecedor não interfira. Mas temos o que temos. O configurador era ótimo em 2004-2005, lembrava muito o Visual Studio daquela época, em alguns lugares era ainda mais legal, mas ficou preso naquela época.

Além disso, o volume da solução padrão média cresceu várias vezes desde então, e hoje o IDE simplesmente não consegue lidar com a quantidade de código com o qual é alimentado. As capacidades de usabilidade e refatoração não são nem zero, estão no vermelho. Tudo isso não acrescenta entusiasmo aos desenvolvedores e eles sonham em migrar para outros ecossistemas e continuar codificando merda lá, mas em um ambiente agradável que não cuspa na sua cara com seu comportamento.

Como alternativa, é oferecido um IDE escrito do zero, construído no Eclipse. Lá as fontes, como em qualquer outro software, ficam na forma de arquivos de texto, são armazenadas no GIT, pull request ramificações, tudo isso. Por outro lado, ele não sai do status beta há muitos anos, embora esteja melhorando a cada lançamento. Não vou escrever sobre as desvantagens do EDT, hoje é um sinal de menos, amanhã é um recurso fixo. A relevância de tal descrição desaparecerá rapidamente. Hoje é possível desenvolver em EDT, mas é incomum que você precise estar preparado para um certo número de bugs no IDE.

Se você olhar a situação pelo já mencionado “prisma 1C”, obterá algo assim: o lançamento do novo IDE não aumenta as vendas de caixas, mas a saída de DESENVOLVEDORES pode ser reduzida. É difícil dizer o que aguarda o ecossistema em termos de conforto para os desenvolvedores, mas a Microsoft já estragou os desenvolvedores móveis ao oferecer-lhes seus serviços tarde demais.

Gestão do desenvolvimento

Tudo aqui é significativamente melhor do que escrever código, especialmente recentemente, quando os esforços da comunidade trouxeram à tona os problemas de automação da administração, lançaram protótipos pedindo o lançamento do repositório 1C na lixeira e usando git, culpa rápida, revisão de código , análise estática, implantação automática e etc. Muitos recursos foram adicionados à plataforma que aumentam o nível de automação das tarefas de desenvolvimento. Porém, todas essas funcionalidades foram agregadas única e exclusivamente para o desenvolvimento de nossos próprios produtos de grande porte, quando se tornou óbvio que não poderíamos prescindir da automação. Houve mesclagens automáticas, comparação de três vias com o KDiff e tudo mais. Lançado no Github conversor de git, que, francamente, foi ideologicamente afastado do projeto gitsync, mas modificado para se adequar aos processos da empresa fornecedora. Graças aos caras teimosos do código aberto, a automação do desenvolvimento em 1C decolou. Uma API aberta para o configurador, IMHO, também mudaria o atraso moral do IDE principal.

Hoje, armazenar fontes 1C no git com commits vinculados a problemas no Jira, revisões no Crisol, botão de pressão do Jenkins e relatórios do Allure sobre testes de código no 1C e até análise estática no SonarQube - isso está longe de ser novidade, mas sim o mainstream em empresas onde há muito desenvolvimento 1C.

administração

Há muito a dizer aqui. Em primeiro lugar, este é, obviamente, um servidor (cluster de servidores 1C). Uma coisa maravilhosa, mas pelo fato de ser uma caixa totalmente preta, documentada com detalhes suficientes, mas de forma específica - dominar o lançamento da operação ininterrupta em modo de alta carga em vários servidores é tarefa de poucos selecionados que usam um medalha com a inscrição “Especialista em Questões Tecnológicas”. É importante notar que, em princípio, administrar um servidor 1C não é diferente de administrar qualquer outro servidor. É um aplicativo multithread baseado em rede que consome memória, CPU e recursos de disco. Oferece amplas oportunidades para coleta e diagnóstico de telemetria.

O problema aqui é que o fornecedor não oferece nada de especial em termos de soluções prontas para esse diagnóstico. Sim, existe o 1C: Centro de Instrumentação e Controle, eles são até muito bons, mas são muito caros e nem todo mundo os tem. Existem vários desenvolvimentos na comunidade para conectar Grafana, Zabbix, ELK e outras coisas do conjunto de administração padrão, mas não existe uma solução única que atenda à maioria. A tarefa aguarda seu herói. E se você é uma empresa que planeja lançar um cluster 1C, você precisa de um especialista. Seu por dentro ou por fora, mas você precisa dele. É normal que exista uma função separada com competências para operação de servidor, nem todo usuário 1C deve saber disso, você só precisa entender que tal função é necessária. Vejamos o SAP, por exemplo. Lá, um programador provavelmente nem se levantará da cadeira se for solicitado a configurar algo no servidor de aplicativos. Ele pode ser simplesmente estúpido e não terá vergonha. Na metodologia SAP existe uma função de funcionário separada para isso. Por alguma razão, na indústria 1C, acredita-se que isso deva ser combinado em um funcionário pelo mesmo salário. É uma ilusão.

Desvantagens do servidor 1C

Há exatamente uma desvantagem - confiabilidade. Ou, se preferir, imprevisibilidade. O comportamento estranho e repentino do servidor já se tornou o assunto da cidade. Uma solução universal - parar o servidor e limpar todos os caches - é até descrita no manual do especialista, e até mesmo um livro em lote é recomendado para fazer isso. Se o seu sistema 1C começar a fazer algo que teoricamente não deveria fazer, é hora de limpar o cache de dados da sessão. Pela minha estimativa, existem apenas três pessoas em todo o país que sabem operar um servidor 1C sem este procedimento e não compartilham segredos, porque... eles vivem disso. Talvez o segredo deles seja limpar os dados da sessão, mas não contam isso a ninguém, cara.

Caso contrário, o servidor 1C é o mesmo aplicativo que qualquer outro e é administrado da mesma forma, lendo a documentação e batendo no pandeiro.

Estivador

A utilidade de usar um servidor 1C conteinerizado em produção ainda não foi comprovada. O servidor não é agrupado simplesmente adicionando nós atrás do balanceador, o que reduz ao mínimo os benefícios da conteinerização de produção, e a prática de operação bem-sucedida em contêineres no modo de alta carga não foi estabelecida. Como resultado, apenas os desenvolvedores usam Docker+1C para configurar ambientes de teste. Aí é muito útil, aplicado, permite brincar com tecnologias modernas e fazer uma pausa no desânimo do configurador.

Componente comercial

Do ponto de vista do investimento, 1C permite resolver o problema de lançamento rápido de ideias de negócios devido às amplas capacidades das classes de aplicação. 1C pronto para uso oferece relatórios muito decentes, integração com qualquer coisa, cliente web, cliente móvel, aplicativo móvel, suporte para vários SGBDs, incl. gratuito, multiplataforma, tanto para servidor quanto para partes instaladas de cliente. Sim, a IU dos aplicativos ficará amarela, às vezes isso é um sinal de menos, mas nem sempre.
Ao escolher 1C, uma empresa obtém um conjunto de soluções de software que lhe permite construir uma ampla gama de aplicações, bem como muitos desenvolvedores no mercado que querem menos dinheiro que os Javaistas e ao mesmo tempo produzem resultados mais rapidamente.

Por exemplo, a tarefa de enviar uma fatura em PDF a um cliente pode ser resolvida em uma hora de trabalho do aluno. O mesmo problema no .NET pode ser resolvido com a compra de uma biblioteca proprietária ou com alguns dias ou semanas de codificação por um desenvolvedor severo e barbudo. Às vezes, os dois ao mesmo tempo. E sim, eu estava falando apenas sobre geração de PDF. Ainda não dissemos de onde virá esse projeto de lei. O web frontender deve criar um formulário onde o operador irá inserir os dados, o backender terá que criar modelos dto para transferência JSON, modelos para armazenamento no banco de dados, a estrutura do próprio banco de dados, migração para ele, a formação de um gráfico exibição desta mesma conta, e só então - PDF. No 1C, toda a tarefa, do zero, é concluída em exatamente uma hora.

Um sistema de contabilidade completo para uma pequena barraca com um processo de negócio de compra/venda é feito em 3 horas com relatórios de vendas, contabilização de mercadorias a preços de compra e venda, discriminados por armazém, controle de direitos de acesso, cliente web e aplicativo móvel. . Ok, esqueci do aplicativo, com o aplicativo não em 3 horas, em seis.

Quanto tempo essa tarefa levará para um desenvolvedor .NET instalar o visual studio em um computador limpo e demonstrá-lo ao cliente? E quanto ao custo de desenvolvimento? Mesma coisa.

Pontos fortes de 1C como plataforma

1C é forte não porque haja algo específico nele que seja o melhor do mundo. Pelo contrário, em cada subsistema individual você pode encontrar um análogo mais interessante no software mundial. No entanto, com base em uma combinação de fatores, não vejo uma plataforma semelhante à 1C. É aqui que reside o sucesso comercial. As vantagens da plataforma estão espalhadas por ela e ficam mais visíveis quando você vê como isso é feito em outras plataformas. Basicamente, estas NÃO são nem características, mas pelo contrário - uma rejeição de características em favor de um paradigma específico. Alguns exemplos:

  1. Unicode. O que diabos poderia ser mais simples? Não há necessidade de usar codificações ASCII de byte único em 2019 (exceto para integração com codificações legadas antigas). Nunca. Mas não. De qualquer forma, alguém em alguma tabela usa um varchar de byte único e a aplicação terá problemas com codificações. Em 2015, a autorização LDAP do gitlab falhou devido ao trabalho incorreto com codificações; o JetBrains IDE ainda não funciona com cirílico em nomes de arquivos em todos os lugares. 1C fornece isolamento de alta qualidade do código do aplicativo da camada de banco de dados. Lá é impossível digitar tabelas em um nível baixo e ombreiras de juniores incompetentes no nível do banco de dados são impossíveis. Sim, pode haver outros problemas com juniores incompetentes, mas a variedade de problemas é muito menor. Agora você vai me dizer que seu aplicativo foi projetado corretamente e que a camada de acesso ao banco de dados está isolada como deveria. Dê uma nova olhada em seu aplicativo Java personalizado corporativo. De perto e honestamente. Sua consciência te incomoda? Então estou feliz por você.
  2. Numeração de documentos/livros de referência. Em 1C definitivamente não é o mais flexível e nem o melhor. Mas o que eles fazem no software bancário e nos sistemas de contabilidade auto-escritos - bem, é apenas escuridão. Ou a identidade ficará presa (e então “ah, por que temos buracos”), ou pelo contrário, eles farão um gerador que funciona com bloqueio no nível do SGBD (e se tornará um gargalo). Na verdade, é bastante difícil realizar esta tarefa aparentemente simples - um enumerador de entidades ponta a ponta, com uma seção de exclusividade baseada em um determinado conjunto de chaves, prefixação, para que não bloqueie o banco de dados durante a entrada paralela de dados .
  3. Identificadores de registros no banco de dados. 1C tomou uma decisão obstinada - todos os identificadores de link são absolutamente sintéticos e é isso. E não há problemas com bancos de dados distribuídos e trocas. Os desenvolvedores de outros sistemas criam teimosamente algo como identidade (é mais curto!), arrastam-nos para a GUI até a hora de criar várias instâncias relacionadas (e então elas serão descobertas). Você não tem isso? Honestamente?
  4. Listas. 1C possui mecanismos bastante bem-sucedidos para percorrer listas (grandes) e navegar por elas. Deixe-me fazer uma reserva imediatamente - com o uso correto do mecanismo! Em geral, o assunto é bastante desagradável, não pode ser resolvido de maneira ideal: ou é intuitivo e simples (mas há risco de enormes conjuntos de registros no cliente), ou a paginação é de uma forma ou de outra distorcida. Aqueles que fazem paginação geralmente o fazem de maneira torta. Quem faz uma barra de rolagem honesta adiciona um banco de dados, um canal e um cliente.
  5. Formulários gerenciados. Sem dúvida, no cliente web a interface não funciona perfeitamente. Mas funciona. Mas para muitos outros sistemas contábeis e bancários, a criação de um local de trabalho remoto é um projeto de nível empresarial. Isenção de responsabilidade: felizmente para aqueles que fizeram isso originalmente na web, isso não afetará.
  6. Aplicativo móvel. Recentemente, você também pode escrever aplicativos móveis no mesmo ecossistema. É um pouco mais complicado aqui do que com um cliente web; as especificidades dos dispositivos forçam você a escrever especificamente para eles, mas, mesmo assim, você não contrata uma equipe separada de desenvolvedores móveis. Se você precisa de um aplicativo para as necessidades internas de uma empresa (quando uma solução móvel para um problema corporativo é mais importante do que um design de UI amarelo), basta usar a mesma plataforma pronta para uso.
  7. Comunicando. Com esta palavra não me refiro a um sistema de BI com big data e atraso no processo de ETL. Refere-se aos relatórios da equipe operacional que permitem avaliar o estado da contabilidade aqui e agora. Saldos, liquidações mútuas, reclassificações, etc. 1C sai da caixa com um sistema de relatórios com configurações flexíveis para agrupamentos, filtros e visualização do lado do usuário. Sim, existem análogos mais legais no mercado. Mas não no âmbito de uma solução tudo-em-um e a um preço por vezes superior ao de uma solução tudo-em-um. E na maioria das vezes acontece o contrário: apenas relatórios, mas mais caros que toda a plataforma e com pior qualidade.
  8. Formulários para impressão. Pois bem, use o .NET para resolver o problema de envio de comprovantes de salário em PDF aos funcionários por e-mail. E agora a tarefa de imprimir faturas. Que tal salvar suas cópias no mesmo PDF? Para o apelido 1C, a saída de qualquer layout para PDF equivale a +1 linha de código. Isso significa + 40 segundos de tempo de trabalho, em vez de dias ou semanas em outro idioma. Os layouts de formulários impressos em 1C são incrivelmente fáceis de desenvolver e poderosos o suficiente para competir com equivalentes pagos. Sim, provavelmente não há muitas oportunidades interativas em documentos de planilha 1C; você não pode obter rapidamente um diagrama 3D com dimensionamento usando OpenGL; Mas é realmente necessário?

Estes são apenas alguns exemplos em que limitar a funcionalidade ou implementar compromissos acaba sendo um importante benefício arquitetônico no futuro. Mesmo um compromisso ou não a opção mais eficaz já está na caixa e é dado como certo. A sua implementação independente será impossível (porque tais decisões devem ser tomadas no início do projeto, e não há tempo para isso e não há arquiteto algum), ou várias iterações caras. Em cada um dos pontos listados (e esta não é uma lista completa de soluções arquitetônicas), você pode errar e introduzir restrições que bloqueiam o dimensionamento. De qualquer forma, você, como empresário, precisa ter certeza de que seus programadores, ao criar um “sistema do zero”, tenham mãos retas e resolverão problemas sutis do sistema imediatamente.

Sim, como em qualquer outro sistema complexo, o próprio 1C também possui soluções que bloqueiam o escalonamento em determinados aspectos. Porém, repito, com base em uma combinação de fatores, no custo de propriedade e na quantidade de problemas já resolvidos antecipadamente, não vejo um concorrente digno no mercado. Pelo mesmo preço, você obtém uma estrutura de aplicação financeira, um servidor balanceado em cluster, com UI e interface web, com uma aplicação móvel, com relatórios, integração e um monte de outras coisas. No mundo Java, você contrata uma equipe de front-end e back-end, depura cardumes de baixo nível de código de servidor escrito em casa e paga separadamente por 2 aplicativos móveis para 2 sistemas operacionais móveis.

Não estou dizendo que 1C resolverá todos os casos, mas para um aplicativo corporativo interno, quando não há necessidade de marcar a UI - o que mais é necessário?

Mosca na sopa

Você provavelmente teve a impressão de que 1C salvará o mundo e que todas as outras formas de escrever sistemas corporativos estão erradas. Não é nada disso. Do ponto de vista de um empresário, se você escolher 1C, além do rápido tempo de lançamento no mercado, deverá levar em consideração as seguintes desvantagens:

  • Confiabilidade do servidor. São necessários especialistas realmente de alta qualidade que possam garantir seu funcionamento ininterrupto. Não tenho conhecimento de um programa de treinamento pronto para esses especialistas por parte do fornecedor. Existem cursos de preparação para o exame Expert, mas isso, na minha opinião, não é suficiente.
  • Apoiar. Ver parágrafo anterior. Para ter suporte do fornecedor, você precisa comprá-lo. Por alguma razão, isso não é aceito na indústria 1C. E com SAP é quase uma compra obrigatória e não incomoda ninguém. Sem suporte corporativo e sem uma equipe especializada, você pode ficar sozinho com falhas de 1C.
  • Ainda assim, você não pode fazer absolutamente tudo com 1C. Esta é uma ferramenta e como toda ferramenta tem limites de aplicabilidade. No cenário 1C, é muito desejável ter um arquiteto de sistema “não 1C”.
  • Bons apelidos 1C não são mais baratos que bons programadores em outras línguas. Embora seja caro contratar programadores ruins, independentemente da linguagem em que escrevem.

Vamos pontuar os pontos

  • 1C é uma estrutura de desenvolvimento rápido de aplicativos (RAD) para negócios e é adaptada para isso.
  • Link de três camadas com suporte para os principais SGBDs, UI do cliente, um ORM e relatórios muito bons
  • Amplas possibilidades de integração com sistemas que podem fazer o que 1C não pode. Se você deseja aprendizado de máquina, pegue Python e envie o resultado para 1C via http ou RabbitMQ
  • Não há necessidade de se esforçar para fazer tudo usando 1C, você precisa entender seus pontos fortes e usá-los para seus próprios propósitos
  • Os desenvolvedores que gravitam em torno de se aprofundar em dispositivos de estrutura tecnológica e redesenhar a cada N anos para um novo mecanismo estão entediados com 1C. Tudo é muito conservador lá.
  • Os desenvolvedores também estão entediados porque há muito pouca preocupação por parte do fabricante. Linguagem chata, IDE fraco. Eles exigem modernização.
  • Por outro lado, os desenvolvedores que não conseguem se divertir usando e aprendendo outra tecnologia de que gostam são maus desenvolvedores. Eles vão reclamar e se mudar para outro ecossistema.
  • Os empregadores que não permitem que seus apelidos 1C escrevam algo em Python são maus empregadores. Eles perderão funcionários com mentes curiosas e em seu lugar virão macacos programadores que, embora concordem com tudo, arrastarão o software corporativo para o pântano. Ainda terá que ser reescrito, então talvez fosse melhor investir um pouco em Python um pouco mais cedo?
  • 1C é uma empresa comercial e implementa recursos exclusivamente com base em seus próprios interesses e conveniência. Você não pode culpá-la por isso, os negócios devem pensar no lucro, isso é a vida
  • A 1C ganha dinheiro vendendo soluções para problemas de negócios, não para problemas de desenvolvedor de Vasya. Esses dois conceitos se correlacionam, mas a prioridade é exatamente o que eu disse. Quando o desenvolvedor Vasya estiver pronto para pagar por uma licença pessoal para 1C: Resharper, isso aparecerá rapidamente, “Resharper” de A. Orefkova é a prova disso. Se o fornecedor apoiasse e não lutasse contra, surgiria um mercado de software para desenvolvedores. Agora há um player e meio neste mercado com resultados questionáveis, e tudo porque a integração com o IDE é negativa e tudo é feito de muletas.
  • A prática de um operador multimáquina desaparecerá no esquecimento. Os aplicativos modernos são grandes demais para serem lembrados tanto do lado do código quanto do lado do uso comercial. O servidor 1C também está se tornando mais complexo; será impossível reunir todos os tipos de conhecimento em um único funcionário. Isso deverá implicar uma demanda por especialistas, o que significa a atratividade da profissão 1C e um aumento nos salários. Se antes Vasya trabalhava três em um por um salário, agora você precisa contratar dois Vasyas e a competição entre Vasyas pode estimular o crescimento geral de seu nível.

Conclusão

1C é um produto muito valioso. Na minha faixa de preço não conheço nenhum análogo, escreva nos comentários se houver. No entanto, a saída de desenvolvedores do ecossistema está se tornando cada vez mais perceptível, e isso é uma “fuga de cérebros”, não importa como você olhe para isso. A indústria está sedenta de modernização.
Se você é desenvolvedor, não se preocupe com 1C e não pense que tudo é mágico em outras linguagens. Enquanto você for júnior, talvez. Assim que algo maior precisar ser resolvido, soluções prontas terão que ser buscadas por mais tempo e concluídas com mais intensidade. Em termos da qualidade dos “blocos” a partir dos quais uma solução pode ser construída, 1C é muito, muito bom.

E mais uma coisa: se um apelido 1C vier até você para contratar, então o apelido 1C poderá ser nomeado com segurança para o cargo de analistas líderes. Sua compreensão da tarefa, da área temática e das habilidades de decomposição é excelente. Tenho certeza de que isso se deve precisamente ao uso forçado de DDD no desenvolvimento 1C. Uma pessoa é treinada para pensar antes de tudo no significado de uma tarefa, nas conexões entre os objetos da área temática e, ao mesmo tempo, possui formação técnica em tecnologias de integração e formatos de troca de dados.

Saiba que o quadro ideal não existe e cuide-se.
Bom para todos!

PS: muito obrigado esphurico pela ajuda na preparação do artigo.

Apenas usuários registrados podem participar da pesquisa. Entrarpor favor

Você tem 1C em sua empresa?

  • 13,3%De jeito nenhum.71

  • 30,3%Existe, mas apenas em algum lugar do departamento de contabilidade. Sistemas principais em outras plataformas 162

  • 41,4%Sim, os principais processos de negócios funcionam nele221

  • 15,0%1C deve morrer, o futuro pertence a %technology_name%80

534 usuários votaram. 99 usuários se abstiveram.

Fonte: habr.com

Adicionar um comentário