Académique Documents
Professionnel Documents
Culture Documents
Kit Odbc
Kit Odbc
Kit ODBC
V 3.00 à 7.00
© 2019 Sage 1
Table des matières
Suppression d’Enregistrements .........................................................................................................80
Exemples de requêtes .......................................................................................................................81
© 2019 Sage 2
Table des matières
Introduction............................................................................................................................. 148
Connexion Déconnexion ................................................................................................................. 148
Recherche d’enregistrements ................................................................................................. 149
Ecriture dans les bases .......................................................................................................... 150
Récupération des erreurs................................................................................................................. 151
© 2019 Sage 3
Table des matières
API Sage.......................................................................................................................................... 175
Déclaration des fonctions avancées Sage........................................................................................ 177
Delphi ..................................................................................................................................... 177
API Sage.......................................................................................................................................... 177
DLL ActiveX ..................................................................................................................................... 179
Déclaration des fonctions avancées Sage........................................................................................ 181
© 2019 Sage 4
Chapitre 1 – Généralités sur le programme
Définition d’ODBC
La norme ODBC (Open Database Connectivity) permet de se connecter à une source d’informations ex-
terne et d’utiliser ses données. Elle est gérée par le Gestionnaire ODBC qui contient les drivers nécessaires
à cette procédure. Ce gestionnaire se place automatiquement dans les outils d’administration du panneau
de configuration de Microsoft Windows lors de l’installation de la plupart des bases de données. Les drivers
des fichiers que vous souhaitez interroger sont, en général, installés automatiquement avec la plupart des
applications.
Principe de fonctionnement
La norme ODBC permet aux applications qui l’utilisent, d’exploiter la pleine puissance du langage de re-
quête SQL (Structured Query Language). Elle est généralement utilisée pour les connexions aux bases im-
plantées sur des serveurs. Des drivers ODBC sont disponibles pour Oracle, Microsoft SQL Server, Sybase
SQL Server et de nombreux autres gestionnaires de bases de données sur un grand nombre de plates-
formes.
Le schéma ci-après permet de comprendre le fonctionnement d’ODBC. L’application envoie une requête
SQL. Le Driver Manager intercepte cet appel et le redirige vers le bon driver ODBC. Ce driver analyse alors
la requête SQL puis récupère les données par l’intermédiaire de la source de données. Ces données sont
alors renvoyées à l’application. La source de données est donc le lien entre l’application et le fichier phy-
sique.
© 2019 Sage 5
Chapitre 1 – Généralités sur le programme
• Manager
• Paie & RH (Base de type propriétaire uniquement, accès en lecture seule).
La plupart des tables sont accessibles en lecture/écriture. Vous trouverez la description de chaque table
dans le manuel Structure des fichiers Sage 100cloud.
Les données peuvent être alors lues à partir d’un système de gestion de bases de données comme Micro-
soft Access ou de générateurs de requêtes comme Query© de Microsoft Excel© qui utilisent le gestionnaire
ODBC.
Vous pouvez ainsi générer dans Microsoft Access vos propres modèles d’impression en sélectionnant les
données dont vous avez réellement besoin et en les présentant sous la forme de formulaires ou d’états que
vous paramétrez très facilement. De plus, il vous est possible avec Microsoft Excel© par l’intermédiaire de
Microsoft Query©, de créer des graphiques complexes avec vos données de gestion.
Pour l’écriture dans les bases de données Sage 100cloud, des explications et des exemples sont fournis
dans ce guide. Néanmoins, pour l’écriture, il vaut mieux utiliser un outil de développement comme par
exemple Visual basic ou Delphi pour pouvoir gérer les différents cas possibles d’erreurs. Ces erreurs sont
gérées par le driver. Si par exemple vous détruisez un compte alors qu’il y a des écritures associées, le
driver ren- verra une erreur et ne créera pas le compte. Il faudra intercepter cette erreur et en fonction du
type de l’er- reur agir en conséquence.
© 2019 Sage 6
Chapitre 1 – Généralités sur le programme
Bases Bijou
Les fichiers d’exemples sont ceux de la base BIJOU, à savoir Bijou.mae, Bijou.gcm, Bijou.imo et Bijou.mdp.
Fichier ActiveX.Txt
Description de l’ensemble des objets de l’activeX ASD100.Dll avec leurs propriétés et méthodes.
Sources de données
Définition
Une source de données est le lien entre l’application et le driver ODBC. Elle est composée de 2 éléments :
• Un Driver ODBC,
• Un ou plusieurs fichiers physiques associés.
Vous trouverez ci-dessous les différents cas suivant le type de base de données Sage 100cloud.
© 2019 Sage 7
Chapitre 1 – Généralités sur le programme
Comptabilité 100cloud
• Driver : Sage Comptabilité 100cloud
• Fichier physique : fichier comptable (*.MAE)
Les mots de passe de ces fichiers (mots de passe des applications Comptabilité 100 et Gestion Commer-
ciale 100) doivent être identiques, sinon la connexion échouera.
Immobilisations 100cloud
• Driver : Sage Immobilisations 100cloud
• Fichiers physiques :
- fichier immobilisations (*.IMO)
- fichier comptable (*.MAE)
Manager
• Driver : Sage Manager 100
• Fichiers physiques :
- fichier bibliothèque (*.CHP)
- fichier annexe (*.CHL)
Paie & RH
• Driver : Sage Paie 100
• Fichier physique : fichier paie (*.PRH)
© 2019 Sage 8
Chapitre 1 – Généralités sur le programme
Utilisateur
Une source de données de type « Utilisateur » n’est visible que par l’utilisateur connecté sur sa machine et
uniquement sur celle-ci.
Un utilisateur connecté sur un poste Windows sous le login « DUPONT » ne verra donc que les sources de
données que celui-ci a créées sur cette machine.
Système
Une source de données de type « Système » est visible par tous les utilisateurs connectés sur sa machine
et uniquement sur celle-ci.
Un utilisateur connecté sur un poste Windows sous le login « DUPONT » verra donc toutes les sources de
données créées sur cette machine.
Note : Ce type de sources de données est utile lorsque vous voulez par exemple exécuter une tâche
planifiée pour un programme que vous avez créé. Le compte sous lequel va s’exécuter la tâche est
généralement le compte SYSTEM ou un compte qui n’est pas celui avec lequel vous testez votre
programme.
Si vous utilisez une source de données « Utilisateur » la tâche planifiée provoquera une erreur, mais
fonctionnera correctement si vous utilisez une source de données de type SYSTEM.
Fichier
Les sources de données File DSN fournies sont :
• ComptaC_Bijou.dsn
• GestcomG_Bijou.dsn
• MPaiement_Bijou.dsn
• Immo_Bijou.dsn
• Manager_Expert.dsn
• PaieP_Essai.dsn
Ce fichier a le format suivant :
[ODBC]
© 2019 Sage 9
Chapitre 1 – Généralités sur le programme
Ci-dessous est décrit un exemple de création d’une source de données Utilisateur de type « Gestion com-
merciale 100 » : GestCom_Sage100cloud.
© 2019 Sage 10
Chapitre 1 – Généralités sur le programme
2 . Cliquez sur le bouton Ajouter et sélectionnez le pilote du type « Sage Gestion commerciale 100 »
5 . Cliquez alors sur le bouton OK pour terminer la création de cette source de données.
© 2019 Sage 11
Chapitre 1 – Généralités sur le programme
Note : Le premier fichier est obligatoire, le deuxième est facultatif. Cette association vous permet
d'ouvrir directement toutes les tables de gestion commerciale et de comptabilité, ou toutes les tables
d'immobilisations et de comptabilité, de même pour les autres bases.
Lorsque le paramétrage est défini, cliquez sur le bouton OK pour enregistrer cette source de Données.
L’écriture des informations relatives à cette source de données s’effectue dans la Base de Registre de Win-
dows.
Note : Pour l'exemple ci-dessus, si vous utilisez Microsoft QUERY, en sélectionnant la source de
données Gestcom_Sage100cloud vous verrez alors à la fois les tables de gestion commerciale et de
comptabilité, comme ci-dessous.
Note : Sur environnement 64 bits, lorsque l’administrateur de sources de données ODBC 32 bits n’est
pas accessible depuis le Panneau de configuration\Outils d’administration, il faut dans ce cas le
lancer manuellement en exécutant le fichier odbcad32.exe placé dans le répertoire Win-
dows\Syswow64.
Lorsque vous créez des sources utilisateurs ou systèmes, une source de données de type fichier (File DSN)
est automatiquement créée avec le nom de la source de données utilisateur ou système avec l’extension
.DSN.
© 2019 Sage 12
Chapitre 1 – Généralités sur le programme
Manuellement
Il n’est pas possible de créer directement des sources de données de type fichier par l’administrateur ODBC
32 bits. Vous devez créer ce fichier de toute pièce. Voici ci-dessous un exemple d’un tel fichier : édition du
fichier ComptaC_Bijou.dsn;
[ODBC]
DSN=ComptaC_Bijou
1 . Il suffit donc d’indiquer dans la première ligne :
[ODBC]
2 . Sur la deuxième ligne, indiquer :
DSN= et le nom d’une source de données utilisateur ou système existante, ici ComptaC_Bijou.
3 . Enregistrer ensuite ce fichier dans le répertoire Program Files\Fichiers communs\ODBC\Data
Sources avec l’extension DSN. Ce répertoire par défaut peut être changé grâce à l’administrateur
ODBC 32 bits.
Le seul moyen pour que cela fonctionne avec ce logiciel est de créer auparavant des File DSN, comme ci-
dessus, soit manuellement, soit automatiquement. Vous pourrez ensuite avoir accès à cette source de don-
nées dans Microsoft Query et l’utiliser, comme toute autre source de données.
© 2019 Sage 13
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Introduction générale
Vous avez accès dans Sage 100cloud Kit ODBC à différentes fonctions évoluées. Ces fonctions avancées
sont disponibles pour la comptabilité, la gestion commerciale, la Paie Maestria et la Paie & RH. Ces
fonctions ont été créées afin de faciliter les développements. Les fonctions telles que le calcul du CA Net
Client ou le total TTC d’un document auraient nécessité un développement important et compliqué si vous
aviez dû les réaliser vous-même.
Celles-ci sont stockées dans les différentes librairies fournies avec ce kit :
• CptaLib.Dll
• CialLib.Dll
• ImmoLib.Dll
• TresLib.Dll
• FSalLib.Dll
• PMS1Lib.Dll
Il existe deux méthodes pour appeler ces fonctions :
• La première consiste à l’appel de fonctions externes (API Sage). Ces fonctions se trouvent dans la
DLL CBODBC32.DLL. Cette méthode est utilisable par tous les logiciels 32 bits capables d’appeler
des fonctions externes.
• La seconde consiste à l’utilisation d’une DLL ActiveX (ASD100.DLL). Cette méthode est utilisable
par tous les logiciels 32 bits capables d’utiliser la technologie ActiveX.
Introduction
Chaque fonction retourne un code erreur qui indique si la procédure s’est bien exécutée. Si un paramètre
est incorrect, un code erreur est retourné par la fonction. Si la valeur du code erreur est 0, cela indique que
la fonction a retourné un résultat.
Le résultat que vous recherchez est toujours le dernier paramètre de la fonction (paramètre d’entrée / sor-
tie).
© 2019 Sage 14
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Note : Ces fonctions ne sont utilisables que si une connexion a été effectuée auparavant avec la
base concernée.
De même, il faut impérativement respecter la syntaxe Minuscules/Majuscules de ces fonctions,
sinon cela ne fonctionnera pas.
Note : De même, il faut bien respecter les types de données des paramètres de ces fonctions. Des
exemples d’utilisation sous ACCESS, VISUAL BASIC, VISUAL FOX PRO, DELPHI et WINDEV sont
fournis en Annexe.
Pour utiliser les fonctions de la comptabilité, votre application doit être connectée, via ODBC, à la base
comptable.
Pour utiliser les fonctions de la gestion commerciale, votre application doit être connectée, via ODBC, à la
base comptable et à la base commerciale.
Les champs Deb et Fin peuvent être à vide, par contre il faut que l’un des trois champs suivants ait une
valeur non nulle, à savoir CG_NUM, CT_NUM ou JO_NUM.
En Entrée
CG_Num (Chaîne de caractères de type Compte 13 caractères maximum) : Numéro de compte général
En Sortie
Err (Entier) : Code erreur retourné par la fonction.
© 2019 Sage 15
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Les champs Deb et Fin peuvent être à vide, par contre il faut que l’un des trois champs suivants ait une
valeur non nulle, à savoir CG_NUM, CT_NUM ou JO_NUM.
En Entrée
CG_Num (Chaîne de caractères de type Compte 13 caractères maximum) : Numéro de compte général
En Sortie
Les champs Deb et Fin peuvent être à vide, par contre il faut que l’un des trois champs suivants ait une
valeur non nulle, à savoir CG_NUM, CT_NUM ou JO_NUM.
En Entrée
CG_Num (Chaîne de caractères de type Compte 13 caractères maximum) : Numéro de compte général
En Sortie
© 2019 Sage 16
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Cette fonction permet de calculer le total des débits en devise connaissant le compte général CG_Num, le
compte tiers CT_Num, le code journal JO_Num, la période définie par la date de début Deb et la date de
fin Fin.
Les champs Deb et Fin peuvent être à vide, par contre il faut que l’un des trois champs suivants ait une
valeur non nulle, à savoir CG_NUM, CT_NUM ou JO_NUM.
En Entrée
CG_Num (Chaîne de caractères de type Compte 13 caractères maximum) : Numéro de compte général
En Sortie
Les champs Deb et Fin peuvent être à vide, par contre il faut que l’un des trois champs suivants ait une
valeur non nulle, à savoir CG_NUM, CT_NUM ou JO_NUM.
En Entrée
CG_Num (Chaîne de caractères de type Compte 13 caractères maximum) : Numéro de compte général
En Sortie
© 2019 Sage 17
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Les champs Deb et Fin peuvent être à vide, par contre il faut que l’un des trois champs suivants ait une
valeur non nulle, à savoir CG_NUM, CT_NUM ou JO_NUM.
En Entrée
CG_Num (Chaîne de caractères de type Compte 13 caractères maximum) : Numéro de compte général
En Sortie
Err (Entier) : Code erreur retourné par la fonction.
Les champs Deb, Fin, JO_Num sont facultatifs, mais CR_Num doit obligatoirement avoir une valeur non
nulle.
En Entrée
En Sortie
Les champs Deb, Fin, JO_Num sont facultatifs, mais CR_Num doit obligatoirement avoir une valeur non
nulle.
En Entrée
© 2019 Sage 18
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Sortie
Les champs Deb, Fin, JO_Num sont facultatifs, mais CR_Num doit obligatoirement avoir une valeur non
nulle.
En Entrée
En Sortie
Les champs Deb, Fin, JO_Num sont facultatifs, mais CR_Num doit obligatoirement avoir une valeur non
nulle.
En Entrée
En Sortie
© 2019 Sage 19
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Les champs Deb, Fin, JO_Num sont facultatifs, mais CR_Num doit obligatoirement avoir une valeur non
nulle.
En Entrée
En Sortie
Les champs Deb, Fin, JO_Num sont facultatifs, mais CR_Num doit avoir une valeur non nulle.
En Entrée
CR_Num (Chaîne Alphanumérique maj. 13 caractères) : Numéro de compte reporting
En Sortie
© 2019 Sage 20
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Les champs Deb et Fin peuvent être à vide, alors que BD_Num doit obligatoirement avoir une valeur non
nulle.
En Entrée
En Sortie
En Entrée
En Sortie
En Entrée
En Sortie
© 2019 Sage 21
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
En Sortie
En Entrée
En Sortie
En Entrée
En Sortie
En Entrée
© 2019 Sage 22
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Sortie
En Entrée
En Sortie
En Entrée
DL_NO (Entier): Numéro interne de la ligne
En Sortie
En Entrée
En Sortie
© 2019 Sage 23
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
En Sortie
En Entrée
En Sortie
Résultat (Double): Total quantité signé.
fin si
Si Type de document = Bon de livraison ou (type de document = facture et le type de pièce livrée = facture)
alors
-Quantité
Quantité
sinon si le type de document est une facture et le type de pièce livrée est un bon de retour alors
-Quantité
-Quantité
fin si
Si Type de document = Bon de livraison ou (type de document = facture et le type de pièce livrée = facture)
alors
-Quantité
© 2019 Sage 24
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Quantité
sinon si le type de document est une facture et le type de pièce livrée est un bon de retour alors
-Quantité
Quantité
fin si
fin si
sinon
Quantité
-Quantité
sinon si (le type de document est un virement ou le type est un bon de fabrication) alors
-Quantité
sinon
Quantité
fin si
Quantité
fin si
fin si
En Entrée
En Sortie
© 2019 Sage 25
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
En Sortie
En Entrée
En Sortie
En Entrée
En Sortie
© 2019 Sage 26
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
En Sortie
En Entrée
En Sortie
En Entrée
En Sortie
© 2019 Sage 27
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
En Sortie
En Entrée
En Sortie
En Entrée
En Sortie
Résultat (Double): Montant du net à payer pour le document.
En Entrée
© 2019 Sage 28
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En sortie
En Entrée
En Sortie
Résultat (Double): Poids net pour le document.
En Entrée
DO_Type (Entier): Type de document
En Sortie
En Entrée
DO_Type (Entier): Type de document
En Sortie
© 2019 Sage 29
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
DO_Type (Entier): Type de document
En Sortie
En Entrée
En Sortie
En Entrée
En Sortie
© 2019 Sage 30
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
En Sortie
En Entrée
En Sortie
Résultat (Double): Montant des taxes en devise.
En Entrée
DO_Type (Entier): Type de document
En Sortie
© 2019 Sage 31
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
En Sortie
En Entrée
En Sortie
En Entrée
DO_Type (Entier): Type de document
En Sortie
© 2019 Sage 32
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
CT_NUM (Chaîne de caractères : 17 maximum) : Client ou fournisseur
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
© 2019 Sage 33
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
CT_NUM (Chaîne de caractères : 17 maximum) : Client ou fournisseur
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
© 2019 Sage 34
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
CT_NUM (Chaîne de caractères : 17 maximum) : Client ou fournisseur
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
CT_NUM (Chaîne de caractères : 17 maximum) : Client ou fournisseur
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur les toutes dates à partir de la date de début.
En Sortie
© 2019 Sage 35
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
CT_NUM (Chaîne de caractères : 17 maximum) : Client ou fournisseur
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
CT_NUM (Chaîne de caractères : 17 maximum) : Client ou fournisseur
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
© 2019 Sage 36
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
CT_NUM (Chaîne de caractères : 17 maximum) : Client ou fournisseur
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
CT_NUM (Chaîne de caractères : 17 maximum) : Client ou fournisseur
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
© 2019 Sage 37
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
CT_NUM (Chaîne de caractères : 17 maximum): Client ou fournisseur
En Sortie
En Entrée
En Sortie
En Entrée
En Sortie
En Entrée
© 2019 Sage 38
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Sortie
En Entrée
En Sortie
En Entrée
En Sortie
En Entrée
En Sortie
Résultat (Double): Dépassement.
© 2019 Sage 39
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
CIALTiersBLFA(CT_Num, Resultat)
Cette fonction permet de calculer le portefeuille BL et BA (volet solvabilité de la fiche Tiers de la Gestion
Commerciale).
En Entrée
CT_NUM (Chaîne de caractères : 17 maximum): Client ou fournisseur
En Sortie
En Entrée
En Sortie
En Entrée
En Sortie
En Entrée
© 2019 Sage 40
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Sortie
En Entrée
En Sortie
En Entrée
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
Résultat (Double) : Total du CA HT Brut pour l’article.
© 2019 Sage 41
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
© 2019 Sage 42
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Sortie
En Entrée
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
© 2019 Sage 43
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
AR_Ref (Chaîne de caractères : 18 maximum) : Référence article
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
© 2019 Sage 44
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
AR_Ref (Chaîne de caractères : 18 maximum) : Référence article
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
© 2019 Sage 45
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
© 2019 Sage 46
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Sortie
En Entrée
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
AR_Ref (Chaîne de caractères : 18 maximum) : Référence article
En Sortie
© 2019 Sage 47
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
En Sortie
En Entrée
AR_Ref (Chaîne de caractères : 18 maximum) : Référence article
En Sortie
En Entrée
En Sortie
Résultat (Chaîne de caractères) : Compte de taxe 2
© 2019 Sage 48
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
En Sortie
En Entrée
AG_No1 : Numéro interne de l’énuméré de gamme 1 ; si l’article n’a pas de gamme, mettre la valeur à 0
AG_No2 : Numéro interne de l’énuméré de gamme 2 ; si l’article n’est pas à double gamme, mettre la valeur
à0
En Sortie
En Entrée
En Sortie
© 2019 Sage 49
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
AG_No1 : Numéro interne de l’énuméré de gamme 1 ; si l’article n’a pas de gamme, mettre la valeur à 0
AG_No2 : Numéro interne de l’énuméré de gamme 2 ; si l’article n’est pas à double gamme, mettre la valeur
à0
En Sortie
En Entrée
AR_Ref (Chaîne de caractères : 18 maximum) : Référence article
En Sortie
En Entrée
AG_No1 : Numéro interne de l’énuméré de gamme 1 ; si l’article n’a pas de gamme, mettre la valeur à 0
© 2019 Sage 50
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
AG_No2 : Numéro interne de l’énuméré de gamme 2 ; si l’article n’est pas à double gamme, mettre la valeur
à0
En Sortie
En Entrée
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
Fa_CodeFamille (Chaîne de caractères : 10 maximum) : Code Famille
© 2019 Sage 51
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
Fa_CodeFamille (Chaîne de caractères : 10 maximum) : Code Famille
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
© 2019 Sage 52
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
© 2019 Sage 53
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Sortie
En Entrée
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
© 2019 Sage 54
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
Fa_CodeFamille (Chaîne de caractères : 18 maximum) : Code Famille
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu’à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
© 2019 Sage 55
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
Fa_CodeFamille (Chaîne de caractères : 10 maximum) : Code Famille
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
© 2019 Sage 56
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
AR_RefDe (Chaîne de caractères : 18 maximum) : Référence article (Borne inférieure) ; si la chaîne est
vide alors la sélection porte sur tous les articles jusqu'à l’article (AR_RefA)
AR_RefA (Chaîne de caractères : 18 maximum) : Référence article (Borne supérieure) ; si la chaîne est
vide alors la sélection porte sur tous les articles à partir de l’article (AR_RefDe)
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
Résultat (Double) : Total du CA HT Brut pour le représentant.
En Entrée
© 2019 Sage 57
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
AR_RefDe (Chaîne de caractères : 18 maximum) : Référence article (Borne inférieure) ; si la chaîne est
vide alors la sélection porte sur tous les articles jusqu'à l’article (AR_RefA)
AR_RefA (Chaîne de caractères : 18 maximum) : Référence article (Borne supérieure) ; si la chaîne est
vide alors la sélection porte sur tous les articles à partir de l’article (AR_RefDe)
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
AR_RefDe (Chaîne de caractères : 18 maximum) : Référence article (Borne inférieure) ; si la chaîne est
vide alors la sélection porte sur tous les articles jusqu'à l’article (AR_RefA)
AR_RefA (Chaîne de caractères : 18 maximum) : Référence article (Borne supérieure) ; si la chaîne est vide
alors la sélection porte sur tous les articles à partir de l’article (AR_RefDe)
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
© 2019 Sage 58
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
RE_No (Entier long) : Numéro représentant
AR_RefDe (Chaîne de caractères : 18 maximum) : Référence article (Borne inférieure) ; si la chaîne est
vide alors la sélection porte sur tous les articles jusqu'à l’article (AR_RefA)
AR_RefA (Chaîne de caractères : 18 maximum) : Référence article (Borne supérieure) ; si la chaîne est vide
alors la sélection porte sur tous les articles à partir de l’article (AR_RefDe)
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
© 2019 Sage 59
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
RE_No (Entier long) : Numéro représentant
AR_RefDe (Chaîne de caractères : 18 maximum) : Référence article (Borne inférieure) ; si la chaîne est
vide alors la sélection porte sur tous les articles jusqu'à l’article (AR_RefA)
AR_RefA (Chaîne de caractères : 18 maximum) : Référence article (Borne supérieure) ; si la chaîne est
vide alors la sélection porte sur tous les articles à partir de l’article (AR_RefDe)
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
© 2019 Sage 60
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
AR_RefDe (Chaîne de caractères : 18 maximum) : Référence article (Borne inférieure) ; si la chaîne est
vide alors la sélection porte sur tous les articles jusqu'à l’article (AR_RefA)
AR_RefA (Chaîne de caractères : 18 maximum) : Référence article (Borne supérieure) ; si la chaîne est vide
alors la sélection porte sur tous les articles à partir de l’article (AR_RefDe)
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
AR_RefDe (Chaîne de caractères : 18 maximum) : Référence article (Borne inférieure) ; si la chaîne est
vide alors la sélection porte sur tous les articles jusqu'à l’article (AR_RefA)
AR_RefA (Chaîne de caractères : 18 maximum) : Référence article (Borne supérieure) ; si la chaîne est
vide alors la sélection porte sur tous les articles à partir de l’article (AR_RefDe)
© 2019 Sage 61
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu'à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
RE_No (Entier long) : Numéro représentant
AR_RefDe (Chaîne de caractères : 18 maximum) : Référence article (Borne inférieure) ; si la chaîne est
vide alors la sélection porte sur tous les articles jusqu'à l’article (AR_RefA)
AR_RefA (Chaîne de caractères : 18 maximum) : Référence article (Borne supérieure) ; si la chaîne est vide
alors la sélection porte sur tous les articles à partir de l’article (AR_RefDe)
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu’à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
© 2019 Sage 62
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
AR_RefDe (Chaîne de caractères : 18 maximum) : Référence article (Borne inférieure) ; si la chaîne est
vide alors la sélection porte sur tous les articles jusqu'à l’article (AR_RefA)
AR_RefA (Chaîne de caractères : 18 maximum) : Référence article (Borne supérieure) ; si la chaîne est vide
alors la sélection porte sur tous les articles à partir de l’article (AR_RefDe)
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu’à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
© 2019 Sage 63
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
AR_RefDe (Chaîne de caractères : 18 maximum) : Référence article (Borne inférieure) ; si la chaîne est
vide alors la sélection porte sur tous les articles jusqu'à l’article (AR_RefA)
AR_RefA (Chaîne de caractères : 18 maximum) : Référence article (Borne supérieure) ; si la chaîne est vide
alors la sélection porte sur tous les articles à partir de l’article (AR_RefDe)
Debut (Chaîne de caractères au format ‘jjmmaaaa’) : Date de début ; si la chaîne est vide alors la sélection
porte sur toutes les dates jusqu’à la date de fin.
Fin (Chaîne de caractères au format ‘jjmmaaaa’) : Date de fin ; si la chaîne est vide alors la sélection porte
sur toutes les dates à partir de la date de début.
En Sortie
En Entrée
AG_No1 : Numéro interne de l’énuméré de gamme 1 ; si l’article n’a pas de gamme, mettre la valeur à 0
AG_No2 : Numéro interne de l’énuméré de gamme 2 ; si l’article n’est pas à double gamme, mettre la valeur
à0
En Sortie
© 2019 Sage 64
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
AG_No1 : Numéro interne de l’énuméré de gamme 1 ; si l’article n’a pas de gamme, mettre la valeur à 0
AG_No2 : Numéro interne de l’énuméré de gamme 2 ; si l’article n’est pas à double gamme, mettre la valeur
à0
En Sortie
Si la table NomTable est une table de type fichier (table commençant par F_), alors GetParamValeurStr re-
tourne la valeur en chaîne de caractères, du champ NomChamp, de la table NomTable, de la base de type
TypeBase, pour le dernier enregistrement écrit par ODBC (ajout ou modification).
En Entrée
TypeBase (Chaîne de caractères) : Type de la base : CPTA (Base comptable), CIAL (Base commerciale),
FSAL (Base salarié), FPAR (Base paramètre)
NomTable (Chaîne de caractères) : Nom de la table de type paramètre (table commençant par P_)
En Sortie
© 2019 Sage 65
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Si la table NomTable est une table de type fichier (table commençant par F_), alors GetParamValeurDbl
retourne la valeur en double, du champ NomChamp, de la table NomTable, de la base de type TypeBase,
pour le dernier enregistrement écrit par ODBC (ajout ou modification).
En Entrée
TypeBase (Chaîne de caractères) : Type de la base : CPTA (Base comptable), CIAL (Base commerciale),
FSAL (Base salarié), FPAR (Base paramètre)
NomTable (Chaîne de caractères) : Nom de la table de type paramètre (table commençant par P_)
En Sortie
Si la table NomTable est une table de type fichier (table commençant par F_), alors GetParamValeurEnt
retourne la valeur en Entier long, du champ NomChamp, de la table NomTable, de la base de type Type-
Base, pour le dernier enregistrement écrit par ODBC (ajout ou modification).
En Entrée
TypeBase (Chaîne de caractères) : Type de la base : CPTA (Base comptable), CIAL (Base commerciale),
FSAL (Base salarié), FPAR (Base paramètre)
NomTable (Chaîne de caractères) : Nom de la table de type paramètre (table commençant par P_)
En Sortie
© 2019 Sage 66
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Si la table NomTable est une table de type fichier (table commençant par F_), alors GetParamValeurDate
retourne la valeur en chaîne de caractères au format ‘jjmmaaaa’, du champ NomChamp, de la table Nom-
Table, de la base de type TypeBase, pour le dernier enregistrement écrit par ODBC (ajout ou modification).
En Entrée
TypeBase (Chaîne de caractères) : Type de la base : CPTA (Base comptable), CIAL (Base commerciale),
FSAL (Base salarié), FPAR (Base paramètre)
NomTable (Chaîne de caractères) : Nom de la table de type paramètre (table commençant par P_)
En Sortie
Résultat (Chaîne de caractères : format ‘jjmmaaaa’) : Valeur du champ
En Entrée
TypeBase (Chaîne de caractères) : Type de la base : CPTA (Base comptable), CIAL (Base commerciale),
FSAL (Base salarié), FPAR (Base paramètre)
En Sortie
En Entrée
TypeBase (Chaîne de caractères) : Type de la base : CPTA (Base comptable), CIAL (Base commerciale),
FSAL (Base salarié), FPAR (Base paramètre)
En Sortie
© 2019 Sage 67
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Calcul du Cumul Borné pour le salarié SAL_Num de la rubrique RB_Num, sur la période comprise entre
date de début et date de fin.
En Entrée
SA_Num (Chaîne Alpha Maj 5 car max) : Numéro du salarié
Fin (Chaîne de caractères) : Date de Fin ; Si Fin=’’ alors Fin=P_SDOSSIER.SD_FinExo (Date de Fin de
l’exercice courant)
En Sortie
En Entrée
Fin (Chaîne de caractères) : Date de Fin ; Si Fin=’’ alors Fin=P_SDOSSIER.SD_FinExo (Date de Fin de
l’exercice courant)
En Sortie
© 2019 Sage 68
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
Fin (Chaîne de caractères) : Date de Fin ; Si Fin=’’ alors Fin=P_SDOSSIER.SD_FinExo (Date de Fin de
l’exercice courant)
En Sortie
En Entrée
Fin (Chaîne de caractères) : Date de Fin ; Si Fin=’’ alors Fin=P_SDOSSIER.SD_FinExo (Date de Fin de
l’exercice courant)
En Sortie
En Entrée
SA_Num (Chaîne Alpha Maj 5 car max) : Numéro du salarié
© 2019 Sage 69
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Fin (Chaîne de caractères) : Date de Fin ; Si Fin=’’ alors Fin=P_SDOSSIER.SD_FinExo (Date de Fin de
l’exercice courant)
En Sortie
En Entrée
Fin (Chaîne de caractères) : Date de Fin ; Si Fin=’’ alors Fin=P_SDOSSIER.SD_FinExo (Date de Fin de
l’exercice courant)
En Sortie
© 2019 Sage 70
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Introduction
Un composant ActiveX est une unité de code exécutable qui suit la spécification ActiveX dans le but de four-
nir des objets. Ces objets sont utilisables par tous les logiciels de développement capables d’utiliser cette
technologie (Visual Basic, Delphi etc...).
L’intérêt d’utiliser une DLL activeX pour les fonctions évoluées est multiple :
• Manipulation d’un objet avec des propriétés
• Plus besoin de déclarer l’ensemble des fonctions évoluées
• Facilité d’utilisation
• Possibilité d’utilisation dans Microsoft Visual Interdev pour développer des applications Intranet ou
Internet
Contrairement aux fonctions évoluées qui retournent un code erreur, chaque propriété de l’objet retourne
le résultat.
Le code erreur retourné par la fonction est récupérable par la propriété Erreur.
Le format date n’est plus une chaîne de caractères (cf : API Sage), mais bel et bien un format date de l’ap-
plication.
Ces objets ne sont utilisables que si une connexion a été effectuée auparavant avec la base concernée.
Pour utiliser les fonctions de la comptabilité, votre application doit être connectée, via ODBC, à la base
comptable.
Pour utiliser les fonctions de la gestion commerciale, votre application doit être connectée, via ODBC, à la
base comptable et à la base commerciale.
Vous trouverez ci-dessous quelques exemples de propriétés de l’ACTIVE X ASD100. Ces propriétés sont
les mêmes que les fonctions décrites ci-dessus, exceptées qu’elles retournent donc le résultat et non plus
le code erreur et que le nom des propriétés de l’objet CIAL ne commence plus par CIAL.
© 2019 Sage 71
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
Les champs Deb et Fin peuvent être à vide, par contre il faut que l’un des trois champs suivants ait une
valeur non nulle, à savoir CG_NUM, CT_NUM ou JO_NUM.
En Entrée
CG_Num (Chaîne de caractères de type Compte 13 caractères maximum) : Numéro de compte général.
En Sortie
LigneMontantHT (DL_No)
Calcul du montant HT pour une ligne de document.
En Entrée
DL_NO (Entier long) : Numéro interne de la ligne
En Sortie
Résultat de la propriété (Double) : Valeur du HT.
© 2019 Sage 72
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
CT_NUM (Chaîne de caractères: 17 maximum) : Client ou fournisseur
En Sortie
Note : Les champs Debut et Fin sont bien des champs de type DATE contrairement aux fonctions
évoluées où le type était une chaîne de caractères au format « jjmmaaaa ». Ce sera le cas pour tous
les champs de type DATE.
Si la table NomTable est une table de type fichier (table commençant par F_), alors GetParamValeurStr re-
tourne la valeur en chaîne de caractères, du champ NomChamp, de la table NomTable, de la base de type
TypeBase, pour le dernier enregistrement écrit par ODBC (ajout ou modification).
C’est utile si on veut connaître les valeurs des champs de l’enregistrement que l’on vient de créer, principa-
lement des champs calculés ou mis à jour par le driver.
En Entrée
TypeBase (Chaîne de caractères) : Type de la base : CPTA (Base comptable), CIAL (Base commerciale),
FSAL (Base salarié), FPAR (Base paramètre), IMO (Base Immobilisation)
NomTable (Chaîne de caractères) : Nom de la table de type paramètre (table commençant par P_)
En Sortie
© 2019 Sage 73
Chapitre 2 – Fonctions avancées et DLL Active X : déclaration des fonctions
En Entrée
Fin (Chaîne de caractères) : Date de Fin ; Fin=P_SDOSSIER.SD_FinExo (Date de Fin de l’exercice cou-
rant)
En Sortie
© 2019 Sage 74
Chapitre 3 – Description des exemples fournis avec le Kit ODBC
Introduction
La base ACC2000EX.MDB a été développée sous Microsoft Access. Elle permet d’une part, de com-
prendre la structure des bases de données Sage 100cloud, et d’autre part, de voir ce qu’on peut réellement
faire avec Sage 100cloud Kit ODBC (Lecture, écriture, fonctions avancées).
Au lancement de cette base, les différents menus vous donnent le choix entre :
• Visualisation de tous les Champs des tables de la base,
• Etat : Annuaire Client,
• Etat : Palmarès Client,
• Etat : Grand Livre Tiers,
• Etat : Distribution Analytique,
• Etat : Balance des comptes,
• Etat : Mouvements Articles,
• Etat : Tarifs par catégorie tarifaire,
• Exemple d’écriture dans un journal via un formulaire de saisie,
• Exemple d’écriture dans un document des ventes, via un formulaire de saisie,
• Utilisation des fonctions avancées de Comptabilité et de Gestion Commerciale,
• Exemple de génération automatique de documents de Vente, Achat, Stock avec chacun 10 lignes
de document. Les articles sont pris aléatoirement dans la base,
• Exemple de génération aléatoire d’articles,
• Exemple de génération aléatoire d’écritures comptables via un modèle de saisie.
Pour exécuter chacune de ces options, cliquez sur l’option du menu correspondant. Les formulaires et états
s’exécuteront.
© 2019 Sage 75
Chapitre 3 – Description des exemples fournis avec le Kit ODBC
Le Chiffre d’Affaires TTC est calculé en additionnant toutes les écritures comptables des clients dont le type
de journal est uniquement de Vente.
Les fourchettes de sections analytiques seront saisies dans un formulaire. Le plan analytique est fixé au
premier (dans notre exemple, ce sera Activité). Vous avez la possibilité de trois fourchettes possibles dont
les valeurs sont à sélectionner dans une liste pour chacune.
© 2019 Sage 76
Chapitre 3 – Description des exemples fournis avec le Kit ODBC
Cet exemple permet surtout de comprendre quels sont les champs à renseigner en insertion et les valeurs
par défaut utilisées par l’application (récupération d’informations de l’article ou du tiers par exemple).
Le code n’est pas protégé. Il vous est donc facile de comprendre comment ces lignes ont été générées.
© 2019 Sage 77
Chapitre 3 – Description des exemples fournis avec le Kit ODBC
Le formulaire Création Relations Entre les Tables permet la création automatique des jointures entre les
tables Sage 100cloud de votre base de données Microsoft Access.
Le formulaire Visualisation des Champs de la Base permet de visualiser comme dans les bases Exemple,
tous les champs des tables de votre base.
Le formulaire Descriptif Champs Tables permet de créer le descriptif de chaque champ ODBC de votre base
(indique le nom en clair des champs).
Note : Vous allez utiliser cette base pour votre utilisation personnelle. Il est fortement conseillé d’en
faire une copie et de renommer cette nouvelle base sous le nom de votre choix (*.MDB) et utiliser
alors cette base personnalisée.
Vous pourrez alors reprendre ODBCNEW2000.MDB lorsque vous recréerez une nouvelle base sur des
données Sage. La procédure sera identique à ce qui est décrit ci-dessus.
Ces relations sont visibles, d’une part dans la fenêtre des relations et, d’autre part lorsque vous créez une
nouvelle requête et que vous sélectionnez des tables.
Il est à noter que lorsque vous activez ce formulaire et appuyez sur le bouton pour lancer la création des
relations, s’il existe déjà des relations, celles ci seront détruites. Cela évite ainsi les mauvaises relations,
source d’erreur.
Aussi, s’il vous arrivait de supprimer certaines relations et que vous vouliez les recréer, il vous suffirait de
relancer ce formulaire.
© 2019 Sage 78
Chapitre 3 – Description des exemples fournis avec le Kit ODBC
Note : Lorsque vous créez des requêtes et que vous sélectionnez deux tables avec des relations
(jointures) entre elles, celles-ci s’affichent alors à l’écran.
Néanmoins, certaines jointures possèdent des critères supplémentaires pour être valides. Par exemple
F_COMPTEG et F_ECRITUREC, respectivement table des comptes généraux et table des écritures comp-
tables, ont la jointure suivante.
Dans ce cas, si vous sélectionnez ces tables, le lien entre CG_NUM sera créé, mais il faudra sélectionner
le champ CG_TYPE et mettre 0 dans sa zone critère.
Vous ferez de même pour les autres jointures possédant des critères particuliers. Pour cela, reportez-vous
à la partie expliquant les jointures entre les tables des bases de données Sage 100cloud.
Note : Le formulaire Tables_champs est utilisé quant à lui par le formulaire précédent. Ne l’activez
donc pas avant celui-ci sous risque d’erreur.
Un menu principal dans la feuille Présentation, vous permet d'exécuter certaines requêtes et fonctions Vi-
sual Basic de ce classeur. Vous pouvez visualiser la source correspondant à chaque bouton et peut être
vous en inspirer pour d'éventuels développements avec Microsoft Excel et Visual Basic pour applications
(VBA). Les exemples utilisent les bases Bijou.
© 2019 Sage 79
Annexe 1 – Rappel sur le langage SQL
Remarques générales
• Utilisez les cotes ‘’ pour spécifier une chaîne de caractères (pas les guillemets "").
• Une date, au format SQL, se présente sous la forme d’une chaîne de caractères formatée par des {
}, du type ‘{d AAAA-MM-JJ}’, ou AAAA représente l’année, MM le mois, et JJ le jour.
• Le SQL fait la différence entre les majuscules et les minuscules sur les chaînes de caractères.
Rechercher le client Boby ne revient pas au même que rechercher le client BOBY.
• Les commandes SQL peuvent être tapées indifféremment en minuscules ou en majuscules.
Modification d’enregistrements
Utilisation de la clause UPDATE
UPDATE F_CompteG
SET CG_Classement = ‘CLASS_01’, CG_Saut = 2
WHERE N_Nature = 1
AND CG_Type = 0
Cette requête va modifier le classement et le saut de ligne de tous les comptes de tiers client qui sont du
type détail. Si vous ne désirez modifier qu’un seul enregistrement, il faudra utiliser les champs qui per-
mettent de rendre cet enregistrement unique, dans la clause WHERE.
Suppression d’Enregistrements
Utilisation de la clause DELETE FROM.
DELETE FROM F_CompteT
WHERE CG_Num = ‘411TOTO’
© 2019 Sage 80
Annexe 1 – Rappel sur le langage SQL
AND CG_Type = 0
Tout comme la modification d’enregistrement, il est possible d’effectuer une suppression en ‘cascade’, mais
attention à ne pas supprimer d’autres enregistrements...
Exemples de requêtes
Le driver ODBC permet l’utilisation de fonctions opérant sur les chaînes de caractères telles que LCASE
ou UCASE, LEFT... afin de pouvoir récupérer ou identifier plus facilement des enregistrements.
Voici quelques requêtes de sélection utilisant la grammaire et les fonctions SQL évoluées gérées par Sage
100cloud Kit ODBC.
Exemple 1
Lister tous les articles qui n’ont pas été vendus et qui ne font pas partis d’une nomenclature d’un produit.
Select F_Article.AR_Ref, Ucase (F_Article.AR_Design)
From F_Article
Where F_Article.AR_Ref NOT IN
(Select F_DocLigne.AR_Ref
From F_DocLigne
Where (F_DocLigne.DO_Type Between 0 And 7))
And F_Article.AR_Ref NOT IN
(Select F_NomenClat.NO_RefDet
From F_Nomenclat)
Order By F_Article.AR_Ref
Exemple 2
Somme des débits/crédits de tous les comptes fournisseurs pour l’année 2012.
Select F_CompteT.CT_Intitule, Sum ( (EC_Montant * (1-EC_Sens))) AS SommeDebit,
Sum ( (EC_Montant * EC_Sens)) AS SommeCredit
From F_CompteT, F_EcritureC
Group by F_CompteT.CT_Num, F_EcritureC.CT_Num, F_CompteT.CT_Intitule,
Year (F_EcritureC.JM_Date), Left (F_EcritureC.CG_Num,3)
Having ( (F_CompteT.CT_Num = F_EcritureC.CT_Num)
And (Year (F_Ecriturec.JM_Date) = 2012)
And (Left (F_EcritureC.CG_Num,3) = '411'))
Order By LCase (F_CompteT.CT_Intitule)
Exemple 3
Sélection de tous les comptes de Tiers qui ont été associés, au moins une fois, à une écriture comptable
dont le numéro de compte général commence par 411, au cours du 1er trimestre 2012.
© 2019 Sage 81
Annexe 1 – Rappel sur le langage SQL
© 2019 Sage 82
Annexe 2 – Fonctions SQL supportées par Sage 100cloud Kit
FROM
WHERE
GROUP BY
HAVING
ORDER BY
BETWEEN
IN
UNION
SOUS REQUETE
Si vous utilisez Microsoft Access et les requêtes graphiques, les fonctions ci-dessous ne fonctionneront
pas. Microsoft Access possède en interne les mêmes types de fonctions. Utilisez dans ce cas ses fonctions.
Par contre, si vous utilisez du SQL Direct les fonctions ci-dessous fonctionneront.
Les exemples ci-dessous sont testés avec Microsoft Query. Les requêtes sont en effet directement inter-
prétées par le driver.
© 2019 Sage 83
Annexe 2 – Fonctions SQL supportées par Sage 100cloud Kit
LENGTH (CHAINE)
Cette fonction retourne le nombre de caractères de la chaîne Chaîne. Le résultat est un Entier.
Exemple
Exemple d’utilisation avec Microsoft QUERY (Nombre de caractères de l’intitulé du compte général)
SELECT F_COMPTEG.CG_NUM, F_COMPTEG.CG_INTITULE, LENGTH (CG_INTITULE) ‘NB’
FROM F_COMPTEG F_COMPTEG
UCASE (CHAINE)
Cette fonction met en majuscule tous les caractères de la chaîne CHAINE.
Exemple
Exemple d’utilisation avec QUERY (Intitulé du compte général en majuscule).
SELECT F_COMPTEG.CG_NUM, F_COMPTEG.CG_INTITULE, UCASE (CG_INTITULE) ‘MAJUS-
CULE’
FROM F_COMPTEG F_COMPTEG
LCASE (CHAINE)
Cette fonction met en minuscule tous les caractères de la chaîne CHAINE.
Exemple
Exemple d’utilisation avec QUERY (Compte général en minuscule).
SELECT F_COMPTEG.CG_NUM, F_COMPTEG.CG_INTITULE, LCASE (CG_INTITULE) ‘MINUS-
CULE’
FROM F_COMPTEG F_COMPTEG
© 2019 Sage 84
Annexe 2 – Fonctions SQL supportées par Sage 100cloud Kit
RTRIM (CHAINE)
Cette fonction renvoie la chaîne CHAINE sans les blancs de début de chaîne.
Exemple
Exemple d’utilisation avec QUERY.
SELECT F_COMPTEG.CG_NUM, F_COMPTEG.CG_INTITULE, RTRIM (‘TESTRTRIM ‘)
‘TESTRTRIM ‘
FROM F_COMPTEG F_COMPTEG
LTRIM (CHAINE)
Cette fonction renvoie la chaîne CHAINE sans les blancs de fin de chaîne.
Exemple
Exemple d’utilisation avec QUERY (Enlever les blancs dans la chaîne ‘ TESTRTRIM’
SELECT F_COMPTEG.CG_NUM, F_COMPTEG.CG_INTITULE, LTRIM (‘ TESTRTRIM’) ‘
TESTRTRIM’
FROM F_COMPTEG F_COMPTEG
© 2019 Sage 85
Annexe 2 – Fonctions SQL supportées par Sage 100cloud Kit
Exemple
Exemple d’utilisation avec QUERY :
SELECT F_COMPTEG.CG_NUM, F_COMPTEG.CG_INTITULE, SUBSTRING (CG_INTITULE, 4, 2)
‘SUBSTRING’
FROM F_COMPTEG F_COMPTEG
Fonction numérique
CURDATE ()
Cette fonction retourne la date système.
Exemple
Exemple d’utilisation avec QUERY :
SELECT F_COMPTEG.CG_NUM, F_COMPTEG.CG_INTITULE, CURDATE () ‘DATE COURANTE’
FROM F_COMPTEG F_COMPTEG
DAYOFMONTH (DATE)
Cette fonction retourne le jour dans le mois pour le champ DATE. C’est un entier compris entre 1 et 31.
Exemple
Exemple d’utilisation avec QUERY :
SELECT F_COMPTEG.CG_NUM, F_COMPTEG.CG_INTITULE, CURDATE () ‘DATE COURANTE’,
DAYOFMONTH (CURDATE ()) ‘JOUR MOIS’
FROM F_COMPTEG F_COMPTEG
MONTH (DATE)
Cette fonction retourne le mois pour le champ DATE. C’est en entier compris entre 1 et 12.
Exemple
Exemple d’utilisation dans QUERY:
SELECT F_ECRITUREC.CG_NUM, F_ECRITUREC.JM_DATE, F_ECRITUREC.EC_JOUR, MONTH
(JM_DATE)
© 2019 Sage 86
Annexe 2 – Fonctions SQL supportées par Sage 100cloud Kit
CURTIME ()
Cette fonction retourne l’heure courante.
Exemple
Exemple d’utilisation dans QUERY:
SELECT F_ECRITUREC.CG_NUM, F_ECRITUREC.JM_DATE, F_ECRITUREC.EC_JOUR, MONTH
(JM_DATE), CURTIME ()
FROM F_ECRITUREC F_ECRITUREC
ORDER BY F_ECRITUREC.CG_NUM
DAYOFWEEK (DATE)
Cette fonction retourne le jour comme un entier de 1 à 7 pour le champ DATE.
Exemple
Exemple d’utilisation dans QUERY:
SELECT F_ECRITUREC.CG_NUM, F_ECRITUREC.JM_DATE, F_ECRITUREC.EC_DATE, MONTH
(EC_DATE), CURTIME (), DAYOFWEEK (EC_DATE)
FROM F_ECRITUREC F_ECRITUREC
ORDER BY F_ECRITUREC.CG_NUM
YEAR (DATE)
Cette fonction retourne l’année pour le champ DATE.
Exemple
Exemple d’utilisation dans QUERY:
SELECT F_ECRITUREC.CG_NUM, F_ECRITUREC.JM_DATE, F_ECRITUREC.EC_DATE, MONTH
(EC_DATE), CURTIME (), DAYOFWEEK (EC_DATE)
FROM F_ECRITUREC F_ECRITUREC
ORDER BY F_ECRITUREC.CG_NUM
Fonctions système
DATABASE ()
Cette fonction retourne le fichier physique associé à la source de données en cours d’utilisation.
Exemple
Exemple d’utilisation dans QUERY:
SELECT P_DOSSIER.D_RAISONSOC, DATABASE ()
© 2019 Sage 87
Annexe 2 – Fonctions SQL supportées par Sage 100cloud Kit
USER ()
Cette fonction retourne le nom de l’utilisateur connecté.
Exemple
Exemple d’utilisation dans QUERY:
SELECT P_DOSSIER.D_RAISONSOC, DATABASE (), USER ()
FROM P_DOSSIER P_DOSSIER
© 2019 Sage 88
Annexe 3 – Conseils d’optimisation
© 2019 Sage 89
Annexe 4 – Les codes erreurs Sage
© 2019 Sage 90
Annexe 4 – Les codes erreurs Sage
© 2019 Sage 91
Annexe 4 – Les codes erreurs Sage
© 2019 Sage 92
Annexe 4 – Les codes erreurs Sage
© 2019 Sage 93
Annexe 4 – Les codes erreurs Sage
• -3490, RP_Code est une ressource d’un mauvais type. Incohérence avec le type de l’article
AR_Type !
• -3491, RP_Code doit être renseigné pour les articles de type ressource location ou prestation !
• -3492, Suppression impossible, veuillez mettre DT_No de F_DOCLIGNE à 0, ce qui supprimera
l’entrée dans F_DOCLIGNETEXT.
• -3493, Le numéro interne DT_No n’est pas modifiable !
• -3494, Le numéro interne DT_No doit être à 0 en ajout !
• -3495, EU_Qte ne doit pas être égal à 0 si RP_Code est renseigné !
• -3496, Valeur de AR_Type invalide !
• -3497, Valeur de RP_Code invalide !
• -3498, Le code de la ressource de production n’existe pas !
• -3499, Le planning des projets de fabrication n’existe pas !
• -3500, La ligne de document n’existe pas !
• -3503, Impossible de créer une ligne pour ce type de document
• -3504, Impossible de créer ce type de document
• -3505, La quantité disponible est insuffisante pour l'emplacement !
• -3506, L'emplacement est lié à un ou plusieurs articles en contremarque !
• -3507, Ce type de document n’est pas modifiable
• -3508, EC_Parite ne peut être négatif
• -3509, Ajout impossible dans F_ARTCLIENT ou F_FAMCLIENT car le tiers possède un CT_Num-
Centrale
• -3510, CT_NumCentrale doit exister dans F_COMPTET et être de type client
• -3511, Suppression impossible ! Ce dépôt est utilisé dans F_DEPOTEMPL
• -3512, DP_NoDefaut doit être à 0 en ajout dans F_DEPOT
• -3513, DP_NoDefaut ne correspond à aucun dépôt valide dans F_DEPOTEMPL
• -3514, Le CL_No parent n’existe pas dans le catalogue
• -3515, CL_No n’existe pas dans le catalogue
• -3520, Si AG_No1Comp > 0 l’article doit être à simple ou double gamme, si AG_No2Comp > 0
l’article doit être à double gamme et AG_No1Comp > 0
• -3521, Si AG_No2Comp > 0 et que l’article est à double gamme alors AG_No1Comp doit être <> 0
• -3522, DL_TypePl doit être égal à 3 ou 4 si F_DOCENTETE.DO_Provenance=4
• -3523, AR_Prevision n’est modifiable que pour les articles gérés en nomenclature
• -3524, Modification impossible de DO_Provenance
• -3525, CO_No n’existe pas dans F_Condition ou existe mais pas sur le même article
• -3527, AR_RefCompose doit être égal à 0 pour ce type de document
• -3528, Dans les ordres de fabrication et bon de fabrication AR_RefCompose doit être vide si l’article
n’est pas à nomenclature fabrication
• -3529, DL_Qte ne peut être négatif pour ce type de document
© 2019 Sage 94
Annexe 4 – Les codes erreurs Sage
• -3530, Pour une facture de retour DL_Qte, DL_QteBC, DL_QteBL et DL_QtePL doivent être néga-
tifs
• -3531, Le suivi de trésorerie doit être égal à 0
• -3532, Le suivi de trésorerie doit être égal à 1
• -3533, Le règlement définitif n’est valable que pour les journaux de type trésorerie
• -3534, Le numéro interne EB_No n’existe pas dans F_EBANQUE
• -3535, Pour un écart de règlement, JO_NumEcart, CG_NumEcart et RG_MontantEcart doivent être
renseignés
• -3538, DL_PIECEPL n'est pas en alphanumérique majuscule ou est de longueur > 8 caractères
• -3539, Le numéro de pièce et la date de préparation de livraison doivent être à vide
• -3540, Si F_DocEntete.MR_No <> 0 MR_No n’existe pas dans F_MODELER
• -3541, Suppression impossible car le code journal analytique est utilisé en tant que journal d'à-nou-
veaux IFRS
• -3542, Le code journal analytique doit être Réservé IFRS car il est utilisé en tant que code journal à-
nouveaux analytique IFRS
• -3543, Le code journal analytique doit être Réservé IFRS car des écritures y ont déjà été saisies
• -3544, Le code journal analytique doit être non Réservé IFRS car il est utilisé en tant que code jour-
nal à-nouveaux analytique
• -3545, Le code journal analytique doit être non Réservé IFRS car il comporte des écritures autres
que IFRS
• -3546, Si SaisieIFRS=0 alors ER_Norme doit être = 0 ou = 1
• -3547, Si P_DOSSIER.D_GestionIFRS=0 alors ER_Norme doit être égal à 0, sinon si journal IFRS
alors ER_Norme doit être égal à 2
• -3548, Si SaisieIFRS=0 alors EC_Norme doit être = 0 ou = 1
• -3549, Si P_DOSSIER.D_GestionIFRS=0 alors EC_Norme doit être égal à 0, sinon si journal IFRS
alors EC_Norme doit être égal à 2
• -3550, Le code journal doit être non Réservé IFRS car l'option IFRS n'est pas gérée dans le dossier
entreprise.
• -3551, L'écriture est utilisée dans le fichier EFINANCIEREC (donc non supprimable)
• -3552, Le RIB n'est pas au format IBAN
• -3553, Le champ EC_TresoPiece ne peut pas être renseigné
• -3554, L'écriture est non synchronisée, sa modification est impossible
• -3555, L'écriture est synchronisée, sa suppression est impossible
• -3556, L'écriture est non synchronisée, sa suppression est impossible
• -3557, Impossible d'ajouter une écriture dans un journal synchronisé
• -3558, Impossible d'ajouter une écriture dans un journal synchronisé
• -3560, Erreur de structure du compte analytique
• -3561, Suppression impossible, un dépôt principal n'est pas unique
• -3562, Le journal de type général n'existe pas
© 2019 Sage 95
Annexe 4 – Les codes erreurs Sage
© 2019 Sage 96
Annexe 4 – Les codes erreurs Sage
© 2019 Sage 97
Annexe 4 – Les codes erreurs Sage
© 2019 Sage 98
Annexe 4 – Les codes erreurs Sage
© 2019 Sage 99
Annexe 4 – Les codes erreurs Sage
• -3987, Dans F_ARTFOURNISS, si on est sur Hors Remise, alors on ne peut pas affecter de remise
• -3988, L'article n'est pas une nomenclature
• -3989, Suppression impossible car l'article existe dans F_MODELE
• -3990, Le suivi de stock est incompatible avec les nomenclatures commerciales
• -3991, Champs non valides pour une famille ou une immobilisation non soumise à la taxefoncière.
• -3992, La date de fin doit être supérieure au dernier loyer clôturé !
• -3993, Les champs du contrat ne sont pas modifiables, il existe des loyers clôturés !
• -3994, Champs non modifiables pour une immobilisation de type Bien !
• -3995, Date de contrat invalide !
• -3996, L'immobilisation ne possède pas de date de début et fin de contrat alors que des champs
relatifs aux contrats sont renseignés !
• -3997, Le coût ne doit pas être renseigné en mode ajout !
• -3998, L'immobilisation est de type Biens alors que des champs relatifs aux contrats sont rensei-
gnés !
• -3999, Le type d'origine de l'immobilisation ne doit être renseigné que si une date de rachat existe !
• -4000, La gamme 1 ne peut pas être vide car l'article possède une gamme 1
• -4001, La gamme 2 doit être à vide, car l'article ne possède pas de gamme 2
• -4002, La gamme 1 doit être à vide, car l'article ne possède pas de gamme 1
• -4003, Le dépôt mouvementé n'existe pas
• -4004, Le représentant n'existe pas
• -4005, Le numéro de dépôt doit être différent de 0 pour un article suivi en stock
• -4006, Le numéro de dépôt doit être égal à 0 pour un article qui n'est pas suivi en stock
• -4007, Le compte analytique n'existe pas dans le plan affaire, ou n'est pas du type détail
• -4008, Ce fournisseur ne fait pas parti de la liste des fournisseurs de cet article
• -4009, Le glossaire n'existe pas dans F_DOCLIGNETEXT
• -4010, L'entête de document n'existe pas
• -4011, Le type du prix (TTC ou HT) doit être en HT pour une ligne faisant référence à aucun article
• -4012, Le représentant doit être égal à 0
• -4013, Le type du prix (TTC ou HT) doit être en HT pour un document de type achat
• -4014, L'article est vide ou n'est pas de type C39 ou est de longueur > 18
• -4015, Une remise de pied ne peut pas être combinée avec une remise exceptionnelle
• -4016, L'énuméré référence article est unique
• -4017, Le numéro de l'énuméré de gamme 2 n'est pas modifiable
• -4018, Le numéro de l'énuméré de gamme 1 n'est pas modifiable
• -4019, L'énuméré article est unique
• -4020, La gamme 2 n'existe pas
• -4021, La gamme 1 n'existe pas
• -4022, L'énuméré article n'est pas de type C39 ou est de longueur > 18
• -4023, La gamme 1 doit être renseignée : valeur non nulle
• -4024, Le compte de contrepartie n'existe pas
• -4025, L'état du stock ne permet pas de créer la ligne
• -4026, Le type de taxe 3 ne peut pas être modifié
• -4027, Le type de taux de taxe 3 ne peut pas être modifié
• -4028, Le taux de taxe 3 ne peut pas être modifié
• -4029, La référence énuméré conditionnement existe déjà
• -4030, La référence énuméré conditionnement n'est pas de type C39
• -4031, S'il y a une devise ou un prix de vente, PV/PR doit être nul
• -4032, Changement d'article à gamme, modification impossible car existe dans F_ARTENUMREF
ou suppression impossible
• -4033, Dans l'article la gamme 1 ou la gamme 2 n'est pas de type produit
• -4034, On n'a pas le droit de supprimer un glossaire dans un document
• -4035, EG_CHAMP de F_ARTCLIENT ne fait pas référence à un champ de P_GAMME de type
quantité ou montant
• -4036, Ce glossaire n'existe pas ou GL_DOMAINE n'est pas de type article
• -4037, AGL_NUM doit être à 0
• -4038, Le numéro interne doit être <> 0
• -4039, L'article est vide ou n'est pas de type C39 ou est de longueur > 18
• -4040, Le numéro de pièce ne peut pas être modifié
• -4041, Le type de document ne peut pas être modifié
• -4042, Le domaine ne peut pas être modifié
• -4043, Le numéro interne de l'échéance ne peut pas être modifié
• -4044, Le numéro interne de règlement ne peut pas être modifié
• -4045, Ce numéro de pièce n'existe pas pour ce type de document
• -4046, Le numéro interne de l'échéance n'existe pas
• -4047, Le numéro interne du règlement n'existe pas
• -4048, Le numéro de pièce est vide ou n'est pas en alphanumérique et majuscule ou est de lon-
gueur > 8 caractères
• -4049, Le type de document n'existe pas, n'est pas valide, ou n'est pas en accord avec le domaine
de document
• -4050, Le domaine doit être compris entre 0 et 1
• -4051, Le montant imputé sur l'échéance ne peut pas être égal à 0
• -4052, Le numéro interne de l'échéance ne peut pas être égal à 0
• -4053, Le numéro interne du règlement ne peut pas être égal à 0
• -4054, Le champ règlement imputé ne peut pas être modifié
• -4088, Le pourcentage, le montant du règlement et la ligne d'équilibrage ne peuvent pas être, tous
les trois, égaux à 0
• -4089, Dans le cas d'une ligne d'équilibrage, le pourcentage du règlement doit être égal à 0
• -4090, Dans le cas d'une ligne d'équilibrage, le montant en devise du règlement doit être égal à 0
• -4091, Dans le cas d'une ligne d'équilibrage, le montant du règlement doit être égal à 0
• -4092, Le pourcentage et le montant en devise du règlement ne peuvent pas être, tous les deux, > 0
• -4093, Le pourcentage et le montant du règlement ne peuvent pas être, tous les deux, > 0
• -4094, Pour une échéance, le libellé doit être vide
• -4095, Pour un acompte, le champ échéance réglée doit être à non
• -4096, Pour un acompte, le montant du règlement ne peut pas être égal à 0
• -4097, Pour un acompte, le pourcentage du règlement doit être égal à 0
• -4098, Pour un acompte, le champ ligne d'équilibrage doit être à 0
• -4099, Pour un acompte, le mode de règlement d'une échéance doit être égal à 0
• -4100, Le libellé du règlement est de longueur > 35 caractères
• -4101, Le type de règlement doit être compris entre 0 et 2
• -4102, La date du règlement est obligatoire ou la date n'est pas valide
• -4103, Le numéro de pièce est vide ou n'est pas en alphanumérique et majuscule ou est de lon-
gueur > 8 caractères
• -4104, Le type de document n'existe pas, n'est pas valide, ou n'est pas en accord avec le domaine
de document
• -4105, Le domaine doit être du type achat ou vente
• -4106, Suppression impossible pour ce type de document
• -4107, Ajout, modification et suppression impossible, car il existe un enregistrement dans le fichier
des liens entre les règlements et les échéances ayant le même domaine, le même type et le même
numéro de pièce
• -4108, Le numéro de dépôt mouvementé ne peut pas être modifié
• -4109, Le numéro interne DL_NOREF ne peut pas être modifié
• -4110, Le type de prix (HT ou TTC) ne peut pas être modifié
• -4111, Le conditionnement ne peut pas être modifié
• -4112, La référence fournisseur ne peut pas être modifiée
• -4113, La gamme 2 ne peut pas être modifiée
• -4114, La gamme 1 ne peut pas être modifiée
• -4115, Le champ ligne de type énuméré de gamme ne peut pas être modifié
• -4116, Le type de taxe 2 ne peut pas être modifié
• -4117, Le type de taux de taxe 2 ne peut pas être modifié
• -4118, Le taux de taxe 2 ne peut pas être modifié
• -4119, Le type de taxe 1 ne peut pas être modifié
• -4120, Le type de taux de taxe 1 ne peut pas être modifié
• -4156, Ce fournisseur ne fait pas parti de la liste des fournisseurs de cet article
• -4157, Le glossaire n'existe pas ou n'est pas associé à un document
• -4158, L'entête de document n'existe pas
• -4159, L'article doit être non suivi en stock (F_ARTICLE.AR_SUIVISTOCK = 0) ou suivi au CMUP
F_ARTICLE.AR_SUIVISTOCK = 2)
• -4160, Le champ DL_PUTTC ne peut pas être modifié pour les documents HT ou ayant une devise
• -4161, Le type du prix (TTC ou HT) doit être en HT pour une ligne faisant référence à aucun article
• -4162, Le représentant doit être égal à 0
• -4163, Le type du prix (TTC ou HT) doit être en HT pour un document de type achat
• -4165, Le poids brut et le poids net doivent être à 0 pour une ligne avec une remise de pieds ou une
remise exceptionnelle
• -4167, La quantité livrée doit être égale à 0 pour un document de type devis ou commande
• -4169, La quantité colisée doit être > 0
• -4170, La quantité doit être > 0
• -4171, La désignation est de longueur > 69 caractères
• -4172, L'article est vide ou n'est pas de type C39 ou est de longueur > 18
• -4173, Une remise de pied ne peut pas être combinée avec une remise exceptionnelle
• -4174, Ligne de type nomenclature doit être égale à 0
• -4175, Les champs DL_DateBL et DO_Date doivent être égaux pour les documents ne provenant
pas d'une transformation
• -4176, Les champs DL_DateBC et DO_Date doivent être égaux pour les documents ne provenant
pas d'une transformation
• -4177, Le numéro de pièce et la date du bon de livraison doivent être àvide
• -4178, Le numéro de pièce et la date du bon de commande doivent être àvide
• -4179, La date du document est obligatoire ou la date n'est pas valide
• -4180, Le numéro du Tiers est vide ou n'est pas en alphanumérique et majuscule ou est de longueur
> 17 caractères
• -4181, Le numéro de pièce est vide ou n'est pas en alphanumérique et majuscule ou est de lon-
gueur > 8 caractères
• -4182, Le type de document n'existe pas, n'est pas valide, ou n'est pas en accord avec le domaine
de document
• -4183, Le domaine de la ligne de document doit être compris entre 0 et 2
• -4184, La pièce est utilisée dans le fichier EFINANCIEREC (donc non supprimable)
• -4185, Le taux d'escompte ne peut pas être modifié, car des règlements sont associés à ce docu-
ment
• -4186, Suppression impossible de ce type de document
• -4187, Suppression impossible, car des règlements sont associés à ce document
• -4188, Suppression impossible, car des lignes sont associées à ce document
• -4189, Le Tiers payeur ne peut pas être modifié, car des règlements sont associés à ce document
• -4190, Le taux de conversion en devise ne peut pas être modifié, car des règlements sont associés
à ce document
• -4191, La devise ne peut pas être modifiée, car des règlements sont associés à ce document
• -4192, La devise ne peut pas être modifiée, car des lignes sont associées à ce document
• -4193, Le dépôt de stockage ne peut pas être modifié, car des lignes sont associées à ce document
• -4194, AR_RefCompose doit être vide si l'article n'est pas à nomenclature commerciale composant
ou composé pour les documents de vente
• -4195, La catégorie tarifaire ne peut pas être modifiée, car des lignes sont associées à ce document
• -4196, DL_Valorise n'est pas modifiable
• -4197, Le tiers ne peut pas être modifié
• -4198, La date du document ne peut pas être modifiée
• -4199, Le numéro de pièce ne peut pas être modifié
• -4200, Le type de document ne peut pas être modifié
• -4201, Le domaine du document ne peut pas être modifié
• -4202, Le compte analytique n'existe pas dans le plan affaire, ou n'est pas du type détail
• -4203, Le dépôt de livraison n'existe pas ou n'appartient pas à ce tiers
• -4204, Le dépôt de stockage n'existe pas
• -4205, Ce représentant n'existe pas
• -4206, Ce numéro de pièce existe déjà dans un autre document
• -4207, Le type de mouvement d'une ligne de document n'est pas modifiable
• -4208, Le dépôt de livraison doit être égal à 0
• -4209, Le représentant doit être égal à 0
• -4210, Le dépôt de stockage doit être différent de 0
• -4211, Un bon de livraison par facture doit être compris entre 0 et 1
• -4212, Un bon de livraison par facture doit être égal à 0
• -4213, Le Tiers payeur est vide ou n'est pas en alphanumérique et majuscule ou est de longueur >
17 caractères pour les documents d'achat ou de vente, ou n'est pas vide pour les documents de type
stock
• -4214, Le taux de conversion doit être égal à 0
• -4215, Le numéro du tiers est vide ou n'est pas en alphanumérique et majuscule ou est de longueur
> 17 caractères
• -4216, La date du document est obligatoire ou la date n'est pas valide
• -4217, Le numéro de pièce est vide ou n'est pas en alphanumérique et majuscule ou est de lon-
gueur > 8 caractères
• -4218, Le type de document n'existe pas, n'est pas valide, ou n'est pas en accord avec le domaine
de document
• -4220, Suppression impossible car existe dans F_ARTGLOSS
• -4221, Un glossaire associé à une ligne de document est non modifiable
• -4222, Le domaine du glossaire n'est pas modifiable
• -4255, La référence article est vide ou n'est pas de type C39 ou est de longueur > 18 caractères
• -4256, Suppression impossible car existe dans F_TARIFCOND
• -4257, La référence article n'est pas modifiable
• -4258, Le numéro interne n'est pas modifiable
• -4259, La quantité de conditionnement existe déjà
• -4260, L'article est à gamme, donc on ne peut avoir de conditionnement
• -4261, L'article ne possède pas de conditionnement
• -4262, Le numéro interne de l'élément de conditionnement doit être à 0 en ajout
• -4263, La quantité de l'énuméré de conditionnement doit être > 0
• -4264, L'énuméré de conditionnement est vide ou est de longueur > 21 caractères
• -4265, La référence article est vide ou n'est pas de type C39 ou est de longueur > 18 caractères
• -4266, L'article ne peut pas appartenir à sa nomenclature
• -4267, La référence article n'est pas modifiable
• -4268, La composante existe déjà
• -4269, L'énuméré de gamme 2 n'existe pas dans F_ARTGAMME
• -4270, L'énuméré de gamme 1 n'existe pas dans F_ARTGAMME
• -4271, L'énuméré de gamme 2 est non nul alors que la composante n'est pas à double gamme
• -4272, La composante est à double gamme alors que l'énuméré de gamme 2 est nul
• -4273, L'énuméré de gamme 1 est non nul alors que la composante n'est pas à gamme
• -4274, La composante est à gamme alors l'énuméré de gamme 1 est nul
• -4276, La profondeur pour une nomenclature ne peut être >= 10
• -4277, Une nomenclature ne peut contenir un article contenant lui même l'article principal
• -4278, S'il y a un énuméré de gamme 2, l'énuméré de gamme 1 doit être présent
• -4279, La quantité d'articles de détail dans l'article principal doit être non nul
• -4280, La référence de l'article de détail n'est pas de type C39 ou est de longueur > 18 caractères
• -4281, La référence article est vide ou n'est pas de type C39 ou est de longueur > 18 caractères
• -4282, Le fournisseur, le client ou la catégorie tarifaire n'est pas modifiable
• -4283, La référence article n'est pas modifiable
• -4284, Cette tranche de tarification existe déjà
• -4285, La catégorie tarifaire n'existe pas dans F_ARTCLIENT
• -4286, Le Tiers n'existe pas dans F_ARTFOURNISS ou F_ARTCLIENT
• -4287, Le Tiers n'existe pas dans la base comptable
• -4288, Le type de la remise doit être compris entre 0 et 2
• -4289, Le Tiers n'est pas en majuscule (avec longueur <= 17 car), ou, la catégorie tarifaire n'est pas
de longueur = 3 car ou la première lettre <> 'a' ou 2 derniers caractères non numériques (et compris
entre 1 et 32)
• -4290, La borne supérieure de la remise doit être <> 0
• -4291, La référence article est vide ou n'est pas de type C39 ou est de longueur > 18 caractères
• -4292, La référence article, le fournisseur ou la catégorie tarifaire, les numéros des énumérés de
gamme 1 et 2 existent déjà
• -4293, Le numéro de l'énuméré de gamme 2 n'est pas modifiable
• -4294, Le numéro de l'énuméré de gamme 1 n'est pas modifiable
• -4295, Le tiers ou la catégorie tarifaire n'est pas modifiable
• -4296, La référence article n'est pas modifiable
• -4297, La catégorie tarifaire n'existe pas dans F_ARTCLIENT
• -4298, Le client ou le fournisseur n'existe pas dans F_ARTCLIENT ou F_ARTFOURNISS
• -4299, La gamme 2 n'existe pas
• -4300, La gamme 1 n'existe pas
• -4301, L'article est à double gamme, le numéro interne de gamme 2 doit donc être non nul
• -4302, L'article ne possède pas de gamme 2, alors que le numéro interne de gamme2 est non nul
• -4303, L'article n'est pas à gamme
• -4304, Le tiers n'existe pas dans la base comptable
• -4305, Le client ou le fournisseur n'est pas en majuscule (avec longueur <= 17 car), ou la catégorie
tarifaire n'est pas de longueur = 3 car ou la première lettre <> 'a' ou les 2 derniers caractères non
numériques (et compris entre 1 et 32)
• -4307, La gamme 1 doit être renseignée : valeur non nulle
• -4308, La référence article est vide ou n'est pas de type C39 ou est de longueur > 18 caractères
• -4309, Suppression impossible car l'article existe dans F_TARIFCOND
• -4310, Suppression impossible car l'article existe dans F_TARIFQTE
• -4311, Suppression impossible car l'article existe dans F_TARIFGAM
• -4312, Modification impossible de la gamme car un client ou une catégorie tarifaire existe déjà dans
F_TARIFQTE
• -4313, La catégorie tarifaire n'est pas modifiable
• -4314, Le client n'est pas modifiable
• -4315, La référence article n'est pas modifiable
• -4316, La catégorie tarifaire doit être unique
• -4317, Le client doit être unique
• -4318, S'il y a une devise, le coefficient doit être nul
• -4319, S'il y a une devise, il ne doit y avoir aucun mode d'arrondi
• -4320, S'il y a une devise, le prix doit être HT
• -4321, Si aucune devise, le prix de vente en devise doit être nul
• -4322, Si on a une devise, le prix de vente doit être nul
• -4323, On ne peut avoir à la fois une catégorie tarifaire et un client
• -4324, Impossible d'avoir une gamme montant ou quantité sans avoir de remise à gamme
• -4325, Impossible d'avoir une remise à gamme sans avoir de gamme de type quantité ou montant
• -4326, On ne peut avoir une remise générale et une tarification quantité ou montant
• -4327, La référence article est vide ou n'est pas de type C39 ou est de longueur > 18 caractères
• -4328, Modification impossible de EG_CHAMP car existe dans F_TARIFQTE
• -4329, Suppression impossible car existe dans F_TARIFQTE
• -4330, Suppression impossible car existe dans F_TARIFGAM
• -4331, Suppression impossible du fournisseur principal
• -4332, Modification impossible du fournisseur principal
• -4333, Modification impossible du fournisseur
• -4334, Modification impossible de la référence article
• -4335, La référence fournisseur doit être unique
• -4336, Le fournisseur doit être unique
• -4337, Impossible d'avoir un prix d'achat en devise non nul sans avoir devise
• -4338, Impossible d'avoir une devise avec un prix d'achat non nul
• -4339, Impossible d'avoir une gamme montant ou quantité sans avoir de remise à gamme
• -4340, Impossible d'avoir une remise à gamme sans avoir de gamme
• -4341, On ne peut avoir une remise générale et une remise à gamme
• -4342, La quantité minimale de commande doit être > colisage fournisseur
• -4343, La référence fournisseur n'est pas de type C39 est de longueur > 18 caractères
• -4344, Le fournisseur est vide, est de longueur > 17 caractères ou n'est pas en majuscule
• -4345, La référence article est vide ou n'est pas de type C39 ou est de longueur > 18 caractères
• -4346, Changement du type de gamme alors que l'article n'est pas à double gamme
• -4347, L'article n'est pas à gamme
• -4348, L'énuméré existe déjà
• -4349, Modification impossible du type de gamme ou suppression impossible, car l'énuméré est uti-
lisé dans F_TARIFGAM
• -4350, Modification impossible du type de gamme ou suppression impossible, car l'énuméré est uti-
lisé dans F_GAMSTOCK
• -4351, Modification impossible du type de gamme ou suppression impossible, car l'énuméré est uti-
lisé dans F_DOCLIGNE
• -4352, Modification impossible du type de gamme ou suppression impossible, car l'énuméré est uti-
lisé dans F_NOMENCLAT
• -4353, La référence article est non modifiable
• -4354, Numéro interne non modifiable
• -4355, On ne peut avoir 2 énumérés de gamme avec le même nom
• -4356, Le numéro interne doit être égal à 0 en ajout
• -4357, La référence article est vide ou n'est pas de type C39 ou est de longueur > 18 caractères
• -4389, L'article est vide ou n'est pas de type C39 ou est de longueur > 18
• -4390, Le code famille n'est pas modifiable
• -4391, Le tarif est unique
• -4392, La remise générale ne doit pas être à 0
• -4393, Le tiers est vide ou n'est pas de type alphanumérique et majuscule ou est de longueur > 17
caractères
• -4394, La famille est vide ou n'est pas de type alphanumérique et majuscule ou est de longueur > 10
caractères
• -4395, Domaine de validité du champ incorrect, veuillez vous référer à la documentation.
• -4396, L'article n'existe pas
• -4397, Le fournisseur n'existe pas
• -4398, Le client n'existe pas
• -4399, La famille n'existe pas
• -4400, Différence entre Qté et QtéRestante.
• -4401, En ajout IM_DotEco, IM_DotFiscal, IM_TotCession doivent être nulle.
• -4402, En ajout l'immobilisation ne peut pas faire référence à une écriture.
• -4403, En ajout MajCpta doit être 0.
• -4404, En ajout TypeCession doit être sur CessionNulle.
• -4405, En ajout IM_Etat incorrect.
• -4406, L'immobilisation existe déjà.
• -4407, L'immobilisation n'existe pas.
• -4408, Il existe un bloc-notes pour cette immobilisation donc non supprimable.
• -4409, Le bloc note existe déjà.
• -4410, L'énuméré statistique n'existe pas.
• -4411, L'énuméré statistique existe.
• -4412, Le fichier des lieux de biens doit contenir un lieu principal.
• -4413, Le fichier des lieux de biens doit contenir un lieu principal.
• -4414, Le lieu n'existe pas.
• -4415, Le lieu existe déjà.
• -4416, En ajout LI_No doit être 0.
• -4417, Le compte analytique est déjà rattaché à cette ventilation analytique.
• -4418, Suppression impossible, il existe des enregistremetns dans FamAnal ou dans ImmoAnal.
• -4419, Champs non valide pour une famille ou une immobilisation non suivie.
• -4420, Taux modifiable qu'en exceptionnel.
• -4421, Seul le taux peut être modifié.
• -4422, Champs non valide pour une famille de type total.
• -4423, La nature de bien n'est plus modifiable s'il existe des immobilisations ou des FAMAMORT
pour la famille.
• -4424, FA_CodeFamille et FA_Type ne sont jamais modifiables.
• -4425, Pour une famille de type TOTAL seul l'intitulé est modifiable.
• -4426, La famille n'existe pas.
• -4427, La famille existe déjà.
• -4428, Coeff. nul en mode dégressif.
• -4429, Coeff. non nul en mode autre que dégressif.
• -4430, Si la famille n'est pas suivie en amortissement les 2 durées doivent être nulles.
• -4431, CO_NO fait référence à un collaborateur inexistant, ou doit être égal à 0 pour une utilisation
sans la gestion commerciale
• -4432, DE_NO fait référence à un dépôt inexistant, ou doit être égal à 0 pour une utilisation sans la
gestion commerciale
• -4433, L'écriture générale ne peut être supprimée car elle est rapprochée
• -4434, Ce compte analytique ne peut être utilisé par une écriture analytique car le compte a l'option
'Mise en sommeil' de coché
• -4435, Le compte tiers de contrepartie n'existe pas
• -4436, Le nombre de décimales des dotations Quantité du poste budgétaire est supérieure à celui
paramètré dans la base (A Propos de)
• -4437, Le compte tiers de contrepartie n'existe pas
• -4438, Le compte tiers de contrepartie est de longueur > 13 caractères
• -4439, Cet élément de banque est utilisé dans un extrait bancaire, il ne peut donc pas être supprimé
• -4440, Ce RIB existe déjà
• -4441, Champs non valides pour une famille ou une immobilisation soumise à la taxe profession-
nelle.
• -4442, Le journal est utilisé dans un modèle analytique, il ne peut donc pas être supprimé.
• -4443, Le code de taxe doit être unique
• -4444, On ne peut modifier la date de création du compte de tiers
• -4445, La suppression d'un compte analytique utilisé dans les écritures reporting est impossible
• -4446, Le nombre de décimales des dotations Quantité pour les répartitions du compte analytique
est supérieure à celui paramètré dans la base (A Propos de)
• -4447, La répartition Quantité de type Equilibre ou % doit être égale à 0
• -4448, On ne peut modifier la date de création du compte analytique
• -4449, Le nombre de décimales des dotations Quantité du compte analytique est supérieure à celui
paramètré dans la base (A Propos de)
• -4450, La répartition Quantité de type Equilibre ou % doit être égale à 0
• -4451, Le nombre de décimales des dotations Quantité pour les répartitions du compte est supé-
rieure à celui paramètré dans la base (A Propos de)
• -4452, Le nombre de décimales des dotations Quantité du compte est supérieure à celui paramètré
dans la base (A Propos de)
• -4453, La suppression d'un compte général utilisé dans les écritures reporting est impossible
• -4454, On ne peut modifier la date de création du compte général
• -4455, Affectation d'un budget de type autre que détail
• -4456, Le champ N_ANALYTIQUE doit être à 0 pour un modèle de grille de type général, ou doit
être compris entre 1 et 10 pour un modèle de type analytique
• -4457, Pour modifier le compte général principal d'un tiers, ce compte général doit d'abord être
associé à ce tiers dans la table F_COMPTETG
• -4458, Suppression impossible car il existe des enregistrements concernant ce tiers dans la table
F_COMPTETG
• -4459, L'écriture doit être non clôturée
• -4460, Cet énuméré statistique existe déjà
• -4461, L'intitulé est vide ou de longueur > 21
• -4462, Ce registre taxe existe déjà
• -4463, Le code journal analytique est utilisé dans les écritures d'OD et reports analytiques
• -4464, Le compte de Taxe (1 à 5) fait référence à un compte de taxe incorrect
• -4465, Le numéro de compte tiers fait référence à un tiers incorrect
• -4466, Le numéro interne n'est pas modifiable
• -4467, Ce registre révision existe déjà
• -4469, Le code journal analytique n'est pas modifiable
• -4470, Pour TA_TTAUX[i]=0, le nombre de décimales de RT_MONTANT[i] est incorrect (montant),
pour TA_TTAUX[i]=1, le nombre de décimales de RT_MONTANT[i] ne peut pas être > 4, pour TA_T-
TAUX[i]=2, le nombre de décimales de RT_MONTANT[i] est incorrect (montant)
• -4471, Pour TA_TTAUX[i]=0, le nombre de décimales de RT_BASE[i] est incorrect (montant), pour
TA_TTAUX[i]=1, RT_BASE[i] doit être à 0, pour TA_TTAUX[i]=2, le nombre de décimales de
RT_BASE[i] est incorrect.
• -4472, Le nombre de décimales de TA_TAUX[i=1 à 5] ne peut pas être > 4 (double)
• -4473, La date de début est supérieure à la date de fin
• -4474, EC_NO utilisé dans REGTAXE (donc non supprimable)
• -4475, EC_NO utilisé dans REGREVISION (donc non supprimable)
• -4476, EC_NO utilisé dans ECRITUREA (donc non supprimable)
• -4477, On ne peut ajouter une écriture de type centralisatrice (EC_Ctype=1) avec EcritureCAddin-
Journal, car cela est gérée automatiquement
• -4478, Le champ EC_CLOTURE n'est pas modifiable
• -4479, Le champ EC_CTYPE n'est pas modifiable
• -4480, Le numéro de ligne doit être égal à 1
• -4481, Le numéro de ligne ne doit pas dépasser 999
• -4482, Le numéro de ligne doit suivre le numéro de ligne de la précédente écriture analytique
• -4483, Le jour, la pièce, le compte, le sens ou le montant de l'écriture a été modifié. L'écriture doit
donc être enregistrée comme non imprimée (EC_Impression=0)
• -4779, Le compte général est utilisé dans le fichier des taxes (donc non supprimable)
• -4780, Le type du compte général n'est pas modifiable
• -4781, Le compte général n'est pas modifiable
• -4782, Le compte général existe déjà
• -4783, Le compte reporting n'existe pas ou n'est pas de type détail
• -4784, La nature, le report, le compte reporting, le raccourci, les options doivent être à 0 pour un
compte général totalisateur
• -4785, Le raccourci du compte général n'est pas du type alphanumérique et en majuscule > 6
• -4786, Le numéro du compte reporting n'est pas du type alphanumérique et en majuscule ou de
longueur > 13
• -4787, L'intitulé du compte général est vide ou de longueur > 35
• -4788, Le numéro de compte général est à vide ou n'est pas de type compte
• -4789, Domaine de validité du champ incorrect, veuillez vous référer à la documentation.
• -4790, Ce raccourci existe déjà dans le fichier des libellés
• -4791, Ce raccourci existe déjà dans le fichier des modèles de grille
• -4792, Ce raccourci existe déjà dans le fichier des tiers
• -4793, Ce raccourci existe déjà dans le fichier des comptes analytiques
• -4794, Ce raccourci existe déjà dans le fichier des comptes généraux
• -4795, Ce raccourci existe déjà dans le fichier des pièces générales
• -4796, Erreur de longueur de compte reporting
• -4797, Erreur de longueur de compte EDI
• -4798, Erreur de longueur de compte général
• -4799, Erreur de longueur de compte analytique
• -4800, L'intitulé de la gamme est vide (doit exister dans P_GAMME)
• -4801, Le code journal est utilisé dans le fichier EFINANCIEREC (donc non supprimable)
• -4802, DL_QTEBL n'est pas modifiable si DL_PIECEBL est non vide (document provient du trans-
formation)
• -4803, DL_QTEBC n'est pas modifiable si DL_PIECEBC est non vide (document provient du trans-
formation)
• -4804, La quantité n'est pas modifiable dans les Bons de fabrication
• -4805, Dans les documents de stock, l'article doit être suivi en stock pour les documents <> (Bon de
fabrication ou Préparation de fabrication)
• -4806, Une ligne existe déjà avec ce numéro dans ce document
• -4807, AL_PRIXRU n'est pas modifiable dans les lignes d'abonnement
• -4808, AL_CMUP n'est pas modifiable dans les lignes d'abonnement
• -4809, DL_PRIXRU n'est pas modifiable
• -4810, Le CMUP n'est pas modifiable dans la ligne
• -4811, DL_PIECEBL n'est pas en alphanumérique majuscule ou est de longueur > 8 caractères
• -4812, DL_PIECEBC n'est pas en alphanumérique majuscule ou est de longueur > 8 caractères
• -4813, Le domaine du document doit être compris entre 0 et 2
• -4814, Le poids brut et le poids net doivent être à 0 avec une remise de pieds ou une remise excep-
tionnelle
• -4815, La quantité colisée doit être > 0
• -4816, La quantité doit être > 0
• -4817, La désignation est de longueur > 69 caractères
• -4818, Le numéro de dépôt mouvementé ne peut pas être modifié
• -4819, Le type de prix (HT ou TTC) ne peut pas être modifié
• -4820, Le conditionnement ne peut pas être modifié
• -4821, La référence fournisseur ne peut pas être modifiée
• -4822, Le type de taxe 3 ne peut pas être modifié
• -4823, Le type de taux de taxe 3 ne peut pas être modifié
• -4824, Le taux de taxe 3 ne peut pas être modifié
• -4825, Le type de taxe 2 ne peut pas être modifié
• -4826, Le type de taux de taxe 2 ne peut pas être modifié
• -4827, Le taux de taxe 2 ne peut pas être modifié
• -4828, Le type de taxe 1 ne peut pas être modifié
• -4829, Le type de taux de taxe 1 ne peut pas être modifié
• -4830, Le taux de taxe 1 ne peut pas être modifié
• -4831, La référence de l'article ne peut pas êtremodifiée
• -4832, La remise exceptionnelle ne peut pas être modifiée
• -4833, La remise de pied ne peut pas être modifiée
• -4834, Le numéro de ligne ne peut pas être modifié
• -4835, Pour un document en devise, le type de prix (HT ou TTC) doit être en HT
• -4836, Le prix unitaire en devise doit être égal à 0
• -4837, La gamme 2 n'existe pas
• -4838, La gamme 1 n'existe pas
• -4839, La gamme 2 ne peut pas être vide car l'article possède une gamme 2
• -4840, L'intitulé du conditionnement est vide (doit exister dans P_CONDITIONNEMENT)
• -4841, DL_TNOMENCL n'est pas modifiable
• -4842, Suppression impossible, il existe des immobilisations (F_FAMILLE et F_LIEU).
• -4843, Champ non modifiable(Dans FamAnal, ImmoAnal, ImmoNote, Lieu, EnumStatImm).
• -4844, Référence à un compte tiers inexistant.
• -4845, Référence à un compte analytique inexistant.
• -4846, Référence à un compte général inexistant ou qui n'est pas de type détail.
Avant propos
Généralement, les erreurs ODBC sont obtenues au moment de la connexion ou lors des opérations d’écri-
ture. Il est extrêmement rare d’obtenir une erreur ODBC en lecture, mis à part un problème lié à une faute
de syntaxe SQL.
Vous trouverez ci-dessous les principaux codes erreurs Sage rencontrés lors des opérations de connexion
et d’écriture.
Cette erreur indique que la version de Sage 100cloud Kit ODBC que vous utilisez n’est pas compatible avec
la base Sage que vous essayez d’ouvrir.
Note : Les informations nécessaires à l’écriture dans chaque table vous sont fournies dans le pre-
mier manuel sur la structure des tables des bases de données Sage 100cloud. Veuillez vous référer
à ce manuel pour connaître les différents champs obligatoires en insertion et les valeurs à renseigner
pour ne pas avoir ce message d’erreur.
Introduction
Il existe différentes méthodes d’accès aux données sous Visual Basic :
• ADO (ActiveX Data Objects), généralise l’accès aux données via ODBC (OLE DB).
• DAO (Data Access Object), utilisée principalement par Access (Moteur jet),
Les objets d’accès aux données ADO sont les plus récents. Ils utilisent la technologie ActiveX, ce qui per-
met leur utilisation dans de nombreuses applications. Si vous le pouvez, il est préférable d’utiliser les ADO
pour accéder aux bases ODBC, et en particulier avec les bases de données Sage 100cloud.
Les objets d’accès aux données DAO sont livrés en standard avec Access, Excel et Visual Basic. Ces objets
ne sont pas optimisés pour l’accès aux données ODBC.
Vous trouverez ci-dessous des exemples d’utilisation de VB avec ces différents objets d’accès aux don-
nées.
Les ADO
Pour utiliser les objets d’accès aux données des ADO, votre application doit utiliser la librairie “ Microsoft
OLE DB ActiveX Data Objects 1.0 Library”, ou une autre librairie plus récente des ADO (Microsoft OLE DB
ActiveX Data Objects x.xx Library).
ActiveX Data Objects (ADO) est une collection d’objets qui permettent l’accès aux données de tout type.
Ces objets sont généralement utilisés pour l’accès aux bases de données en Internet ou Intranet (utilisation
d’Active Server Pages avec IIS). L’intérêt d’un objet ActiveX est qu’il peut être employé à partir de n’importe
quelle application capable d’utiliser les objets OLE (Delphi ou C entre autre).
Connexion Déconnexion
La connexion à une base de données, via ODBC, est réalisée à l’aide de l’objet Connection. Ce dernier
prend en paramètre une chaîne de connexion ODBC, le nom de l’utilisateur et son mot de passe. La chaîne
de connexion permet d’identifier le nom de la source de données à utiliser (DSN=), et elle peut aussi iden-
tifier le nom et le mot de passe à utiliser, si ces derniers ne sont pas renseignés dans les deuxième et troi-
sième paramètres.
Remarques :
• Même si le nom et le mot de passe ne sont pas renseignés, aucune boîte de dialogue de connexion
Sage n’apparaîtra.
• Contrairement aux DAO, la connexion ODBC est réellement rompue après l’emploi de la méthode
Close sur l’objet Connection.
Exemple
‘Exemple de connexion et de Déconnexion. Source de données utilisée > ComptaC_Bijou
Dim cnxCPTA As ADODB.Connection ‘Identifiant de la connexion ODBC
Dim strConnect as String ‘Chaîne de connexion ODBC
Dim strUID as String ‘Nom utilisé pour la connexion à la base
Recherche d’enregistrements
La recherche d’enregistrements revient à exécuter une requête SQL de sélection. L’exécution d’une re-
quête est réalisée en deux phases :
• Définition de la requête (syntaxe SQL et paramètres) : utilisation de l’objet Command
• Exécution de la requête et récupération des enregistrements : utilisation de l’objet Recordset
Remarque :
• La requête est directement envoyée au driver ODBC.
Exemple
‘Exemple d’exécution de requête de sélection et de parcours des enregistrements
‘Recherche de tous les clients dont le code commence par C
‘L’objet Connection cnxCPTA a été ouvert
Dim cmdSQL As ADODB.Command‘Objet contenant la définition de la requête
Dim rsClient As ADODB. Recordset‘Objet contenant le résultat de la requête
Dim strSQL as String ‘Variable contenant la requête SQL
‘Syntaxe SQL
‘Construction de la requête SQL de sélection
‘Critères :
‘ CT_Type = 0 > sélection des clients
‘ CT_Num like ‘C%’ > Sélection des codes clients commençant par C
strSQL = "Select CT_Num, CT_Intitule From F_CompteT " & _
"Where CT_Type = 0 And CT_Num Like ‘C%’ "
‘Création de l’objet ActiveX Command
Set cmdSQL = New ADODB.Command
‘Création de l’objet ActiveX Recordset
Set rsClient = New ADODB.Recordset
‘Syntaxe SQL
‘Construction de la requête SQL de modification
‘Critères :
‘ CT_Type = 0 > sélection des clients
‘ CT_CodePostal like ‘57%’ > Sélection des codes clients dont le code département commence par 57
‘Valeur à modifier
‘ CO_No = 3 > le représentant est Gendron (identifié par 3 pour plus d’info, voir la table F_Collabora-
teur)
strSQL = "Update F_CompteT " & _
" Set CO_No = 3 " & _
" Where CT_Type = 0 And CT_CodePostal like ‘57%’ "
‘Exécution de la requête
cnxCPTA.Execute strSQL
Tout accès ODBC via les ADO peut provoquer une erreur ODBC. Chaque erreur génère un ou plusieurs
objets Error qui sont placés dans la collection Errors. Pour connaître l’erreur rencontrée, il suffit de parcourir
l’ensemble de la collection Errors à l’aide de l’objet Error. L’ensemble des objets Error de la collection Errors
ne décrit qu’une seule erreur : la dernière erreur obtenue.
‘Si aucune erreur n’est rencontrée, il n’est pas nécessaire d’effectuer le traitement d’erreur > sortie du
‘programme (EXIT SUB pour une procédure, EXIT FUNCTION pour une fonction)
Exit Sub
Les DAO
Pour utiliser les objets d’accès aux données des DAO, votre application doit utiliser la librairie “ Microsoft
DAO 2.5/.35 compatibility Library ”, ou une autre librairie plus récente des DAO (Microsoft DAO x.xx Com-
patibility Library).
Connexion Déconnexion
La connexion à une base de données, via ODBC, est réalisée à l’aide de la méthode OpenDatabase ().
Cette dernière prend en paramètre une chaîne de connexion ODBC. Cette chaîne permet d’identifier la
source de données à exploiter, ainsi que le nom et le mot de passe à utiliser.
Remarques :
• Pour ne pas voir apparaître la boîte de connexion Sage, il est impératif de renseigner le nom et le
mot de passe dans la chaîne de connexion (paramètres UID et PWD).
• Microsoft Jet ne rompt pas réellement la connexion ODBC lors de l’emploi de la méthode Close. La
connexion reste toujours active, ce qui peut être gênant lors d’une utilisation avec les versions de
Sage 100cloud Kit ODBC inférieure à la version 8.0 (dans le cas d’une consolidation de société par
exemple). En effet, ces versions de Sage 100cloud Kit ODBC ne permettent pas l’ouverture
simultanée de plusieurs bases de même type simultanément (ex : 2 bases comptables). Etant donné
que Jet ne rompt pas la connexion, il sera donc impossible de récupérer, au sein d’un même
programme, des données provenant de plusieurs fichiers de même type (ex : 2 fichiers comptables).
• Par défaut, le moteur Jet rompt les connexions ODBC au bout de 10 mn (600 secondes) si aucune
requête n’est exécutée. Ce paramètre peut être changé dans la base de registre.
• Jet 3.0 (VB 4.0, Office 95)
• Clé : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.0\Engines\ODBC
• Entrée : ConnectionTimeout Type : DWord Valeur par défaut : 600.
• Jet 3.5 (VB 5.0, Office 97)
• Clé : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\ODBC
• Entrée : ConnectionTimeout Type : DWord Valeur par défaut : 600.
Exemple
‘Exemple de connexion et de Déconnexion. Source de données utilisée > ComptaC_Bijou
Dim dbCPTA As DAO.Database ‘Identifiant de la base de données
Dim strConnect as String ‘Chaîne de connexion
dbCPTA.Close
‘Destruction de l’objet
Set dbCPTA = Nothing
Recherche d’enregistrements
Pour optimiser les temps de traitement, il est préférable d’exécuter une requête de sélection. En effet, les
méthodes FindFirst et FindNext ne permettent pas d’utiliser les index des bases. La recherche d’un enre-
gistrement revient, dans ce cas, à parcourir tous les enregistrements et à effectuer une comparaison sur les
champs.
Remarques :
• La Méthode Seek ne peut pas être utilisée sur une table ODBC. En effet, cette méthode est utili-
sable uniquement sur un Recordset de type TABLE (une table ODBC est du type DYNASET ou
SNAPSHOT)
• Normalement, une requête DAO passe par le moteur Jet avant d’être envoyée au driver ODBC. La
requête envoyée à Jet par VB n’est pas une vraie requête SQL, c’est une requête “ Access ” (syn-
taxe particulière). Si vous désirez utiliser la syntaxe SQL, vous devez utiliser le paramètre
dbSQLPassThrough. Ce paramètre permet d’envoyer une requête SQL directement au driver ODBC,
sans passer par le moteur Jet.
Exemple
‘Exemple d’exécution de requête de sélection et de parcours des enregistrements
‘Recherche de tous les clients dont le code commence par C
‘L’objet Database dbCPTA a été ouvert
Dim rsClient as DAO.Recordset ‘Objet contenant le résultat de la requête
Dim strSQL as String ‘Variable contenant la définition de la requête
‘Syntaxe SQL
‘Construction de la requête SQL de sélection
‘Critères :
‘ CT_Type = 0 > sélection des clients
‘ CT_Num like ‘C%’ > Sélection des codes clients commençant par C
strSQL = "Select CT_Num, CT_Intitule From F_CompteT " & _
"Where CT_Type = 0 And CT_Num Like ‘C%’ "
‘Exécution de la requête > Utilisation du paramètre dbSQLPassThrough pour l’envoyer directement à
ODBC
Set rsClient = dbCPTA.OpenRecordset (strSQL, dbSQLPassThrough)
‘Parcours des enregistrements
While Not rsClient.EOF
‘Affichage du code et de l’intitulé du client dans la fenêtre d’Exécution
Debug.Print rsClient ("CT_Num"), rsClient ("CT_Intitule")
‘Passe à l’enregistrement suivant
rsClient.MoveNext
Wend
‘Fermeture de l’objet RecordSet
rsClient.Close
‘Destruction de l’objet
set rsClient = Nothing
Il n’est pas recommandé d’utiliser les méthodes “ classiques ” d’écriture des DAO (méthodes Edit, AddNew
et Update). L’écriture avec ces méthodes est plus longue que l’envoi d’une requête SQL d’écriture directe-
ment au driver ODBC (sans passer par Jet). En effet, lors de l’emploi des méthodes Edit ou AddNew, Jet
transforme les instructions en requête SQL lors de l’exécution de la méthode Update. Le fait d’envoyer di-
rectement la requête SQL au driver ODBC évite cette phase de transformation (et le temps d’exécution du
code relatif à l’écriture). De plus, ces méthodes d’écriture ne peuvent pas être utilisées si Jet ne reconnaît
pas de clé primaire à la table ODBC (Jet ne sait écrire que si la table ODBC a une clé primaire).
Pour envoyer une requête directement au driver ODBC, utiliser le paramètre dbSQLPassThrough. Ce pa-
ramètre indique que le processeur de requête du moteur de base de données Microsoft Jet est ignoré. La
requête spécifiée dans l'argument OpenRecordset (ou Execute) source est passée, pour traitement, à un
serveur d'arrière plan ODBC. Donc, la requête sera interprétée, directement, par le driver ODBC.
Exemple
‘Exemple d’exécution d’une requête de modification.
‘Les clients de la Moselle (dept. 57) changent de représentant. Désormais, c’est Gendron (identifié par
CO_No = 3)
‘qui se charge de ce secteur.
‘L’objet Database dbCPTA a été ouvert.
Dim strSQL as String ‘Variable contenant la définition de la requête
‘Syntaxe SQL
‘Construction de la requête SQL de modification
‘Critères :
‘ CT_Type = 0 > sélection des clients
‘ CT_CodePostal like ‘57%’ > Sélection des codes clients dont le code département commence par 57
‘Valeur à modifier
‘ CO_No = 3 > le représentant est Gendron (identifié par 3 pour plus d’info, voir la table F_Collabora- teur)
strSQL = "Update F_CompteT " & _
" Set CO_No = 3 " & _
" Where CT_Type = 0 And CT_CodePostal like ‘57%’ "
‘Exécution de la requête
dbCPTA.Execute strSQL, dbSQLPassThrough
L’ensemble des objets Error de la collection Errors ne décrit qu’une seule erreur : la dernière erreur obte-
nue. Le premier objet Error contient l’erreur ODBC du niveau inférieur, les suivants contiennent les erreurs
ODBC retournées par les différentes couches d’ODBC (entre autre le driver ODBC Sage). Le dernier objet
Error retourné est l’erreur provenant de l’objet DAO (la même erreur que retourne les objets Err, pour le
code erreur, et Error, pour le message d’erreur en clair). La provenance de l’erreur (driver ODBC ou objet
DAO) est renseignée dans l’objet Error.
Remarques :
• Il ne faut pas confondre l’objet Error avec l’objet Err : L’objet d’accès aux données Error ne contient
que les informations relatives aux erreurs d’accès aux données, donc au driver ODBC. L’objet Err
ne contient que les erreurs Visual Basic survenues dans le programme (Err ne retournera, tout
comme Error, que la dernière erreur de l’objet Error, celle qui est retournée par Jet).
Le code de traitement des erreurs doit examiner la collection Errors chaque fois que vous prévoyez une
erreur d’accès aux données. Voici les propriétés permettant de récupérer ces erreurs :
• le code erreur : utilisation de la méthode Number,
• la description de l’erreur (message en clair) : utilisation de la méthode Description,
• la source de l’erreur (driver ODBC, Objet DAO...) : utilisation de la méthode Source.
Exemple
‘Exemple de récupération des erreurs ODBC
‘En entête de procédure, on trouve l’instruction ON ERROR GOTO MonLable. Cela veut dire que dès
qu’une
‘erreur est détectée (ODBC ou autre), le programme fait un saut au label indiqué (ici MonLabel).
‘Si aucune erreur n’est détectée, il ne faudra pas effectuer ce traitement d’erreur > d’où l’emploi de l’instruc-
tion
‘EXIT SUB afin de sortir de la procédure avant la partie concernant le traitement de l’erreur.
Dim strErreur As String ‘Variable contenant le message d’erreur à afficher
Dim errDAO As DAO.Error ‘Objet contenant les erreurs d’accès aux données
‘Si aucune erreur n’est rencontrée, il n’est pas nécessaire d’effectuer le traitement d’erreur > sortie du
‘programme (EXIT SUB pour une procédure, EXIT FUNCTION pour une fonction)
Exit Sub
Introduction
L’accès aux données via ODBC, sous Windev se fait exclusivement par l’exécution de requêtes SQL. Il
existe des fonctions de connexion, de déconnexion, d’exécution de requêtes et de parcours des enregis-
trements.
La version 4.0 de Windev ne permet pas l’accès à plusieurs sources de données simultanément, ce qui rend
son utilisation très difficile avec les produits Sage 100cloud (en particulier avec la gestion commerciale et
les immobilisations), car les bases sont étroitement liées les unes aux autres.
Pour une utilisation avec les bases Sage 100cloud, il est préférable d’utiliser une version de Windev
supérieure à la version 4.0
Connexion Déconnexion
La connexion à une base de données, via ODBC, est réalisée à l’aide de la fonction SQLConnect (). Cette
dernière prend en paramètre le nom de la source de données, le nom de l’utilisateur et son mot de passe.
La déconnexion est réalisée à l’aide de la procédure SQLDisconnect (). Cette procédure déconnecte la
connexion courante. Pour changer de connexion, utiliser la procédure SQLChangeConnection () qui prend
en paramètre l’identificateur de la connexion.
Remarques :
• Même si le nom et le mot de passe ne sont pas renseignés, aucune boîte de dialogue de connexion
Sage n’apparaîtra.
• La connexion ODBC est réellement rompue après l’emploi de la procédure SQLDisconnect ().
Exemple
//Exemple de connexion et de Déconnexion. Source de données utilisée > ComptaC_Bijou
strSource est une chaîne //Nom de la source de données
IdCPTA est un entier long //Identifiant de la connexion
Source = "ComptaC_Bijou"
//Connexion à la source de données ODBC ComptaC_Bijou
//Le nom de connexion utilisé est ADMIN, et le mot de passe associé est 123. Ces paramètres sont facul-
tatifs. Si ces
//derniers ne sont pas renseignés, la boîte de connexion Sage n’apparaîtra pas.
IdCPTA = SQLConnect (Source,"ADMIN","123")
//Si la valeur de retour est égale à 0, alors il y a eu un problème lors de la connexion
SI IdCPTA <> 0 alors //Pas de problème de connexion
//Code Windev
Recherche d’enregistrements
La recherche d’enregistrements revient à exécuter une requête SQL de sélection. L’exécution d’une re-
quête est réalisée à l’aide de la fonction SQLExec (). Cette fonction prend en paramètre le code SQL de la
requête, ainsi que son nom. Cette fonction retourne un booléen indiquant si son exécution s’est correcte-
ment déroulée.
Une fois la requête exécutée, le parcours de ses enregistrements se fait à l’aide des fonctions SQLPremier,
SQLDernier, SQLSuivant et SQLPrecedent. La récupération des données est réalisée par la fonction
SQLCol.
La recherche d’un enregistrement précis revient à exécuter une requête de sélection prenant en compte
tous les critères spécifiques de cet enregistrement.
Remarques :
• La requête est directement envoyée au driver ODBC.
• La requête est exécutée sur la connexion courante. Pour changer de connexion, utilisez la procé-
dure SQLChangeConnexion ()
• Il n’est pas nécessaire d’utiliser SQLChangeConnexion () si vous n’ouvrez qu’une seule source de
données. Par contre, si vous en ouvrez plusieurs, il sera nécessaire de l’employer, afin d’identifier la
connexion active.
Exemple
//Exemple d’exécution de requête de sélection et de parcours des enregistrements
//Recherche de tous les clients dont le code commence par C
//La connexion ODBC est active et identifiée par la variable idCPTA
SELECT_QUERY est une chaîne //Nom de la requête SQL
strSQL est une chaîne //Variable contenant la requête SQL
SQLSuivant (SELECT_QUERY)
FIN
SINON
//Gestion de l’erreur
FIN
//Ferme la requête SQL
SQLFerme (SELECT_QUERY)
Remarques :
• La requête est directement envoyée au driver ODBC.
• La requête est exécutée sur la connexion courante. Pour changer de connexion, utilisez la procé-
dure SQLChangeConnexion ().
• Il n’est pas nécessaire d’utiliser SQLChangeConnexion () si vous n’ouvrez qu’une seule source de
données. Par contre, si vous en ouvrez plusieurs, il sera nécessaire de l’employer, afin d’identifier la
connexion active.
Exemple
//Exemple d’exécution d’une requête de modification.
//Les clients de la Moselle (dept. 57) changent de représentant. Désormais, c’est Gendron (identifié par
CO_No = 3)
//qui se charge de ce secteur.
//La connexion ODBC est active et identifiée par la variable idCPTA
UPDATE_QUERY est une chaîne //Nom de la requête SQL
strSQL est une chaîne //Variable contenant la définition de la requête
‘Exécution de la requête
SI SQLExec (strSQL, UPDATE_QUERY) ALORS
//La requête s’est correctement déroulée
SINON
//Gestion de l’erreur
FIN
SQLFerme (UPDATE_QUERY)
Toutes les fonctions d’accès aux données (connexion, exécution de requête) retournent un booléen, indi-
quant si l’exécution de la fonction s’est correctement déroulée. Si une erreur est détectée, il faut mettre en
place la procédure de récupération du code erreur.
Remarque :
• SQL.Erreur ne retourne pas l’erreur renvoyée par le driver, mais l’erreur interne à ce dernier. Ce
code erreur est inexploitable, car il ne correspond pas au message reçu dans SQL.MESERREUR.
Fonctions disponibles
Si <Nom_Requête> est précisée, SQLInfoGene met à jour les variables donnant les informations sur l'exé-
cution de la requête <Nom_Requête>.
• SQL.Erreur est une chaîne de caractères et est égale à "00000" si aucune erreur, sinon contient le
code de l'erreur (erreur interne au driver, donc non exploitable)
• SQL.MesErreur est une chaîne de caractères et contient le libellé de l'erreur
• SQL.NbLig est un entier contenant le nombre de lignes du résultat
• SQL.EnCours est un entier et contient le numéro de la ligne en cours
• SQL.NbCol est un entier contenant le nombre de colonnes du résultat
• SQL.TitreCol[n] est une chaîne de caractères et contient le titre par défaut de la même colonne
• SQL.Connexion est un entier qui contient le numéro de la connexion en cours (demandée par SQL-
Connecte)
• SQL.Requete est un entier qui contient le numéro de la requête en cours
• Si <Nom_Requête> n'est pas précisée, SQLInfoGene retourne le résultat de la connexion par SQL-
Connecte :
• SQL.Erreur est une chaîne de caractères et est égale à "00000" si aucune erreur, sinon contient le
code de l'erreur
• SQL.MesErreur est une chaîne de caractères et contient le libellé de l'erreur
• SQL.Connexion est un entier qui contient le numéro de la connexion en cours (demandée par SQL-
Connecte)
Exemple
//Exemple de récupération des erreurs ODBC
Source = "ComptaC_Bijou"
//Connexion à la source de données ODBC ComptaC_Bijou
IdCPTA = SQLConnect (Source,"","")
//Si la valeur de retour est égale à 0, alors il y a eu un problème lors de la connexion
SI IdCPTA <> 0 alors //Pas de problème de connexion
//Code Windev
//Exécution d’une requête SQL
SI SQLExec (strSQL, SELECT_QUERY) ALORS
//La requête s’est correctement déroulée
//Suite du traitement
SINON
//Gestion de l’erreur d’exécution d’une requête SQL
//Génère les erreurs de la requête SELECT_QUERY
SQLInfoGene (SELECT_QUERY)
strMessageErreur = "Erreur lors de l’exécution de la requête"
//Code erreur
strMessageErreur = strMessageErreur Caract (13) "Code Erreur: " SQL.Erreur
//Message d’erreur
strMessageErreur = strMessageErreur Caract (13) "Message: " SQL.MesErreur)
//Affiche l’erreur
Erreur (strMessageErreur)
FIN
//Ferme la requête SQL
SQLFerme (UPDATE_QUERY)
SINON //Problème lors de la connexion
//Traitement de l’erreur de connexion
//Génère les erreurs
SQLInfoGene ()
strMessageErreur = "Erreur lors de la connexion"
//Code erreur
strMessageErreur = strMessageErreur Caract (13) "Code Erreur: " SQL.Erreur
//Message d’erreur
strMessageErreur = strMessageErreur Caract (13) "Message: " SQL.MesErreur)
//Affiche l’erreur
Erreur (strMessageErreur)
FIN
Introduction
L’accès aux données, avec Visual FroxPro, peut se faire de deux manières :
• Utilisation des Remotes views (vues distantes en français) pour exécuter des requêtes de sélection,
• Utilisation du code pour se connecter, se déconnecter, exécuter des requêtes, parcourir des enre-
gistrements etc...
Ce document traitera essentiellement des accès ODBC via le code FoxPro. Seule la première partie de ce
chapitre sera consacrée à l’utilisation des Remotes Views.
Une vue distante peut être basée sur une source de données ou sur une connexion. Il est préférable de
baser une vue sur une connexion afin d’éviter la boîte de connexion Sage. En effet, une connexion permet
non seulement d’identifier la source de données à utiliser, mais elle permet aussi de renseigner le nom de
l’utilisateur ainsi que le mot de passe associé (permet d’éviter d’avoir la boîte de connexion Sage).
Dans un premier temps, vous devez créer une Connexion (arbre Données/Base de données). Dans cette
connexion, renseigner le nom de la source de données à utiliser, ainsi que le nom et le mot de passe de
l’utilisateur.
Vous pouvez ensuite créer des vues distantes (arbre Données/Base de données). Une vue distante est le
résultat d’une requête. Cette requête est exécutée sur une seule connexion ; il n’est pas possible d’exécuter
des requêtes interbases.
Pour parcourir le résultat d’une vue distante, vous pouvez utiliser l’instruction SCAN.
Exemple
&&Exemple de parcours de la vue distante ListeArticles.
&&ListeArticles est le résultat de la requête suivante :
&&SELECT AR_REF, AR_DESIGN FROM F_ARTICLE
Connexion Déconnexion
La connexion à une base de données, via ODBC, est réalisée à l’aide de la fonction SQLCONNECT ().
Cette dernière prend en paramètre le nom de la source de données et, éventuellement, le nom de l’utilisa-
teur et son mot de passe. Le résultat de la fonction est l’identificateur de la connexion. Si le résultat est in-
férieur ou égal à zéro, alors un problème a été rencontré.
La déconnexion est réalisée à l’aide de la fonction SQLDISCONNECT (). Cette dernière prend en para-
mètre l’identificateur de connexion.
Remarques :
• Pour ne pas voir apparaître la boîte de connexion Sage, il est impératif de renseigner le nom et le
mot de passe (deuxième et troisième paramètre de SQLCONNECT).
PUBLIC INTEGER IdCPTA &&Identifiant de la connexion > déclaré en public pour être utilisé par la suite
&&Le nom de connexion utilisé est ADMIN, et le mot de passe associé est 123. Ces paramètres sont facul-
tatifs.
&&Si ces derniers ne sont pas renseignés, la boîte de connexion Sage apparaîtra.
&&déconnexion
IF intRes <= 0
ENDIF
&&Traitement de l’erreur
ENDIF
Recherche d’enregistrements
La recherche d’enregistrements revient à exécuter une requête SQL de sélection. L’exécution d’une re-
quête est réalisée à l’aide de la fonction SQLEXEC (). Cette fonction prend en paramètre l’identifiant de la
connexion (valeur retournée par la fonction SQLCONNECT), le code SQL de la requête et le nom de l’objet
Cursor. Cet objet va contenir le résultat de la requête de sélection.
SQLEXEC ( ) renvoie le nombre de résultats s'il y en a plus d'un. La fonction SQLEXEC ( ) renvoie 0 si elle
est en cours d'exécution et 1 si elle est terminée. SQLEXEC ( ) renvoie 1 en cas d’erreur au niveau de la
connexion.
Note : La méthode Seek ne fonctionne pas avec les accès ODBC. Il faudra donc utiliser d’autres ins-
truments de recherche tel que Scan.
La recherche d’un enregistrement précis revient à exécuter une requête de sélection prenant en
compte tous les critères spécifiques à cet enregistrement.
Exemple
&&Exemple d’exécution de requête de sélection et de parcours des enregistrements
&&Recherche de tous les clients dont le code commence par C
&&La connexion ODBC est active et identifiée par la variable idCPTA
&&Syntaxe SQL
&&Construction de la requête SQL de sélection
&&Critères :
&& CT_Type = 0 > sélection des clients
&& CT_Num like ‘C%’ > Sélection des codes clients commençant par C
strSQL = "Select CT_Num, CT_Intitule From F_CompteT "
strSQL = strSQL "Where CT_Type = 0 And CT_Num Like ‘C%’ "
&&Exécution de la requête sur la source de données identifiée par idCPTA
&&Le résultat de la requête sera identifié par l’objet MyCursor
inrRep = SQLEXEC (idCPTA, strSQL, 'MyCursor')
IF intRep >=0 &&La requête a fonctionné
&&S’il existe des enregistrements dans l’objet MyCursor, le programme va parcourir
&&tous les enregistrements
IF USED ('MyCursor')
SCAN
&&Affichage des informations
? MyCursor.CT_NUM, MyCursor.CT_INTITULE
ENDSCAN
ENDIF
ELSE La requête a échoué
&&traitement de l’erreur
END IF
‘Exécution de la requête
intRep = SQLEXEC (idCPTA, strSQL)
IF intRep >=0 &&La requête d’écriture a fonctionné
Le premier élément est le n° de l’erreur FoxPro. Si celle ci est égale à 1526, alors c’est une erreur ODBC
(soit retournée par le driver, soit retournée par FoxPro lors d’un problème de connexion par exemple).
Voici la liste des indices du tableau, avec la signification des erreurs ODBC.
Note : Chaque fois que vous exécuterez une fonction d’accès à ODBC (connexion, exécution d’une
requête...), il faudra tester si la valeur retournée est négative (ou égal à 0 pour les fonctions de
connexion). Si oui, il faudra utiliser la fonction AERROR () afin de connaître l’origine du problème.
La commande ON ERROR Do MonProgramme ; ne peut pas être utilisée pour une erreur ODBC. Il
faut obligatoirement tester la valeur retournée par les fonctions.
Exemple
&&Exemple de récupération des erreurs ODBC
&&Interception d’une erreur de connexion et d’une erreur d’exécution de requête
&&Nous ne nous attarderons pas sur la méthode de connexion et d’exécution de requête
Introduction
Afin de standardiser la gestion des bases de données, Delphi utilise des alias, faisant référence à des
sources de données ou des bases de données. Il est donc nécessaire de créer ces alias avant de pouvoir
programmer. Pour se faire, il faut utiliser l’utilitaire de Configuration BDE.
Il faut donc, dans un premier temps, créer un nouveau pilote ODBC, à l’aide de cet utilitaire :
• Dans le feuillet “ pilotes ”, cliquez sur “ Nouveau pilote ODBC ”.
• Renseignez le nom de ce pilote, son type (Sage Gestion commerciale 100cloud, Sage comptabilité
100cloud...), ainsi que le nom de la source de données associé à ce pilote, car un pilote ne fait
référence qu’à une seule source de données.
Une fois ce Pilote créé, il ne reste plus qu’à lui associer un alias. Pour se faire, allez dans le feuillet “ Alias ”
et faites “ Nouvel Alias ”. Renseignez le nom de votre alias, ainsi que le nom du pilote à utiliser (type de
l’alias), avant de cliquer sur “ OK ”.
Remarques :
• Les noms des pilotes ODBC commencent tous par “ ODBC_ ”.
• A partir de la version 3.0 de Delphi, il n’est plus nécessaire de créer des Alias ; delphi est capable
d’attaquer en direct une source de données.
• Quel que soit la base de données utilisée (ODBC ou autre), Delphi ne fait pas de différence ; toutes
les méthodes standard sont utilisables.
Connexion Déconnexion
Que vous utilisiez un objet TTable ou Tquery, la connexion sera réalisée au moment où vous utiliserez la
méthode Open pour l’objet TTable, ou au moment de l’emploi de la méthode ExecQuery (ou la propriété
Active à vrai) pour l’objet Tquery. Sous Delphi, il n’y a pas d’objet permettant d’identifier une connexion à
proprement dit, comme on pourrait le trouver dans les autres langages (ex : objet connexion comme sous
VB, ou ID de connexion comme sous Windev ou Visual FoxPro).
La déconnexion est réalisée à l’aide de la méthode Close. Cette méthode est utilisable par les deux objets.
Note : Lors de la première connexion à une source de données Sage, Delphi va afficher une boîte de
connexion. A priori, il n’est pas possible de renseigner le nom et le mot de passe à utiliser afin de ne
pas voir apparaître cette boîte de connexion.
Exemple
{Exemple d’ouverture de la table F_CompteT de la comptabilité}
{La source de données utilisée est ComptaC_Bijou}
{Le nom de l’objet TTable est TCompta}
{Avant toute manipulation sur l’objet TCompta, on s’assure que ce dernier n’est pas déjà connecté}
{à une source de données}
If TCompta.Active then TCompta.Close ;
{Renseigne le nom de la source de données}
TCompta.DatabaseName := ‘ComptaC_Bijou’ ;
{Renseigne le nom de la table}
TCompta.TableName := 'F_COMPTET' ;
{Ouvre la table > connexion ODBC}
TCompta.Open ;
{Traitement Delphi}
{Fermeture de la table}
TCompta.Close;
Recherche d’enregistrements
Il existe plusieurs méthodes de recherche d’enregistrements. La plus adaptée est celle effectuée à l’aide de
l’objet Query. En effet, il suffit de lui indiquer à quel alias faire référence, ainsi que la requête à exécuter.
Cette méthode est la mieux adaptée car elle permet de lier des informations qui proviennent de plusieurs
tables. De plus, c’est le driver ODBC qui se charge de trouver l’index (ou les index) optimal pour l’exécution
de cette requête. Le résultat de cette dernière pourra être envoyé à un autre objet du type DBGrid par
exemple, via l’objet DataSource.
L’autre méthode de recherche (utilisée essentiellement pour une recherche avant mise à jour ou suppres-
sion) est basée sur les méthodes Goto (GotoKey, GotoNearest etc...) ou Locate qui s’appliquent aux objets
de type TTable. Ces méthodes nécessitent l’utilisation des index de recherche des tables Sage 100cloud
(ces index sont référencés pour chaque table dans le manuel décrivant la structure des bases Sage
100cloud). L’in- dex à utiliser sera renseigné, ainsi que la valeur des champs qui composent cet index. Cette
méthode vous permettra de vous placer sur l’enregistrement à modifier ou à supprimer, par exemple.
Var
strSQL : String ; {Varaible contenant la requête SQL de sélection}
strMessage : String ; {Message affiché à l’écran utilisé pour le parcours des enregistrements}
Begin
{Syntaxe SQL}
{Construction de la requête SQL de sélection}
{Critères :}
{ CT_Type = 0 > sélection des clients}
{ CT_Num like ‘C%’ > Sélection des codes clients commençant par C}
strSQL = ‘Select CT_Num, CT_Intitule From F_CompteT ‘
strSQL = strSQL ‘Where CT_Type = 0 And CT_Num Like ‘’C%’’ ‘
{Avant toute manipulation sur l’objet QClient, on s’assure que ce dernier n’est pas déjà connecté}
{à une source de données}
If QClient.Active Then QClient.Close;
Var
strMessage : String ; {Message affiché à l’écran utilisé pour le parcours des enregistrements}
Begin
{Avant toute manipulation sur l’objet TCompta, on s’assure que ce dernier n’est pas déjà connecté}
{à une source de données}
If not TCompta.Active then TCompta.Close;
{affecte le nom de la source de données à utiliser}
TCompta.DatabaseName := 'ComptaC_Bijou';
{Nom de la table à ouvrir}
TCompta.TableName := 'F_COMPTET';
{Index à utiliser. L’index ICT_TYPE se compose des champs CT_Type et CT_Num. Il sera donc}
{nécessaire de les renseigner}
TCompta.IndexName := 'ICT_TYPE';
{Ouvre la table TCompta}
TCompta.Open;
{Indique que les valeurs des champs des index vont être renseignées}
TCompta.SetKey;
TCompta['CT_TYPE'] := 0;
TCompta['CT_NUM'] := '';
{Recherche l’enregistrement le plus proche}
TCompta.GotoNearest;
{Tant que l’on est pas à la fin de la table et que le type du Tiers est client (CT_Type = 0)}
Il est aussi possible d’exécuter une requête d’écriture à partir d’un objet de type Tquery, à l’aide la méthode
ExecQuery.
‘Exécution de la requête
{Avant toute manipulation sur l’objet QClient, on s’assure que ce dernier n’est pas déjà connecté}
{à une source de données}
If QUpdateQuery.Active Then QUpdateQuery.Close;
{Renseigne le nom de la source de données > ComptaC_Bijou}
QUpdateQuery.DatabaseName := ‘ComptaC_Bijou’;
{Supprimer la requête SQL précedente}
QUpdateQuery.SQL.Clear;
{Affecte la requête SQL à l’objet TQuery}
QUpdateQuery.SQL.Add (strSQL);
{Exécute la requête SQL d’écriture}
QUpdateQuery.ExecQuery.;
QUpdateQuery.Close ;
End :
Var
strSQL : String ; {Variable contenant la requête SQL de sélection}
Begin
{Avant toute manipulation sur l’objet TCompta, on s’assure que ce dernier n’est pas déjà connecté}
{à une source de données}
If not TCompta.Active then TCompta.Close;
{affecte le nom de la source de données à utiliser}
TCompta.DatabaseName := 'ComptaC_Bijou';
{Nom de la table à ouvrir}
TCompta.TableName := 'F_COMPTET';
{Index à utiliser. L’index ICT=TYPE se compose des champ CT_Type et CT_Num. Il sera donc}
{nécessaire de les renseigner}
TCompta.IndexName := 'ICT_TYPE';
{Ouvre la table TCompta}
TCompta.Open;
{Indique que les valeurs des champs des index vont être renseignées}
TCompta.SetKey;
TCompta['CT_TYPE'] := 0;
TCompta['CT_NUM'] := '';
{Recherche l’enregistrement le plus proche}
TCompta.GotoNearest;
{Tant que l’on est pas à la fin de la table et que le type du Tiers est client (CT_Type = 0)}
While not TCompta.EOF And TCompta['CT_TYPE'] = 0 Do
Begin
If Tcompte[‘CT_Ville’] = ‘Metz’ Then {Si la ville du client est Metz, alors}
{on effectue la modification}
Begin
{Modification du n° de représentant}
TCompta.Edit;
{Change le n° de représentant CO_No = 3}
TCompta[‘CO_NO']:= 3;
{Valide le changement à l’aide de la méthode Post}
TCompta.Post;
End ;
{Passe à l’enregistrement suivant}
TCompta.Next;
End;
{Ferme la connexion de TCompta}
TCompta.Close ;
End ;
En Pascal Objet, la gestion des exceptions permet de séparer le programme avec la partie gérant les er-
reurs éventuelles.
L’unité sysUtils implémente la génération et la gestion des exceptions. Lorsqu’une application utilise l’unité
SysUtils, toutes les erreurs d’exécution sont automatiquement converties en exception.
Syntaxe :
Try
(* Code Pascal *)
except
On Erreur1 : ErreurType do
end ;
Si une erreur se produit durant l’exécution des instructions se trouvant entre les mots réservés Try et Ex-
cept, alors l’exécution du code sera automatiquement interrompue, et le générateur d’exception s’occupera
d’effectuer les opérations nécessaires (code se trouvant entre les mots réservés except et end), afin de trai-
ter l’erreur.
Si aucune erreur ne s’est produite, le code gérant les exceptions (qui se trouve entre Except et End), ne
sera pas exécuté.
Il existe d’autres types d’exception, mais ils ne seront pas traités ici, car ils ne concernent pas les erreurs
de connexion, où celles retournées par les drivers ODBC Sage.
Les méthodes de récupération des erreurs pour ces deux classes d’Objet sont différentes.
L'exception EDatabaseError est déclenchée lorqu'une erreur de base de données est détectée par un com-
posant. Elle ne contient qu’une seule erreur et pour obtenir son message d’erreur en clair, il faut utiliser la
méthode message.
Une exception de type EDBEngineErreur, est déclenchée lorsqu’une erreur BDE se produit. L’exception
contient deux propriétés public : Errors (TBDError) qui contient une liste de toute la pile des erreurs retour-
nées par le moteur de base de données Borland, et ErrorCount qui contient le nombre total d’erreurs conte-
nues dans la propriété Errors. Errors possède cinq propriétés public permettant de détailler les erreurs
(ErrorCode, Cotegory, SubCode, NativeError et Message).
Exemple
L’exemple suivant vous montre comment gérer les exceptions retournées par le driver ODBC Sage .
var
S :String;
i,j :Longint;
ErrSql:TDBError;
begin
try
{Code Delphi}
except
(* La suite du code n’est exécuté que si une exception s’est produite *)
On ErrEngine: EDBEngineError do (* Une erreur DBE s’est produite *)
begin
(* Une exception du type EDBEngineError est composée de plusieurs erreurs. *)
(* Il faut donc la parcourir afin de récupérer l’ensemble des erreurs *)
for i:=0 to ErrEngine.ErrorCount1
do begin
ErrSql:=ErrEngine.Errors[i];
j:=ErrSql.NativeError;
Str (j,s);
Introduction
Comme décrit dans les chapitres précédents.
Remarques :
• Les fonctions avancées Sage ont un accès natif aux bases de données ; elles ne passent pas par le
driver ODBC.
• Pour utiliser les fonctions de la comptabilité, votre application doit être connectée, via ODBC, à la
base comptable.
• Pour utiliser les fonctions de la gestion commerciale, votre application doit être connectée, via ODBC,
à la base comptable et à la base commerciale. Ceci est normalement toujours le cas car une source
de données de gestion commerciale utilise la base de comptabilité et la base de gestion
commerciale.
API Sage
Pour utiliser ces fonctions, vous devez les déclarer, en faisant attention à la syntaxe de la fonction (minus-
cule et majuscule). La librairie Sage se nomme CBODBC32.DLL. Les fonctions retournent un code erreur
(entier). Si ce code erreur vaut 0, alors le résultat de la fonction est correct, sinon le code retour identifie
l’erreur. L’erreur la plus fréquente est 2013 : dossier non ouvert. Cette erreur indique qu’il n’y a pas de
connexion ODBC aux bases Sage. Les fonctions évoluées ont plusieurs paramètres. L’information que
vous recherchez est toujours retournée par le dernier paramètre. Le format date est une chaîne de carac-
tère au format JJMMAA.
DLL ActiveX
Un composant ActiveX est une unité de code exécutable qui suit la spécification ActiveX dans le but de four-
nir des objets. Ces objets sont utilisables par tous les logiciels de développement capables d’utiliser cette
technologie (Visual Basic 6.0, Delphi 3.0 etc...).
L’intérêt d’utiliser une DLL activeX pour les fonctions évoluées est multiple :
• Manipulation d’un objet avec des propriétés
• Plus besoin de déclarer l’ensemble des fonctions évoluées
• Facilité d’utilisation
• Possibilité d’utilisation dans Microsoft Visual Interdev pour développer des applications Intranet ou
Internet
Remarques
• Pour utiliser les fonctions de la comptabilité, votre application doit être connectée, via ODBC, à la
base comptable.
• Pour utiliser les fonctions de la gestion commerciale, votre application doit être connectée, via
ODBC, à la base comptable et à la base commerciale.
Principe d’utilisation
La DLL ActiveX est ASD100.DLL (Active Sage Data 100). Cette DLL est stockée dans Windows\System32
(SysWOW64 sur environnement 64 bits). A l’intérieur de cette DLL sont stockées l’ensemble des fonctions
évoluées.
Contrairement aux fonctions évoluées qui retournent un code erreur, chaque propriété de l’objet retourne
le résultat. Le code erreur retourné par la fonction est récupérable par la propriété Erreur. De plus, le format
date n’est plus une chaîne de caractères, mais bel et bien un format date de l’application.
On doit obligatoirement remplir tous les champs, mais certains peuvent ne pas être renseignés, auquel cas,
le critère de recherche s’étendrait à toutes les valeurs de ces champs.
Les champs Deb et Fin peuvent être à vide, par contre il faut que l’un des trois champs suivants ait une
valeur non nulle, à savoir CG_NUM, CT_NUM ou JO_NUM.
En Entrée
• CG_Num (Chaîne de caractères de type Compte 13 caractères maximum) : Numéro de compte
général
• CT_Num (Chaîne Alphanumérique Maj. 17 caractères max.) : Numéro de compte tiers
• JO_Num (Chaîne de caractères 6 caractères max.) : Code Journal
• Deb (Date) : Date de début
• Fin (Date) : Date de fin
En Sortie
En Entrée
DO_Type (Entier) : Type de document
En Sortie
Si la table NomTable est une table de type fichier (table commençant par F_), alors GetParamValeurDate
retourne la valeur en Date, du champ NomChamp, de la table NomTable, de la base de type TypeBase,
pour le dernier enregistrement écrit par ODBC (ajout ou modification).
C’est utile si on veut connaître les valeurs des champs de l’enregistrement que l’on vient de créer, principa-
lement des champs calculés ou mis à jour par le driver.
En Entrée
TypeBase (Chaîne de caractères) : Type de la base : CPTA (Base comptable), CIAL (Base commerciale),
FSAL (Base salarié), FPAR (Base paramètre)
NomTable (Chaîne de caractères) : Nom de la table de type paramètre (table commençant par P_)
En Sortie
Visual Basic
Avant de pouvoir utiliser une fonction avancée Sage, il faut que Visual basic soit connecté aux bases Sage.
Pour utiliser les fonctions de la comptabilité, votre application doit être connectée, via ODBC, à la base
comptable. Pour utiliser les fonctions de la gestion commerciale, votre application doit être connectée, via
ODBC, à la base comptable et à la base commerciale.
La connexion aux bases ODBC peut être réalisée à l’aide de n’importe quelle méthode disponible à partir
de Visual Basic.
Pour les exemples suivants, on supposera que la connexion a déjà été réalisée.
API Sage
TotalMvtSolde ()
Déclaration
‘Le dernier paramètre est un paramètre d’E/S. C’est un numérique (double). Il est donc passé par référence.
Utilisation
Dim intCodeErr as Integer ‘Variable utilisée pour recueillir le code erreur de la fonction.
Dim dblResult as Double ‘Variable utilisée pour recueillir le résultat.
CIALDocNouvPiece ()
Déclaration
‘Le dernier paramètre est un paramètre d’E/S. C’est une chaîne de caractères (String). Il est donc passé
‘par valeur.
Utilisation
Dim intCodeErr as Integer ‘Variable utilisée pour recueillir le code erreur de la fonction.
Dim strResult as String * 13 ‘Variable utilisée pour recueillir le résultat.
GetParamValeurDate ()
Déclaration
‘La fonction API Sage retourne un code erreur (c’est un entier).
‘Le dernier paramètre est un paramètre d’E/S. C’est une chaîne de caractères (String). Il est donc passé
‘par valeur.
ByVal NomTable As String, ByVal NomChamp As String, ByVal ValChamp As String) As Integer
Utilisation
Dim intCodeErr as Integer ‘Variable utilisée pour recueillir le code erreur de la fonction.
Dim strResult as String * 7 ‘Variable utilisée pour recueillir le résultat.
DLL ActiveX
Pour utiliser la DLL ActiveX Sage sous Visual Basic, vous devez faire référence à “ ASD100 Type librairie
x.xx ”.
TotalMvtSolde ()
‘TotalMvtSolde est une fonction de la comptabilité. L’objet à utiliser est donc ASD100Lib.Cpta
‘La propriété à utiliser est TotalMvtSolde
Dim objCPTA As ASD100Lib.Cpta ‘Déclaration de l’objet Cpta
Dim dblResult as double ‘Variable utilisée pour recueillir le résultat.
‘Création de l’objet
Set objCPTA = New ASD100Lib.Cpta
‘Appel à la propriété TotalMvtSolde. Le résultat est stocké dans la variable dblResult.
‘ Compte général : 4010000
‘ Compte de Tiers : non précisé
‘ Code journal : ACH journal des achats
‘ Date de début de période : 01/01/2012
‘ Date de fin de période : 31/12/2012
dblResult = objCPTA.TotalMvtSolde ("4010000", "", "ACH", #1/1/12#, #12/31/12#)
If objCPTA.Erreur = 0 Then ‘Pas d’erreur
‘Affiche le résultat dans la fenêtre d’exécution
Debug.Print dblResult
Else ‘Une erreur est détectée
‘Affiche le code erreur
Debug.Print "Erreur n°", objCPTA.Erreur
End If
CIALDocNouvPiece ()
‘CIALDocNouvPiece est une fonction de la gestion commerciale. L’objet à utiliser est donc ASD100Lib.Cial
‘La propriété à utiliser est DocNouvPiece
Dim objCIAL As ASD100Lib.Cial ‘Déclaration de l’objet Cial
‘Création de l’objet
Set objCIAL = New ASD100Lib.Cial
‘Appel à la propriété DocNouvPiece. Le résultat est stocké dans la variable strResult.
‘ Type de document : 1 BC de vente
‘ Souche : 0 N° de pièce pour Bijou SA
strResult = objCIAL.DocNouvPiece (1, 0)
If objCIAL.Erreur = 0 Then ‘Pas d’erreur
‘Affiche le résultat dans la fenêtre d’exécution
Debug.Print strResult
Else ‘Une erreur est détectée
‘Affiche le code erreur
Debug.Print "Erreur n°", objCIAL.Erreur
End If
GetParamValeurDate ()
‘GetParamValeurDate est une fonction concernant les tables paramètres (P_). L’objet à utiliser est
‘donc ASD100Lib.Param
‘La propriété à utiliser est GetParamValeurDate
Dim objParam As ASD100Lib.Param ‘Déclaration de l’objet Param
Dim dResult as Date ‘Variable utilisée pour recueillir le résultat.
‘Création de l’objet
Set objParam = New ASD100Lib.Param
‘Appel à la propriété GetParamValeurDate. Le résultat est stocké dans la variable dResult.
‘ Type de base : CPTA base comptable
‘ Nom de la table : P_DOSSIER
‘ Nom du champ : D_DebutExo01
dResult = objParam.GetParamValeurDate ("CPTA", "P_DOSSIER", "D_RaisonSoc")
If objParam.Erreur = 0 Then ‘Pas d’erreur
‘Affiche le résultat dans la fenêtre d’exécution
Debug.Print dResult
Else ‘Une erreur est détectée
‘Affiche le code erreur
Debug.Print "Erreur n°", objParam.Erreur
End If
WinDev
Avant de pouvoir utiliser une fonction avancée Sage, il faut que Windev soit connecté aux bases Sage. Pour
utiliser les fonctions de la comptabilité, votre application doit être connectée, via ODBC, à la base comp-
table. Pour utiliser les fonctions de la gestion commerciale, votre application doit être connectée, via ODBC,
à la base comptable et à la base commerciale.
Remarques :
• Il est nécessaire de charger la librairie avant de pouvoir appeler les fonctions (Utilisation de la fonc-
tion ChargeDLL).
• La définition du passage de paramètre (par valeur ou par référence) se définit lors de l’exécution de
la fonction (utilisation du caractère &).
• La librairie Sage 100cloudest une librairie 32 bits. Il est donc impératif d’utiliser la fonction
AppelDll32 (Ne pas utiliser AppelDll ni AppelDllLong).
Pour les exemples suivants, on supposera que la connexion a déjà été réalisée.
API Sage
Il n’existe pas de déclaration de fonction proprement dit sous Windev. En effet, ce dernier charge la DLL où
se situent les fonctions (dans notre cas CBODBC32.DLL), avant d’appeler les fonctions.
Remarques :
• Il est important de respecter les majuscules/minuscules lors de l’appel aux fonctions Sage
• Il ne faut pas oublier de décharger la DLL après sont utilisation, sinon cette dernière restera en
mémoire.
TotalMvtSolde ()
Utilisation
dblResult est un réel double //Variable utilisée pour recueillir le résultat.
IdChargeDll est une entier long //Identifiant de la DLL Sage CBODBC32.DLL
IdAppelDLL est entier sans signe //Utilisé pour le retour de l’appel à la fonction Correspond normalement
au code
// erreur de la fonction Sage.
//Remarque : AppelDLL32 retourne un entier long 4 octets . Ce résultat est normalement le résultat de
l’appel de
// la fonction Sage. Or la fonction sage retourne un entier 2 octets (non un long). Il sera donc plus difficile
//d’interpréter l’erreur Sage.
CIALDocNouvPiece ()
Utilisation
strResult est une Chaîne ASCIIZ sur 14 //Variable utilisée pour recueillir le résultat.
IdChargeDll est une entier long //Identifiant de la DLL Sage CBODBC32.DLL
IdAppelDLL est entier sans signe //Utilisé pour le retour de l’appel à la fonction Correspond normalement
au code
// erreur de la fonction Sage.
//Remarque : AppelDLL32 retourne un entier long 4 octets . Ce résultat est normalement le résultat de
l’appel de
// la fonction Sage. Or la fonction sage retourne un entier 2 octets (non un long). Il sera donc plus difficile
//d’interpréter l’erreur Sage.
GetParamValeurDate ()
Utilisation
strResult est une Chaîne ASCIIZ sur 7 //Variable utilisée pour recueillir le résultat.
IdChargeDll est une entier long //Identifiant de la DLL Sage CBODBC32.DLL
IdAppelDLL est entier sans signe //Utilisé pour le retour de l’appel à la fonction Correspond normalement
au code
// erreur de la fonction Sage.
//Remarque : AppelDLL32 retourne un entier long 4 octets . Ce résultat est normalement le résultat de
l’appel de
// la fonction Sage. Or la fonction sage retourne un entier 2 octets (non un long). Il sera donc plus difficile
//d’interpréter l’erreur Sage.
DLL ActiveX
La version 4.1 de Windev ne supporte pas la technologie ActiveX. Il est donc impossible d’utiliser les objets
Sage de la DLL ActiveX ASD100 avec Windev.
Visual FoxPro
Avant de pouvoir utiliser une fonction avancée Sage, il faut que Visual FoxPro soit connecté aux bases
Sage. Pour utiliser les fonctions de la comptabilité, votre application doit être connectée, via ODBC, à la
base comptable. Pour utiliser les fonctions de la gestion commerciale, votre application doit être connectée,
via ODBC, à la base comptable et à la base commerciale.
Pour les exemples suivants, on supposera que la connexion a déjà été réalisée.
API Sage
TotalMvtSolde ()
Déclaration
&&La fonction API Sage retourne un code erreur (c’est un entier).
&&Le dernier paramètre est un paramètre d’E/S. C’est un numérique (double). Il est donc passé par réfé-
rence
&&> Utilisation du symbole @ pour indiquer que le paramètre peut varier. Ce caractère sera aussi utilisé
lors
&&de l’appel à la fonction
&&N’oubliez pas de respecter les majuscules/minuscules
DECLARE SHORT TotalMvtSolde IN CBODBC32 STRING CG_Num, STRING CT_Num, STRING JO_-
Num,
STRING debut, STRING fin, DOUBLE @Total
Utilisation
&&Appel de la fonction Sage
&& Compte général : 4010000 &&
Compte de Tiers : non
précisé
&& Code journal : ACH journal des achats
&& Date de début de période : 01011207
&& Date de fin de période : 31122017
intCodeerr = TotalMvtSolde ("4010000", "", "ACH", "010102017", "31122017", @dblResult)
IF intCodeErr = 0 &&Pas d’erreur
&&Affiche le résultat dans une boîte de dialogue
= MESSageBOX (STR (dblResult), 16, "")
ELSE ‘Une erreur est détectée
‘Affiche le code erreur
= MESSageBOX (STR (intCodeErr), 16, "")
ENDIF
CIALDocNouvPiece ()
Déclaration
&&La fonction API Sage retourne un code erreur (c’est un entier).
&&Le dernier paramètre est un paramètre d’E/S. C’est une chaîne de caractères (String). Il est donc passé
&&par valeur > le caractère @ ne sera pas utilisé pour la déclaration. Par contre, il sera utilisé lors de
l’appel de
&&la fonction Sage
&&N’oubliez pas de respecter les majuscules/minuscules
DECLARE SHORT CIALDocNouvPiece IN CBODBC32 INTEGER DO_Type, INTEGER DO_Souche,
STRING Resultat
Utilisation
&&‘Initialisation de la variable strResult
strResult = SPACE (13)
&&Appel de la fonction Sage
&& Type de document : 1 BC de vente
&& Souche : 0 N° de pièce pour Bijou SA
intCodeerr = CIALDocNouvPiece (1, 0, @strResult)
IF intCodeErr = 0 &&Pas d’erreur
&&Affiche le résultat dans une boîte de dialogue
= MESSageBOX (strResult, 16, "")
ELSE ‘Une erreur est détectée
‘Affiche le code erreur
= MESSageBOX (STR (intCodeErr), 16, "")
ENDIF
GetParamValeurDate ()
Déclaration
&&La fonction API Sage retourne un code erreur (c’est un entier).
&&Le dernier paramètre est un paramètre d’E/S. C’est une chaîne de caractères (String). Il est donc passé
&&par valeur > le caractère @ ne sera pas utilisé pour la déclaration. Par contre, il sera utilisé lors de
l’appel de
&&la fonction Sage
&&N’oubliez pas de respecter les majuscules/minuscules
DECLARE SHORT GetParamValeurDate IN CBODBC32 STRING TypeBase, STRING NomTable,
STRING NomChamp, STRING ValChamp
Utilisation
&&Initialisation de la variable strResult
strResult = SPACE (7)
&&Appel de la fonction Sage
&& Type de base : CPTA base comptable
&& Nom de la table : P_DOSSIER
&& Nom du champ : D_DebutExo01
intCodeerr = GetParamValeurDate ("CPTA", "P_DOSSIER", "D_RaisonSoc", @strResult)
IF intCodeErr = 0 &&Pas d’erreur
&&Affiche le résultat dans une boîte de dialogue
= MESSageBOX (strResult, 16, "")
ELSE ‘Une erreur est détectée
‘Affiche le code erreur
= MESSageBOX (STR (intCodeErr), 16, "")
ENDIF
DLL ActiveX
Bien que Visual FoxPro 3.0 sache utiliser les contrôles OLE (Treeview par exemple), ce dernier ne sait pas
utiliser les DLL ActiveX. Cette fonctionnalité ne peut pas être employée avec ce produit (d’où moins la ver-
sion 3.0 de ce dernier).
Delphi
Avant de pouvoir utiliser une fonction avancée Sage, il faut que Delphi soit connecté aux bases Sage. Pour
utiliser les fonctions de la comptabilité, votre application doit être connectée, via ODBC, à la base comp-
table. Pour utiliser les fonctions de la gestion commerciale, votre application doit être connectée, via ODBC,
à la base comptable et à la base commerciale.
Pour les exemples suivants, on supposera que la connexion a déjà été réalisée.
API Sage
TotalMvtSolde ()
Déclaration
{La fonction API Sage retourne un code erreur (c’est un entier).}
{Le dernier paramètre est un paramètre d’E/S. C’est un numérique (double). Il est donc passé par réfé-
rence}
{> utilisation du paramètre Var}
{N’oubliez pas de respecter les majuscules/minuscules}
Function TotalMvtSolde (CG_Num:Pchar; CT_Num:Pchar; JO_Num:Pchar; Debut:Pchar; Fin:Pchar;
Var Total:Double): smallInt; stdcall; external 'cbodbc32.dll';
Utilisation
intCodeErr : Integer ; {Variable utilisée pour recueillir le code erreur de la fonction.}
dblResult : Double ; {Variable utilisée pour recueillir le résultat.}
strResult : String ; {Variable utilisée pour l’affichge du résultat}
CIALDocNouvPiece ()
Déclaration
{La fonction API Sage retourne un code erreur (c’est un entier).}
{Le dernier paramètre est un paramètre d’E/S. C’est une chaîne de caractères (PChar). Il est donc passé}
{par valeur > pas d’utilisation de l’instruction Var.}
{N’oubliez pas de respecter les majuscules/minuscules}
Function CIALDocNouvPiece (DO_Type: Integer; DO_Souche: Integer; Resultat: Pchar)
:smallInt; stdcall; external 'cbodbc32.dll';
Utilisation
intCodeErr : Integer ; ‘Variable utilisée pour recueillir le code erreur de la fonction.
StrResult : Pchar ; ‘Variable utilisée pour recueillir le résultat.
GetParamValeurDate ()
Déclaration
‘La fonction API Sage retourne un code erreur (c’est un entier).
{Le dernier paramètre est un paramètre d’E/S. C’est une chaîne de caractères (PChar). Il est donc passé}
{par valeur > pas d’utilisation de l’instruction Var.}
‘N’oubliez pas de respecter les majuscules/minuscules
Function GetParamValeurDate (TypeBase: PChar; NomTable: PChar; NomChamp: PChar;
ValChamp: PChar):smallInt;stdcall;external 'cbodbc32.dll';
Utilisation
intCodeErr : Integer ; ‘Variable utilisée pour recueillir le code erreur de la fonction.
StrResult : Pchar ; ‘Variable utilisée pour recueillir le résultat.
DLL ActiveX
Pour utiliser la DLL ActiveX sous Delphi, vous devez utiliser l’unité OleAuto.dcu. Cette dernière à besoin
que les unités suivantes soient présentes : ole2.dcu et olectl.dcu.
TotalMvtSolde ()
//TotalMvtSolde est une fonction de la comptabilité. L’objet à utiliser est donc ASD100Lib.Cpta
//La propriété à utiliser est TotalMvtSolde
objCPTA : Variant ;//Déclaration de l’objet Cpta
dblResult : Double ; //Variable utilisée pour recueillir le résultat.
//Création de l’objet
objCPTA :=CreateOleObject ('ASD100.Cpta');
//Appel à la propriété TotalMvtSolde. Le résultat est stocké dans la variable dblResult.
CIALDocNouvPiece ()
//CIALDocNouvPiece est une fonction de la gestion commerciale. L’objet à utiliser est donc
ASD100Lib.Cial
//La propriété à utiliser est DocNouvPiece
objCIAL : Variantl ; //Déclaration de l’objet Cial
strResult : String ; //Variable utilisée pour recueillir le résultat.
//Création de l’objet
objCIAL :=CreateOleObject ('ASD100.Cial');
‘Appel à la propriété DocNouvPiece. Le résultat est stocké dans la variable strResult.
‘ Type de document : 1 BC de vente
‘ Souche : 0 N° de pièce pour Bijou SA
strResult := objCIAL.DocNouvPiece (1, 0) ;
If objCIAL.Erreur = 0 Then //Pas d’erreur
begin
{Affiche le résultat dans une boîte de dialogue}
MessageDlg (strResult, mtInformation,[mbOk], 0);
End ;
Else {Une erreur est détectée}
Begin
{Conversion du code erreur en chaîne}
Str (intCodeErr, strResult);
{Affiche le code erreur dans une boîte de dialogue}
MessageDlg (strResult, mtInformation,[mbOk], 0);
End ;
GetParamValeurDate ()
//GetParamValeurDate est une fonction concernant les tables paramètres (P_). L’objet à utiliser est
//donc ASD100Lib.Param
//La propriété à utiliser est GetParamValeurDate
objParam : Variant ; //Déclaration de l’objet Param
Dim dResult : TDateTime ;‘Variable utilisée pour recueillir le résultat.
‘Création de l’objet
objParam :=CreateOleObject ('ASD100.Cial');
‘Appel à la propriété GetParamValeurDate. Le résultat est stocké dans la variable dResult.
‘ Type de base : CPTA base comptable
‘ Nom de la table : P_DOSSIER
‘ Nom du champ : D_DebutExo01
dResult := objParam.GetParamValeurDate ("CPTA", "P_DOSSIER", "D_RaisonSoc")
If objParam.Erreur = 0 Then //Pas d’erreur
begin
{Conversion d’une date en chaîne}
Str (dResult, strResult);
{Affiche le résultat dans une boîte de dialogue}
MessageDlg (strResult, mtInformation,[mbOk], 0);
End ;
Else {Une erreur est détectée}
Begin
{Conversion du code erreur en chaîne}
Str (intCodeErr, strResult);
{Affiche le code erreur dans une boîte de dialogue}
MessageDlg (strResult, mtInformation,[mbOk], 0);
End ;