1C - El bien y el mal. Disposición de puntos en holívares alrededor de 1C.

1C - El bien y el mal. Disposición de puntos en holívares alrededor de 1C.

Amigos y colegas, últimamente han aparecido con más frecuencia artículos sobre Habré con odio hacia 1C como plataforma de desarrollo y discursos de sus defensores. Estos artículos identificaron un problema grave: la mayoría de las veces, los críticos de 1C lo critican desde la posición de "no dominarlo", regañando problemas que de facto se resuelven fácilmente y, por el contrario, sin tocar problemas que son realmente importantes y que valen la pena. discutiendo y no son resueltos por el vendedor. Creo que tiene sentido realizar una revisión sobria y equilibrada de la plataforma 1C. Lo que puede hacer, lo que no puede hacer, lo que debería hacer pero no hace y, de postre, lo que hace con fuerza, y sus desarrolladores en %technology_name% lo harán cien años, tirándolo a la basura. más de un presupuesto anual.

Como resultado, usted, como gerente o arquitecto, podrá comprender claramente para qué tarea le resultará beneficioso utilizar 1C y dónde debe quemarse con una plancha caliente. Como desarrollador en el mundo "no 1C", podrá ver qué hay en 1C que está causando revuelo. Y como desarrollador de 1C, podrá comparar su sistema con ecosistemas de otros idiomas y comprender su ubicación en el sistema de coordenadas de desarrollo de software.

Debajo del corte hay muchos ataques gruesos a 1C, a críticos de 1C, a Java, .NET y en general... ¡El ventilador está lleno, bienvenido!

Acerca de mí

Conozco el tema de conversación desde aproximadamente 2004. Probablemente programo desde que tenía 6 años, desde el momento en que recibí un libro sobre el profesor Fortran con cómics sobre un gato, un gorrión y una oruga. Analicé los programas que escribió el gato a partir de las imágenes del libro y descubrí lo que hacían. Y sí, no tenía una computadora real en ese momento, pero había un dibujo en la página del libro y honestamente presioné los botones de papel, ingresando los comandos que había espiado en el gato X.

Luego estaban BK0011 y BASIC en la escuela, C++ y ensambladores en la universidad, luego 1C y tantas otras cosas que me da pereza recordar. Durante los últimos 15 años, he estado involucrado principalmente en 1C, no solo en términos de codificación, sino en 1C en general. Configurando tareas, administración y devops aquí. Durante los últimos 5 años he estado involucrado en actividades socialmente útiles en términos de desarrollo de herramientas de desarrollo y automatización para otros usuarios de 1C, escribiendo artículos y libros.

Decidamos el tema de discusión.

Primero definamos de qué vamos a hablar, ya que las letras “1C” pueden significar muchas cosas. En este caso, bajo las letras "1C" nos referiremos exclusivamente al marco de desarrollo "1C: Enterprise" de la octava versión moderna. No hablaremos mucho sobre el fabricante y sus políticas (pero tendremos que hacer un poco) No discutiremos aplicaciones específicas escritas usando este marco. La tecnología está separada, las aplicaciones, también conocidas como configuraciones, están separadas.

Arquitectura de alto nivel 1C: Empresa

No en vano menciono la palabra “marco”. Desde el punto de vista del desarrollador, la plataforma 1C es precisamente un marco. Y debes tratarlo exactamente como un marco. Piense en ello como Spring o ASP.NET, ejecutado por algún tiempo de ejecución (JVM o CLR respectivamente). Sucede que en el mundo de la programación convencional (“no 1C”), la división en frameworks, máquinas virtuales y aplicaciones específicas es natural, debido a que estos componentes suelen ser desarrollados por diferentes fabricantes. En el mundo de 1C, no es habitual distinguir explícitamente el marco de desarrollo y el tiempo de ejecución en sí; además, las aplicaciones específicas escritas utilizando el marco también son desarrolladas principalmente por el propio 1C. Como resultado, surge cierta confusión. Por lo tanto, en el marco del artículo, tendremos que considerar 1C desde varios lados a la vez y clasificarlo según varios ejes de coordenadas. Y en cada eje de coordenadas pondremos una pala de sustancia marrón y veremos las características, ventajas y desventajas de la solución existente.

Puntos de vista sobre 1C

1C para el comprador

El comprador adquiere un sistema de automatización con el que podrá solucionar rápidamente los problemas de automatización de su propio negocio. Una empresa puede ser un pequeño puesto o puede ser un gran holding. Está claro que las necesidades de estas empresas son diferentes, pero ambas están respaldadas por una base de código de plataforma única.

Para el comprador de 1C, este es un tiempo de comercialización rápido. Rápido. Más rápido que Java, C# o JS. Promedio. Alrededor del hospital. Está claro que un sitio web de tarjetas de presentación que utilice React resultará mejor, pero el backend de un sistema WMS se iniciará más rápido en 1C.

1C como herramienta

Cada solución tecnológica tiene límites de aplicabilidad. 1C no es un lenguaje de propósito general; no vive separado de su marco. Es recomendable utilizar 1C cuando necesites:

  • aplicación de servidor
  • aplicación donde aparecen las finanzas
  • con interfaz de usuario, ORM, informes, XML/JSON/COM/PDF/YourDataTransferingFormat listos para usar
  • con soporte para procesos y trabajos en segundo plano
  • con seguridad basada en roles
  • con lógica de negocios programable
  • con la capacidad de crear rápidamente un prototipo y un bajo tiempo de comercialización

No necesitas 1C si quieres:

  • aprendizaje automático
  • Cálculos de GPU
  • gráficos de computadora
  • calculos matematicos
  • sistema CAD
  • procesamiento de señales (sonido, vídeo)
  • llamadas http de alta carga con cientos de miles de rps

1C como empresa fabricante

Vale la pena entender cuál es el negocio de 1C como fabricante de software. La empresa 1C vende soluciones a problemas comerciales mediante la automatización. Diferentes negocios, grandes o pequeños, pero eso es lo que ella vende. Los medios para lograr este objetivo son las aplicaciones empresariales. Para contabilidad, contabilidad de nóminas, etc. Para escribir estas aplicaciones, la empresa utiliza su propia plataforma de desarrollo de aplicaciones comerciales. Especialmente diseñado para tareas comunes de estas mismas aplicaciones comerciales:

  • contabilidad financiera
  • fácil personalización de la lógica empresarial
  • amplias posibilidades de integración en entornos de TI heterogéneos

Como fabricante, 1C cree que esta es la estrategia que le permite trabajar con socios y clientes de forma beneficiosa para todos. Se puede discutir esto, pero así es aproximadamente como se promociona la empresa: soluciones listas para usar para problemas comerciales que los socios pueden personalizar rápidamente e integrar en cualquier panorama de TI.

Todas las reclamaciones o deseos sobre 1C como marco deben verse exclusivamente a través de este prisma. "Queremos programación orientada a objetos en 1C", dicen los desarrolladores. "¿Cuánto nos costará admitir programación orientada a objetos en la plataforma? ¿Nos ayudará esto a aumentar las ventas de cajas?", dice 1C. Abre su “prisma” de vender soluciones a problemas empresariales:

- Oye, empresa, ¿quieres programación orientada a objetos en tu 1C?
- ¿Esto me ayudará a resolver mis problemas?
- Quién sabe...
- Entonces no hay necesidad

Este enfoque puede ser bueno o malo dependiendo de quién lo mire, pero así son las cosas. Hablando sobre el hecho de que no existe la característica X en 1C, debe comprender que no está ahí por una razón, sino en el contexto de la elección "costo de implementación versus monto de ganancia".

Clasificación tecnológica

“De hecho, los Odinesniks hacen todo lo posible para utilizar los mejores patrones, cuidadosamente seleccionados por metodólogos y desarrolladores de la plataforma 1C.
Cuando escribes tu estúpido código para un formulario administrado simple, en realidad estás usando modelo-vista-controlador с enlace de datos de doble vía в motor de aplicación de datos de tres capas, aromatizado mapeo de relación de objetos de alto nivel sobre la base de descripción de metadatos declarativosteniendo su propio lenguaje de consulta independiente de la plataforma, c Interfaz de usuario declarativa basada en datos, serialización transparente completa y lenguaje de programa orientado al dominio..

Donde los desarrolladores de 1C se diferencian de sus colegas occidentales es en las relaciones públicas. Les encanta darle un gran nombre a cualquier tontería y andar con ella como si fuera una bolsa sucia”.
A. Orefkov

La plataforma 1C tiene una arquitectura clásica de 3 niveles, en cuyo centro se encuentra el servidor de aplicaciones (o su emulación por poco dinero para los pequeños comerciantes). Se utiliza MS SQL o Postgres como DBMS. También hay soporte para Oracle e IBM DB2, pero esto es bastante esotérico, nadie sabe qué pasará si implementas 1C en estas bases de datos con una carga media y alta. Creo que el propio 1C no lo sabe.

La parte del cliente es un cliente ligero instalado en la máquina del usuario o un cliente web. La característica clave es que los programadores no escriben 2 códigos diferentes, escriben una aplicación, en un idioma, y ​​usted puede mostrarla en el navegador si lo desea o necesita. ¿Quién quería un verdadero full stack y un único lenguaje para el front-end y el backend, node.js? Nunca lograron hacer exactamente lo mismo hasta el final. Existe una pila completa real, pero tendrás que escribirla en 1C. La ironía del destino, esas cosas :)

La solución SaaS en la nube 1C:Fresh también funciona en modo navegador, en el que no se puede comprar 1C, sino alquilar una pequeña base de datos y realizar un seguimiento de las ventas de shawarma allí. Sólo en el navegador, sin instalar ni configurar nada.

Además, existe un cliente heredado, que en 1C se denomina "aplicación normal". Legado es legado, bienvenido al mundo de las aplicaciones en 2002, pero todavía estamos hablando del estado actual del ecosistema.

La parte del servidor 1C admite la agrupación en clústeres y se escala agregando nuevas máquinas al clúster. Se han roto muchas copias aquí y habrá una sección separada en el artículo sobre esto. En resumen, esto no es lo mismo que agregar un par de instancias exactamente iguales detrás de HAProxy.

El marco de desarrollo de aplicaciones utiliza su propio lenguaje de programación, que se parece aproximadamente a un VB6 ligeramente mejorado traducido al ruso. Para las personas que odian todo lo ruso, que no creen que "si" se traduzca como "si", se ofrece la segunda opción de sintaxis. Aquellos. Si lo desea, puede escribirlo en 1C de tal forma que sea indistinguible de VB.

1C - El bien y el mal. Disposición de puntos en holívares alrededor de 1C.

Este mismo lenguaje de programación es la principal razón del odio de los apodos de 1C hacia su plataforma. Seamos realistas, no sin razón. El lenguaje fue concebido lo más simple posible, diseñado para cumplir el mantra "DESARROLLADORES, DESARROLLADORES" al menos en la CEI. La esencia comercial de esta solución, en mi opinión, es claramente visible: más desarrolladores, mayor cobertura de mercado. Esto se cumplió, según diversas estimaciones, entre el 45% y el 95%. Diré de inmediato que escribir en el idioma que crees es realmente más fácil. Y conozco bastantes lenguajes de programación.

Empecemos por el idioma.

lenguaje de programación 1C

Al mismo tiempo el punto fuerte y débil del sistema. Proporciona fácil entrada y legibilidad. Por otro lado, no ha sido actualizado desde el lanzamiento de la versión 8 en 2002 y está moralmente desactualizado. Alguien dirá “el principal inconveniente es que no hay programación orientada a objetos” y se equivocará. En primer lugar, a la OLP no sólo le agrada Nuraliev, sino también Torvalds. Y en segundo lugar, la programación orientada a objetos todavía existe.

Desde el punto de vista del desarrollador, tiene a su disposición un marco con clases base que se muestran en el DBMS. El desarrollador puede tomar la clase base "Directorio" y heredar de ella el directorio "Clientes". Puede agregarle nuevos campos de clase, por ejemplo, INN y Dirección, y también, si es necesario, puede anular (anular) métodos de la clase base, por ejemplo el método OnWrite/AtRecord.

El marco está diseñado de tal manera que rara vez se necesita una herencia más profunda y, en mi opinión, la restricción en la programación orientada a objetos tiene sentido. 1C se centra en el desarrollo impulsado por dominios y te hace pensar, en primer lugar, en el área temática de la solución que se está desarrollando, y esto es bueno. No solo no existe la tentación, sino que tampoco es necesario escribir 10 DTO y ViewModels diferentes solo para mostrar algunos datos del dominio en alguna parte. El desarrollador de 1C siempre opera con una entidad, sin saturar el contexto de percepción con una docena de clases con nombres similares, que representan la misma entidad, pero desde un lado diferente. Cualquier aplicación .NET, por ejemplo, contendrá necesariamente cinco o dos ViewModels y DTO para la serialización en JSON y la transferencia de datos del cliente al servidor. Y aproximadamente entre el 10 y el 15 % del código de su aplicación se gastará transfiriendo datos de una clase a otra usando bolígrafos o muletas como AutoMapper. Este código debe escribirse y se debe pagar a los programadores para crearlo y mantenerlo.

Resulta que el lenguaje 1C es difícil de desarrollar sin complicarlo al nivel de los lenguajes convencionales, perdiendo así la ventaja de la simplicidad. En esencia, cuál es la tarea del vendedor: producir una solución estándar que cualquier estudiante que se encuentre en la calle pueda personalizar con el nivel de calidad requerido (es decir, se completa una caja que cubre desde un puesto hasta una gran fábrica). Si eres un puesto, elige un estudiante; si eres una fábrica, elige un gurú de tu socio implementador. El hecho de que los socios implementadores vendan estudiantes al precio de un gurú no es un problema con el marco. Arquitectónicamente, el marco debe resolver los problemas de ambos, el código de configuraciones estándar (que vendimos a las empresas con la promesa de personalización) debería poder ser entendido por un estudiante y un gurú debería poder entender lo que quiera.

Lo que, en mi opinión, realmente le falta al lenguaje, lo que te obliga a escribir más de lo que podrías, es la pérdida de tiempo que paga el cliente.

  • Posibilidad de escribir a nivel, por ejemplo, TypeScript (como resultado, herramientas de análisis de código más desarrolladas en el IDE, refactorización, menos jambas ofensivas)
    Disponibilidad de funciones como objetos de primera clase. Un concepto un poco más complejo, pero la cantidad de código repetitivo típico podría reducirse considerablemente. La comprensión del código por parte del estudiante, en mi humilde opinión, incluso aumentaría debido a la reducción en el volumen.
  • Literales de colección universal, inicializadores. Lo mismo: reducir la cantidad de código que se debe escribir y/o mirar con los ojos. El llenado de colecciones ocupa más del 9000% del tiempo de programación de 1C. Escribir esto sin azúcar sintáctica es largo, costoso y propenso a errores. En general, la cantidad de LOC en las soluciones 1C supera todos los límites imaginables en comparación con los marcos abiertos disponibles y, en general, con todos los Javas empresariales combinados. El lenguaje es prolijo, y esto degenera en cantidad de datos, memoria, frenos IDE, tiempo, dinero...
  • finalmente construcciones Tengo la hipótesis de que esta construcción falta debido a que no encontraron una traducción exitosa al ruso :)
  • Tipos de datos propios (sin programación orientada a objetos), análogos de Type de VB6. Le permitirá no escribir estructuras utilizando comentarios en BSP y métodos mágicos que construyen estas estructuras. Obtenemos: menos código, una pista a través de un punto, una solución más rápida al problema, menos errores debido a errores tipográficos y propiedades faltantes de las estructuras. Ahora la tipificación de estructuras de usuario recae enteramente en el equipo de desarrollo de la Biblioteca del Subsistema Estándar, quien, para su crédito, escribe cuidadosamente comentarios sobre las propiedades esperadas de las estructuras de parámetros pasadas.
  • Sin azúcar cuando se trabaja con llamadas asincrónicas en el cliente web. callback-hell en forma de ProcessingNotifications es un apoyo temporal causado por un cambio repentino en la API de los principales navegadores, pero no se puede vivir así todo el tiempo; se está perdiendo la ventaja de la "comprensión del estudiante" del código asincrónico más y más. No agregue soporte para este paradigma en el IDE principal y las cosas empeorarán aún más.

Este es uno de los problemas urgentes, está claro que la lista podría ser mucho mayor, pero no debemos olvidar que este todavía no es un lenguaje de propósito general, no requiere multiproceso, funciones lambda, acceso a la GPU y rápido. Cálculos en coma flotante. Este es un lenguaje de programación de lógica empresarial.

Un programador que ya ha trabajado mucho con este lenguaje, mira js o c#, se aburre en el marco de este lenguaje. Es un hecho. Necesita desarrollo. En el otro lado de la balanza para el proveedor está el costo de implementar las funciones especificadas versus el aumento de ingresos después de su implementación. Aquí no tengo ninguna información sobre lo que actualmente pesa más a los ojos de la empresa.

Entorno de desarrollo

Aquí tampoco las cosas van bien. Hay dos entornos de desarrollo. El primero es el Configurador incluido en la entrega. El segundo es el entorno Enterprise Development Tools, o EDT para abreviar, desarrollado sobre la base de Eclipse.

El configurador proporciona una gama completa de tareas de desarrollo, admite todas las funciones y es el principal entorno del mercado. También es moralmente obsoleto y, según los rumores, no se está desarrollando, debido a la cantidad de deuda técnica que tiene dentro. La situación podría mejorarse abriendo una API interna (en forma de amistad con Muñeco de nieve A. Orefkova o de forma independiente), pero no es así. La práctica ha demostrado que la comunidad escribirá sus propias funciones en el IDE, siempre que el proveedor no interfiera. Pero tenemos lo que tenemos. El configurador era genial en 2004-2005, recordaba mucho al Visual Studio de esa época, en algunos lugares era aún más genial, pero estaba estancado en esos tiempos.

Además, el volumen de la solución estándar promedio se ha multiplicado desde entonces y hoy el IDE simplemente no puede hacer frente a la cantidad de código que se alimenta. Las capacidades de usabilidad y refactorización ni siquiera son cero, están en números rojos. Todo esto no añade entusiasmo a los desarrolladores y sueñan con mudarse a otros ecosistemas y seguir codificando mierda allí, pero en un entorno agradable que no te escupe en la cara con su comportamiento.

Como alternativa, se ofrece un IDE escrito desde cero, basado en Eclipse. Allí, las fuentes, como en cualquier otro software, se encuentran en forma de archivos de texto, se almacenan en GIT, ramas de solicitud de extracción, todo esto. Lo malo es que hace muchos años que no sale del estado beta, aunque mejora con cada lanzamiento. No escribiré sobre las desventajas de la EDT, hoy es un inconveniente, mañana es una característica fija. La relevancia de tal descripción pronto se desvanecerá. Hoy en día es posible desarrollar en EDT, pero es inusual; es necesario estar preparado para una cierta cantidad de errores de IDE.

Si observa la situación a través del "prisma 1C" antes mencionado, obtendrá algo como esto: el lanzamiento del nuevo IDE no aumenta las ventas de cajas, pero la salida de DESARROLLADORES puede reducirse. Es difícil decir qué le espera al ecosistema en términos de comodidad para los desarrolladores, pero Microsoft ya ha arruinado a los desarrolladores móviles al ofrecerles sus servicios demasiado tarde.

Gestión del desarrollo

Aquí todo es mucho mejor que escribir código, especialmente recientemente, cuando los esfuerzos de la comunidad sacaron a la luz los problemas de la automatización de la administración, lanzaron prototipos que pedían tirar el repositorio 1C a la basura y usar git, culpa rápida, revisión de código. , análisis estático, implementación automática, etc. Se han agregado muchas funciones a la plataforma que aumentan el nivel de automatización de las tareas de desarrollo. Sin embargo, todas estas características se añadieron única y exclusivamente para el desarrollo de nuestros propios productos de gran tamaño, cuando se hizo evidente que no podíamos prescindir de la automatización. Hubo fusiones automáticas, comparación de tres vías con KDiff y todo eso. Lanzado en Github convertidorgit, quien, francamente, fue arrastrado ideológicamente fuera del proyecto. gitsync, pero modificado para adaptarse a los procesos de la empresa proveedora. Gracias a los testarudos del código abierto, la automatización del desarrollo en 1C despegó. Una API abierta para el configurador, en mi humilde opinión, también cambiaría el atraso moral del IDE principal.

Hoy en día, almacenar fuentes de 1C en git con confirmaciones vinculadas a problemas en Jira, revisiones en Crucible, pulsadores de Jenkins y Allure informan sobre pruebas de código en 1C e incluso análisis estático en SonarQube - Esto está lejos de ser una novedad, sino más bien algo común en las empresas donde hay mucho desarrollo de 1C.

administración

Hay mucho que decir aquí. En primer lugar, se trata, por supuesto, de un servidor (clúster de servidores 1C). Algo maravilloso, pero debido al hecho de que es una caja completamente negra, documentada con suficiente detalle, pero de una manera específica: dominar el lanzamiento del funcionamiento ininterrumpido en modo de alta carga en varios servidores es la suerte de unos pocos elegidos que usan un Medalla con la inscripción “Experto en Temas Tecnológicos”. Vale la pena señalar que, en principio, administrar un servidor 1C no es diferente de administrar cualquier otro servidor. Es una aplicación multiproceso basada en red que consume memoria, CPU y recursos de disco. Proporciona amplias oportunidades para la recopilación y el diagnóstico de telemetría.

El problema aquí es que el proveedor no ofrece nada especial en términos de soluciones listas para usar para este mismo diagnóstico. Sí, existe 1C: Centro de control e instrumentación, incluso son bastante buenos, pero son muy caros y no todos los tienen. Hay una serie de desarrollos en la comunidad para conectar Grafana, Zabbix, ELK y otras cosas del conjunto de administración estándar, pero no existe una solución única que se adapte a la mayoría. La tarea espera a su héroe. Y si su empresa planea lanzarse en un clúster 1C, necesita un experto. El tuyo por dentro o por fuera, pero lo necesitas. Es normal que exista una función separada con competencias para la operación del servidor, no todos los usuarios de 1C deberían saberlo, solo debe comprender que dicha función es necesaria. Tomemos como ejemplo SAP. Allí, lo más probable es que un programador ni siquiera se levante de su silla si se le pide que configure algo en el servidor de aplicaciones. Puede que sea simplemente estúpido y no se avergonzará. En la metodología SAP existe un rol de empleado separado para esto. Por alguna razón, en la industria 1C se cree que esto debería combinarse en un empleado por el mismo salario. Es un engaño.

Desventajas del servidor 1C

Hay exactamente un inconveniente: la fiabilidad. O, si lo prefieres, imprevisibilidad. El comportamiento extraño y repentino del servidor ya se ha convertido en la comidilla de la ciudad. Un remedio universal (detener el servidor y borrar todos los cachés) incluso se describe en el manual del experto, e incluso se recomienda un libro por lotes que lo haga. Si su sistema 1C comienza a hacer algo que en teoría ni siquiera debería hacer, es hora de borrar el caché de datos de la sesión. Según mis cálculos, solo hay tres personas en todo el país que saben cómo operar un servidor 1C sin este procedimiento y no comparten secretos, porque... ellos viven de esto. Quizás su secreto es que limpian los datos de la sesión, pero no se lo cuentan a nadie, amigo.

Por lo demás, el servidor 1C es la misma aplicación que cualquier otra y se administra de la misma forma, leyendo la documentación y tocando la pandereta.

Docker

Aún no se ha demostrado la utilidad de utilizar un servidor 1C en contenedores en producción. El servidor no se agrupa simplemente agregando nodos detrás del equilibrador, lo que reduce al mínimo los beneficios de la producción en contenedores, y no se ha establecido la práctica de una operación exitosa en contenedores en modo de alta carga. Como resultado, sólo los desarrolladores utilizan Docker+1C para configurar entornos de prueba. Allí es muy útil, aplicado, te permite jugar con tecnologías modernas y tomar un descanso del desaliento del configurador.

Componente comercial

Desde el punto de vista de la inversión, 1C le permite resolver el problema del lanzamiento rápido de ideas de negocios gracias a las amplias capacidades de las clases de aplicaciones. 1C listo para usar ofrece informes muy decentes, integración con cualquier cosa, cliente web, cliente móvil, aplicación móvil, soporte para varios DBMS, incl. Gratis, multiplataforma tanto en el servidor como en las partes del cliente instaladas. Sí, la interfaz de usuario de las aplicaciones será amarilla, a veces esto es un inconveniente, pero no siempre.
Al elegir 1C, una empresa obtiene un conjunto de soluciones de software que le permiten crear una amplia gama de aplicaciones, así como una gran cantidad de desarrolladores en el mercado que quieren menos dinero que los javaistas y al mismo tiempo producen resultados más rápido.

Por ejemplo, la tarea de enviar una factura en PDF a un cliente se puede resolver en una hora de trabajo del estudiante. El mismo problema en .NET se puede resolver comprando una biblioteca patentada o un par de días o semanas de codificación por parte de un desarrollador severo y barbudo. A veces, ambas cosas a la vez. Y sí, sólo estaba hablando de generación de PDF. Ni siquiera hemos dicho de dónde vendrá este proyecto de ley. El frontend web debe crear un formulario donde el operador ingresará los datos, el backender deberá crear modelos dto para transferir JSON, modelos para almacenar en la base de datos, la estructura de la base de datos en sí, la migración a ella, la formación de un gráfico. visualización de esta misma cuenta, y solo entonces - PDF. En 1C, toda la tarea, desde cero, se completa en exactamente una hora.

Un sistema de contabilidad completo para un pequeño puesto con un proceso comercial de compra/venta que se realiza en 3 horas. Con informes de ventas, contabilidad de bienes a precios de compra y venta, desglosados ​​por almacén, control de derechos de acceso, cliente web y aplicación móvil. . Vale, me olvidé de la solicitud, la solicitud no en 3 horas, en seis.

¿Cuánto tiempo le llevará esta tarea a un desarrollador de .NET desde que instala Visual Studio en una computadora limpia hasta que se lo demuestra al cliente? ¿Qué pasa con el costo del desarrollo? La misma cosa.

Fortalezas de 1C como plataforma

1C es fuerte no porque tenga algo específico de que sea el mejor del mundo. Por el contrario, en cada subsistema individual se puede encontrar un análogo más interesante en el software del mundo. Sin embargo, basándose en una combinación de factores, no veo una plataforma similar a 1C. Aquí es donde reside el éxito comercial. Las ventajas de la plataforma están dispersas por toda ella y son más claramente visibles cuando ves cómo se hace en otras plataformas. Básicamente, estas NO son ni siquiera características, sino todo lo contrario: un rechazo de características a favor de un paradigma específico. Algunos ejemplos:

  1. Unicódigo. ¿Qué diablos podría ser más simple? No es necesario utilizar codificaciones ASCII de un solo byte en 2019 (excepto para la integración con codificaciones antiguas). Nunca. Pero no. De todos modos, alguien en alguna tabla usa un varchar de un solo byte y la aplicación tendrá problemas con las codificaciones. En 2015, la autorización LDAP de gitlab falló debido a un trabajo incorrecto con codificaciones; JetBrains IDE todavía no funciona con cirílico en los nombres de archivos en todas partes. 1C proporciona un aislamiento de alta calidad del código de la aplicación de la capa de la base de datos. Allí es imposible escribir tablas en un nivel bajo y allí es imposible crear jambas de jóvenes incompetentes en el nivel de la base de datos. Sí, puede haber otros problemas con los jóvenes incompetentes, pero la variedad de problemas es mucho menor. Ahora me dirás que tu aplicación está diseñada correctamente y la capa de acceso a la base de datos está aislada como debería estar. Eche otro vistazo a su aplicación Java personalizada corporativa. De cerca y honestamente. ¿Te molesta la conciencia? Entonces me alegro por ti.
  2. Numeración de documentos/libros de referencia. En 1C definitivamente no es el más flexible ni el mejor. Pero lo que hacen en el software bancario y en los sistemas de contabilidad escritos por ellos mismos... bueno, es simplemente oscuridad. O la identidad quedará atrapada (y luego "oh, ¿por qué tenemos agujeros"), o por el contrario, crearán un generador que funcione con bloqueo a nivel de DBMS (y se convertirá en un cuello de botella). De hecho, es bastante difícil realizar esta tarea aparentemente simple: un enumerador de entidades de un extremo a otro, con una sección de unicidad basada en un determinado conjunto de claves y prefijos, para que no bloquee la base de datos durante la entrada de datos en paralelo. .
  3. Identificadores de registros en la base de datos. 1C tomó una decisión decidida: todos los identificadores de enlaces son absolutamente sintéticos y eso es todo. Y no hay problemas con las bases de datos distribuidas y los intercambios. Los desarrolladores de otros sistemas crean obstinadamente algo como identidad (¡es más corto!), los arrastran a la GUI hasta que llega el momento de crear varias instancias relacionadas (y luego serán descubiertas). ¿No tienes esto? ¿Honestamente?
  4. Liza. 1C tiene mecanismos bastante exitosos para hojear listas (grandes) y navegar por ellas. Permítanme hacer una reserva de inmediato: ¡con el uso correcto del mecanismo! En general, el tema es bastante desagradable, no se puede resolver de manera ideal: o es intuitivo y simple (pero existe el riesgo de que el cliente tenga enormes conjuntos de registros), o la paginación es de una u otra forma corrupta. Quienes realizan búsquedas a menudo lo hacen de forma torcida. Quienes hacen una barra de desplazamiento honesta añaden una base de datos, un canal y un cliente.
  5. Formularios gestionados. Sin duda, en el cliente web la interfaz no funciona a la perfección. Pero funciona. Pero para muchos otros sistemas contables y bancarios, la creación de un lugar de trabajo remoto es un proyecto a nivel empresarial. Descargo de responsabilidad: afortunadamente para aquellos que lo hicieron originalmente en la web, esto no afectará.
  6. Aplicación movil. Recientemente, también puedes escribir aplicaciones móviles mientras estás en el mismo ecosistema. Aquí es un poco más complicado que con un cliente web; las características específicas de los dispositivos te obligan a escribir específicamente para ellos, pero, sin embargo, no contratas un equipo separado de desarrolladores móviles. Si necesita una aplicación para las necesidades internas de una empresa (cuando una solución móvil para un problema corporativo es más importante que un diseño de interfaz de usuario amarillo), simplemente utilice la misma plataforma lista para usar.
  7. Informes. Con esta palabra no me refiero a un sistema de BI con big data y un retraso en el proceso ETL. Se trata de informes del personal operativo que permiten evaluar el estado de la contabilidad aquí y ahora. Saldos, liquidaciones mutuas, recalificaciones, etc. 1C viene listo para usar con un sistema de informes con configuraciones flexibles para agrupaciones, filtros y visualización por parte del usuario. Sí, existen análogos más geniales en el mercado. Pero no en el marco de una solución todo en uno y a un precio a veces superior al de una solución todo en uno. Y más a menudo ocurre al revés: solo informes, pero más caro que toda la plataforma y de peor calidad.
  8. Formularios imprimibles. Bueno, use .NET para resolver el problema de enviar nóminas en PDF a los empleados por correo electrónico. Y ahora la tarea de imprimir facturas. ¿Qué tal si guardamos sus copias en el mismo PDF? Para el apodo de 1C, enviar cualquier diseño a PDF es +1 línea de código. Esto significa + 40 segundos de tiempo de trabajo, en lugar de días o semanas en otro idioma. Los diseños de formularios impresos en 1C son increíblemente fáciles de desarrollar y lo suficientemente potentes como para competir con sus homólogos pagos. Sí, probablemente no haya muchas oportunidades interactivas en los documentos de hoja de cálculo 1C, no se puede obtener rápidamente un diagrama 3D escalado usando OpenGL. Pero ¿es realmente necesario?

Estos son sólo algunos ejemplos en los que limitar la funcionalidad o implementar compromisos resulta ser un beneficio arquitectónico importante en el futuro. Incluso un compromiso o no es la opción más efectiva, ya está en la caja y se da por sentado. Su implementación independiente será imposible (porque tales decisiones deben tomarse al comienzo del proyecto, no hay tiempo para esto y no hay ningún arquitecto), o serán varias iteraciones costosas. En cada uno de los puntos enumerados (y esta no es una lista completa de soluciones arquitectónicas), puede equivocarse e introducir restricciones que bloqueen el escalado. En cualquier caso, usted, como hombre de negocios, debe asegurarse de que sus programadores, al crear un "sistema desde cero", tengan las manos rectas y resuelvan bien los problemas sutiles del sistema de inmediato.

Sí, como en cualquier otro sistema complejo, el propio 1C también tiene soluciones que bloquean el escalado en determinados aspectos. Sin embargo, repito, basándose en una combinación de factores, el coste de propiedad y la cantidad de problemas ya resueltos de antemano, no veo un competidor digno en el mercado. Por el mismo precio, obtienes un marco de aplicación financiera, un servidor equilibrado en clúster, con una interfaz de usuario y una interfaz web, con una aplicación móvil, con informes, integración y muchas otras cosas. En el mundo Java, contratas un equipo de front-end y back-end, depuras bancos de código de servidor escritos en casa de bajo nivel y pagas por separado 2 aplicaciones móviles para 2 sistemas operativos móviles.

No digo que 1C resuelva todos los casos, pero para una aplicación corporativa interna, cuando no es necesario marcar la interfaz de usuario, ¿qué más se necesita?

Mosca en la sopa

Probablemente tuvo la impresión de que 1C salvará al mundo y que todas las demás formas de escribir sistemas corporativos son incorrectas. No es así en absoluto. Desde el punto de vista de un empresario, si elige 1C, además del rápido tiempo de comercialización, debe tener en cuenta las siguientes desventajas:

  • Confiabilidad del servidor. Se necesitan especialistas de muy alta calidad que puedan garantizar su funcionamiento ininterrumpido. No conozco ningún programa de formación ya preparado para estos especialistas por parte del proveedor. Existen cursos de preparación para el examen de Experto, pero esto, en mi opinión, no es suficiente.
  • Apoyo. Ver punto anterior. Para contar con el apoyo del proveedor, debe comprarlo. Por alguna razón, esto no se acepta en la industria 1C. Y con SAP, es casi una compra obligada y no molesta a nadie. Sin apoyo corporativo y sin un experto en el personal, puede quedarse solo con los fallos de 1C.
  • Aún así, no puedes hacer absolutamente todo con 1C. Esta es una herramienta y como toda herramienta tiene límites de aplicabilidad. En el panorama 1C, es muy deseable tener un arquitecto de sistemas "que no sea 1C".
  • Los buenos apodos de 1C no son más baratos que los buenos programadores en otros idiomas. Sin embargo, contratar malos programadores es caro, independientemente del idioma en el que escriban.

vamos a puntear los puntos

  • 1C es un marco de desarrollo rápido de aplicaciones (RAD) para empresas y está diseñado para ello.
  • Enlace de tres niveles con soporte para los principales DBMS, interfaz de usuario del cliente, un muy buen ORM e informes
  • Amplias posibilidades de integración con sistemas que pueden hacer lo que 1C no puede. Si desea aprendizaje automático, tome Python y envíe el resultado a 1C a través de http o RabbitMQ
  • No es necesario esforzarse por hacer todo con 1C, debe comprender sus puntos fuertes y utilizarlos para sus propios fines.
  • Los desarrolladores que gravitan hacia profundizar en el marco tecnológico de los dispositivos y rediseñarlos cada N años con un nuevo motor están aburridos de 1C. Allí todo es muy conservador.
  • Los desarrolladores también están aburridos porque el fabricante se preocupa muy poco por ellos. Lenguaje aburrido, IDE débil. Requieren modernización.
  • Por otro lado, los desarrolladores que no pueden divertirse usando y aprendiendo otra tecnología que les gusta son malos desarrolladores. Se quejarán y se trasladarán a otro ecosistema.
  • Los empleadores que no permiten que sus apodos 1C escriban algo en Python son malos empleadores. Perderán empleados con mentes curiosas y en su lugar vendrán codificadores monos que, aunque estén de acuerdo con todo, arrastrarán el software corporativo al pantano. Aún habrá que reescribirlo, así que ¿tal vez sería mejor invertir un poco en Python un poco antes?
  • 1C es una empresa comercial e implementa funciones basadas únicamente en sus propios intereses y conveniencia. No puedes culparla por esto, las empresas deben pensar en las ganancias, así es la vida.
  • 1C gana dinero vendiendo soluciones a problemas comerciales, no a los problemas de los desarrolladores de Vasya. Estos dos conceptos se correlacionan, pero la prioridad es exactamente lo que dije. Cuando el desarrollador Vasya esté dispuesto a pagar por una licencia personal para 1C: Resharper, aparecerá bastante rápido, "Resharper" de A. Orefkova es prueba de ello. Si el proveedor lo apoyara y no luchara contra él, aparecería un mercado de software para desarrolladores. Ahora hay un jugador y medio en este mercado con resultados cuestionables, y todo porque la integración con el IDE es negativa y todo se hace con muletas.
  • La práctica del operador de varias máquinas desaparecerá en el olvido. Las aplicaciones modernas son demasiado grandes para recordarlas tanto desde el punto de vista del código como desde el punto de vista del uso empresarial. El servidor 1C también se está volviendo más complejo: será imposible reunir todo tipo de conocimientos en un solo empleado. Esto debería implicar una demanda de especialistas, lo que significa el atractivo de la profesión 1C y un aumento de los salarios. Si antes Vasya trabajaba tres en uno por un salario, ahora es necesario contratar dos Vasya y la competencia entre Vasya puede estimular el crecimiento general de su nivel.

Conclusión

1C es un producto muy digno. En mi rango de precios, no conozco ningún análogo, escribe en los comentarios si los hay. Sin embargo, la salida de desarrolladores del ecosistema es cada vez más notable, y esto es una "fuga de cerebros", se mire como se mire. La industria tiene hambre de modernización.
Si eres desarrollador, no te obsesiones con 1C y no creas que todo es mágico en otros idiomas. Mientras seas junior, tal vez. Tan pronto como sea necesario resolver algo más grande, habrá que buscar durante más tiempo soluciones ya preparadas y completarlas con mayor intensidad. En cuanto a la calidad de los "bloques" a partir de los cuales se puede construir una solución, 1C es muy, muy bueno.

Y una cosa más: si le llega un apodo de 1C para contratarlo, entonces el apodo de 1C puede designarlo de manera segura para el puesto de analista principal. Su comprensión de la tarea, el área temática y las habilidades de descomposición es excelente. Estoy seguro de que esto se debe precisamente al uso forzado de DDD en el desarrollo de 1C. Una persona está entrenada para pensar en primer lugar en el significado de una tarea, en las conexiones entre los objetos del área temática y, al mismo tiempo, tiene conocimientos técnicos en tecnologías de integración y formatos de intercambio de datos.

Sé consciente de que el marco ideal no existe y cuídate.
Todo bien

PD: muchas gracias espesúrico para obtener ayuda en la preparación del artículo.

Solo los usuarios registrados pueden participar en la encuesta. Registrarsepor favor

¿Tiene 1C en su empresa?

  • 13,3%En absoluto.71

  • 30,3%Lo hay, pero sólo en algún lugar del departamento de contabilidad. Sistemas centrales en otras plataformas162

  • 41,4%Sí, los principales procesos de negocio funcionan en ello221

  • 15,0%1C debe morir, el futuro pertenece a %technology_name%80

534 usuarios votaron. 99 usuarios se abstuvieron.

Fuente: habr.com

Añadir un comentario