1C – Gut und Böse. Anordnung der Punkte in Holivars um 1C

1C – Gut und Böse. Anordnung der Punkte in Holivars um 1C

Freunde und Kollegen, in letzter Zeit gab es auf Habré häufiger Artikel mit Hass auf 1C als Entwicklungsplattform und Reden seiner Verteidiger. In diesen Artikeln wurde ein ernstes Problem identifiziert: Meistens kritisieren Kritiker von 1C es aus der Position, es „nicht zu beherrschen“, indem sie Probleme beschimpfen, die de facto leicht zu lösen sind, und im Gegenteil Probleme nicht ansprechen, die wirklich wichtig und wertvoll sind Diskussionen und werden vom Anbieter nicht gelöst. Ich glaube, dass es sinnvoll ist, eine nüchterne und ausgewogene Überprüfung der 1C-Plattform durchzuführen. Was es kann, was es nicht kann, was es tun sollte, aber nicht tut, und zum Nachtisch, was es mit einem Knall macht, und Ihre Entwickler bei %technology_name% werden es hundert Jahre lang wegwerfen mehr als ein Jahresbudget.

Dadurch können Sie als Manager oder Architekt klar erkennen, bei welcher Aufgabe 1C für Sie von Vorteil ist und wo es mit einem heißen Bügeleisen ausgebrannt werden muss. Als Entwickler in der „Nicht-1C“-Welt können Sie sehen, was in 1C für Aufregung sorgt. Und als 1C-Entwickler können Sie Ihr System mit den Ökosystemen anderer Sprachen vergleichen und Ihren Standort im Koordinatensystem der Softwareentwicklung verstehen.

Unter dem Strich gibt es jede Menge dicke Angriffe auf 1C, auf Kritiker von 1C, auf Java, .NET und allgemein... Der Lüfter ist voll, herzlich willkommen!

Über mich

Ich bin mit dem Gesprächsthema seit etwa 2004 vertraut. Ich programmiere wahrscheinlich seit meinem sechsten Lebensjahr, seit ich ein Buch über Professor Fortran mit Comics über eine Katze, einen Spatz und eine Raupe bekam. Ich habe die Programme, die die Katze geschrieben hat, anhand der Bilder im Buch analysiert und herausgefunden, was sie tun. Und ja, ich hatte damals noch keinen richtigen Computer, aber auf der Seite des Buches befand sich eine Zeichnung, und ich drückte ehrlich gesagt die Papiertasten und gab die Befehle ein, die ich auf der Katze X ausspioniert hatte.

Dann gab es BK0011 und BASIC in der Schule, C++ und Assembler an der Universität, dann 1C und dann so viele andere Dinge, an die ich mich nicht erinnern kann. In den letzten 15 Jahren habe ich mich hauptsächlich mit 1C beschäftigt, nicht nur im Hinblick auf die Codierung, sondern mit 1C im Allgemeinen. Hier werden Aufgaben, Verwaltung und Entwickler festgelegt. In den letzten 5 Jahren beschäftige ich mich mit gesellschaftlich nützlichen Aktivitäten im Hinblick auf die Entwicklung von Entwicklungs- und Automatisierungstools für andere 1C-Benutzer sowie das Schreiben von Artikeln und Büchern.

Lassen Sie uns über das Diskussionsthema entscheiden

Lassen Sie uns zunächst definieren, worüber wir sprechen werden, da die Buchstaben „1C“ viele Dinge bedeuten können. In diesem Fall meinen wir mit den Buchstaben „1C“ ausschließlich das Entwicklungsframework „1C: Enterprise“ der modernen, achten Version. Wir werden nicht viel über den Hersteller und seine Richtlinien sprechen (aber wir müssen ein wenig tun). Wir werden nicht auf spezifische Anwendungen eingehen, die mit diesem Framework geschrieben wurden. Technologie ist getrennt, Anwendungen bzw. Konfigurationen sind getrennt.

High-Level-Architektur 1C: Enterprise

Nicht umsonst erwähne ich das Wort „Rahmen“. Aus Entwicklersicht ist die 1C-Plattform genau ein Framework. Und Sie müssen es genau wie ein Framework behandeln. Stellen Sie sich Spring oder ASP.NET vor, die von einer Laufzeitumgebung (JVM bzw. CLR) ausgeführt werden. Es kommt vor, dass in der Welt der konventionellen Programmierung („nicht 1C“) die Unterteilung in Frameworks, virtuelle Maschinen und spezifische Anwendungen selbstverständlich ist, da diese Komponenten in der Regel von verschiedenen Herstellern entwickelt werden. In der 1C-Welt ist es nicht üblich, das Entwicklungsframework und die Laufzeit selbst explizit zu unterscheiden; darüber hinaus werden bestimmte mit dem Framework geschriebene Anwendungen auch hauptsächlich von 1C selbst entwickelt. Dadurch kommt es zu einiger Verwirrung. Daher müssen wir im Rahmen des Artikels 1C von mehreren Seiten gleichzeitig betrachten und entlang mehrerer Koordinatenachsen klassifizieren. Und in jede Koordinatenachse legen wir eine Schaufel brauner Substanz und schauen uns die Merkmale, Vor- und Nachteile der bestehenden Lösung an.

Standpunkte zu 1C

1C für den Käufer

Der Käufer erwirbt ein Automatisierungssystem, mit dem er die Probleme der Automatisierung seines eigenen Geschäfts schnell lösen kann. Ein Unternehmen kann ein kleiner Stand oder eine große Holdinggesellschaft sein. Es ist klar, dass die Anforderungen dieser Unternehmen unterschiedlich sind, aber beide werden von einer einzigen Plattform-Codebasis unterstützt.

Für den 1C-Käufer bedeutet dies eine schnelle Markteinführung. Schnell. Schneller als Java, C# oder JS. Im mittleren. Rund um das Krankenhaus. Es ist klar, dass eine Visitenkarten-Website mit React besser wird, aber das Backend eines WMS-Systems wird auf 1C schneller starten.

1C als Werkzeug

Jede technologische Lösung hat Grenzen ihrer Anwendbarkeit. 1C ist keine Allzwecksprache; sie existiert nicht getrennt von ihrem Framework. Es wird empfohlen, 1C zu verwenden, wenn Sie Folgendes benötigen:

  • Serveranwendung
  • Anwendung, in der Finanzen angezeigt werden
  • mit vorgefertigter Benutzeroberfläche, ORM, Reporting, XML/JSON/COM/PDF/YourDataTransferingFormat
  • mit Unterstützung von Hintergrundprozessen und Jobs
  • mit rollenbasierter Sicherheit
  • mit skriptfähiger Geschäftslogik
  • mit der Fähigkeit, schnell einen Prototyp zu erstellen und einer kurzen Markteinführungszeit

Sie brauchen 1C nicht, wenn Sie möchten:

  • maschinelles Lernen
  • GPU-Berechnungen
  • Computergrafik
  • mathematische Berechnungen
  • CAD-System
  • Signalverarbeitung (Ton, Video)
  • HTTP-Aufrufe mit Hunderttausenden von RPS hochladen

1C als produzierendes Unternehmen

Es lohnt sich zu verstehen, was das Geschäft von 1C als Softwarehersteller ist. Das Unternehmen 1C verkauft Lösungen für Geschäftsprobleme durch Automatisierung. Verschiedene Unternehmen, ob groß oder klein, aber das ist es, was sie verkauft. Das Mittel zur Erreichung dieses Ziels sind Geschäftsanwendungen. Für die Buchhaltung, Lohn- und Gehaltsabrechnung usw. Um diese Anwendungen zu schreiben, nutzt das Unternehmen eine eigene Plattform zur Entwicklung von Geschäftsanwendungen. Speziell zugeschnitten auf häufige Aufgaben dieser Geschäftsanwendungen:

  • Finanzbuchhaltung
  • einfache Anpassung der Geschäftslogik
  • breite Integrationsmöglichkeiten in heterogenen IT-Landschaften

Als Hersteller glaubt 1C, dass dies die Strategie ist, die es Ihnen ermöglicht, mit Partnern und Kunden im Win-Win-Modus zusammenzuarbeiten. Dem kann man widersprechen, aber ungefähr so ​​bewirbt sich das Unternehmen: vorgefertigte Lösungen für Geschäftsprobleme, die von Partnern schnell angepasst und in jede IT-Landschaft integriert werden können.

Alle Ansprüche oder Wünsche an 1C als Framework sollten ausschließlich durch dieses Prisma betrachtet werden. „Wir wollen OOP in 1C“, sagen die Entwickler. „Wie viel wird es uns kosten, OOP auf der Plattform zu unterstützen? Wird uns das helfen, den Verkauf von Boxen zu steigern?“, sagt 1C. Öffnet sein „Prisma“ des Verkaufs von Lösungen für Geschäftsprobleme:

- Hey, Business, willst du OOP in deinem 1C?
- Wird mir das helfen, meine Probleme zu lösen?
- Wer weiß...
- Dann besteht keine Notwendigkeit

Dieser Ansatz kann gut oder schlecht sein, je nachdem, wer ihn betrachtet, aber so ist es eben. Wenn man über die Tatsache spricht, dass es in 1C kein Feature

Technologische Klassifizierung

„Tatsächlich tun Odinesniks ihr Bestes, um die besten Muster zu verwenden, die sorgfältig von sorgfältigen Methodikern und Entwicklern der 1C-Plattform ausgewählt werden.
Wenn Sie Ihren dummen Code für ein einfaches verwaltetes Formular schreiben, verwenden Sie es in Wirklichkeit Model View Controller с bidirektionale Datenbindung в Dreischichtige Daten-App-Engine, mit ...-Geschmack Objektbeziehungszuordnung auf hoher Ebene auf Grund deklarative Metadatenbeschreibungein eigenes haben plattformunabhängige Abfragesprache, C deklarative datengesteuerte Benutzeroberfläche, vollständig transparente Serialisierung und domänenorientierte Programmiersprache.

Der Unterschied zwischen 1C-Entwicklern und westlichen Kollegen liegt in der PR. Sie lieben es, jedem Blödsinn einen großen Namen zu geben und damit herumzulaufen wie mit einem Dreckssack.“
A. Orefkow

Die 1C-Plattform verfügt über eine klassische 3-Tier-Architektur, in deren Zentrum der Anwendungsserver (oder dessen Emulation für wenig Geld für kleine Ladenbesitzer) steht. Als DBMS kommt entweder MS SQL oder Postgres zum Einsatz. Es gibt auch Unterstützung für Oracle und IBM DB2, aber das ist eher esoterisch; niemand weiß, was passieren wird, wenn man 1C auf diesen Datenbanken unter mittlerer und hoher Last implementiert. Ich glaube, dass 1C selbst das nicht weiß.

Der Client-Teil ist entweder ein auf dem Computer des Benutzers installierter Thin Client oder ein Web-Client. Das Hauptmerkmal ist, dass Programmierer nicht zwei verschiedene Codes schreiben, sondern eine Anwendung in einer Sprache schreiben und diese bei Bedarf oder Bedarf im Browser anzeigen können. Wer wollte schon einen echten Full-Stack und eine einzige Sprache für das Front- und Backend, node.js? Es ist ihnen bis zum Schluss nie gelungen, genau das Gleiche zu tun. Es gibt einen echten Full Stack, aber Sie müssen ihn in 2C schreiben. Die Ironie des Schicksals, solche Dinge :)

Die Cloud-SaaS-Lösung 1C:Fresh funktioniert auch im Browsermodus, in dem Sie 1C nicht kaufen, sondern eine kleine Datenbank mieten und dort die Dönerverkäufe verfolgen können. Einfach im Browser, ohne etwas zu installieren oder zu konfigurieren.

Darüber hinaus gibt es einen Legacy-Client, der in 1C als „reguläre Anwendung“ bezeichnet wird. Vermächtnis ist Vermächtnis, willkommen in der Welt der Anwendungen im Jahr 2002, aber wir reden immer noch über den aktuellen Zustand des Ökosystems.

Der 1C-Serverteil unterstützt Clustering und Skalierung durch Hinzufügen neuer Maschinen zum Cluster. Hier sind ziemlich viele Kopien kaputt gegangen und dazu wird es im Artikel einen eigenen Abschnitt geben. Kurz gesagt ist dies nicht ganz dasselbe wie das Hinzufügen einiger genau derselben Instanzen hinter HAProxy.

Das Anwendungsentwicklungs-Framework verwendet eine eigene Programmiersprache, die in etwa einem leicht verbesserten VB6 ähnelt, das ins Russische übersetzt wurde. Für Leute, die alles Russische hassen und nicht glauben, dass „wenn“ mit „wenn“ übersetzt wird, wird die zweite Syntaxoption angeboten. Diese. Wenn Sie möchten, können Sie es in 1C so schreiben, dass es nicht von VB zu unterscheiden ist.

1C – Gut und Böse. Anordnung der Punkte in Holivars um 1C

Diese Programmiersprache ist der Hauptgrund für den Hass der 1C-Spitznamen gegenüber ihrer Plattform. Seien wir ehrlich, nicht ohne Grund. Die Sprache wurde so einfach wie möglich konzipiert, um das Mantra „ENTWICKLER, ENTWICKLER“ zumindest in der GUS in einem Maßstab zu erfüllen. Der kommerzielle Kern einer solchen Lösung ist meiner Meinung nach klar erkennbar: mehr Entwickler, größere Marktabdeckung. Dies traf verschiedenen Schätzungen zufolge zwischen 45 % und 95 % ein. Ich sage gleich, dass es wirklich einfacher ist, in der Sprache zu schreiben, die Sie denken. Und ich kenne ziemlich viele Programmiersprachen.

Beginnen wir mit der Sprache.

1C-Programmiersprache

Gleichzeitig Stärke und Schwäche des Systems. Bietet eine einfache Eingabe und Lesbarkeit. Andererseits wurde es seit der Veröffentlichung der Version 8 im Jahr 2002 nicht aktualisiert und ist moralisch veraltet. Jemand wird sagen: „Der Hauptnachteil ist, dass es kein OOP gibt“, und er wird sich irren. Erstens mag die PLO nicht nur Nuraliev, sondern auch Torvalds. Und zweitens gibt es OOP immer noch.

Aus Sicht des Entwicklers steht ihm ein Framework mit Basisklassen zur Verfügung, die auf dem DBMS angezeigt werden. Der Entwickler kann die Basisklasse „Directory“ nehmen und von ihr das Verzeichnis „Clients“ erben. Es kann neue Klassenfelder hinzufügen, zum Beispiel INN und Address, und bei Bedarf auch Methoden der Basisklasse überschreiben (überschreiben), zum Beispiel die OnWrite/AtRecord-Methode.

Das Framework ist so konzipiert, dass eine tiefere Vererbung selten erforderlich ist und die Einschränkung in OOP meiner Meinung nach sinnvoll ist. 1C konzentriert sich auf Domain Driven Development und lässt Sie zunächst über den Themenbereich der zu entwickelnden Lösung nachdenken, und das ist gut so. Es besteht nicht nur keine Versuchung, sondern auch keine Notwendigkeit, 10 verschiedene DTOs und ViewModels zu schreiben, nur um irgendwo Daten aus der Domäne anzuzeigen. Der 1C-Entwickler arbeitet immer mit einer Entität, ohne den Wahrnehmungskontext mit einem Dutzend Klassen mit ähnlichen Namen zu überladen, die dieselbe Entität, aber von einer anderen Seite darstellen. Beispielsweise enthält jede .NET-Anwendung zwangsläufig fünf oder zwei ViewModels und DTOs für die Serialisierung in JSON und die Datenübertragung vom Client zum Server. Und etwa 10–15 % Ihres Anwendungscodes werden für die Übertragung von Daten von einer Klasse in eine andere mithilfe von Stiften oder Krücken wie AutoMapper aufgewendet. Dieser Code muss geschrieben werden und Programmierer müssen dafür bezahlt werden, ihn zu erstellen und zu pflegen.

Es stellt sich heraus, dass die 1C-Sprache schwer zu entwickeln ist, ohne sie auf das Niveau der Mainstream-Sprachen zu komplizieren, wodurch der Vorteil der Einfachheit verloren geht. Was ist die Aufgabe des Anbieters im Wesentlichen, die gelöst werden soll: eine Standardlösung herauszugeben, die jeder auf der Straße erwischte Student mit dem erforderlichen Qualitätsniveau anpassen kann (d. h. ein Fall, der von einem Stand bis zu einer großen Fabrik reicht). Wenn Sie ein Stand sind, nehmen Sie einen Studenten; wenn Sie eine Fabrik sind, nehmen Sie einen Guru von Ihrem Implementierungspartner. Die Tatsache, dass Durchführungspartner Studenten zum Preis eines Gurus verkaufen, ist mit dem Rahmenwerk kein Problem. Architektonisch muss das Framework die Probleme beider lösen: Der Code der Standardkonfigurationen (den wir mit dem Versprechen der Anpassung an Unternehmen verkauft haben) sollte für einen Studenten verständlich sein und ein Guru sollte in der Lage sein, alles zu verstehen, was Sie wollen.

Was meiner Meinung nach in der Sprache wirklich fehlt, was einen dazu zwingt, mehr zu schreiben, als man könnte, ist Zeitverschwendung, die der Kunde bezahlt.

  • Möglichkeit der Eingabe auf der Ebene, zum Beispiel TypeScript (dadurch weiterentwickelte Code-Analyse-Tools in der IDE, Refactoring, weniger anstößige Pfosten)
    Verfügbarkeit von Funktionen als erstklassige Objekte. Ein etwas komplexeres Konzept, aber die Menge an typischem Boilerplate-Code könnte stark reduziert werden. Das Verständnis des Schülers für den Code würde sich meiner Meinung nach durch die Reduzierung des Volumens sogar verbessern
  • Universelle Sammlungsliterale, Initialisierer. Das Gleiche: Reduzieren Sie die Menge an Code, die geschrieben und/oder mit Ihren Augen betrachtet werden muss. Das Füllen von Sammlungen nimmt über 9000 % der 1C-Programmierzeit in Anspruch. Dies ohne syntaktischen Zucker zu schreiben ist langwierig, teuer und fehleranfällig. Im Allgemeinen übersteigt die Menge an LOC in 1C-Lösungen alle erdenklichen Grenzen im Vergleich zu verfügbaren offenen Frameworks und im Allgemeinen allen Javas Ihres Unternehmens zusammen. Die Sprache ist ausführlich, und das degeneriert in der Menge an Daten, Speicher, IDE-Bremsen, Zeit, Geld ...
  • schließlich Konstruktionen. Ich habe die Hypothese, dass diese Konstruktion fehlt, weil sie keine erfolgreiche Übersetzung davon ins Russische gefunden haben :)
  • Eigene Datentypen (ohne OOP), Analoga des Typs aus VB6. Dadurch können Sie Strukturen nicht mithilfe von Kommentaren im BSP und magischen Methoden eingeben, die diese Strukturen erstellen. Wir erhalten: weniger Code, einen Hinweis durch einen Punkt, schnellere Lösung des Problems, weniger Fehler aufgrund von Tippfehlern und fehlenden Eigenschaften von Strukturen. Jetzt liegt die Typisierung der Benutzerstrukturen vollständig beim Entwicklungsteam der Standard Subsystem Library, das zu seiner Ehre sorgfältig Kommentare zu den erwarteten Eigenschaften der übergebenen Parameterstrukturen schreibt.
  • Kein Zucker bei der Arbeit mit asynchronen Aufrufen im Webclient. Callback-Hölle in Form von ProcessingNotifications ist eine vorübergehende Krücke, die durch eine plötzliche Änderung der API der Hauptbrowser verursacht wird, aber man kann nicht die ganze Zeit so leben; der Vorteil des „studentischen Verständnisses“ von asynchronem Code geht verloren mehr und mehr. Fügen Sie in der Haupt-IDE keine Unterstützung für dieses Paradigma hinzu, und die Sache wird noch schlimmer.

Dies ist eines der dringendsten Probleme. Es ist klar, dass die Liste viel größer sein könnte, aber wir dürfen nicht vergessen, dass dies immer noch keine Allzwecksprache ist, sie erfordert kein Multithreading, keine Lambda-Funktionen, keinen Zugriff auf die GPU und keine Geschwindigkeit Gleitkommaberechnungen. Dies ist eine Skriptsprache für Geschäftslogik.

Ein Programmierer, der schon viel mit dieser Sprache gearbeitet hat, sich mit js oder c# beschäftigt, langweilt sich im Rahmen dieser Sprache. Es ist eine Tatsache. Er braucht Entwicklung. Auf der anderen Seite der Skala stehen für den Anbieter die Kosten für die Implementierung der angegebenen Funktionen im Vergleich zu der Umsatzsteigerung nach deren Implementierung. Hier liegen mir keine Informationen darüber vor, was aus Sicht des Unternehmens derzeit überwiegt.

Entwicklungsumgebung

Auch hier läuft es nicht rund. Es gibt zwei Entwicklungsumgebungen. Der erste ist der im Lieferumfang enthaltene Konfigurator. Die zweite ist die auf Basis von Eclipse entwickelte Enterprise Development Tools-Umgebung, kurz EDT.

Der Konfigurator bietet umfassende Entwicklungsaufgaben, unterstützt alle Funktionen und ist die zentrale Umgebung am Markt. Gerüchten zufolge ist es auch moralisch veraltet und entwickelt sich nicht weiter – aufgrund der hohen technischen Schulden in sich selbst. Die Situation könnte durch die Eröffnung einer internen API (in Form einer Freundschaft mit) verbessert werden Schneemann A. Orefkova oder auf unabhängiger Basis), dies ist jedoch nicht der Fall. Die Praxis hat gezeigt, dass die Community ihre eigenen Features in die IDE schreiben wird, solange der Hersteller nicht eingreift. Aber wir haben, was wir haben. Der Konfigurator war in den Jahren 2004-2005 großartig, erinnerte sehr an Visual Studio von damals, an manchen Stellen war er sogar noch cooler, aber er blieb in diesen Zeiten hängen.

Darüber hinaus ist das Volumen der durchschnittlichen Standardlösung seitdem um ein Vielfaches gewachsen, und heute kann die IDE die Menge an Code, mit der sie gefüttert wird, einfach nicht mehr bewältigen. Die Usability- und Refactoring-Fähigkeiten liegen nicht einmal bei Null, sie liegen im Minus. All dies weckt bei den Entwicklern keine Begeisterung und sie träumen davon, in andere Ökosysteme zu wechseln und dort weiterhin Scheiße zu programmieren, aber in einer angenehmen Umgebung, die einem mit ihrem Verhalten nicht ins Gesicht spuckt.

Alternativ wird eine von Grund auf neu geschriebene IDE angeboten, die auf Eclipse basiert. Dort leben die Quellen, wie in jeder anderen Software auch, in Form von Textdateien, werden in GIT gespeichert, Pull-Request-Zweige, all das. Der Nachteil ist, dass es den Beta-Status seit vielen Jahren nicht mehr verlassen hat, obwohl es mit jeder Veröffentlichung besser wird. Ich werde nicht über die Nachteile von EDT schreiben, heute ist es ein Minus, morgen ist es ein festes Feature. Die Relevanz einer solchen Beschreibung wird schnell verschwinden. Heutzutage ist es möglich, in EDT zu entwickeln, aber das ist ungewöhnlich; man muss auf eine gewisse Anzahl von IDE-Fehlern vorbereitet sein.

Wenn Sie die Situation durch das oben erwähnte „1C-Prisma“ betrachten, erhalten Sie ungefähr Folgendes: Die Veröffentlichung der neuen IDE erhöht den Verkauf von Boxen nicht, aber der Abfluss von ENTWICKLERN kann verringert werden. Es ist schwer zu sagen, was das Ökosystem in Bezug auf den Entwicklerkomfort erwartet, aber Microsoft hat mobile Entwickler bereits vermasselt, indem es ihnen seine Dienste zu spät angeboten hat.

Entwicklungsmanagement

Hier ist alles deutlich besser als beim Schreiben von Code, insbesondere in letzter Zeit, als die Bemühungen der Community die Probleme der Verwaltungsautomatisierung ans Licht brachten, Prototypen auf den Markt brachten, die dazu aufriefen, das 1C-Repository in den Papierkorb zu werfen und Git, schnelle Schuldzuweisungen und Codeüberprüfung zu verwenden , statische Analyse, automatische Bereitstellung usw. Der Plattform wurden viele Funktionen hinzugefügt, die den Grad der Automatisierung von Entwicklungsaufgaben erhöhen. All diese Funktionen wurden jedoch nur und ausschließlich für die Entwicklung unserer eigenen großen Produkte hinzugefügt, als klar wurde, dass wir auf Automatisierung nicht verzichten konnten. Es gab automatische Zusammenführungen, Drei-Wege-Vergleiche mit KDiff und so weiter. Auf Github gestartet Git-Konverter, der, ehrlich gesagt, ideologisch vom Projekt abgezogen wurde gitsync, jedoch an die Prozesse des Lieferantenunternehmens angepasst. Dank der hartnäckigen Leute von Open Source kam die Entwicklungsautomatisierung in 1C in Gang. Eine offene API für den Konfigurator würde meiner Meinung nach auch die moralische Rückständigkeit der Haupt-IDE verschieben.

Heutzutage werden 1C-Quellen in Git mit Commits gespeichert, die mit Vorgängen in Jira verknüpft sind, Überprüfungen in Crucible, Push-Button von Jenkins und Allure-Berichten über Codetests in 1C und sogar Statische Analyse in SonarQube - Das ist alles andere als eine Neuigkeit, sondern eher der Mainstream in Unternehmen, in denen viel 1C-Entwicklung stattfindet.

Verwaltung

Hier gibt es viel zu sagen. Erstens handelt es sich hierbei natürlich um einen Server (1C-Servercluster). Eine wunderbare Sache, aber aufgrund der Tatsache, dass es sich um eine völlig Blackbox handelt, die ausreichend detailliert, aber auf eine bestimmte Weise dokumentiert ist, ist es das Los einiger weniger Auserwählter, die den Start des unterbrechungsfreien Betriebs im Hochlastmodus auf mehreren Servern meistern Medaille mit der Aufschrift „Experte für Technikfragen“. Es ist zu beachten, dass sich die Verwaltung eines 1C-Servers grundsätzlich nicht von der Verwaltung anderer Server unterscheidet. Es handelt sich um eine netzwerkbasierte Multithread-Anwendung, die Speicher-, CPU- und Festplattenressourcen verbraucht. Bietet zahlreiche Möglichkeiten zur Telemetrieerfassung und Diagnose.

Das Problem hierbei ist, dass der Anbieter für genau diese Diagnose keine speziellen vorgefertigten Lösungen anbietet. Ja, es gibt 1C: Instrumentation and Control Center, die sind sogar ganz gut, aber sie sind sehr teuer und nicht jeder hat sie. In der Community gibt es eine Reihe von Entwicklungen zur Anbindung von Grafana, Zabbix, ELK und anderen Dingen aus dem Standard-Admin-Set, aber es gibt keine einzelne Lösung, die für die Mehrheit geeignet ist. Die Aufgabe wartet auf ihren Helden. Und wenn Sie ein Unternehmen sind, das den Start in einem 1C-Cluster plant, benötigen Sie einen Experten. Ihr eigenes Inneres oder Äußeres, aber Sie brauchen es. Es ist normal, dass es eine separate Rolle mit Kompetenzen für den Serverbetrieb gibt. Nicht jeder 1C-Benutzer sollte dies wissen. Sie müssen nur verstehen, dass eine solche Rolle erforderlich ist. Nehmen wir als Beispiel SAP. Dort wird ein Programmierer höchstwahrscheinlich nicht einmal von seinem Stuhl aufstehen, wenn er aufgefordert wird, etwas auf dem Anwendungsserver zu konfigurieren. Er ist vielleicht einfach nur dumm und wird sich nicht schämen. In der SAP-Methodik gibt es hierfür eine eigene Mitarbeiterrolle. Aus irgendeinem Grund wird in der 1C-Branche angenommen, dass dies bei einem Mitarbeiter für das gleiche Gehalt kombiniert werden sollte. Es ist eine Täuschung.

Nachteile des 1C-Servers

Es gibt genau ein Minus – Zuverlässigkeit. Oder, wenn Sie es vorziehen, Unvorhersehbarkeit. Das plötzliche seltsame Verhalten des Servers hat bereits für Gesprächsstoff gesorgt. Eine universelle Abhilfe – das Stoppen des Servers und das Löschen aller Caches – wird sogar im Expertenhandbuch beschrieben, und es wird sogar ein Batch-Buch empfohlen, das dies erledigt. Wenn Ihr 1C-System anfängt, etwas zu tun, was es theoretisch nicht tun sollte, ist es an der Zeit, den Sitzungsdaten-Cache zu leeren. Nach meiner Schätzung gibt es im ganzen Land nur drei Menschen, die wissen, wie man einen 1C-Server ohne dieses Verfahren betreibt, und sie geben keine Geheimnisse weiter, weil... sie leben davon. Vielleicht liegt ihr Geheimnis darin, dass sie Sitzungsdaten bereinigen, aber sie erzählen niemandem davon, Alter.

Ansonsten ist der 1C-Server dieselbe Anwendung wie jeder andere und wird auf die gleiche Weise verwaltet, indem man die Dokumentation liest und auf das Tamburin klopft.

Docker

Der Nutzen des Einsatzes eines containerisierten 1C-Servers in der Produktion ist noch nicht erwiesen. Der Server wird nicht durch einfaches Hinzufügen von Knoten hinter dem Balancer geclustert, was die Vorteile der Produktionscontainerisierung auf ein Minimum reduziert, und die Praxis eines erfolgreichen Betriebs in Containern im Hochlastmodus wurde nicht etabliert. Daher verwenden nur Entwickler Docker+1C zum Einrichten von Testumgebungen. Dort ist es sehr nützlich, angewendet, ermöglicht es Ihnen, mit modernen Technologien zu spielen und sich von der Verzweiflung des Konfigurators zu erholen.

Kommerzielle Komponente

Aus Investitionssicht ermöglicht Ihnen 1C aufgrund der breiten Möglichkeiten der Anwendungsklassen, das Problem der schnellen Umsetzung von Geschäftsideen zu lösen. 1C bietet sofort ein sehr gutes Reporting, Integration mit allem, Web-Client, mobilem Client, mobiler Anwendung, Unterstützung für verschiedene DBMS, inkl. kostenlose, plattformübergreifende Server- und installierte Client-Teile. Ja, die Benutzeroberfläche von Anwendungen wird gelb sein, manchmal ist das ein Minuspunkt, aber nicht immer.
Durch die Wahl von 1C erhält ein Unternehmen eine Reihe von Softwarelösungen, die es ihm ermöglichen, eine sehr breite Palette von Anwendungen zu erstellen, sowie viele Entwickler auf dem Markt, die weniger Geld wollen als Javaisten und gleichzeitig schneller Ergebnisse liefern.

Beispielsweise kann die Aufgabe, einem Kunden eine PDF-Rechnung zu senden, in einer Stunde studentischer Arbeit gelöst werden. Das gleiche Problem in .NET kann durch den Kauf einer proprietären Bibliothek oder durch ein paar Tage oder Wochen Codierung durch einen strengen, bärtigen Entwickler gelöst werden. Manchmal beides gleichzeitig. Und ja, ich habe nur über die PDF-Generierung gesprochen. Wir haben nicht gesagt, woher dieser Gesetzentwurf überhaupt kommen wird. Der Web-Frontender muss ein Formular erstellen, in das der Bediener die Daten eingibt, der Backender muss DTO-Modelle für die Übertragung von JSON, Modelle für die Speicherung in der Datenbank, die Struktur der Datenbank selbst, die Migration dorthin und die Bildung einer Grafik erstellen Anzeige dieses Kontos und erst dann - PDF. Auf 1C ist die gesamte Aufgabe von Grund auf in genau einer Stunde erledigt.

Ein vollwertiges Buchhaltungssystem für einen kleinen Stand mit einem Geschäftsprozess „Kauf/Verkauf“ ist in 3 Stunden erstellt. Mit Verkaufsberichten, Buchhaltung der Waren zu Einkaufs- und Verkaufspreisen, aufgeschlüsselt nach Lager, Zugriffsrechtekontrolle, Web-Client und mobiler Anwendung . Okay, ich habe die Bewerbung vergessen, mit der Bewerbung nicht in 3 Stunden, sondern in sechs.

Wie lange dauert es für einen .NET-Entwickler, Visual Studio auf einem sauberen Computer zu installieren und es dem Kunden vorzuführen? Wie sieht es mit den Entwicklungskosten aus? Gleiche Sache.

Stärken von 1C als Plattform

1C ist nicht deshalb stark, weil es etwas Bestimmtes hat, das das Beste der Welt ist. Im Gegenteil, in jedem einzelnen Subsystem finden Sie ein interessanteres Analogon in der Software der Welt. Aufgrund einer Kombination von Faktoren sehe ich jedoch keine ähnliche Plattform wie 1C. Darin liegt der kommerzielle Erfolg. Die Vorteile der Plattform sind überall verstreut und werden am deutlichsten sichtbar, wenn man sieht, wie dies auf anderen Plattformen umgesetzt wird. Im Grunde handelt es sich hierbei NICHT um Merkmale, sondern im Gegenteil um eine Ablehnung von Merkmalen zugunsten eines bestimmten Paradigmas. Ein paar Beispiele:

  1. Unicode. Was zum Teufel könnte einfacher sein? Im Jahr 2019 besteht keine Notwendigkeit, Einzelbyte-ASCII-Kodierungen zu verwenden (außer für die Integration mit alten Legacy-Kodierungen). Auf keinen Fall. Aber nein. Wie auch immer, jemand in einer Tabelle verwendet ein Einzelbyte-Varchar und die Anwendung wird Probleme mit der Codierung haben. Im Jahr 2015 schlug die LDAP-Autorisierung von Gitlab aufgrund fehlerhafter Arbeit mit Kodierungen fehl; JetBrains IDE funktioniert immer noch nicht überall mit Kyrillisch in Dateinamen. 1C bietet eine hochwertige Isolierung des Anwendungscodes von der Datenbankschicht. Dort ist es unmöglich, Tabellen auf niedriger Ebene zu tippen, und Pfosten inkompetenter Junioren auf Datenbankebene sind dort unmöglich. Ja, es kann andere Probleme mit inkompetenten Junioren geben, aber die Vielfalt der Probleme ist viel geringer. Jetzt werden Sie mir sagen, dass Ihre Anwendung korrekt entworfen wurde und die Datenbankzugriffsschicht so isoliert ist, wie sie sein sollte. Werfen Sie noch einmal einen Blick auf Ihre unternehmensspezifische Java-Anwendung. Nah und ehrlich. Stört Sie Ihr Gewissen? Dann freue ich mich für dich.
  2. Nummerierung von Dokumenten/Nachschlagewerken. In 1C ist es definitiv nicht das flexibelste und nicht das Beste. Aber was sie in Bankensoftware und in selbst geschriebenen Buchhaltungssystemen tun – nun, es ist nur Dunkelheit. Entweder bleibt die Identität hängen (und dann „Oh, warum haben wir Lücken“), oder im Gegenteil, sie erstellen einen Generator, der mit Sperren auf DBMS-Ebene arbeitet (und zu einem Engpass wird). Tatsächlich ist es ziemlich schwierig, diese scheinbar einfache Aufgabe zu erledigen – einen End-to-End-Enumerator von Entitäten mit einem Eindeutigkeitsabschnitt, der auf einem bestimmten Satz von Schlüsseln und Präfixen basiert, damit die Datenbank während der parallelen Dateneingabe nicht blockiert wird .
  3. Bezeichner von Datensätzen in der Datenbank. 1C hat eine willensstarke Entscheidung getroffen – alle Link-IDs sind absolut synthetisch und das war’s. Und mit verteilten Datenbanken und Austausch gibt es keine Probleme. Entwickler anderer Systeme erstellen hartnäckig so etwas wie Identitäten (es ist kürzer!), ziehen sie in die GUI, bis es an der Zeit ist, mehrere verwandte Instanzen zu erstellen (und dann werden sie entdeckt). Hast du das nicht? Ehrlich?
  4. Listen. 1C verfügt über durchaus gelungene Mechanismen zum Durchblättern (großer) Listen und zum Navigieren darin. Lassen Sie mich gleich eine Reservierung vornehmen – bei richtiger Nutzung der Mechanik! Im Allgemeinen ist das Thema ziemlich unangenehm, es kann nicht ideal gelöst werden: Entweder ist es intuitiv und einfach (aber es besteht die Gefahr großer Datensätze auf dem Client), oder das Paging ist auf die eine oder andere Weise schief. Wer Paging betreibt, macht es oft schief. Diejenigen, die eine ehrliche Bildlaufleiste erstellen, fügen eine Datenbank, einen Kanal und einen Client hinzu.
  5. Verwaltete Formulare. Zweifellos funktioniert die Schnittstelle im Webclient nicht perfekt. Aber es funktioniert. Für viele andere Buchhaltungs- und Banksysteme ist die Einrichtung eines Remote-Arbeitsplatzes jedoch ein Projekt auf Unternehmensebene. Haftungsausschluss: Zum Glück für diejenigen, die es ursprünglich im Internet erstellt haben, hat dies keine Auswirkungen.
  6. App. Seit kurzem können Sie auch mobile Anwendungen schreiben, während Sie sich im selben Ökosystem befinden. Hier ist es etwas komplizierter als bei einem Web-Client; die Besonderheiten der Geräte zwingen Sie dazu, speziell für sie zu schreiben, aber Sie stellen trotzdem kein separates Team mobiler Entwickler ein. Wenn Sie eine Anwendung für die internen Bedürfnisse eines Unternehmens benötigen (wenn eine mobile Lösung für ein Unternehmensproblem wichtiger ist als ein gelbes UI-Design), verwenden Sie einfach sofort die gleiche Plattform.
  7. Berichterstattung. Mit diesem Wort meine ich nicht ein BI-System mit Big Data und einer Verzögerung im ETL-Prozess. Dabei handelt es sich um operative Personalberichte, die es Ihnen ermöglichen, den Stand der Buchhaltung hier und jetzt zu beurteilen. Salden, gegenseitige Abrechnungen, Umstufungen usw. 1C verfügt standardmäßig über ein Berichtssystem mit flexiblen Einstellungen für Gruppierungen, Filter und Visualisierung auf Benutzerseite. Ja, es gibt kühlere Analoga auf dem Markt. Allerdings nicht im Rahmen einer All-in-One-Lösung und zu einem teilweise höheren Preis als eine All-in-One-Lösung. Und häufiger ist es sogar umgekehrt: nur Reporting, aber teurer als die gesamte Plattform und schlechter in der Qualität.
  8. Druckbare Formulare. Nun, nutzen Sie .NET, um das Problem des Versendens von Gehaltsabrechnungen im PDF-Format per E-Mail an Mitarbeiter zu lösen. Und nun die Aufgabe, Rechnungen zu drucken. Wie wäre es mit dem Speichern ihrer Kopien im selben PDF? Für den 1C-Spitznamen beträgt die Ausgabe eines beliebigen Layouts als PDF +1 Codezeile. Das bedeutet + 40 Sekunden Arbeitszeit, statt Tage oder Wochen in einer anderen Sprache. Gedruckte Formularlayouts in 1C sind unglaublich einfach zu entwickeln und leistungsstark genug, um mit kostenpflichtigen Gegenstücken zu konkurrieren. Ja, wahrscheinlich gibt es in 1C-Tabellendokumenten nicht viele interaktive Möglichkeiten; Sie können mit OpenGL nicht schnell ein 3D-Diagramm mit Skalierung erhalten. Aber ist es wirklich notwendig?

Dies sind nur einige Beispiele, bei denen sich die Einschränkung der Funktionalität oder die Umsetzung von Kompromissen als wichtiger architektonischer Vorteil in der Zukunft erweisen wird. Auch wenn es sich um einen Kompromiss handelt oder nicht um die effektivste Option – sie ist bereits in der Box enthalten und wird als selbstverständlich angesehen. Die eigenständige Umsetzung wird entweder unmöglich sein (weil solche Entscheidungen zu Beginn des Projekts getroffen werden müssen, dafür keine Zeit ist und es überhaupt keinen Architekten gibt) oder mehrere kostspielige Iterationen erfordern. In jedem der aufgeführten Punkte (und dies ist keine vollständige Liste architektonischer Lösungen) können Sie Fehler machen und Einschränkungen einführen, die die Skalierung blockieren. In jedem Fall müssen Sie als Unternehmer sicherstellen, dass Ihre Programmierer bei der Erstellung eines „Systems von Grund auf“ klare Hände haben und subtile Systemprobleme sofort gut lösen.

Ja, wie in jedem anderen komplexen System verfügt auch 1C selbst über Lösungen, die die Skalierung in bestimmten Aspekten blockieren. Ich wiederhole jedoch, dass ich aufgrund einer Kombination von Faktoren, den Betriebskosten und der Anzahl der bereits im Voraus gelösten Probleme keinen würdigen Konkurrenten auf dem Markt sehe. Für den gleichen Preis erhalten Sie ein Finanzanwendungs-Framework, einen geclusterten, ausgewogenen Server mit einer Benutzeroberfläche und einer Weboberfläche, einer mobilen Anwendung, Berichten, Integration und vielen anderen Dingen. In der Java-Welt stellen Sie ein Front-End- und Back-End-Team ein, debuggen Low-Level-Schwärme selbst geschriebenen Servercodes und zahlen separat für zwei mobile Anwendungen für zwei mobile Betriebssysteme.

Ich sage nicht, dass 1C alle Fälle lösen wird, aber für eine interne Unternehmensanwendung, bei der kein Branding der Benutzeroberfläche erforderlich ist – was wird sonst noch benötigt?

Haar in der Suppe

Sie haben wahrscheinlich den Eindruck gewonnen, dass 1C die Welt retten wird und dass alle anderen Arten, Unternehmenssysteme zu schreiben, falsch sind. So ist es überhaupt nicht. Wenn Sie sich aus Unternehmersicht für 1C entscheiden, müssen Sie neben der schnellen Markteinführung auch die folgenden Nachteile berücksichtigen:

  • Serverzuverlässigkeit. Es braucht wirklich hochqualifizierte Spezialisten, die den unterbrechungsfreien Betrieb gewährleisten können. Mir ist kein fertiges Schulungsprogramm des Anbieters für solche Fachkräfte bekannt. Es gibt Kurse zur Vorbereitung auf die Expertenprüfung, aber das reicht meiner Meinung nach nicht aus.
  • Unterstützung. Siehe vorherigen Absatz. Um Unterstützung vom Anbieter zu erhalten, müssen Sie es kaufen. Aus irgendeinem Grund wird dies in der 1C-Branche nicht akzeptiert. Und mit SAP ist es fast ein Pflichtkauf und stört niemanden. Ohne Unternehmensunterstützung und ohne Personalexperten können Sie mit 1C-Störungen allein gelassen werden.
  • Dennoch kann man mit 1C nicht alles machen. Dies ist ein Werkzeug und wie jedes Werkzeug hat es Grenzen in seiner Anwendbarkeit. In der 1C-Landschaft ist es sehr wünschenswert, einen „Nicht-1C“-Systemarchitekten zu haben.
  • Gute 1C-Spitznamen sind nicht billiger als gute Programmierer in anderen Sprachen. Allerdings ist die Einstellung schlechter Programmierer teuer, unabhängig von der Sprache, in der sie schreiben.

Lassen Sie uns die Punkte punktieren

  • 1C ist ein RAD-Framework (Rapid Application Development) für Unternehmen und darauf zugeschnitten.
  • Dreistufiger Link mit Unterstützung für die wichtigsten DBMS, Client-Benutzeroberfläche, einem sehr guten ORM und Reporting
  • Umfangreiche Möglichkeiten zur Integration mit Systemen, die das können, was 1C nicht kann. Wenn Sie maschinelles Lernen wünschen, nehmen Sie Python und senden Sie das Ergebnis über http oder RabbitMQ an 1C
  • Sie müssen sich nicht bemühen, alles mit 1C zu erledigen, Sie müssen seine Stärken verstehen und sie für Ihre eigenen Zwecke nutzen
  • Entwickler, die dazu tendieren, sich mit technologischen Framework-Gadgets zu befassen und alle N Jahre auf eine neue Engine umzugestalten, sind von 1C gelangweilt. Da ist alles sehr konservativ.
  • Auch die Entwickler langweilen sich, weil sich der Hersteller kaum um sie kümmert. Langweilige Sprache, schwache IDE. Sie bedürfen einer Modernisierung.
  • Andererseits sind Entwickler, die keinen Spaß daran haben, eine andere Technologie, die ihnen Spaß macht, zu nutzen und zu erlernen, schlechte Entwickler. Sie werden jammern und in ein anderes Ökosystem ziehen.
  • Arbeitgeber, die ihren 1C-Spitznamen nicht erlauben, etwas in Python zu schreiben, sind schlechte Arbeitgeber. Sie werden Mitarbeiter mit neugierigen Köpfen verlieren, und an ihre Stelle werden Affenprogrammierer treten, die zwar mit allem einverstanden sind, aber Unternehmenssoftware in den Sumpf ziehen. Es muss noch neu geschrieben werden, also wäre es vielleicht besser, etwas früher ein wenig in Python zu investieren?
  • 1C ist ein kommerzielles Unternehmen und implementiert Funktionen ausschließlich auf der Grundlage eigener Interessen und Zweckmäßigkeit. Das kann man ihr nicht verübeln, Unternehmen müssen an Profit denken, so ist das Leben
  • 1C verdient Geld, indem es Lösungen für Geschäftsprobleme verkauft, nicht für Vasyas Entwicklerprobleme. Diese beiden Konzepte hängen zusammen, aber die Priorität ist genau das, was ich gesagt habe. Wenn Entwickler Vasya bereit ist, eine persönliche Lizenz für 1C: Resharper zu bezahlen, wird es ziemlich schnell erscheinen, „Resharper“ von A. Orefkova ist ein Beweis dafür. Wenn der Anbieter dies unterstützen und nicht dagegen ankämpfen würde, würde ein Markt für Software für Entwickler entstehen. Mittlerweile gibt es auf diesem Markt eineinhalb Spieler mit fragwürdigen Ergebnissen, und das alles, weil die Integration mit der IDE negativ ist und alles auf Krücken gemacht wird.
  • Die Praxis eines Mehrmaschinenbedieners wird in Vergessenheit geraten. Moderne Anwendungen sind zu umfangreich, um sie sowohl von der Codeseite als auch von der Seite der geschäftlichen Nutzung aus zu merken. Auch der 1C-Server wird immer komplexer, es wird unmöglich sein, alle Arten von Fachwissen in einem Mitarbeiter zu bündeln. Dies soll einen Bedarf an Fachkräften mit sich bringen, was eine Attraktivität des 1C-Berufs und eine Gehaltserhöhung bedeutet. Wenn Vasya früher als Dreier-Mitarbeiter für ein Gehalt gearbeitet hat, müssen Sie jetzt zwei Vasyas einstellen, und der Wettbewerb unter Vasyas kann die allgemeine Steigerung ihres Niveaus vorantreiben.

Abschluss

1C ist ein sehr würdiges Produkt. In meiner Preisklasse kenne ich überhaupt keine Analoga, schreibt in die Kommentare, wenn es welche gibt. Allerdings macht sich der Abfluss von Entwicklern aus dem Ökosystem immer deutlicher bemerkbar, und es handelt sich um einen „Brain Drain“, egal wie man es betrachtet. Die Branche ist hungrig nach Modernisierung.
Wenn Sie Entwickler sind, bleiben Sie nicht bei 1C hängen und denken Sie nicht, dass in anderen Sprachen alles magisch ist. Während du ein Junior bist, vielleicht. Sobald etwas Größeres zu lösen ist, müssen vorgefertigte Lösungen länger gesucht und intensiver umgesetzt werden. Was die Qualität der „Blöcke“, aus denen eine Lösung aufgebaut werden kann, angeht, ist 1C sehr, sehr gut.

Und noch etwas: Wenn Sie einen 1C-Spitznamen einstellen möchten, kann der 1C-Spitzname sicher in die Position des leitenden Analysten berufen werden. Ihr Verständnis der Aufgabe, des Themenbereichs und ihrer Zerlegungsfähigkeiten ist ausgezeichnet. Ich bin mir sicher, dass dies genau auf den erzwungenen Einsatz von DDD in der 1C-Entwicklung zurückzuführen ist. Eine Person wird darin geschult, zunächst über die Bedeutung einer Aufgabe nachzudenken, über die Zusammenhänge zwischen Objekten des Fachgebiets und verfügt gleichzeitig über einen technischen Hintergrund in Integrationstechnologien und Datenaustauschformaten.

Seien Sie sich bewusst, dass es den idealen Rahmen nicht gibt und passen Sie auf sich auf.
Alles gut!

PS: Vielen Dank speshurisch für Unterstützung bei der Vorbereitung des Artikels.

An der Umfrage können nur registrierte Benutzer teilnehmen. Einloggenbitte.

Haben Sie 1C in Ihrem Unternehmen?

  • 13,3%Überhaupt nicht.71

  • 30,3%Gibt es, aber nur irgendwo in der Buchhaltung. Kernsysteme auf anderen Plattformen162

  • 41,4%Ja, die wesentlichen Geschäftsprozesse laufen darauf221

  • 15,0%1C muss sterben, die Zukunft gehört %technology_name%80

534 Benutzer haben abgestimmt. 99 Benutzer enthielten sich der Stimme.

Source: habr.com

Kommentar hinzufügen