Défauts critiques de l'architecture des configurations 1C standard
Les configurations standard 1C intègrent trop souvent la logique métier directement dans les formulaires, limitant ainsi l'exécution à l'environnement client. Les procédures des formulaires et des modules d'objets sont rarement marquées comme exportées, ce qui empêche toute invocation directe sans recourir à des extensions. Les fonctions sont fortement couplées et dépendent étroitement du contexte du formulaire, violant ainsi le principe d'isolation.
Voici quelques exemples typiques de ce couplage excessif :
- L'import des relevés bancaires n'est possible qu'à partir d'un formulaire de liste ou d'un formulaire de document.
- Le renseignement des coordonnées d'une organisation ou d'un tiers via le numéro d'identification fiscale est lié aux éléments d'interface, obligeant les développeurs à dupliquer le code lors de la création d'objets par programmation.
Cette approche architecturale entrave considérablement la réutilisation des modules et les tests.
Utilisation irrationnelle des appels serveur
Les développeurs 1C ont tendance à abuser des modules suffixés par _ServerCall_, ce qui entraîne la duplication des appels vers les mêmes procédures. Les fonctions des modules communs sont invoquées directement sur le serveur sans l'indicateur « Appel serveur », pour être ensuite rappelées via des modules proxy avec cet indicateur activé. Cette pratique alourdit inutilement la base de code.
La présence de dizaines de modules de ce type dans les configurations standard sature les développeurs. Une approche plus propre consisterait à simplement exporter les procédures côté serveur à l'aide du mot-clé Export, éliminant ainsi les enveloppes redondantes.
Des requêtes monolithiques au détriment d'un code lisible
L'extraction des données repose majoritairement sur des requêtes, même lorsque des méthodes d'objets suffiraient. Dans les modules de gestionnaires de documents, les requêtes génèrent les données d'impression, mais lors du calcul des mouvements de registres, elles se transforment en constructions illisibles, truffées de jointures et de branchements conditionnels.
Ce choix sacrifie la lisibilité au profit d'un style déclaratif, compliquant le débogage et les évolutions futures. Une meilleure alternative consiste à combiner les requêtes avec une logique impérative au sein des procédures.
Structures de données ambiguës
Lors de la génération de formulaires d'impression, plusieurs documents tabulaires sont souvent fusionnés en un seul, séparés par des zones (_Document1_, _Document2_) au lieu de transmettre de véritables collections. Ces structures de collection imitent des objets, mais la composition de leurs champs est fréquemment illogique, nécessitant un mappage manuel lors des personnalisations.
Chaînes asynchrones chaotiques
Les chaînes d'appels asynchrones dans 1C sont mal documentées : les noms des procédures manquent de contexte descriptif et les commentaires sont absents. Le débogage du traitement des tickets de caisse en est un exemple classique : une longue séquence d'appels sans point d'entrée clair.
La solution optimale consiste à implémenter une machine à états avec un paramètre d'état courant qui aiguille les appels en conséquence.
Exemple de pseudocode pour une machine à états :
Procedure ExecuteAction(CurrentStatus) Export
If CurrentStatus = "Initialization" Then
InitializeReceipt();
TransitionToStatus("Forming");
Else If CurrentStatus = "Forming" Then
GenerateReceipt();
TransitionToStatus("Printing");
// Et ainsi de suite
EndIf;
EndProcedure
Absence de débogage sécurisé
Les opérations critiques, comme l'interaction avec les registres de caisse, ne prennent pas en charge l'émulation des réponses. Le code s'attend à un retour matériel réel, excluant ainsi tout test virtuel. Cela augmente considérablement les risques lors du développement et de l'intégration.
Nomenclature instable et refactoring hasardeux
Les objets applicatifs, modules et champs sont fréquemment renommés, parfois préfixés par _Delete_. Une recherche de _Delete_ dans la configuration renvoie des centaines de résultats. La terminologie telle que « partenaires/tiers/acheteurs » est incohérente, et les entités (par exemple, les contrats d'acquisition) sont constamment fusionnées ou scindées.
Cette approche reflète des décisions architecturales impulsives, obligeant les développeurs à perdre un temps précieux à migrer les références.
Interfaces incohérentes
Les éléments d'interface utilisent des conventions de nommage très variables : un bouton d'ajout dans une partie tabulaire peut s'appeler _InventoryAdd ou simplement _Add. La colonne de droite d'un document pourrait être _RightColumn ou _HeaderRight. Cette incohérence entrave l'automatisation et le développement d'extensions.
Algorithmes inefficaces
Malgré un accent fort sur les performances, la base de code souffre d'un gonflement significatif. Lors de l'impression des factures, tous les modèles sont préchargés d'emblée, alors que seuls quelques-uns sont nécessaires. Un cache à la demande réduirait la surcharge dans 99 % des cas.
Fonctionnalités HTTP dupliquées
Différentes équipes implémentent des requêtes HTTP de manière isolée (pour les services bancaires directs, la synchronisation de sites web, etc.) sans point d'interception unifié. Il n'existe aucun proxy standardisé pour une configuration centralisée.
Défauts fonctionnels
Les solutions standard échouent souvent dans des scénarios réels en raison d'hypothèses trop simplistes formulées par les architectes système.
Problèmes de calcul des coûts
Le passage à une clôture mensuelle fonctionne pour la grande industrie, mais crée des goulots d'étranglement pour le commerce de détail et les PME : les soldes négatifs à la fin de la période bloquent entièrement le calcul des coûts.
Limitations matérielles
Interdire l'utilisation de deux caisses sur un seul poste de travail est un exemple flagrant d'obstacle aux optimisations favorables à l'entreprise.
Comptabilisation incorrecte des bonus
Les bonus à date d'expiration nécessitent un suivi par lot, mais 1C utilise par défaut des méthodes de moyenne, ce qui entraîne des erreurs de calcul. La version 2.5 aggrave le problème, rendant la fonctionnalité inutilisable sans une réécriture complète.
Modèle de droits d'accès obsolète
Les rôles s'appuient sur des cases à cocher statiques, ignorant l'exécution dynamique du code. Les droits d'accès complets incluent par inadvertance des privilèges administratifs, permettant aux utilisateurs standards de créer des comptes ou de télécharger l'intégralité de la base de données.
Points clés à retenir
- Rigidité architecturale : Le couplage fort avec les formulaires et le contexte limite considérablement la réutilisation.
- Duplication du code : Les modules
_ServerCall_multiplient inutilement la logique. - Requêtes illisibles : Des requêtes monolithiques remplacent des méthodes d'objets propres.
- Absence de prise en charge de l'émulation : Il est impossible de tester les opérations fiscales de manière isolée.
- Nomenclature instable : Des centaines d'éléments
_Delete_compliquent la maintenance à long terme.
— Editorial Team
Aucun commentaire pour le moment.