Comment lire un champ crypté de la BDD ?

Cette section est consacrée aux développements d'applications interfacées avec les logiciels Sage.

Modérateurs: Super-Apogea, Super Modérateur

Comment lire un champ crypté de la BDD ?

de Josette92 » Jeu 7 Oct 2010 15:17

Bonjour,

J'utilise SAGE Paie 100 avec une base de données SQL Server, et après avoir fouillé partout sur le net, je n'ai pas trouvé de solution. Je poste donc ici en dernier recours.

Mon objectif est de lister tous les salaires des employés pour les utiliser dans une application PHP. Après du temps de recherche au milieu de toutes les tables de la BDD, je pense que les salaires sont stockés dans la table T_HST_SALAIRE dans le champ "SalaireBase". Seulement, comme bcp d'autres champs, "SalaireBase" est crypté. J'obtiens par exemple ce genre de résultat : 0x000040D871BEB851EB850000

Ma question est donc la suivante : comment je peux obtenir une valeur visible (donc non codée) de ce résultat ? (0x000040D871BEB851EB850000). Ou comment décoder ce champ pour me permettre d'obtenir la liste de tous les salaires ?

Par avance je vous remercie.
Posteur néophyte
Posteur néophyte
 
Messages: 9
Inscription: Jeu 7 Oct 2010 14:45

Re: Comment lire un champ crypté de la BDD ?

de OokieDookie » Ven 8 Oct 2010 11:53

Bonjour,

Il faut utiliser la fonction utilisateur dbo.DecryptConstante avec la colonne concernée (ou toute colonne de type de données TConstante)
Le résultat retourné est alphanumérique (dans l'application, l'utilisateur saisit un code constante ou un montant directement).

Attention : Bug d'install sur SQL Server 2005, pas gênant pour le produit, mais empêchant la fonction de retourner correctement les résultats dans des requêtes SQL directes.
Il faut faire pointer manullement la PS étendue xpCstGetDouble de la base master vers la DLL C:\Windows\System32\SageProckStock.dll
SQL 2008 64 bits: ça ne fonctionnera pas (DLL en 32 bits) :?

Concernant les salaires, seuls les historiques renverront une valeur correcte. Il faut pointer sur la table T_CUMSAL en utilisant un filtre sur OpCstCumul = 59 (= constante SALBASE) pour avoir les salaires en cours

Code: Tout sélectionner
SELECT
   S.SA_CompteurNumero, -- Compteur du salarié, lien avec NumSalarie dans toutes les autres tables
   S.Nom,
   S.Prenom,
   H.DateHist,
--   RTRIM(ISNULL(dbo.DecryptConstante(H.SalaireBase), '')) AS SalaireBase, -- T_HST_SALAIRE
--   RTRIM(ISNULL(dbo.DecryptConstante(C.ElementCumul), '')) AS SalaireBaseEnCours, -- En cours
   H.InfoEnCours, -- 1 = En cours => DateHist NULL, 0 = historique => DateHist alimentée
   CASE H.InfoEnCours
      WHEN 1 THEN RTRIM(ISNULL(dbo.DecryptConstante(C.ElementCumul), ''))
      ELSE RTRIM(ISNULL(dbo.DecryptConstante(H.SalaireBase), ''))
   END AS SalaireBase
FROM
   T_SAL S
INNER JOIN
   T_HST_SALAIRE H
ON
   S.SA_CompteurNumero = H.NumSalarie
INNER JOIN
   T_CUMSAL C
ON
   S.SA_CompteurNumero = C.NumSalarie
AND
   C.OpCstCumul = 59
ORDER BY
   S.MatriculeSalarie,
   H.InfoEnCours DESC,
   H.DateHist DESC


Ce post et celui-ci vous donneront des infos supplémentaires.


HTH,
"L'expérience est le nom que chacun donne à ses erreurs." (O. Wilde)
Qualité et précision de la question conditionnent celles de la réponse. :roll:
Et si on gagnait TOUS du temps ? Menu "?", A propos de :wink:
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 1481
Inscription: Jeu 14 Fév 2008 13:50
Localisation: Paris

Re: Comment lire un champ crypté de la BDD ?

de Josette92 » Ven 8 Oct 2010 15:40

Bonjour OokieDookie.

Je te remercie pour ta réponse détaillée.
Je testerai ta solution en début de semaine prochaine et je vous tiendrai informé de mon avancée.

Bon après-midi.
Posteur néophyte
Posteur néophyte
 
Messages: 9
Inscription: Jeu 7 Oct 2010 14:45

Re: Comment lire un champ crypté de la BDD ?

de Josette92 » Jeu 21 Oct 2010 17:36

Bonjour,

Avant de tester votre requête OokieDookie, j'ai simplement voulu tester la fonction "DecryptConstante" en tapant ceci sous SQL Server : Select dbo.DecryptConstante(0x000040D871BEB851EB850000)

Seulement j'ai un message d'erreur me disant que la fonction XP_CstGetDouble est manquante. Après quelques recherches, j'ai vu que normalement elle était dans dans les procédures stockées étendues de la base de données master. Mais elle ne s'y trouve pas. Comment se fait-il ? Que dois-je faire pour avoir la fonction XP_CstGetDouble sur SQL Server, et ainsi réussir à exécuter DecryptConstante ?

Merci pour votre aide,
Bonne fin de journée.
Posteur néophyte
Posteur néophyte
 
Messages: 9
Inscription: Jeu 7 Oct 2010 14:45

Re: Comment lire un champ crypté de la BDD ?

de OokieDookie » Ven 22 Oct 2010 10:07

Bonjour,

Il faut installer les composants SQL Server de la paie sur l'instance concernée à partir du DVD d'installation.

HTH,
"L'expérience est le nom que chacun donne à ses erreurs." (O. Wilde)
Qualité et précision de la question conditionnent celles de la réponse. :roll:
Et si on gagnait TOUS du temps ? Menu "?", A propos de :wink:
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 1481
Inscription: Jeu 14 Fév 2008 13:50
Localisation: Paris

Re: Comment lire un champ crypté de la BDD ?

de Josette92 » Ven 22 Oct 2010 12:21

Bonjour,

Merci OokieDookie, la fonction est bien insérée. Le composant était pourtant déjà installé à la base, mais le fait de l'avoir réinstallé l'a ajoutée.

Par contre, maintenant si je lance votre requête ajoutée lors de votre 1er message ici, ou ma simple requête test (Select dbo.DecryptConstante(0x000040D871BEB851EB850000)) il me souligne dbo.DecryptConstante et j'ai le message d'erreur suivant lorsque je lance les requêtes :

Msg 4121, Niveau 16, État 1, Ligne 1
Impossible de trouver la colonne "dbo" la fonction définie par l'utilisateur ou l'agrégat "dbo.DecryptConstante". Le nom pourrait également être ambigu.

Que dois-je faire pour résoudre ce nouveau problème ?

En tout cas merci pour vos réponses rapides.

Bonne journée.
Posteur néophyte
Posteur néophyte
 
Messages: 9
Inscription: Jeu 7 Oct 2010 14:45

Re: Comment lire un champ crypté de la BDD ?

de OokieDookie » Ven 22 Oct 2010 13:39

Re,

Il faut se mettre sur une BDD Sage Paie, ou appeller la constante avec le préfixe de la base concernée.

Code: Tout sélectionner
SELECT SagePaieSQL.dbo.DecryptConstante(0x000040D871BEB851EB850000)


HTH,
"L'expérience est le nom que chacun donne à ses erreurs." (O. Wilde)
Qualité et précision de la question conditionnent celles de la réponse. :roll:
Et si on gagnait TOUS du temps ? Menu "?", A propos de :wink:
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 1481
Inscription: Jeu 14 Fév 2008 13:50
Localisation: Paris

Re: Comment lire un champ crypté de la BDD ?

de Josette92 » Ven 22 Oct 2010 14:32

Re-bonjour,

Un coup les requêtes fonctionnent, un coup non, c'est un peu étrange, toutefois ça fonctionne parfaitement. Merci de votre aide pour la résolution de ce problème.

Pour finir, votre requête renvoie des salaires que je n'arrive pas à retrouver si je regarde une fiche de paie extraite du livret de paie de Sage. Comment puis-je récupérer la vraie valeur net réelle retournée par Sage qui se trouve affichée sur toutes les fiches de paie ?

Cordialement.
Posteur néophyte
Posteur néophyte
 
Messages: 9
Inscription: Jeu 7 Oct 2010 14:45

Re: Comment lire un champ crypté de la BDD ?

de Josette92 » Ven 22 Oct 2010 14:41

Rectification le salaire de base est marqué en valeur mensuelle. Mais au final c'est la valeur net que j'aimerais récupérer.

Donc est-il possible d'avoir le net directement ?
Sinon comment avoir le total brut ainsi que le total cotisation (+les remboursements éventuels etc) ? Auquel cas il restera juste à faire une opération de soustraction et d'addition.

Cordialement.
Posteur néophyte
Posteur néophyte
 
Messages: 9
Inscription: Jeu 7 Oct 2010 14:45

Re: Comment lire un champ crypté de la BDD ?

de OokieDookie » Mar 26 Oct 2010 12:25

Bonjour,

Dans un des liens que je vous ai donné vous avez une requête qui permet d'obtenir la liste des cumuls que vous pouvez appeler.

Utilisez la valeur de l'entité pour filtrer une requête sur :
T_CUMSAL (colonne OpCstCumul) pour les cumuls IMTA (donc ValeurIntermediaire avant clôture, ValeurMensuelle après)
T_HCUM (colonne Entite) pour les historiques mois par mois

Pour le net, vous devez donc utiliser 4 (NETIMPO) ou 3 (NETPAIE)

HTH,
"L'expérience est le nom que chacun donne à ses erreurs." (O. Wilde)
Qualité et précision de la question conditionnent celles de la réponse. :roll:
Et si on gagnait TOUS du temps ? Menu "?", A propos de :wink:
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 1481
Inscription: Jeu 14 Fév 2008 13:50
Localisation: Paris

Re: Comment lire un champ crypté de la BDD ?

de Josette92 » Mer 27 Oct 2010 11:20

Bonjour,

Oui j'ai regardé les liens hier dans la matinée justement. Et j'ai fini par trouver dans la base de données les valeurs qui correspondent au bulletin de paie dans la table T_HCUM comme vous venez de le mentionner. Ensuite, il faut effectivement jouer sur le n° de l'entité pour trouver le net.

En tout cas mon problème est entièrement résolu.

Merci beaucoup OokieDookie pour votre temps et vos qualités de réponses.


Cordialement.
Posteur néophyte
Posteur néophyte
 
Messages: 9
Inscription: Jeu 7 Oct 2010 14:45

Re: Comment lire un champ crypté de la BDD ?

de OokieDookie » Mer 27 Oct 2010 12:17

Avec plaisir.

SVP éditez votre PREMIER message pour passer le sujet en résolu.

Bonne journée.
"L'expérience est le nom que chacun donne à ses erreurs." (O. Wilde)
Qualité et précision de la question conditionnent celles de la réponse. :roll:
Et si on gagnait TOUS du temps ? Menu "?", A propos de :wink:
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 1481
Inscription: Jeu 14 Fév 2008 13:50
Localisation: Paris

Re: Comment lire un champ crypté de la BDD ?

de cetipar » Ven 18 Oct 2013 10:01

bonjour,
je suis en SAGE i7

SELECT SagePaieSQL.dbo.DecryptConstante(0x000040D871BEB851EB850000) me renvoie NULL
SELECT SagePaieSQL.dbo.GetCSTDouble(0x000040D871BEB851EB850000) me renvoie NULL

Auriez vous une piste svp ? je ne comprends pas.
Posteur néophyte
Posteur néophyte
 
Messages: 2
Inscription: Ven 18 Oct 2013 09:59

Re: Comment lire un champ crypté de la BDD ?

de OokieDookie » Ven 18 Oct 2013 11:08

Bonjour,

Dans SQL Management Studio, développez les bases systèmes / master / programmabilité / procédures stockées étendues
Double-cliquez sur Xp_CstGetDouble.
Cliquez sur la case en regard de DLL et sélectionnez C:\windows\system32\SageProcStock.dll (SageProcStock64.dll si système 64 bits).

PS : La prochaine fois, merci de ne pas utiliser un post résolu et de créer le votre, merci.

HTH,
"L'expérience est le nom que chacun donne à ses erreurs." (O. Wilde)
Qualité et précision de la question conditionnent celles de la réponse. :roll:
Et si on gagnait TOUS du temps ? Menu "?", A propos de :wink:
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 1481
Inscription: Jeu 14 Fév 2008 13:50
Localisation: Paris

Re: Comment lire un champ crypté de la BDD ?

de ahmedTUNISIE » Lun 19 Oct 2015 13:05

Bonjour à tous,

Merci de m'aider sur une requête qui permet de lire les éléments d'une rubrique de paie.
Car toujours je obtient des valeurs vide ou nul.
Posteur néophyte
Posteur néophyte
 
Messages: 6
Inscription: Mar 23 Sep 2014 18:43


Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités