IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Programme de traitement des salaires très lent


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut Programme de traitement des salaires très lent
    Bonjour

    J’ai un programme de traitement des salaires il est très lent, et aussi il devient très lent avec l’augmentation des nombre d’enregistrements dans la base bulletin et détail bulletin

    J’utilise plusieurs base en même temps pour faire ce traitement, une base bulletin et une base rubrique bulletin (détail bulletin), et un autre base Rubrique (formule du calcul)

    les bases il sent en Paradox,

    Merci d’avance

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Utilises tu des TQuery ou seulement de TTable ?
    Si tu utilises des TTables, il faudrait que tu changes de fonctionnement et que tu passes par l'utilisation des requetes avec les TQuery.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Il y a plusieurs pistes possibles, mais d'abord quelques informations :

    Combien d'enregistrements dans tes tables,
    Structure des champs composant la clé primaire,
    Nombre d'utilisateurs utilisant cette application

    Avec ces infos je pourrai t'aider.

  4. #4
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 202
    Points : 108
    Points
    108
    Par défaut
    envoie nous les tables et leurs structures, en plus on veut savoir comment ta codé? s'il y a des requettes , des procedures, des fonctions,...

    Moi j'ai un logciel de paie qui calcule 300 salariés en 3mn

  5. #5
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Rayek Voir le message
    Utilises tu des TQuery ou seulement de TTable ?
    Si tu utilises des TTables, il faudrait que tu changes de fonctionnement et que tu passes par l'utilisation des requetes avec les TQuery.
    merci pour votre reponse
    j'utilise TTable seulement,
    svp tu pense à quoi comme cause
    a+

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 192
    Points
    192
    Par défaut
    Désolé, mais sans plus d'informations, nous allons avoir dure à t'aider.

    Y a t'il des index dans tes tables ?
    Comment est structuré ton code ?
    Comment est structuré ton projet ?

    ETC... sans compter les questions des autres membres.
    Tu peux le faire, tu veux le faire tu vas le faire Bref, soyons positif

  7. #7
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par ALWEBER Voir le message
    Il y a plusieurs pistes possibles, mais d'abord quelques informations :

    Combien d'enregistrements dans tes tables,
    Structure des champs composant la clé primaire,
    Nombre d'utilisateurs utilisant cette application

    Avec ces infos je pourrai t'aider.
    merci pour votre réponse

    --Combien d'enregistrements dans tes tables
    dans la table Employe 1680 enregistrements, mais il ya que 1200 qui sent active pour le traitement

    dans la table Bulletin 12200 enregistrements

    dans la table LinBull 141240 enregistrements

    il ya d'autre table comme Absence et CongeMaladie ...

    --Structure des champs composant la clé primaire
    la table Employe il y a tous les information d'une personnel,

    clé Matricule seulement

    la table Bulletin il y a le Matricule, le mois l'année .... Fonction, Categorie, Section ..., SoumisIRG, Brut, Retenue, NetPayer ...

    clé Matricule, Num(+)

    dans la table LinBull il y a Code (le Num de table Bulletin), Code_Rub, Base, Taux, Montant, Imposable, Cotisable,

    clé Code, Code_Rub, Num(+)

    Nombre d'utilisateurs utilisant cette application
    l'application il est en version mono poste base Paradox

  8. #8
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par franck SEFIC Voir le message
    envoie nous les tables et leurs structures, en plus on veut savoir comment ta codé? s'il y a des requettes , des procedures, des fonctions,...
    merci pour votre réponse,

    Citation Envoyé par franck SEFIC Voir le message
    Moi j'ai un logciel de paie qui calcule 300 salariés en 3mn
    ca pour moi un rêve, elle développer sur quelle type de base et avec quel langage, moi 12000 en 22 heure, et aussi avant elle été en 6 heure, le problème avec l'augmentation de la base Bulletin et LinBull elle deviens très très lent

  9. #9
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par dd_garion Voir le message
    Désolé, mais sans plus d'informations, nous allons avoir dure à t'aider.

    Y a t'il des index dans tes tables ?
    Comment est structuré ton code ?
    Comment est structuré ton projet ?

    ETC... sans compter les questions des autres membres.
    merci pour votre réponse

    oui il ya des index dans les tables

    pour le code il ya une unité bulletin pour ajoute les bulletin avec plusieurs procédure et fonction

    unité de calcul des rubriques avec plusieurs fonction et procédure

    et il ya les masques pour la saisie et la modification des informations

  10. #10
    Membre actif Avatar de liazidf
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 281
    Points : 261
    Points
    261
    Par défaut
    salut,
    je pense que le problème vient de la façon dont vous faite le calcul, vous devez certainement effectuer l'accé aux tables pour chaque rubrique que vous calculez, essayer plutôt les tables mémoire pour estimer les temps.
    bon courage

  11. #11
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par liazidf Voir le message
    salut,
    je pense que le problème vient de la façon dont vous faite le calcul, vous devez certainement effectuer l'accé aux tables pour chaque rubrique que vous calculez, essayer plutôt les tables mémoire pour estimer les temps.
    bon courage
    salut,
    merci pour votre réponse,
    oui je fait l'accé au table pour chaque rubrique,
    comment les tables mémoires, j'ai jamais utilisé ca, si tu peut me donne un exemple

  12. #12
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Je suppose que pour vos calcul vous avez des informations fixes qui ne bougent pas (durant la phase de calcul) notamment les fameux base/taux/montant des rubriques de paye.
    L'idée c'est d'éviter d'aller faire une requête unitaire juste pour récupérer une valeur de rubrique qui se répète pour chaque salarié.
    Plus généralement l'idée serait plutôt de faire des requête de masse, de stocker ceci dans des DataSets et d'utiliser les DataSets pour rechercher les infos plutôt que de faire des accès BDD. Je suppose que c'est cela que voulais dire liazidf avec ses "tables mémoires".

    Pour reprendre les rubriques de paye moi je verrais bien une classe qui encapsule un DataSet, une méthode Charger pour aller chercher toutes les rubriques utiles et les stocker dans le DataSet. Une méthode pour récupérer la valeur en lui passant le code de la rubrique, pour ce faire utiliser un locate sur l'objet DataSet pour retrouver l'enregistrement correspondant (positionner un index sur le code dans le DataSet pour maximiser les temps de réponses pour la recherche).
    Enfin pour les rubriques qui sont utilisées tout le temps, je pense qu'il serait bon de les extraire (à l'initialisation avant le lancement des calculs) dans des propriétés de la classe, et ensuite dès que le programme sait qu'il doit récupérer les infos de ces rubriques en particulier il récupère directement la propriété plutôt que de passer par le Locate.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  13. #13
    Membre habitué Avatar de Archibald29
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 112
    Points : 131
    Points
    131
    Par défaut Raccourcir durée traitement
    Bonjour,

    1 - Avez vous envisagé de mettre en place des tables "d'archivage" de façon à minimiser le volume des tables dans lesquelles les données "utiles" sont recherchées ? (il semble que votre durée de traitement augmente de façon exponentielle comme si l'on traitait des éléments archivables)

    2 - Vous pourriez également mettre en place un mode "test" qui mesurerait les durées de traitement à l'intérieur de chaque boucle de façon à savoir où se situent les procédures qui prennent le plus de temps. (par exemple en basculant aprés appui sur une touche de fonction je passe en mode Test, et à partir de là je prends un TimeStamp à l'entrée et à la sortie de chaque procédure, et en stockant les durées par procédure dans une table annexe).


  14. #14
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Archibald29 Voir le message
    Bonjour,

    1 - Avez vous envisagé de mettre en place des tables "d'archivage" de façon à minimiser le volume des tables dans lesquelles les données "utiles" sont recherchées ? (il semble que votre durée de traitement augmente de façon exponentielle comme si l'on traitait des éléments archivables)
    salut
    merci pour votre réponse
    j'ai pense à faire une base pour la derniers bulletin par personne, mais j'ai pensé quelle prend de temps pour la Remplier

    Citation Envoyé par Archibald29 Voir le message
    2 - Vous pourriez également mettre en place un mode "test" qui mesurerait les durées de traitement à l'intérieur de chaque boucle de façon à savoir où se situent les procédures qui prennent le plus de temps. (par exemple en basculant aprés appui sur une touche de fonction je passe en mode Test, et à partir de là je prends un TimeStamp à l'entrée et à la sortie de chaque procédure, et en stockant les durées par procédure dans une table annexe).
    une bonne idée pour connaitre le temps d'exécution pour chèque procédures

  15. #15
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    Bonjour,

    Je suppose que pour vos calcul vous avez des informations fixes qui ne bougent pas (durant la phase de calcul) notamment les fameux base/taux/montant des rubriques de paye.
    L'idée c'est d'éviter d'aller faire une requête unitaire juste pour récupérer une valeur de rubrique qui se répète pour chaque salarié.
    Plus généralement l'idée serait plutôt de faire des requête de masse, de stocker ceci dans des DataSets et d'utiliser les DataSets pour rechercher les infos plutôt que de faire des accès BDD. Je suppose que c'est cela que voulais dire liazidf avec ses "tables mémoires".

    Pour reprendre les rubriques de paye moi je verrais bien une classe qui encapsule un DataSet, une méthode Charger pour aller chercher toutes les rubriques utiles et les stocker dans le DataSet. Une méthode pour récupérer la valeur en lui passant le code de la rubrique, pour ce faire utiliser un locate sur l'objet DataSet pour retrouver l'enregistrement correspondant (positionner un index sur le code dans le DataSet pour maximiser les temps de réponses pour la recherche).

    salut,
    merci pour votre réponse
    le problème que les rubrique change d'une personne à une autre tu peut dire qu'il y a plusieurs groupe de personne,

    j'ai pas essayer de stocké la base rubrique dans un DataSet, et aussi il ya le problème des des sommes des Linbulletin pour calculer le brut ou irg ... pour chaque bulletin

    Citation Envoyé par Aka Guymelef Voir le message
    Enfin pour les rubriques qui sont utilisées tout le temps, je pense qu'il serait bon de les extraire (à l'initialisation avant le lancement des calculs) dans des propriétés de la classe, et ensuite dès que le programme sait qu'il doit récupérer les infos de ces rubriques en particulier il récupère directement la propriété plutôt que de passer par le Locate.
    j'ai jamais utilise des classe et les propriétés de classe

  16. #16
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Pour moi ce qui plombe le traitement (d'après ce que vous avez dit) ce sont les accès incessant (et unitaire) à la base de données pour aller chercher chaque information pour pouvoir faire le calcul. Il faut essayer de grouper et mutualiser au maximum. en clair ce n'est pas la base de données qui doit travailler mais bel et bien le programme.

    Dans cette logique les éléments fixes du calcul (comme les rubriques de paye) doivent être chargées en une seule fois et une et une seule fois au début du programme. Et après on fait des recherches dans le DataSet "référentiel".

    Ici j'ai bien parlé des rubriques de paye soit la table de référence où se trouve tout les codes de rubriques ainsi que leur taux/base/montant associés. Je ne parlais pas de la liaison entre ces rubriques et les salariés qui doivent être dans une autre table à priori.

    Pour revenir aux salariés là aussi il faut grouper, charger tout les salariés à calculer avec leurs rubriques associées puis diviser dans le programme salarié par salarié.

    C'est bien dommage que vous ne sachiez pas utiliser les classes car je suis sûr que ça vous aiderez beaucoup rien que dans la lisibilité, la structure et la maintenabilité du code.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  17. #17
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    Bonjour,

    Pour moi ce qui plombe le traitement (d'après ce que vous avez dit) ce sont les accès incessant (et unitaire) à la base de données pour aller chercher chaque information pour pouvoir faire le calcul. Il faut essayer de grouper et mutualiser au maximum. en clair ce n'est pas la base de données qui doit travailler mais bel et bien le programme.

    Dans cette logique les éléments fixes du calcul (comme les rubriques de paye) doivent être chargées en une seule fois et une et une seule fois au début du programme. Et après on fait des recherches dans le DataSet "référentiel".

    Ici j'ai bien parlé des rubriques de paye soit la table de référence où se trouve tout les codes de rubriques ainsi que leur taux/base/montant associés. Je ne parlais pas de la liaison entre ces rubriques et les salariés qui doivent être dans une autre table à priori.

    Pour revenir aux salariés là aussi il faut grouper, charger tout les salariés à calculer avec leurs rubriques associées puis diviser dans le programme salarié par salarié.
    bonjour
    merci pour votre réponse
    moi aussi je pense que l'accée au base de donnée qui rende le programme très lent,
    je pensé à faire change les procédure avec des requête SQL


    Citation Envoyé par Aka Guymelef Voir le message
    C'est bien dommage que vous ne sachiez pas utiliser les classes car je suis sûr que ça vous aiderez beaucoup rien que dans la lisibilité, la structure et la maintenabilité du code.
    ta pas un exemples pour cette technique

  18. #18
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Pour ce qui est de la construction de classe et leur utilisation (ce qu'on appelle la programmation objet) je préfère te renvoyer vers un tutoriel du site pour que tu y apprennes les bases ici. Après si tu n'arrives pas à construire tes classes métiers, on pourra toujours t'aider là-dessus. Mais avant mieux vaut commencer par maîtriser les bases.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  19. #19
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    Pour ce qui est de la construction de classe et leur utilisation (ce qu'on appelle la programmation objet) je préfère te renvoyer vers un tutoriel du site pour que tu y apprennes les bases ici. Après si tu n'arrives pas à construire tes classes métiers, on pourra toujours t'aider là-dessus. Mais avant mieux vaut commencer par maîtriser les bases.
    salut
    merci pour votre aide,
    et pour ce lien,
    réellement le principe je le connue, j’ai l’étudier avent plusieurs fois, mais le problème que j’ai pas l’habitude de développez avec cette technique

  20. #20
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Il faut voir une classe comme étant : techniquement une encapsulation d'un ou plusieurs éléments et fonctionnellement comme un travailleur spécialisé. Ainsi chaque classe (ou objet) va être dédié à faire les actions propre à une partie du métier. Et l'ensemble des classes permettra de réaliser l'objectif voulu, en faisant en sorte que chaque classe communique avec les autres.

    Dans votre cas par exemple on pourrait très bien avoir le découpage suivant :

    - une classe qui gère les rubriques de paye (référentiel) déclaré en variable globale, capable de charger les données et de récupérer les informations suivant le code de rubrique passé.

    - une classe qui gère la liste des salariés, c'est le point d'entrée du programme, il charge la liste des salariés à traiter puis parcours ce DataSet et créé un objet bulletin (voir ci-dessous), initialise toutes ses propriétés, et demande au bulletin de se calculer et de s'enregistrer en base

    - une classe bulletin, c'est le cœur du métier, il attends que certaines propriétés soient chargées pour fonctionner (idSalarie, ses rubriques de paye afférentes, et tout autres données nécessaire) et possède une fonction de calcul qui va créer autant de ligne au bulletin que de rubrique auquel le salarié à droit (en utilisant la classe de référentiel pour calculer les rubriques) puis fait l'insertion en base de donnée une fois le traitement terminé.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

Discussions similaires

  1. Programme de traitement des données manquantes
    Par stig_66 dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 17/04/2013, 15h29
  2. 1ère ouverture très lente des pages .ASPX
    Par davelop dans le forum ASP.NET
    Réponses: 3
    Dernier message: 19/12/2007, 12h56
  3. Réponses: 5
    Dernier message: 08/01/2007, 14h58
  4. Programme "simple" devient très lent ?
    Par Invité dans le forum Delphi
    Réponses: 8
    Dernier message: 18/09/2006, 22h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo