La supervision des comptabilités d’un groupe vise à répondre à plusieurs objectifs dont la prévention des risques d’erreurs et de fraudes.
Une des erreurs les plus communes en comptabilité est la double comptabilisation de factures fournisseurs… avec le risque de double paiement qui s’ensuit. Si les procédures sont chargées de limiter ce risque de double comptabilisation, la systémisation du contrôle complète plus efficacement le dispositif de prévention.
SELECT Requête1.CompteDeCodeEntité AS NbOccurrences, ECRITURES.CodeEntité, ECRITURES.JournalCode, ECRITURES.JournalLib, ECRITURES.EcritureNum, ECRITURES.EcritureDate, ECRITURES.CompteNum, ECRITURES.CompteLib, ECRITURES.CompteAuxNum, ECRITURES.CompteAuxLib, ECRITURES.PièceRéf, ECRITURES.PièceDate, ECRITURES.EcritureLib, ECRITURES.Débit, ECRITURES.Crédit, ECRITURES.ValidDate, ECRITURES.Solde, ECRITURES.AAAAMM INTO ACHATS_DOUBLONS IN 'C:\ANA-FEC.accdb' FROM (SELECT ECRITURES.CodeEntité, ECRITURES.CompteAuxNum, ECRITURES.PièceRéf, ECRITURES.Solde, ECRITURES.TypeJournal, Count(ECRITURES.CodeEntité) AS CompteDeCodeEntité FROM ECRITURES WHERE ((Not (ECRITURES.CompteAuxNum) Is Null) AND ((ECRITURES.TypeJournal)="ACHATS")) GROUP BY ECRITURES.CodeEntité, ECRITURES.CompteAuxNum, ECRITURES.PièceRéf, ECRITURES.Solde, ECRITURES.TypeJournal HAVING ((Count(ECRITURES.CodeEntité))<>1)) AS Requête1 INNER JOIN ECRITURES ON (Requête1.TypeJournal = ECRITURES.TypeJournal) AND (Requête1.Solde = ECRITURES.Solde) AND (Requête1.PièceRéf = ECRITURES.PièceRéf) AND (Requête1.CompteAuxNum = ECRITURES.CompteAuxNum) AND (Requête1.CodeEntité = ECRITURES.CodeEntité) ORDER BY Requête1.CodeEntité, Requête1.CompteAuxNum, Requête1.PièceRéf, Requête1.Solde;
L’automatisation de la détection des doublons peut efficacement être mise en œuvre à l’aide d’une requête SQL.
La requête se décompose ainsi :
Une sous-requête (Requête1) recherche les lignes d’écriture d’achats ((ECRITURES.TypeJournal)=”ACHATS”) contenant un code tiers (Not (ECRITURES.CompteAuxNum) Is Null) et compte (Count) le nombre de lignes regroupant (GROUP BY) chaque champ Code entité / Code tiers / Référence pièce / Solde (ce contrôle étant opéré simultanément pour l’ensemble des entités du groupe) (est donc identifié comme doublon un achat opéré sur un même fournisseur, justifié par un document comptable portant la même référence et le même montant) : GROUP BY ECRITURES.CodeEntité, ECRITURES.CompteAuxNum, ECRITURES.PièceRéf, ECRITURES.Solde, ECRITURES.TypeJournal. Seuls les résultats en doublon (ou plus) sont repris par la requête (HAVING ((Count(ECRITURES.CodeEntité))<>1)).
SELECT ECRITURES.CodeEntité, ECRITURES.CompteAuxNum, ECRITURES.PièceRéf, ECRITURES.Solde, ECRITURES.TypeJournal, Count(ECRITURES.CodeEntité) AS CompteDeCodeEntité FROM ECRITURES WHERE ((Not (ECRITURES.CompteAuxNum) Is Null) AND ((ECRITURES.TypeJournal)="ACHATS")) GROUP BY ECRITURES.CodeEntité, ECRITURES.CompteAuxNum, ECRITURES.PièceRéf, ECRITURES.Solde, ECRITURES.TypeJournal HAVING ((Count(ECRITURES.CodeEntité))<>1)) AS Requête1
Puis, à partir de cette sous-requête, sont extraites l’ensemble des lignes d’écritures qui apparaissent en doublon (INNER JOIN ECRITURES ON (Requête1.TypeJournal = ECRITURES.TypeJournal) AND (Requête1.Solde = ECRITURES.Solde) AND (Requête1.PièceRéf = ECRITURES.PièceRéf) AND (Requête1.CompteAuxNum = ECRITURES.CompteAuxNum) AND (Requête1.CodeEntité = ECRITURES.CodeEntité)) ; ce résultat étant trié dans l’ordre des entités, des comptes auxiliaires… (ORDER BY Requête1.CodeEntité, Requête1.CompteAuxNum, Requête1.PièceRéf, Requête1.Solde).
La clause INTO ACHATS_DOUBLONS IN ‘C:\ANA-FEC.accdb’ va stocker le résultat de cette requête dans la table nommée ACHATS_DOUBLONS de la base de données ACCESS ANA-FEC situé dans la racine du disque dur (C:\). Ne reste plus qu’à exploiter le contenu de cette table.
Appliquée à plusieurs millions de lignes d’écritures, cette requête ne met que quelques instants à s’exécuter.
Approfondir le sujet : Maîtriser ACCESS / Maîtriser le langage de requête SQL / Analyse de données
Derniers articles parBenoît RIVIERE (voir tous)
- Nouveautés de l’interpréteur de formules de calcul (v1.1) - dimanche 3 novembre 2024
- Dématérialisation de la facturation : nouvelles mentions obligatoires - lundi 28 octobre 2024
- Interpréteur de formules de calcul en Python - dimanche 13 octobre 2024
- Les données de la facturation électronique - mercredi 9 octobre 2024
- VBA/SQL vs Power Query : deux solutions complémentaires - mercredi 2 octobre 2024