Introduction
Le WLangage, langage de développement de PC Soft utilisé avec WinDev, WebDev et WinDev Mobile, reste relativement marginal dans l’écosystème des langages dominants. En conséquence, la plupart des IA génératives n’ont pas été entraînées de manière significative sur ce langage. Cela se traduit par une qualité de code souvent très moyenne, voire incorrecte, lorsqu’on leur demande de générer du WLangage sans indications spécifiques.
Cependant, il est possible d’obtenir du code WLangage de qualité professionnelle via l’IA, à condition de fournir un contexte d’exécution et des conventions de codage précises.
Cet article propose un comparatif « avant / après », suivi d’une analyse des fichiers d’instruction qui permettent de structurer efficacement les réponses d’une IA pour du développement en WinDev 2025.
Tous les fichiers de cet article sont disponibles sur notre github : https://github.com/LG-IsiNeva/IA-Windev-2025
Les tests suivants ont été générés sur les derniers modèles d’IA et sans abonnement.
Comparatif : Sans instructions VS Avec instructions
Le prompt utilisé était : tu es un expert en développement Windev 2025, génère moi une procédure pour calculer la somme séquentielle de 1 à n. un seul paramètre : la borne supérieure.
Exemple 1 : Génération sans instruction
procédure Somme1aN(nFin est entier)
SI nFin <= 0 ALORS
RETOURNE 0
FIN
n est entier8 = nFin
SI (n MOD 2) = 0 ALORS
RETOURNE (n / 2) * (n + 1)
SINON
RETOURNE ((n + 1) / 2) * n
FIN
Commentaires :
- Type entier8 : inventé
- Fonction RETOURNE : inventée
Exemple 2 : Génération avec instructions
// nSommeSequentielle
// Calcule la somme des entiers de 1 a n en utilisant la formule n*(n+1)/2
// Parametres d'entree
// - nBorneSuperieure : borne superieure (entier)
// Type et explications du retour
// - entier : somme des entiers de 1 a n (0 si n <= 0)
//
procédure nSommeSequentielle(nBorneSuperieure est un entier): entier
nResultat est un entier
SI nBorneSuperieure> 0 ALORS
nResultat = (nBorneSuperieure * (nBorneSuperieure + 1)) / 2
SINON
nResultat = 0
FIN
RENVOYER nResultat
Améliorations notables :
- Respect des bonnes pratiques de documentation.
- Code clair et documenté
- code utilisable sans correction
Norme de codage WLangage 2025
Ce fichier définit une structure rigoureuse qui transforme une IA générique en assistant de développement WLangage efficace et fiable. Il impose un cadre de nommage, de documentation et de style que l’IA peut exploiter pour produire un code lisible, cohérent, et directement exploitable.
Points clés détaillés :
- Typage strict et systématique : Tous les paramètres et retours de procédure doivent être typés. Cela garantit la clarté des intentions et facilite l’autocomplétion dans l’éditeur.
- Convention de nommage normalisée par préfixe :
sNomClient
pour les chaînesnCompteur
pour les entiersbEstValide
pour les booléensoFacture
pour les objets- Les classes sont préfixées par
cl_
et les collections de procédures parcol_
- Nom explicite des procédures :
- Reflète clairement le type de retour :
nCalculerTotal
,bValiderPaiement
,sFormaterAdresse
- Favorise des noms affirmatifs pour les booléens (
EstValide()
plutôt queNonValide()
)
- Reflète clairement le type de retour :
- Documentation systématique avec un en-tête clair pour chaque procédure :
- Description de la finalité
- Paramètres et types
- Détail du type et du sens du retour
- Lisibilité et maintenabilité :
- Un seul point de sortie par procédure
- Pas plus de deux niveaux d’imbrication (
SI
,SELON
, etc.) - Utilisation de sous-procédures pour éviter les blocs imbriqués complexes
- Pas de déclaration de variable en ligne : tout est déclaré au début de la procédure.
Objectif du fichier :
Imposer des standards solides pour garantir que le code généré soit à la fois robuste, homogène et facilement maintenable en équipe.
Contenu partiel du fichier
# Instructions pour un code WLangage Windev 2025
## Role
- tu es un développeur expérimenté sur Windev 2025 de PC Soft. Expert en POO et SQL
## instructions générales
- Ecriture de code Windev 2025
- Utilise en priorité la document officielle de Windev 2025 : https://doc.pcsoft.fr/
- N'invente pas d'instruction WLangage si elle n'existe pas dans la documentation
## Convention de nommage
- Toutes les variables sont préfixées selon leur type :
- s pour chaîne : sNomClient
- n pour entier : nCompteur
- r pour réel : rPrixTTC
...
Norme de codage WLangage 2025- HFSQL
Ce second fichier pousse encore plus loin la spécialisation en s’adressant à un contexte d’utilisation très courant en environnement WinDev : le développement avec une base de données HFSQL. Il fournit à l’IA toutes les conventions nécessaires à la génération d’un code HFSQL fiable, sécurisé, et performant.
Points clés détaillés :
- Utilisation des ordres HFSQL natifs exclusivement :
- HExécuteRequête()
- HAjoute(), HModifie(), HSupprime(), HLitPremier(), HLitRecherche()
- Interdiction explicite d’utiliser SQL_Exec ou SQL.Col, trop bas niveau et générateurs d’erreurs
- Structure de base de données complète à générer :
- Tables avec toutes leurs rubriques, contraintes, index (nommés explicitement
IDX_<Table>_<Colonne>
) - Clés primaires avec auto-incrément
- Clés étrangères nommées selon les colonnes référencées
- Tables avec toutes leurs rubriques, contraintes, index (nommés explicitement
- Horodatage automatique :
- Chaque table contient deux champs horodatés (
cree_le
,modifie_le
) typésHorodatage
- Ces champs sont renseignés automatiquement à l’insertion ou la modification
- Chaque table contient deux champs horodatés (
- Nom des requêtes WDR :
- Sélectives :
rqsel_Clients
- Insertion :
rqins_Commandes
- Mise à jour :
rqupd_Produits
- Suppression :
rqdel_Stock
- Sélectives :
- Libération mémoire systématique :
- Utilisation de
HAnnuleDéclaration()
après le traitement d’une requête
- Utilisation de
- Documentation SQL conforme à la documentation officielle :
- Tous les ordres et instructions doivent être issus du site PC Soft, garantissant leur validité en environnement HFSQL.
Objectif du fichier :
Créer une base de données documentée, conforme aux standards HFSQL, en évitant toute approximation syntaxique. Il s’agit ici de s’assurer que le code généré soit directement exploitable dans des projets d’envergure avec une modélisation relationnelle solide.
Contenu partiel du fichier
# Instructions pour un code Windev 2025 utilisant HFSQL comme base de données
## Role
- tu es un développeur expérimenté sur Windev 2025 de PC Soft. Expert en POO et SQL
## instructions générales
- Ecriture de code Windev 2025 pour une base HFSQL
- Utilise les ordres sql définis dans https://doc.pcsoft.fr/fr-FR/?2034001&name=instructions_sql et https://doc.pcsoft.fr/fr-FR/?2034006&name=commandes_sql_disponibles_dans_une_requete_sql
- N'invente pas d'instruction WLangage ou SQL si elle n'existe pas dans la documentation
## convention de nommage
- Tables et rubriques : noms en PascalCase ou Snake_case selon la norme du projet, sans espaces ni caractères spéciaux.
Et avec une analyse WinDev existante ?
Une autre approche particulièrement puissante consiste à exploiter directement l’analyse existante d’un projet WinDev 2025. Cette analyse, générée en PDF via l’impression technique intégrée à l’EDI, contient toutes les métadonnées des fichiers de données, leurs rubriques, types, clés, index, et relations inter-tables.
Résultat
En fournissant ce PDF à l’IA, celle-ci est capable de :
- Générer automatiquement les classes d’objets WLangage correspondant à chaque fichier de données, avec typage explicite, constructeurs et méthodes d’accès.
- Produire les requêtes WDR HFSQL associées (sélection, insertion, mise à jour, suppression).
- Appliquer les conventions de nommage et les standards internes tels que définis dans les fichiers d’instruction.
Cette approche permet de démarrer un projet à partir d’un existant documentaire sans avoir à redéfinir manuellement les structures, et garantit une continuité parfaite entre l’analyse métier et le code applicatif.
Exemple
Nom : rqsel_LignesParCommande
(paramètre pIDCommande
)
-- fichier .WDR (extrait) — sélection
SELECT
LigneCommande.IDLigneCommande,
LigneCommande.IDCommande,
LigneCommande.Référence,
LigneCommande.LibProd,
LigneCommande.Quantité,
LigneCommande.Remise,
LigneCommande.TauxTVA,
LigneCommande.PrixVente,
LigneCommande.QuantitéLivrée
FROM LigneCommande
WHERE LigneCommande.IDCommande = {pIDCommande}
Générer une classe Windev
Le PDF de l’analyse WinDev contient toutes les métadonnées (tables, rubriques, types, clés, index, relations). En le fournissant à l’IA, on peut générer automatiquement des classes WLangage fidèles au modèle (typage, noms, clés)
// ========================= ENUMS / TYPES =========================
// Type du client (page 8)
eTypeClient est une Enumération
tcClient = 0
tcProspect = 1
FIN
eTypeCommande est une Enumération
tcoStandard = 0
tcoProforma = 1
tcoAchat = 2
tcoReappro = 3
FIN
eEtatCommande est une Enumération
ecBrouillon = 0
ecValidée = 1
ecFacturée = 2
ecLivrée = 3
ecAnnulée = 4
FIN
// ========================= CLASSE COMMANDE =========================
// D'après "Commande" (pages 10–11)
CCommande est une Classe
// --- Données
IDCommande est un entier sur 8 octets
DateCommande est une Date
IDClient est un entier sur 8 octets
// Totaux seront recalculables via RecalculeTotaux()
TotalHT est un monétaire
TotalTVA est un monétaire
TotalTTC est un monétaire
// Adresses & modes
IDAdresseLivraison est un entier sur 8 octets
IDModeLivraison est un entier sur 8 octets
IDAdresseFacturation est un entier sur 8 octets
// Divers
NuméroInterneCommande est une chaîne
Etat est un eEtatCommande
Observations est une chaîne
// Suivi & règlement
SaisiPar est une chaîne
SaisiLe est une Date
IDModeRèglement est un entier sur 8 octets
DateFacturation est une Date
DateExigibilité est une Date
DélaiPaiement est une chaîne
Transporteur est une chaîne
FraisPort est un monétaire
NumPAQ est un entier sur 4 octets
Type est un eTypeCommande
LCR est une chaîne
Banque est une chaîne
IBAN est une chaîne
ModifiéPar est une chaîne
ModifiéLe est une Date
COD est une chaîne
// Composition
Lignes est un tableau de CLigneCommande
FIN
// Ajout d'une ligne de commande
PROCÉDURE AjouterLigne(l est un CLigneCommande)
l.IDCommande = IDCommande
TableauAjoute(Lignes, l)
// Suppression d'un ligne de commande
PROCÉDURE SupprimerLigneParId(nIdLigne est un entier sur 8 octets)
nCpt est un entier
POUR inCpt = 1 _À_ Lignes.Occurrence()
SI Lignes[nCpt].IDLigneCommande = nIdLigne ALORS
TableauSupprime(Lignes, nCpt)
SORTIR
FIN
FIN
// Recalcul des totaux
PROCÉDURE RecalculeTotaux()
TotalHT = 0
TotalTVA = 0
POUR TOUT l DE Lignes
TotalHT += l.rTotalLigneHT()
TotalTVA += l.rTotalLigneTVA()
FIN
TotalTTC = TotalHT + TotalTVA + FraisPort
Itérer les fichiers d’instruction IA (WinDev 2025 & HFSQL)
Objectif
Augmenter la qualité du code généré (lisibilité, conformité WinDev/HFSQL, testabilité) en faisant évoluer régulièrement les deux fichiers d’instruction via une boucle courte : proposer → tester → mesurer → publier.
Fichier “WLangage / WinDev 2025”
Ce que l’on améliore
- Conventions de nommage (procédures, classes, membres, enumérations).
- Squelettes standard (classes métier, services, UI si besoin).
- Gestion des erreurs (retours booléens + codes/constantes d’erreur).
- Compatibilité compilation (zéro avertissement bloquant).
- Exemples (few-shot) : petits extraits “bon vs. mauvais” pour guider l’IA.
Actions concrètes à ajouter au fichier
- Section “Patterns canoniques” (classe métier, méthodes calcul, helpers dates/monétaires).
- Section “Anti-exemples” (pièges WinDev fréquents + correction).
- Checklist WLangage (à coller en bas du fichier) :
- Noms explicites, pas d’abréviations opaques
- Types exacts (entier 8o, monétaire, réel 4o, etc.)
- Méthodes pures pour calculs & pas d’IO cachées
- Pas de “magie” numérique → utiliser les énumérations, les combinaisons
- Commentaires d’en-tête normalisés (but, paramètres, retour, exceptions)
Exemple de few-shot
// BON : ENUMERATION au lieu d’entier "magique"
eEtatCommande est une ENUMERATION
ecBrouillon
ecValidee
ecFacturee
ecLivree
ecAnnulee
FIN
// MAUVAIS : usage d’un entier sans signification
// EtatCommande est un entier = 3
Fichier “HFSQL” :
Ce que l’on améliore
- DAO génériques (CRUD + mapping FIC ↔ objets).
- Requêtes paramétrées (WDR) + nomenclature.
- Transactions (début/fin/annule) et stratégie de rollback.
- Journalisation (SaisiPar/Le, ModifiéPar/Le).
- Tolérance aux erreurs (HLitRecherche/HAjoute/HModifie/HSupprime : vérifs systématiques).
Actions concrètes à ajouter au fichier
- Section “Contrats DAO” : signatures standard (Inserer/MettreAJour/Supprimer/Lire), valeurs de retour, exceptions.
- Section “Transactions & intégrité” : règles (quand ouvrir/fermer, comment réagir en cas d’erreur multi-tables).
- Checklist HFSQL :
- Aucune concaténation SQL brute (toujours paramétrée)
- Vérifier
HAjoute/HModifie
+ lireHErreur()
en cas d’échec HExécuteRequête
+HAnnuleDéclaration
systématiques- Indiquer clés et index attendus (lecture par ID → indexé)
- Encadrer les opérations multi-DAO par transaction
Exemple de few-shot
// BON : requête paramétrée + vérifs retour
SI HExécuteRequête(rqsel_ParId, hRequêteDéfaut, nId) = Vrai ALORS
POUR TOUT rqsel_ParId
...
FIN
FIN
HAnnuleDéclaration(rqsel_ParId)
// MAUVAIS : pas de test et absence de HAnnuleDéclaration
HExécuteRequête(rqsel_ParId, hRequêteDéfaut, nId)
POUR TOUT rqsel_ParId
...
FIN
Conclusion
Chez IsiNeva, où les projets WinDev intègrent souvent des architectures complètes autour de HFSQL, pouvoir s’appuyer sur une IA qui génère un code conforme aux standards internes représente un gain de temps considérable.
En fournissant des fichiers d’instructions détaillés, on transforme une IA généraliste en assistant technique spécialisé, capable de produire du code fiable, lisible, documenté, et directement exploitable dans un environnement WinDev 2025.
C’est une démarche que nous recommandons vivement pour les équipes techniques qui souhaitent intégrer efficacement l’IA dans leur flux de développement.