Zurück zur Startseite

1C-Konfigurationsarchitektur-Probleme für Entwickler

Der Artikel analysiert architektonische und funktionale Mängel standardmäßiger 1C-Konfigurationen: von Code-Bindung an Formulare und unlesbaren Abfragen bis zu Problemen mit Zugriffsrollen und Kostenpreisberechnung. Beispiele und Verbesserungsempfehlungen für Middle/Senior-Entwickler.

1C-Mängel: von Architektur bis Funktionalität
Advertisement 728x90

Kritische Schwachstellen in der Architektur standardmäßiger 1C-Konfigurationen

Standard-1C-Konfigurationen lagern Geschäftslogik häufig direkt in Formulare aus und beschränken die Ausführung auf die Client-Umgebung. Prozeduren in Formularen und Objektmodulen sind selten als exportiert gekennzeichnet, was einen direkten Aufruf ohne Erweiterungen verhindert. Funktionen sind eng gekoppelt und stark vom Formularkontext abhängig, was gegen das Prinzip der Isolation verstößt.

Typische Beispiele für diese enge Kopplung sind:

  • Das Laden von Kontoauszügen ist nur über eine Listenansicht oder ein Dokumentformular möglich.
  • Das Abrufen von Organisations- oder Partnerdaten über die Steuernummer ist an UI-Elemente gebunden, was Entwickler zwingt, Code zu duplizieren, wenn Objekte programmatisch erstellt werden.

Dieser Architekturansatz behindert die Wiederverwendbarkeit von Modulen und das Testing erheblich.

Google AdInline article slot

Irrationale Nutzung von Serveraufrufen

1C-Entwickler greifen oft übermäßig auf Module mit dem Suffix _ServerCall_ zurück und duplizieren dabei Aufrufe identischer Prozeduren. Funktionen in gemeinsamen Modulen werden direkt auf dem Server aufgerufen, ohne das Flag „Serveraufruf“ zu setzen, nur um sie anschließend erneut über Proxy-Module mit aktiviertem Flag aufzurufen. Dies vervielfacht die Codebasis unnötig.

Dutzende solcher Module in Standardkonfigurationen überfordern Entwickler. Ein saubererer Ansatz wäre, serverseitige Prozeduren einfach über das Schlüsselwort Export freizugeben und redundante Wrapper zu eliminieren.

Monströse Abfragen statt lesbarem Code

Die Datenextraktion erfolgt überwiegend über Datenbankabfragen, selbst wenn Objektmethode ausreichen würden. In Dokumentverwaltungsmodulen generieren Abfragen Druckdaten, doch bei der Berechnung von Registerbewegungen schwellen sie zu unleserlichen Konstrukten an, die voller Joins und bedingter Verzweigungen stecken.

Google AdInline article slot

Dies opfert die Lesbarkeit zugunsten eines deklarativen Stils und erschwert das Debugging sowie zukünftige Anpassungen. Eine bessere Alternative ist die Kombination von Abfragen mit imperativer Logik innerhalb von Prozeduren.

Mehrdeutige Datenstrukturen

Bei der Erstellung von Druckvorlagen werden häufig mehrere Tabellenblätter zu einem einzigen Dokument zusammengeführt, getrennt durch Bereiche (_Dokument1_, _Dokument2_), anstatt korrekte Sammlungen zu übergeben. Diese Sammlungsstrukturen imitieren Objekte, doch ihre Feldzusammensetzung ist oft unlogisch und erfordert manuelles Mapping bei Anpassungen.

Chaotische asynchrone Ketten

Asynchrone Aufrufketten in 1C sind schlecht dokumentiert: Prozedurnamen liefern keinen beschreibenden Kontext, Kommentare fehlen. Das Debugging der Verarbeitung von Kassenbons ist ein klassisches Beispiel – eine lange Abfolge von Aufrufen ohne klaren Einstiegspunkt.

Google AdInline article slot

Die optimale Lösung ist eine Zustandsmaschine (State Machine) mit einem aktuellen Statusparameter, der die Aufrufe entsprechend steuert.

Pseudocode-Beispiel für eine Zustandsmaschine:

Procedure ExecuteAction(CurrentStatus) Export
    If CurrentStatus = "Initialization" Then
        InitializeReceipt();
        TransitionToStatus("Forming");
    Else If CurrentStatus = "Forming" Then
        GenerateReceipt();
        TransitionToStatus("Printing");
    // Und so weiter
    EndIf;
EndProcedure

Fehlendes sicheres Debugging

Kritische Operationen, wie die Interaktion mit Fiskalgeräten, unterstützen keine Antwortemulation. Der Code erwartet echtes Hardware-Feedback, was virtuelle Tests ausschließt. Dies erhöht die Risiken während der Entwicklung und Integration erheblich.

Instabile Benennung und Refactoring

Anwendungsobjekte, Module und Felder werden häufig umbenannt, manchmal mit dem Präfix _Delete_. Eine Suche nach _Delete_ in der Konfiguration liefert Hunderte von Ergebnissen. Terminologie wie „Partner/Gegenparteien/Käufer“ ist inkonsistent, und Entitäten (z. B. Acquiring-Verträge) werden ständig zusammengeführt oder aufgespalten.

Dieser Ansatz spiegelt impulsive Architekturentscheidungen wider und zwingt Entwickler dazu, Zeit für die Migration von Referenzen zu verschwenden.

Inkonsistente Schnittstellen

UI-Elemente verwenden stark variierende Namenskonventionen: Eine Hinzufügen-Schaltfläche in einem Tabellenabschnitt könnte _InventoryAdd oder einfach _Add heißen. Die rechte Spalte eines Dokuments könnte _RightColumn oder _HeaderRight lauten. Diese Inkonsistenz behindert die Automatisierung und die Entwicklung von Erweiterungen.

Ineffiziente Algorithmen

Trotz eines starken Fokus auf Leistung enthält die Codebasis erheblichen Ballast. Beim Drucken von Rechnungen werden alle Vorlagen im Voraus geladen, obwohl nur wenige benötigt werden. Ein bedarfsgesteuertes Caching würde den Overhead in 99 % der Fälle reduzieren.

Duplizierte HTTP-Funktionalität

Verschiedene Teams implementieren HTTP-Anfragen isoliert (für direktes Banking, Website-Synchronisation usw.) ohne einen einheitlichen Abfangpunkt. Es fehlt ein standardisierter Proxy für eine zentrale Konfiguration.

Funktionale Defekte

Standardlösungen scheitern oft in der Praxis aufgrund zu vereinfachter Annahmen der Systemarchitekten.

Probleme bei der Kostenberechnung

Der Wechsel zur monatlichen Abrechnung funktioniert für die Großproduktion, schafft aber Engpässe für den Einzelhandel und mittelständische Unternehmen: negative Periodenendbestände blockieren die Kostenberechnung vollständig.

Hardware-Einschränkungen

Das Verbot von zwei Registrierkassen an einem einzigen Arbeitsplatz ist ein Paradebeispiel dafür, wie geschäftsfreundliche Optimierungen blockiert werden.

Falsche Bonusverbuchung

Auslaufende Boni erfordern eine Chargenverfolgung, doch 1C greift standardmäßig auf Durchschnittsmethoden zurück, was zu Berechnungsfehlern führt. Version 2.5 verschärft das Problem noch und macht die Funktionalität ohne eine vollständige Neuentwicklung unbrauchbar.

Veraltetes Zugriffsrechte-Modell

Rollen basieren auf statischen Checkboxen und ignorieren die dynamische Codeausführung. Vollständige Zugriffsrechte beinhalten versehentlich administrative Privilegien, was regulären Benutzern erlaubt, Konten zu erstellen oder die gesamte Datenbank herunterzuladen.

Wichtige Erkenntnisse

  • Architektonische Starrheit: Enge Kopplung an Formulare und Kontext schränkt die Wiederverwendbarkeit stark ein.
  • Code-Duplizierung: _ServerCall_-Module vervielfachen die Logik unnötig.
  • Unleserliche Abfragen: Monolithische Abfragen ersetzen saubere Objektmethode.
  • Keine Emulationsunterstützung: Das isolierte Testen fiskaler Operationen ist unmöglich.
  • Instabile Benennung: Hunderte von _Delete_-Elementen erschweren die langfristige Wartung.

— Editorial Team

Advertisement 728x90

Weiterlesen