Menu

Home

Jonathan Petit

DSNQl

Tous les mois, votre logiciel de paie vous génère un fichier DSN.
Ce fichier peut être testé et les anomalies de structure bloquantes peuvent être décelées.
Mais concernant les données elles-mêmes ?
Comment être sûr que les données envoyées sont bien les bonnes ?
Comment s'assurer que toutes les données ont bien été envoyées ?

DSNQl permet d'interroger le contenu de votre DSN et de la convertir au format xlsx (éditables avec Excel, Libre Office, ...), soit en effectuant des requêtes sur le fichier, soit en générant un rapport, c'est à dire en convertissant directement votre DSN en fichier xls.
Cette deuxième solution correspond en fait à une automatisation d'exécutions et d'enregistrement de requêtes.
Vous pourrez ainsi visualiser plus facilement ce que contient votre DSN et contrôler ce que vous envoyez.
Vous pourrez également, à partir des fichiers xls générés, générer des statistiques ou des indicateurs RH très facilement (directement sur Excel ou LibreOffice ou en utilisant des logiciels BI (type Power BI).

Installation

Il n'y a pas d'installation, télécharger DSNQl.zip, dézipper le fichier sur votre disque dur et double-cliquer sur le fichier DSNQL.X.X.X.X.exe.

Rapport / Conversion de DSN en XLSX

Un rapport est une suite de requêtes que DSNQl enregistre dans un fichier xlsx. Le fichier généré comportera autant d'onglet que le rappot contiendra de requêtes.

Générer un rapport

Générer un rapport à partir d'un fichier DSN

Un rapport vous permet de convertir un fichier dsn en un fichier xlsx rapidement et simplement.
Pour générer un rapport, cliquer sur "DSN > XLS" ou dans le menu "Fichier" puis "Convertir une DSN en XLS".
Une fenêtre s'ouvre permettant de spécifier le rapport souhaité et le fichier dsn à convertir.
Cliquer sur "OK", le rapport se génère et va s'enregistrer dans le même répertoire que votre fichier dsn. Il portera le même nom mais avec l'extension .xlsx au lieu de .dsn.

Générer un rapport multi DSN

Un rapport multi DSN permet de retrouver l'historique des valeurs déclarées pour un ou plusieurs agents en effectuant les même requêtes sur plusieurs fichiers DSN et de générer un fichier xlsx avec l'ensemble des données de toutes les DSN.
Chacun des onglets du fichier xlsx contiendra les données de toutes les DSN sélectionnées.
Il est ainsi conseillé de sélectionner dans chacune des requêtes une rubrique de date par exemple qui permettra ensuite de repérer de quelle DSN proviennent les valeurs affichées.
La procédure pour générer un rapport multi DSN est la même que pour un rapport sur une seule DSN.
La seule différence est que si le rapport sélectionné a été configuré en "Multi DSN" (voir plus bas : "Personnalisation d'un rapport"), la fenêtre qui permet de sélectionner la DSN à convertir permettra de sélectionner plusieurs fichiers (à l'aide des touches "ctrl" et "maj")

Fichier de configuration des rapports

Les requêtes sont définies dans le fichier rapport.json qui se trouve dans /Documents/DSNQL.

Récupération du fichier de configuration

Si ce fichier est manquant, la génération du rapport ne pourra pas se faire.
Si vous avez modifié ce fichier et que vous voulez revenir à l'état initial ou si si vous voulez obtenir la dernière version du fichier, vous pouvez télécharger ce fichier.
Pour le télécharger, cliquer sur https://sourceforge.net/projects/dsnql/files/rapports.json/download ou, depuis l'interface, sélectionner "Fichier" puis "Télécharger la configuration des rapports". Le fichier se téléchargera et se positionnera dans le répertoire /Documents/DSNQL.
Si vous vous connectez à Internet avec un proxy, il se peut que le téléchargement ne fonctionne pas. En attendant la correction, télécharger le fichier avec le lien ci-dessus et copier le fichier dans le bon répertoire.
Redémarrer DSNQl.

Personnalisation d'un rapport

Avec l'application

Cliquer sur le menu "Rapport" puis "Gérer les rapports" pour ouvrir la fenêtre de gestion des rapports.
La fenêtre permet :
- de créer de nouveaux rapports (en cliquant sur le bouton + à côté du menu déroulant des rapports
- de modifier les informations d'un rapport (Intitulé, code, multi DSN)
- de dupliquer un rapport
Lorsque vous avez sélectionné un rapport, vous pouvez :
- Ajouter une requête (= un onglet dans le fichier XLSX généré)
- Modifier les requêtes
- Modifier l'ordre des onglets
- Supprimer une requête

Paramètres

Si vous souhaitez par exemple enregistrer un rapport qui permette d'éditer toutes les données concernant un agent, vous pouvez utiliser un paramètre.
Un paramètre permettra, lorsque vous exécuterez votre rapport ou votre requête, de pouvoir renseigner la valeur souhaitée au moment de l'éxécution.
Pour reprendre l'exemple précédent, vous pourrez filtrer le résultat de toutes les requêtes d'un rapport pour un matricule.
Lors de l'exécution DSNQl vous demandera pour quel matricule vous voulez exécuter la requête et filtrera les données pour ce matricule.
Vous pourrez ainsi générer facilement un fichier XLSX pour chaque agent.
En cas de rapport multi DSN, le paramètre sera appliqué sur toutes les DSN sélectionnées.

Un paramètre est défini en mettant un $ devant le nom que l'on souhaite donner au paramètre (sans espace)
Ainsi, les requêtes du rapport pour filtrer les données d'un agent devraient intégrer dans la clause where :

WHERE S21.G00.30.019 = $Matricule
Avec un éditeur de texte

Ce fichier peut être lu avec un éditeur de texte.
Le fichier est constitué d'un tableau Json.
Chaque élément du tableau est un rapport. Dans la version livrée, il n'y a qu'un rapport paramétré mais il est possible d'en ajouter d'autres.
Les propriétés du rapport sont :
* "name" : Le nom / code du rapport
* "label" : le libellé qui s'affichera dans le menu déroulant du choix du rapport
* "requetes" : un tableau qui contiendra toutes les requêtes à exécuter.

Chaque requête est définie par un nom et une requête DSNQl.
La clause FROM sera remplie à l'exécution avec le fichier DSN sélectionné.

Par exemple

{
        "name":"Declaration",
        "select":"SELECT S10.G00.01.*,S20.G00.05.*"
    },

Si la requête contient une clause WHERE, il faudra replacer la clause FROM, par (FROM) avant de renseigner la clause WHERE.
Par exemple :

SELECT S21.G00.30.003, S21.G00.30.004 (FROM) WHERE S21.G00.30.019 = $Matricule

Requêtes

DSNQl permet d'effectuer des requêtes sur votre fichier DSN.
Pour ce faire, il suffit de taper sa requête puis de cliquer sur le bouton "Exécuter", en haut à gauche.

La syntaxe pour effectuer des requêtes sur un fichier DSN s'inspire de la syntaxe de base du SQL.
Si vous connaissez le SQL vous ne devriez pas être perdus, sinon, vous verrez ce n'est pas si compliqué ... :)
Pour pouvoir comprendre la suite vous aurez néanmoins besoin de la documentation DSN, disponible à cette adresse : https://www.net-entreprises.fr/media/documentation/DSN-Datatypes-CT2023.xlsx
Depuis la version 1.3.0.1, DSNQl est doté d'une auto complétion et d'une aide contextuelle qui permettent de faciliter l'écriture des requêtes et d'avoir accès aux descriptifs des différentes rubriques DSN directement depuis DSNQl.

Auto-complétion

L'activation de l'auto-complétion est automatique.
Dès que vous commencer à saisir, DSNQl propose la liste des fonctions et/ou blocs ou rubriques DSN correspondant à ce qui a été précédemment saisi.
Pour valider et écrire ce qui est proposé, il suffit de se déplacer dans la liste avec les flèches haut ou bas et de valider avec la touche Entrer ou de cliquer à l'aide la souris sur la ligne désirée.
La liste proposée évolue en fonction de ce qui est saisi.
La fenêtre se ferme en appuyant sur la touche Echap et s'ouvre en appuyant simultanément sur les touches Ctrl + Espace

Aide contextuelle

L'aide contextuelle de DSNQl concernant les rubriques DSN est constituée en grande partie du contenu des colonnes Name et Description du fichier DSN-Datatypes-CT2023.xlsx (voir plus haut).
En plus d'afficher le code de la rubrique DSN, l'auto-complétion affiche également le nom associé à la rubrique (qui est parfois plus parlant que le code de la rubrique elle-même :) )
Pour afficher l'aide de d'une rubrique ou d'une fonction, il suffit de placer le curseur sur l'élément désiré et d'appuyer simultanément sur les touches Ctrl + Maj + Expace, Une fenêtre s'ouvre alors avec l'aide ou la description associée.
Le contenu de ce qui sera affiché alors pour les rubriques correspond à la description de la documentation technique.

Structure d'une requête

Une requête se décompose en trois parties :
- La partie SELECT dans laquelle vous indiquez la liste des champs que vous voulez extraire.
- La partie FROM dans laquelle vous indiquez sur quel fichier dsn vous effectuez la requête
- La partie WHERE dans laquelle vous pouvez spécifier des filtres. Cette partie est facultative : si elle n'est pas présente, toutes les lignes de votre fichier dsn seront retournées, sans filtre.

Exemple :

SELECT S21.G00.30.003, S21.G00.30.004
FROM c:\fichier.dsn
WHERE S21.G00.30.003 = 'NOM'

SELECT

La partie SELECT contient l'ensemble des champs que vous voulez extraire de votre DSN.
Les champs sont ceux de la norme DSN (cf cahier technique).
Chaque champ est séparé par une virgule et correspondra dans le tableau de résultats à une colonne distincte.

Alias

Si vous ne connaissez pas les codes des champs DSN par coeur, il est possible de renommer un champ DSN de manière à ce que le tableau de résultats présente des colonnes avec des intitulés lisibles par le commun des mortels.
Pour ce faire, il faut rajouter à la suite du nom du champ DSN, le mot clé AS suivi du nom souhaité. La casse n'a pas d'importance, vous pouvez écrire le "as" en majuscule ou en minuscule.
Par exemple :

SELECT S21.G00.30.003 AS NOM, S21.G00.30.004 as PRENOM 

Le tableau de résultats contiendra dans ce cas deux colonnes : la première intitulée "NOM" et la deuxième "PRENOM"

bloc.*

Les champs DSN sont organisés par blocs (cf cahier technique) qui correspondent à des groupes thématiques de données.
Par exemple, le bloc S21.G00.30 contient les données liées à l'individu, le bloc S21.G00.60 les données liées aux arrêts de travail, ...
Si vous souhaitez sélectionner tous les champs d'un bloc, plutôt que de nommer chaque champ, vous pouvez simplement écrire :

SELECT S21.G00.30.* 

Tous les champs du bloc S21.G00.30 seront alors sélectionnés.
Cette notation est plus rapide à saisir, vous êtes sûr de ne pas oublier de champs, mais, par contre, vous ne pourrez pas renommer les champs...

champs groupés

Si vous connaissez le SQL, vous pourriez être tentés d'utiliser dans la clause SELECT les fonctions de groupes COUNT() ou MIN() /MAX()/SUM(),AVG(). Cette possibilité est envisagée mais malheureusement n'est pas encore disponible actuellement.

FROM

Derrière le mot clé FROM, indiquer simplement le chemin d'accès au fichier DSN.
Ce peut être un chemin local, type c:\dossier\fichier.dsn
Ou un chemin réseau, de la forme : \nomPartageRéseau\dossier\fichier.dsn

WHERE

La partie WHERE permet de filtrer les résultats de la requête.
Cette partie, contrairement à la partie SELECT ou la partie FROM, est facultative : si elle n'est pas présente, aucun filtre ne sera appliqué et l'ensemble des données demandées dans la partie SELECT sera retournée.
Elle est composée d'un certain nombre de conditions reliées entre elles par les opérateurs logiques AND (et) et OR (ou).

Structure d'une condition

Une condition est structurée de la manière suivante : champ / opérateur / valeur

Par exemple, si on ne veut que les données de l'agent Tartempion, on écrira la condition :

...
WHERE S21.G00.30.003 = 'Tartempion'

Une condition peut également être structurée de la manière suivante : champ / opérateur / champ
Par exemple, cette condition ne renverra que les agents dont le nom de famille est différent du nom de naissance

...
WHERE s21.g00.30.002 != s21.g00.30.003

Opérateurs d'une condition disponibles

Les opérateurs possibles sont :
= : égal
!= : différent
< : inférieur
<= : inférieur ou égal
> : supérieur
>= : supérieur ou égal
IN : est compris dans une liste de valeur
NOT IN : n'est pas compris dans une liste de valeur

Exemple avec l'opérateur IN (le principe est le même avec NOT IN) :

 WHERE S21.G00.30.003 IN ('Tartempion', 'Toto', 'MisterX') 

Cette condition ne renverra que les agents dont le nom de famille est 'Tartempion', 'Toto' ou 'MisterX'.

Opérateurs logiques

Nous avons vu comment écrire une condition mais la partie WHERE permet d'écrire une suite de conditions reliées entre elles par des opérateurs logiques AND ou OR, ce qui permet de cumuler des conditions.

Par exemple si on veut les agents qui s'appellent Tartempion ou MisterX, on peut écrire la requête avec l'opérateur IN (cf ci dessus) ou de la manière suivante :

WHERE S21.G00.30.003 = 'Tartempion' OR S21.G00.30.003 = 'MisterX'

Si on ne veut par contre que les agents dont le nom de famille est Tartempion et le prénom Gaston, on écrira :

WHERE S21.G00.30.003 = 'Tartempion' AND S21.G00.30.004 = 'Gaston'

On peut cumuler les AND et les OR mais dans ce cas là, attention aux priorités.
Si vous ne connaissez pas, pour faire simple, les priorités d'opérations sont les mêmes qu'en mathématiques entre les + (équivalent à OR) et les X (équivalent à AND) :

WHERE S21.G00.30.003 = 'Tartempion' AND S21.G00.30.004 = 'Gaston' OR S21.G00.30.004 = 'Jeanne'

Cette requête retournera tous les agents qui s'appellent 'Gaston Tartempion' ou dont le prénom est 'Jeanne'
Tandis que la requête suivante retournera tous les agents dont le nom est 'Tartempion' et avec pour prénom 'Gaston' ou 'Jeanne'

WHERE S21.G00.30.003 = 'Tartempion' AND (S21.G00.30.004 = 'Gaston' OR S21.G00.30.004 = 'Jeanne')

Fonctions

DSNQl fournit un esemble de fonctions qui permettent de transformer les données avant de les afficher.
Ces fonctions permettent de manipuler des dates ou du texte;
Liste de fonctions disponibles :
Fonction | Descriptif | Exemples
---------- | ---------- | ------
DATE_FORMAT(date, String format) | Pour formatter une date | DATE_FORMAT(NOW(), 'dd/MM/yyyy') ou DATE_FORMAT(S21,G00,40,001, 'dd/MM/yyyy')
NOW() | Renvoie la date du jour |
DATE_DIFF(date, date, String typeValeur) | Calcule une différence de dates. Les valeurs possibles pour TypeValeur sont : D = renvoie le nombre de jours, M = renvoie le nombre de mois, Y = renvoie le nombre d'années | DATE_DIFF(S21.G00.40.001,NOW(), 'M')
UPPER(String) | Met un texte en majuscule | UPPER(S21.G00.30.004) AS MAJUSCULE,
LOWER(String) | Met en minuscule | LOWER(s21.G00.30.004) AS minuscule,
REPLACE(String, String valeur a remplacer, String texte de remplacement) | Remplace "valeur à remplacer" par "texte de remplacement" dans le premier paramètre | REPLACE(LOWER(S21.G00.30.004), 'e', 'Z') as REPLACE,
CONCAT(String Chaine1, String Chaine2) | Concatène deux chaines de caractères | CONCAT(CONCAT(s21.G00.30.003, ' - '),S21.G00.30.004) as CONCAT,
RIGHT(String, int nombre de caractères) | Retourne X caractères en partant de la droite | RIGHT(S21.G00.30.003, '10'),
LEFT(String, int nombre de caractères) | Retourne X caractères en partant de la gauche | LEFT(S21.G00.30.003, '10'),

Exécution d'une requête

Une fois votre requête écrite, vous pourrez l'exécuter en cliquant sur le bouton "Exécuter"
Le tableau en bas de la fenêtre, dans l'onglet "Result" se met à jour avec les données retournées par la requête.
L'onglet Log vous permettra de voir des statistiques sur votre requête et éventuellement les erreurs rencontrées lors de l'exécution.

Export d'une requête

Lorsque vous avez exécuté votre requête et que le tableau a été mis à jour, vous pourrez exporter le contenu de ce tableau dans un fichier xlsx.
Pour ce faire, cliquer sur le bouton "Exporter", sélectionner le nom de fichier et l'emplacement.

Sauvegarde d'une requête

La sauvegarde d'une requête s'effectue en cliquant sur le menu "Fichier", puis "Enregistrer".
Une fenêtre s'ouvre alors pour vous demander sous quel nom vous voulez enregistrer le fichier et à quel emplacement.
Cliquer ensuite sur "Enregistrer"

Ouverture d'une requête

Pour ouvrir une requête précédemment enregistrée (et non pas pour ouvrir un fichier DSN), cliquer sur le menu "Fichier", puis "Ouvrir".
Une fenêtre s'ouvre alors pour vous permettre de sélectionner le fichier que vous voulez ouvrir.
Cliquer ensuite sur "Ouvrir"

Project Members: