{"id":8313,"date":"2019-08-04T18:24:02","date_gmt":"2019-08-04T16:24:02","guid":{"rendered":"https:\/\/www.auditsi.eu\/?p=8313"},"modified":"2021-03-28T10:51:18","modified_gmt":"2021-03-28T08:51:18","slug":"prevention","status":"publish","type":"post","link":"https:\/\/www.auditsi.eu\/?p=8313","title":{"rendered":"SQL : d\u00e9tecter les achats comptabilis\u00e9s en double"},"content":{"rendered":"<p style=\"text-align: justify;\">La supervision des comptabilit\u00e9s d&#8217;un groupe vise \u00e0 r\u00e9pondre \u00e0 plusieurs objectifs dont la pr\u00e9vention des risques d&#8217;erreurs et de fraudes.<\/p>\n<p style=\"text-align: justify;\">Une des erreurs les plus communes en comptabilit\u00e9 est la double comptabilisation de factures fournisseurs&#8230; avec le risque de double paiement qui s&#8217;ensuit. Si les proc\u00e9dures sont charg\u00e9es de limiter ce risque de double comptabilisation, la syst\u00e9misation du contr\u00f4le compl\u00e8te plus efficacement le dispositif de pr\u00e9vention.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">SELECT Requ\u00eate1.CompteDeCodeEntit\u00e9 AS NbOccurrences, ECRITURES.CodeEntit\u00e9, ECRITURES.JournalCode, ECRITURES.JournalLib, ECRITURES.EcritureNum, ECRITURES.EcritureDate, ECRITURES.CompteNum, ECRITURES.CompteLib, ECRITURES.CompteAuxNum, ECRITURES.CompteAuxLib, ECRITURES.Pi\u00e8ceR\u00e9f, ECRITURES.Pi\u00e8ceDate, ECRITURES.EcritureLib, ECRITURES.D\u00e9bit, ECRITURES.Cr\u00e9dit, ECRITURES.ValidDate, ECRITURES.Solde, ECRITURES.AAAAMM\r\nINTO ACHATS_DOUBLONS IN 'C:\\ANA-FEC.accdb'\r\nFROM (SELECT ECRITURES.CodeEntit\u00e9, ECRITURES.CompteAuxNum, ECRITURES.Pi\u00e8ceR\u00e9f, ECRITURES.Solde, ECRITURES.TypeJournal, Count(ECRITURES.CodeEntit\u00e9) AS CompteDeCodeEntit\u00e9 FROM ECRITURES\r\nWHERE ((Not (ECRITURES.CompteAuxNum) Is Null) AND ((ECRITURES.TypeJournal)=\"ACHATS\"))\r\nGROUP BY ECRITURES.CodeEntit\u00e9, ECRITURES.CompteAuxNum, ECRITURES.Pi\u00e8ceR\u00e9f, ECRITURES.Solde, ECRITURES.TypeJournal\r\nHAVING ((Count(ECRITURES.CodeEntit\u00e9))&lt;&gt;1)) AS Requ\u00eate1 INNER JOIN ECRITURES ON (Requ\u00eate1.TypeJournal = ECRITURES.TypeJournal) AND (Requ\u00eate1.Solde = ECRITURES.Solde) AND (Requ\u00eate1.Pi\u00e8ceR\u00e9f = ECRITURES.Pi\u00e8ceR\u00e9f) AND (Requ\u00eate1.CompteAuxNum = ECRITURES.CompteAuxNum) AND (Requ\u00eate1.CodeEntit\u00e9 = ECRITURES.CodeEntit\u00e9)\r\nORDER BY Requ\u00eate1.CodeEntit\u00e9, Requ\u00eate1.CompteAuxNum, Requ\u00eate1.Pi\u00e8ceR\u00e9f, Requ\u00eate1.Solde;<\/pre>\n<p style=\"text-align: justify;\">L&#8217;automatisation de la d\u00e9tection des doublons peut efficacement \u00eatre mise en \u0153uvre \u00e0 l&#8217;aide d&#8217;une requ\u00eate SQL.<\/p>\n<p style=\"text-align: justify;\">La requ\u00eate se d\u00e9compose ainsi :<\/p>\n<p style=\"text-align: justify;\">Une sous-requ\u00eate (<em>Requ\u00eate1<\/em>) recherche les lignes d&#8217;\u00e9criture d&#8217;achats <em>((ECRITURES.TypeJournal)=&#8221;ACHATS&#8221;)<\/em> contenant un code tiers <em>(Not (ECRITURES.CompteAuxNum) Is Null)<\/em> et compte (<em>Count<\/em>) le nombre de lignes regroupant (<a href=\"https:\/\/www.auditsi.eu\/?p=6913\"><em>GROUP BY<\/em><\/a>) chaque champ Code entit\u00e9 \/ Code tiers \/ R\u00e9f\u00e9rence pi\u00e8ce \/ Solde (ce contr\u00f4le \u00e9tant op\u00e9r\u00e9 simultan\u00e9ment pour l&#8217;ensemble des entit\u00e9s du groupe) (<strong>est donc identifi\u00e9 comme doublon un achat op\u00e9r\u00e9 sur un m\u00eame fournisseur, justifi\u00e9 par un document comptable portant la m\u00eame r\u00e9f\u00e9rence et le m\u00eame montant<\/strong>) : <em>GROUP BY ECRITURES.CodeEntit\u00e9, ECRITURES.CompteAuxNum, ECRITURES.Pi\u00e8ceR\u00e9f, ECRITURES.Solde, ECRITURES.TypeJournal<\/em>. Seuls les r\u00e9sultats en doublon (ou plus) sont repris par la requ\u00eate (<em>HAVING&nbsp;((Count(ECRITURES.CodeEntit\u00e9))&lt;&gt;1)<\/em>).<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">SELECT ECRITURES.CodeEntit\u00e9, ECRITURES.CompteAuxNum, ECRITURES.Pi\u00e8ceR\u00e9f, ECRITURES.Solde, ECRITURES.TypeJournal, Count(ECRITURES.CodeEntit\u00e9) AS CompteDeCodeEntit\u00e9 FROM ECRITURES WHERE ((Not (ECRITURES.CompteAuxNum) Is Null) AND ((ECRITURES.TypeJournal)=\"ACHATS\"))\r\nGROUP&nbsp;BY&nbsp;ECRITURES.CodeEntit\u00e9,&nbsp;ECRITURES.CompteAuxNum,&nbsp;ECRITURES.Pi\u00e8ceR\u00e9f,&nbsp;ECRITURES.Solde,&nbsp;ECRITURES.TypeJournal\r\nHAVING&nbsp;((Count(ECRITURES.CodeEntit\u00e9))&lt;&gt;1))&nbsp;AS&nbsp;Requ\u00eate1<\/pre>\n<p style=\"text-align: justify;\">Puis, \u00e0 partir de cette sous-requ\u00eate, sont extraites l&#8217;ensemble des lignes d&#8217;\u00e9critures qui apparaissent en doublon (<em>INNER JOIN ECRITURES ON (Requ\u00eate1.TypeJournal = ECRITURES.TypeJournal) AND (Requ\u00eate1.Solde = ECRITURES.Solde) AND (Requ\u00eate1.Pi\u00e8ceR\u00e9f = ECRITURES.Pi\u00e8ceR\u00e9f) AND (Requ\u00eate1.CompteAuxNum = ECRITURES.CompteAuxNum) AND (Requ\u00eate1.CodeEntit\u00e9 = ECRITURES.CodeEntit\u00e9)<\/em>) ; ce r\u00e9sultat \u00e9tant tri\u00e9 dans l&#8217;ordre des entit\u00e9s, des comptes auxiliaires&#8230; (<em>ORDER BY Requ\u00eate1.CodeEntit\u00e9, Requ\u00eate1.CompteAuxNum, Requ\u00eate1.Pi\u00e8ceR\u00e9f, Requ\u00eate1.Solde<\/em>).<\/p>\n<p style=\"text-align: justify;\">La clause <a href=\"https:\/\/www.auditsi.eu\/?p=8270\"><em>INTO ACHATS_DOUBLONS IN &#8216;C:\\ANA-FEC.accdb&#8217;<\/em><\/a> va stocker le r\u00e9sultat de cette requ\u00eate dans la table nomm\u00e9e <em>ACHATS_DOUBLONS<\/em> de la base de donn\u00e9es <em>ACCESS ANA-FEC<\/em> situ\u00e9 dans la racine du disque dur <em>(C:\\)<\/em>. Ne reste plus qu&#8217;\u00e0 exploiter le contenu de cette table.<\/p>\n<p style=\"text-align: justify;\">Appliqu\u00e9e \u00e0 plusieurs millions de lignes d&#8217;\u00e9critures, cette requ\u00eate ne met que quelques instants \u00e0 s&#8217;ex\u00e9cuter.<\/p>\n<p style=\"text-align: justify;\">Approfondir le sujet : <a href=\"https:\/\/www.auditsi.eu\/?tag=access\">Ma\u00eetriser ACCESS<\/a> \/&nbsp;<a href=\"https:\/\/www.auditsi.eu\/?cat=1820\">Ma\u00eetriser le langage de requ\u00eate SQL<\/a>&nbsp;\/ <a href=\"https:\/\/www.auditsi.eu\/?cat=50\">Analyse de donn\u00e9es<\/a><\/p>\n<div style=\"padding-bottom:20px; padding-top:10px;\" class=\"hupso-share-buttons\"><!-- Hupso Share Buttons - https:\/\/www.hupso.com\/share\/ --><a class=\"hupso_counters\" href=\"https:\/\/www.hupso.com\/share\/\"><img decoding=\"async\" src=\"https:\/\/static.hupso.com\/share\/buttons\/lang\/fr\/share-small.png\" style=\"border:0px; padding-top:2px; float:left;\" alt=\"Share Button\"\/><\/a><script type=\"text\/javascript\">var hupso_services_c=new Array(\"twitter\",\"facebook_like\",\"facebook_send\",\"email\",\"print\",\"linkedin\");var hupso_counters_lang = \"fr_FR\";var hupso_image_folder_url = \"\";var hupso_twitter_via=\"BenoitRiviere14\";var hupso_url_c=\"\";var hupso_title_c=\"SQL%20%3A%20d%C3%A9tecter%20les%20achats%20comptabilis%C3%A9s%20en%20double\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"excerpt":{"rendered":"<p>La supervision des comptabilit\u00e9s d&#8217;un groupe vise \u00e0 r\u00e9pondre \u00e0 plusieurs objectifs dont la pr\u00e9vention des risques d&#8217;erreurs et de fraudes. Une des erreurs les plus communes en comptabilit\u00e9 est la double comptabilisation de factures fournisseurs&#8230; avec le risque de double paiement qui s&#8217;ensuit. Si les proc\u00e9dures sont charg\u00e9es de limiter ce risque de double &#8230;<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?p=8313\" class=\"more-link\">Continue reading &lsquo;SQL : d\u00e9tecter les achats comptabilis\u00e9s en double&rsquo; &raquo;<\/a><\/p>\n<div style=\"padding-bottom:20px; padding-top:10px;\" class=\"hupso-share-buttons\"><!-- Hupso Share Buttons - https:\/\/www.hupso.com\/share\/ --><a class=\"hupso_counters\" href=\"https:\/\/www.hupso.com\/share\/\"><img src=\"https:\/\/static.hupso.com\/share\/buttons\/lang\/fr\/share-small.png\" style=\"border:0px; padding-top:2px; float:left;\" alt=\"Share Button\"\/><\/a><script type=\"text\/javascript\">var hupso_services_c=new Array(\"twitter\",\"facebook_like\",\"facebook_send\",\"email\",\"print\",\"linkedin\");var hupso_counters_lang = \"fr_FR\";var hupso_image_folder_url = \"\";var hupso_twitter_via=\"BenoitRiviere14\";var hupso_url_c=\"\";var hupso_title_c=\"SQL%20%3A%20d%C3%A9tecter%20les%20achats%20comptabilis%C3%A9s%20en%20double\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"ngg_post_thumbnail":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[50,39,490,4,282],"tags":[166,265,356,168,2451,2452,439,90,1621,314,553,2450,283,2060,1643],"class_list":["post-8313","post","type-post","status-publish","format-standard","hentry","category-audit-de-donnees","category-cas-pratiques","category-cycle-fournisseurs-controle-des-comptes","category-fraude","category-sql","tag-analyse-de-donnees","tag-count","tag-detection-de-la-fraude","tag-detection-des-anomalies","tag-double-paiement","tag-double-reglement","tag-doublons","tag-erreurs","tag-fraude","tag-politique-de-prevention","tag-risque-danomalie-significative","tag-risque-de-fraude","tag-select-from-where-order-by","tag-select-into-in-from","tag-sql"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/8313","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8313"}],"version-history":[{"count":12,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/8313\/revisions"}],"predecessor-version":[{"id":9561,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/8313\/revisions\/9561"}],"wp:attachment":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8313"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}