

--- Important : remplacer XXXX par le nom réel de la base de données Sage 100 avant l’exécution des requêtes.
--- Ces requêtes sont uniquement destinées au contrôle des données. Aucune modification de la base Sage n'est effectuée par ces requêtes.


1. Vérification globale des données des contacts Sage
SELECT
    COUNT(*) AS Total_Contacts,

    SUM(CASE
        WHEN c.CT_No IS NULL OR c.CT_No <= 0
        THEN 1 ELSE 0
    END) AS CT_No_Invalide,

    SUM(CASE
        WHEN c.CT_Num IS NULL
          OR LTRIM(RTRIM(c.CT_Num)) = ''
        THEN 1 ELSE 0
    END) AS CT_Num_Vide,

    SUM(CASE
        WHEN c.CT_Num IS NOT NULL
         AND LTRIM(RTRIM(c.CT_Num)) <> ''
         AND t.CT_Num IS NULL
        THEN 1 ELSE 0
    END) AS Tiers_Inexistant,

    SUM(CASE
        WHEN c.CT_Nom IS NULL
          OR LTRIM(RTRIM(c.CT_Nom)) = ''
        THEN 1 ELSE 0
    END) AS Nom_Vide,

    SUM(CASE
        WHEN c.CT_Prenom IS NULL
          OR LTRIM(RTRIM(c.CT_Prenom)) = ''
        THEN 1 ELSE 0
    END) AS Prenom_Vide

FROM XXXX.dbo.F_CONTACTT c

LEFT JOIN XXXX.dbo.F_COMPTET t
    ON LTRIM(RTRIM(t.CT_Num)) = LTRIM(RTRIM(c.CT_Num));

-- Vérifie globalement la cohérence des contacts : identifiants CT_No,
-- rattachement à un tiers F_COMPTET via CT_Num, ainsi que la présence
-- des noms et prénoms. Les résultats indiquent le nombre d'anomalies détectées.

2. Contacts avec problème de rattachement au tiers
SELECT
    c.CT_No,
    c.CT_Num,
    c.CT_Nom,
    c.CT_Prenom,
    c.N_Service,
    c.N_Contact,
    CASE
        WHEN c.CT_Num IS NULL THEN 'CT_Num NULL'
        WHEN LTRIM(RTRIM(c.CT_Num)) = '' THEN 'CT_Num vide'
        WHEN t.CT_Num IS NULL THEN 'Tiers inexistant dans F_COMPTET'
        ELSE 'OK'
    END AS Anomalie
FROM XXXX.dbo.F_CONTACTT c
LEFT JOIN XXXX.dbo.F_COMPTET t
    ON LTRIM(RTRIM(t.CT_Num)) = LTRIM(RTRIM(c.CT_Num))
WHERE
       c.CT_Num IS NULL
    OR LTRIM(RTRIM(c.CT_Num)) = ''
    OR t.CT_Num IS NULL
ORDER BY
    c.CT_Num,
    c.CT_No;

-- Identifie les contacts dont le CT_Num est vide ou NULL,
-- ou dont le CT_Num renseigné ne correspond à aucun tiers
-- existant dans la table F_COMPTET.

3. Vérifier les CT_No en double
SELECT
    c.CT_No,
    COUNT(*) AS Nombre
FROM XXXX.dbo.F_CONTACTT c
WHERE c.CT_No IS NOT NULL
GROUP BY c.CT_No
HAVING COUNT(*) > 1
ORDER BY c.CT_No;

-- Identifie les CT_No utilisés par plusieurs contacts,
-- afin de détecter d'éventuels doublons d'identifiants.

Puis, pour voir les contacts concernés :

SELECT
    c.CT_No,
    c.CT_Num,
    c.CT_Nom,
    c.CT_Prenom,
    c.N_Service,
    c.N_Contact
FROM XXXX.dbo.F_CONTACTT c
WHERE c.CT_No IN
(
    SELECT CT_No
    FROM XXXX.dbo.F_CONTACTT
    WHERE CT_No IS NOT NULL
    GROUP BY CT_No
    HAVING COUNT(*) > 1
)
ORDER BY
    c.CT_No;

-- Affiche le détail des contacts concernés par les doublons de CT_No
-- afin de permettre leur identification et leur contrôle dans Sage.

4. Vérifier les CT_Num avec espaces
SELECT
    CT_No,
    CT_Num,
    '[' + CT_Num + ']' AS CT_Num_Visible,
    CT_Nom,
    CT_Prenom
FROM XXXX.dbo.F_CONTACTT
WHERE
    CT_Num IS NOT NULL
    AND CT_Num <> LTRIM(RTRIM(CT_Num))
ORDER BY
    CT_Num;

-- Identifie les CT_Num contenant des espaces en début ou en fin,
-- susceptibles de provoquer des différences de correspondance
-- avec les numéros de tiers présents dans F_COMPTET.

5. Vérifier les contacts sans nom/prénom
SELECT
    CT_No,
    CT_Num,
    CT_Nom,
    CT_Prenom,
    N_Service,
    N_Contact
FROM XXXX.dbo.F_CONTACTT
WHERE
       CT_Nom IS NULL
    OR LTRIM(RTRIM(CT_Nom)) = ''
    OR CT_Prenom IS NULL
    OR LTRIM(RTRIM(CT_Prenom)) = ''
ORDER BY
    CT_Num,
    CT_No;

-- Identifie les contacts dont le nom ou le prénom est NULL ou vide,
-- afin de repérer les fiches de contact potentiellement incomplètes.

6. Vérifier les CT_No invalides
SELECT
    CT_No,
    CT_Num,
    CT_Nom,
    CT_Prenom
FROM XXXX.dbo.F_CONTACTT
WHERE
       CT_No IS NULL
    OR CT_No <= 0
ORDER BY
    CT_No;

-- Identifie les contacts dont le CT_No est NULL, égal à zéro
-- ou inférieur à zéro, afin de détecter les identifiants invalides.


