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

WinDev Discussion :

Explication des codes utilisés dans une procédure [WD15]


Sujet :

WinDev

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 75
    Points : 44
    Points
    44
    Par défaut Explication des codes utilisés dans une procédure
    Salut à tous!
    Cette discussion complète ma première qui a porté sur
    État croisé et paramétré avec rubrique calculé
    A voir ici:http://http://www.developpez.net/forums/d1386896/environnements-developpement/windev/etat-croise-parametre-rubrique-calcule/
    Une discussion résolue par Laurent que je ne cesserai de remercier.
    J'ai essayé d' analyser ses codes pour créer les miens mais je n'y parviens
    toujours pas, je ne veux pas être un copieur des codes mes plutôt comprendre
    ce que je fais, c'est pourquoi je viens demander votre aide sur deux choses:
    1. Si possibles expliquez moi chaque ligne des codes de Laurent ci-après:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    PROCEDURE AfficheJournalCaisse()
    nNb_colonne est un entier
    sMa_requete est une chaîne
    sdRQ1 est une Source de Données
    sdRQ2 est une Source de Données
    sMa_requete = [
    SELECT DISTINCT 
    OPERATION.Cod_devise AS Cod_devise
    FROM 
    OPERATION
    WHERE 
    ]
    sMa_requete += RC + TAB + "OPERATION.Dat_operation BETWEEN '" + SAI_Date_début + "' AND '" + SAI_Date_fin + "'"
     
    // Exécution de la requête
    SI PAS HExécuteRequêteSQL(sdRQ1,MaConnexion1,hRequêteSansCorrection,sMa_requete) ALORS Erreur("Problème requête 1"); RETOUR
    sMa_requete = [
    SELECT  
    op.Num_compte,
    op.Dat_operation ,
    COMPTE.Lib_compte,
    ]
    // Les colonnes de devise sont construites dynamiquement ici
    POUR TOUT sdRQ1 
    	sMa_requete += RC + TAB + "SUM(CASE op.Cod_devise WHEN '" + sdRQ1.Cod_devise + "' THEN op.Mont ELSE 0 END) AS " + sdRQ1.Cod_devise + ","	
    FIN
     
    // La sous requête "op" effectue les conversions des devises
    sMa_requete += RC + [
    Sum(op.TOT) AS TOT
    FROM
    (
    SELECT  
    OPERATION.Num_compte,
    OPERATION.Dat_operation,
    OPERATION.Cod_devise,
    OPERATION.mont,
    Taux_USD,
    DEVISE.Taux,
    OPERATION.mont * Taux_USD / DEVISE.Taux AS TOT
    FROM 
    OPERATION,
    DEVISE,
    (	SELECT	Taux AS Taux_USD
    FROM		DEVISE
    WHERE	Cod_devise = 'USD'
    ) AS	USD
    WHERE 
    OPERATION.Cod_devise = DEVISE.Cod_devise
    ]
     
    sMa_requete += RC + TAB + "AND	OPERATION.Dat_operation BETWEEN '" + SAI_Date_début + "' AND '" + SAI_Date_fin +"'"
    sMa_requete += RC + [
    ) AS op,
    COMPTE
    WHERE 
    op.Num_compte = COMPTE.Num_compte
    GROUP by Num_compte,Dat_operation,Lib_compte
    ]
     
    // Exécution de la requête
    SI PAS HExécuteRequêteSQL(sdRQ2,MaConnexion1,hRequêteSansCorrection,sMa_requete) ALORS Erreur("Problème requête 2"); RETOUR
     
    // remplit la table TCD
    ConstruitTableFichier(TABLE_TCD_operation_periode,sdRQ2,taRemplirTable)
     
    // renomme les colonnes
    {"TABLE_TCD_operation_periode._COL1"}..Titre = "N° compte"
    {"TABLE_TCD_operation_periode._COL2"}..Titre = "Date"
    {"TABLE_TCD_operation_periode._COL3"}..Titre = "Libellé compte"
     
    nNb_colonne = TableOccurrence(TABLE_TCD_operation_periode,toColonne)
    {"TABLE_TCD_operation_periode._COL"+nNb_colonne}..Titre = "TOT (USD)"
    2. Aidez-moi à trouver un tutoriel qui me permettra de bien maitriser la programmation windev.
    A tous et à Laurent à particulier je dis merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2007
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 221
    Points : 185
    Points
    185
    Par défaut
    Bonjour

    ou est ce que ca coince , dans le code , il y a deux choses
    1) language SQL
    2) WinDev

    est ce le code sql que vous ne comprenez pas , ou le code WinDev ?

    Fred

  3. #3
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Faisons les choses dans l'ordre, tout d'abord il faut rappeler ton contexte et ton besoin (l'image que tu avais fournis dans l'autre fil)



    Maintenant l'explication de la procédure...

    1ère partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    PROCEDURE TCD_operations_periode()
     
    nNb_colonne est un entier
    sMa_requete est une chaîne
    sdRQ1 est une Source de Données
    sdRQ2 est une Source de Données
     
    sMa_requete = [
    SELECT DISTINCT 
    	OPERATION.Cod_devise AS Cod_devise
    FROM 
    	OPERATION
    WHERE 
    ]
    sMa_requete += RC + TAB + "OPERATION.Dat_operation BETWEEN '" + SAI_Date_Debut + "' AND '" + SAI_Date_Fin + "'"
     
    // Exécution de la requête
    SI PAS HExécuteRequêteSQL(sdRQ1,MaConnexion1,hRequêteSansCorrection,sMa_requete) ALORS Erreur("Problème requête 1"); RETOUR
    On joue une 1ère requête qui doit retourner la liste des devises qui ont étaient concernées sur la période (condition du WHERE)
    Normalement dans le cas que tu présentes le retour doit être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Cod_devise
    ----------
    FC
    USD
    EURO
    Le résultat de cette requête va permettre de créer dynamiquement les colonnes des devises...

    2ème partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    sMa_requete = [
    SELECT  
    	op.Num_compte,
    	op.Dat_operation ,
    	COMPTE.Lib_compte,
    ]
    // Les colonnes de devise sont construites dynamiquement ici
    POUR TOUT sdRQ1 
    	sMa_requete += RC + TAB + "SUM(CASE op.Cod_devise WHEN '" + sdRQ1.Cod_devise + "' THEN op.Mont ELSE 0 END) AS " + sdRQ1.Cod_devise + ","	
    FIN
    // La sous requête "op" effectue les conversions des devises
    sMa_requete += RC + [
    	Sum(op.TOT) AS TOT
    FROM 
    	(
    		SELECT  
    			OPERATION.Num_compte,
    			OPERATION.Dat_operation,
    			OPERATION.Cod_devise,
    			OPERATION.mont,
    			Taux_USD,
    			DEVISE.Taux,
    			OPERATION.mont * Taux_USD / DEVISE.Taux AS TOT
    		FROM 
    			OPERATION,
    			DEVISE,
    			(	SELECT	Taux AS Taux_USD
    			FROM		DEVISE
    			WHERE	Cod_devise = 'USD'
    			) AS	USD
    		WHERE 
    			OPERATION.Cod_devise = DEVISE.Cod_devise
    ]
    sMa_requete += RC + TAB + "AND	OPERATION.Dat_operation BETWEEN '" + SAI_Date_Debut + "' AND '" + SAI_Date_Fin + "'"
    sMa_requete += RC + [
    	) AS op,
    	COMPTE
    WHERE 
    		op.Num_compte = COMPTE.Num_compte
    GROUP by Num_compte,Dat_operation,Lib_compte
    ]
    
    // Exécution de la requête
    SI PAS HExécuteRequêteSQL(sdRQ2,MaConnexion1,hRequêteSansCorrection,sMa_requete) ALORS Erreur("Problème requête 2"); RETOUR
    Il s'agit de construire dynamiquement la requête qui va fournir le résultat attendu.

    Ça ce passe au niveau des lignes en rouge.
    On parcours le résultat de la 1ère requête (POUR TOUT sdRQ1) pour créer autant de colonnes de devises que nécessaire.

    Dans ton cas le select de la 2ème requête va devenir...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  
    	op.Num_compte,
    	op.Dat_operation ,
    	COMPTE.Lib_compte,
    	SUM(CASE op.Cod_devise WHEN 'FC'   THEN op.Mont ELSE 0 END) AS FC,
    	SUM(CASE op.Cod_devise WHEN 'USD'  THEN op.Mont ELSE 0 END) AS USD,
    	SUM(CASE op.Cod_devise WHEN 'EURO' THEN op.Mont ELSE 0 END) AS EURO,
    	Sum(op.TOT) AS TOT
    FROM
    	...
    Les lignes en magenta sont celles qu'on crée dynamiquement.
    On voit que les noms des colonnes (après les AS) correspondent au noms des devises impliquées sur la période (FC/USD/EURO)
    Maintenant regardons le détail d'une de ces lignes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUM(CASE op.Cod_devise WHEN 'FC'   THEN op.Mont ELSE 0 END) AS FC,
    Habituellement dans les requêtes SQL j'utilise l'instruction IF mais HFsql ne la connait pas. On peut toutefois contourner le problème en utilisant l'instruction CASE.
    La ligne ci-dessus fait une somme conditionnelle. Si le Cod_devise de l'enregistrement = 'FC' on additionne le Montant sinon on additionne 0. Du coup on additionne seulement les Montant des enregistrement dont la devise est FC.
    On fait ça pour chaque colonne de devise.

    Il y avait une complexité dans ta demande qui était le calcul de la colonne TOT (TOT (USD)) dont la formule est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TOT_USD = (Opération.Mont * 1) / Devise.Taux
    En principe le "1" de la formule représente la valeur de taux(USD).
    Ex: j'ai reçu 9000 fc, j'aurai donc 9000 dans la colonne "FC", dans la colonne TOT_USD le calcul sera: TOT_USD = Operation. Mont(FC) * 1 / Taux(FC).
    Le champ Dat_taux nous aide du fait que les taux ne sont pas statiques, s'il y a eu une modification du taux il faudra préciser la date de la modification.
    Voici les taux de chaque devise:
    FC = 900
    USD =1
    EURO=1.3
    Chaque ligne de la colonne TOT_USD converti tout le montant en en dollar (USD) et en calcul la somme.
    Cette colonne ne peut pas être calculée directement dans la requête qui permet de construire dynamiquement des colonnes. Il faut que les calculs soient fait précédemment dans une sous requête (les lignes en bleu). Il faut également que cette sous requête permette de faire la jointure pour que les valeurs de la colonne TOT soient affichés en face des bonnes lignes.
    Cette sous requête n'a d'utilité que pour le calcul de la colonne TOT (TOT (USD)). S'il n'y avait pas ce calcul on prendrait les données directement dans le fichier OPERATION.

    La sous requête...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SELECT  
    	OPERATION.Num_compte,
    	OPERATION.Dat_operation,
    	OPERATION.Cod_devise,
    	OPERATION.mont,
    	Taux_USD,
    	DEVISE.Taux,
    	OPERATION.mont * Taux_USD / DEVISE.Taux AS TOT
    FROM 
    	OPERATION,
    	DEVISE,
    	(	SELECT	Taux AS Taux_USD
    	FROM		
    		DEVISE
    	WHERE	Cod_devise = 'USD'
    	) AS	USD
    WHERE 
    	OPERATION.Cod_devise = DEVISE.Cod_devise
    AND	OPERATION.Dat_operation BETWEEN '" + SAI_Date_Debut + "' AND '" + SAI_Date_Fin + "'"
    La ligne orange fait le calcul de conversion de devise pour tous les enregistrements de la période (condition du WHERE).
    Le taux de la devise de l'enregistrement et récupérer avec la jointure au fichier Devise.
    Le Taux_USD est une constante (même valeur pour tous les enregistrements) que l'on doit récupérer également dans le fichier Devise. C'est ce qui est fait dans la sous requête (lignes en vert)

    3ème partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // remplit la table TCD
    ConstruitTableFichier(TABLE_TCD_operation_periode,sdRQ2,taRemplirTable)
    On construit/rempli la table à partir du résultat de la 2ème requête.
    La table se retrouve avec les mêmes colonnes que le résultat de la requête et avec touts les données

    4ème partie et fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // renomme les colonnes
    {"TABLE_TCD_operation_periode._COL1"}..Titre = "N° compte"
    {"TABLE_TCD_operation_periode._COL2"}..Titre = "Date"
    {"TABLE_TCD_operation_periode._COL3"}..Titre = "Libellé compte"
     
    nNb_colonne = TableOccurrence(TABLE_TCD_operation_periode,toColonne)
    {"TABLE_TCD_operation_periode._COL"+nNb_colonne}..Titre = "TOT (USD)"
    Ce code sert juste à renommer les titres de colonnes de la table (pour qu'ils soit conforme à ton souhait) j'aurai pu le faire directement dans la requête en nommant les colonnes avec AS.

    Petite subtilité quand on utilise ConstruitTableFichier() les colonnes de la tables se trouvent nommées _COL1, _COL2, _COL3, etc...

    Les {} permet d'utiliser les indirections, je te conseille de regarder l'aide à ce sujet... c'est très pratique...
    En fait en revoyant le code il n'était pas utilise d'utiliser les indirections pour changer les titres des 3 premières colonnes.
    Ça marche tout aussi bien...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TABLE_TCD_operation_periode._COL1..Titre = "N° compte"
    Par contre pour la dernière colonne "TOT (USD)" comme le nombre de colonnes peut changer suivant le nombre de devises impliquées dans la requête, il est nécessaire d'utiliser l'indirection pour la nommer dynamiquement.


    J'espère que ce complément d'information t'aidera à comprendre ce que fait cette procédure.

    Tu m'as envoyé en message privé des demandes supplémentaires. Essaye d'y répondre tout seul pour acquérir pleinement la méthode (certaines sont beaucoup plus simple que le cas ci dessus).
    Si tu as du mal, ouvre un nouveau fil en exposant ton problème, d'autres peuvent y répondre plus rapidement voire plus pertinemment que moi. Et surtout il est préférable de partager avec la communauté...

    Bon courage
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  4. #4
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    Essaye d'y répondre tout seul pour acquérir pleinement la méthode (certaines sont beaucoup plus simple que le cas ci dessus).
    Si tu as du mal, ouvre un nouveau fil en exposant ton problème, d'autres peuvent y répondre plus rapidement voire plus pertinemment que moi. Et surtout il est préférable de partager avec la communauté...
    Merci beaucoup Laurent encore une fois de plus de ta disponibilité et ta bonne volonté d'aider ceux qui sont dans le besoin!

    Je vais sans doute essayer d'y répondre seul mais avant celà si tu peux m'éclairer sur deux petites choses:
    1. Dans le Fichier OPERATION il y a un champ nommé Typ_operation, je veux qu'il fasse aussi parti de critère de sélection comme la date.
    Le typ_opération n'a que deux valeur "Ajout" et Retrait", ça me permettra de séparer les recettes (Ajout) d'avec les dépenses (Retrait)

    Au fait j'éssaie de le faire mais il me semble que je ne respecte pas la syntaxe, voici la portion du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    sMa_requete est une chaîne
    sdRQ1 est une Source de Données
     
    sMa_requete = [
    SELECT DISTINCT 
    OPERATION.Cod_devise AS Cod_devise
    FROM 
    OPERATION
    WHERE 
    ]
    sMa_requete += RC + TAB + "OPERATION.Dat_operation BETWEEN '" + SAI_Date_début + "'" + SAI_Date_fin + RC+ "OPERATION.Typ_operation" + COMBO_Opération + "'"
     
    // Exécution de la requête
    SI PAS HExécuteRequêteSQL(sdRQ1,MaConnexion1,hRequêteSansCorrection,sMa_requete) ALORS Erreur("Problème requête 1"); RETOUR
    ConstruitTableFichier(TABLE_TCD_operation_periode,sdRQ1,taRemplirTable)
    Le champ COMBO_Opération c'est une combo qui liste "Ajout" et Rétrait"

    2. Je veux avoir les totaux des colonnes de chaque devise et la colonne TOT en USD dans la table si possible et surtout dans l'Etat.

    Merci d'avance à tous et à Laurent à particulier!

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    Merci beaucoup Fred de réagir à ma discussion!
    Au fait, c'est plus les syntaxe qu'on utilise pour mélanger les Wlangage et les Requêtes SQL que je ne maitrise pas bien, pourtant c'est le seul moyen il me semble pour réussir mes états en sortie!

  6. #6
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    1. Il te manque un AND entre les 2 conditions et un égale dans la 2ème condition
    Peut-être que tu voudras également avoir la possibilité de voir les "Ajout" et Retrait" en même temps.
    Pour cela soit tu ajoutes une 3ème option dans la combo ou bien tu considères que c'est le cas où rien y est saisi (vide) qui le gère.
    C'est ce que j'ai fait dans l'exemple...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    sMa_requete est une chaîne
    sdRQ1 est une Source de Données
     
    sMa_requete = [
    SELECT DISTINCT 
    	OPERATION.Cod_devise AS Cod_devise
    FROM 
    	OPERATION
    WHERE 
    ]
    sMa_requete += RC + TAB + "OPERATION.Dat_operation BETWEEN '" + SAI_Date_début + "'" + SAI_Date_fin
     
    SI COMBO_Opération <> "" ALORS
    	sMa_requete += RC + TAB + "AND OPERATION.Typ_operation + '" + COMBO_Opération + "'"		
    FIN
     
    // Exécution de la requête
    SI PAS HExécuteRequêteSQL(sdRQ1,MaConnexion1,hRequêteSansCorrection,sMa_requete) ALORS Erreur("Problème requête 1"); RETOUR
    ConstruitTableFichier(TABLE_TCD_operation_periode,sdRQ1,taRemplirTable)
    ATTENTION il faut que les conditions dans le WHERE des 2 requêtes soient les mêmes... sinon risque d'incohérence...

    2. Windev fait lui même des calculs dans les tables (ligneTotal / ligneComptage / ligneMoyenne)
    Normalement on peut faire afficher ces lignes dans la table après la dernière ligne ou sous la table.
    Je dois avoir un trou de mémoire mais là j'y parviens pas... pas grave on peut contourner...
    Le calculs sont bien effectués dans la table, c'est juste l'affichage qui n'y est pas.
    Par conséquent il suffit d'ajouter une ligne puis de la remplir avec les totaux des colonnes.
    Dans ton cas les totaux sont à effectuer de la colonne 4 à la dernière.
    Pour mettre en évidence la ligne de total il suffit de changer sa couleur de fond.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TableAjouteLigne(TABLE_TCD_operation_periode)
    nNb_ligne = TableOccurrence(TABLE_TCD_operation_periode)
    {"TABLE_TCD_operation_periode._COL1"}[nNb_ligne] = "TOTAUX"
    POUR i = 4 A nNb_colonne
    	{"TABLE_TCD_operation_periode._COL" + i}[nNb_ligne] = {"TABLE_TCD_operation_periode._COL" + i}[ligneTotal]
    FIN
    {"TABLE_TCD_operation_periode"}[nNb_ligne]..CouleurFond = JaunePastel
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Lolo, je te mets des +1 partout.... tu mérites....
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  8. #8
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    Merci beaucoup Laurent! c'est très cool de ta part.
    Au fait j'ai bien réussi le total des colonnes, merci encore mais pour ce qui concerne l'ajout du type opération dans les paramètres ça marche pas encore, j'ai toujours ce message d'erreur:


    Voici les codes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    nNb_colonne est un entier
    sMa_requete est une chaîne
    sdRQ1 est une Source de Données
    sdRQ2 est une Source de Données
    sMa_requete = [
    SELECT DISTINCT 
    OPERATION.Cod_devise AS Cod_devise
    FROM 
    OPERATION
    WHERE 
    ]
    sMa_requete += RC + TAB + "OPERATION.Dat_operation BETWEEN '" + SAI_Date_début + "'" + SAI_Date_fin
     
    SI COMBO_Opération <> "" ALORS
    	sMa_requete += RC + TAB + "AND OPERATION.Typ_operation + '" + COMBO_Opération + "'"		
    FIN
     
    // Exécution de la requête
    SI PAS HExécuteRequêteSQL(sdRQ1,MaConnexion1,hRequêteSansCorrection,sMa_requete) ALORS Erreur("Problème requête 1"); RETOUR
    sMa_requete = [
    SELECT  
    op.Num_compte,
    op.Dat_operation ,
    COMPTE.Lib_compte,
    ]
    // Les colonnes de devise sont construites dynamiquement ici
    POUR TOUT sdRQ1 
    	sMa_requete += RC + TAB + "SUM(CASE op.Cod_devise WHEN '" + sdRQ1.Cod_devise + "' THEN op.Mont ELSE 0 END) AS " + sdRQ1.Cod_devise + ","	
    FIN
     
    // La sous requête "op" effectue les conversions des devises
    sMa_requete += RC + [
    Sum(op.TOT) AS TOT
    FROM
    (
    SELECT  
    OPERATION.Num_compte,
    OPERATION.Dat_operation,
    OPERATION.Cod_devise,
    OPERATION.mont,
    Taux_USD,
    DEVISE.Taux,
    OPERATION.mont * Taux_USD / DEVISE.Taux AS TOT
    FROM 
    OPERATION,
    DEVISE,
    (	SELECT	Taux AS Taux_USD
    FROM		DEVISE
    WHERE	Cod_devise = 'USD'
    ) AS	USD
    WHERE 
    OPERATION.Cod_devise = DEVISE.Cod_devise
    ]
     
    sMa_requete += RC + TAB + "AND	OPERATION.Dat_operation BETWEEN '" + SAI_Date_début + "' AND '" + SAI_Date_fin
    SI COMBO_Opération <> "" ALORS
    	sMa_requete += RC + TAB + "AND OPERATION.Typ_operation + '" + COMBO_Opération + "'"		
    FIN
    sMa_requete += RC + [
    ) AS op,
    COMPTE
    WHERE 
    op.Num_compte = COMPTE.Num_compte
    GROUP by Num_compte,Dat_operation,Lib_compte
    ]
     
    // Exécution de la requête
    SI PAS HExécuteRequêteSQL(sdRQ2,MaConnexion1,hRequêteSansCorrection,sMa_requete) ALORS Erreur("Problème requête 2"); RETOUR
     
    // remplit la table TCD
    ConstruitTableFichier(TABLE_TCD_operation_periode,sdRQ2,taRemplirTable)
     
    // renomme les colonnes
    {"TABLE_TCD_operation_periode._COL1"}..Titre = "N° compte"
    {"TABLE_TCD_operation_periode._COL2"}..Titre = "Date"
    {"TABLE_TCD_operation_periode._COL3"}..Titre = "Libellé compte"
     
    nNb_colonne = TableOccurrence(TABLE_TCD_operation_periode,toColonne)
    {"TABLE_TCD_operation_periode._COL"+nNb_colonne}..Titre = "TOT (USD)"
     
     
    nNb_ligne est un entier
    TableAjouteLigne(TABLE_TCD_operation_periode)
    nNb_ligne = TableOccurrence(TABLE_TCD_operation_periode)
    {"TABLE_TCD_operation_periode._COL1"}[nNb_ligne] = "TOTAUX"
    POUR i = 4 A nNb_colonne
    	{"TABLE_TCD_operation_periode._COL" + i}[nNb_ligne] = {"TABLE_TCD_operation_periode._COL" + i}[ligneTotal]
    FIN
    {"TABLE_TCD_operation_periode"}[nNb_ligne]..CouleurFond = GrisFoncé
    Merci d'avance Laurent!
    Merci à vous tous également qui pourrez réagir à cette discussion!

  9. #9
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Désolé j'ai fais un mauvais copié collé.
    Je n'ai pas placé le AND et le = manquant entre autre...

    En rouge ce que j'ai modifié

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sMa_requete += RC + TAB + "OPERATION.Dat_operation BETWEEN '" + SAI_Date_début + "' AND'" + SAI_Date_fin + "'"
    
    SI COMBO_Opération <> "" ALORS
    	sMa_requete += RC + TAB + "AND OPERATION.Typ_operation = '" + COMBO_Opération + "'"		
    FIN
    Pense de faire de même pour la 2ème requête...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  10. #10
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    Bravo!!!
    C'est génial Laurent, merci beaucoup!
    Au fait, je tiens à soulever un petit problème que j'ai rencontré peut être que ça pourra aider les autres, il a fallu que je précise "la valeur affichée" dans la COMBO pour que ça marche, donc partout ou il y avait "COMBO_Opération" il fallait ajouter valeur affichée comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COMBO_Opération..ValeurAffichée
    Merci beaucoup Laurent, Je crois que je dois d'abord m'efforcer à faire seul les autres requêtes mais en cas des difficultés je pourrais revenir!!!
    Grand Merci!

  11. #11
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Citation Envoyé par djenny Voir le message
    Au fait, je tiens à soulever un petit problème que j'ai rencontré peut être que ça pourra aider les autres, il a fallu que je précise "la valeur affichée" dans la COMBO pour que ça marche, donc partout ou il y avait "COMBO_Opération" il fallait ajouter valeur affichée comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COMBO_Opération..ValeurAffichée
    Par défaut une combo retourne l'indice de la ligne sélectionnée, pour retourner la valeur affichée il y a 2 solutions
    - celle que tu as utilisé, la propriété ..Valeuraffichée
    - ou dans la description de la combo à l'onglet détail cocher "Retourne la valeur spécifiée avec la fonction gLien"

    Citation Envoyé par djenny Voir le message
    Merci beaucoup Laurent, Je crois que je dois d'abord m'efforcer à faire seul les autres requêtes mais en cas des difficultés je pourrais revenir!!!
    Grand Merci!
    Bon courage...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  12. #12
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    C'est très gentil Laurent!
    Merci beaucoup pour ce détail très important et ton encouragement!
    Encore une fois de plus, Merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD15] Explication des codes utilisés dans une procédure
    Par djenny dans le forum WinDev
    Réponses: 0
    Dernier message: 15/11/2013, 14h38
  2. [WD15] Explication des codes utilisés dans une procédure
    Par djenny dans le forum WinDev
    Réponses: 0
    Dernier message: 15/11/2013, 14h35
  3. Recherche dans une chaîne des codes contenus dans une table
    Par funkyjul dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/07/2011, 08h28
  4. [PROC] utiliser des données selectionnées dans une procédure.
    Par ellix86 dans le forum Développement
    Réponses: 5
    Dernier message: 17/04/2009, 13h08
  5. Référencer des cases à cocher dans une procédure.
    Par Milyshyn76 dans le forum VBA Access
    Réponses: 0
    Dernier message: 30/11/2007, 09h34

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