Affichage de tous les détails du bordereau et stockage dans un fichier [Résolu]

Messages postés
6
Date d'inscription
mercredi 15 janvier 2014
Statut
Membre
Dernière intervention
24 juin 2019
-
Bonjour,
J'ai un code que je souhaite que ça enregistre tous les enregistrement du bordereau avant de le stoquer dans un fichier. A chaque fois c'est une seule ligne que j'ai dans mon fichier.
Ci dessous les codes:
//Function genererReglementVersHighDeal(aReglement:TONI_CaisseDetail):string;
var
 vFichier    : TStringList;
 vNomFichier : string;
 vParam      : TSHDParametresEdeal;
 vLigne      : string;
 vCarSep     : string;
begin
  vParam := classManager.findSingleton('TSHDParametresEdeal');
    if assigned(aReglement.Client) then
         begin
           try
             vNomFichier := vParam.cheminFichierEnvoi + '\' + aReglement.caisseEntete.numero.asString + '_' + areglement.facturesReglees + '_' + aReglement.CaisseEntete.Caissier.telephone +'.txt';
             vCarSep := vParam.carSeparation;
             vFichier := TStringList.create;
             // Initialiser la ligne d'entête
             vLigne := 'IDENTIFIANT SAGE' +
             vCarSep +
             'COMPTE PAYEUR' +
             vCarSep +
             'DATE ENCAISSEMENT' +
             vCarSep +
             'MONTANT' +
              vCarSep +
             'MODE DE REGLEMENT'+
             vCarSep +
             'NUMERO TRANSACTION / BORDEREAU / CHEQUE'+
             vCarSep +
             'NOM BANQUE' +
              vCarSep +
             'COMPTE BANCAIRE' +
              vCarSep +
             'REFERENCE TRANSACTION / BORDEREAU'+
             vCarSep +
             'TYPE CARTE CREDIT'+
             vCarSep +
             'NOM CAISSIER'+
             vCarSep +
             'CAISSE'+
             vCarSep +
             'FACTURE REGLEE'+
             vCarSep +
             'Téléphone Caissier' +
              vCarSep +
             'Email Caissier';
            // Ajouter la ligne d'entête
             vFichier.Add(vLigne);
             vLigne := aReglement.oid + vCarSep;
              // vLigne := aReglement.caisseEntete.numero.asString + vCarSep;
              vLigne := vLigne + aReglement.client.Caption + vCarSep;
              vLigne := vLigne + donnerDateFormatAAAAMMJJ(aReglement.caisseEntete.dateBordereau) + vCarSep;
              vLigne := vLigne + floatToStr(aReglement.montant.value) + vCarSep;
             if assigned(aReglement.modeReglement) then
                vLigne := vLigne + intToStr(aReglement.modeReglement.codeHighDeal) + vCarSep;
                if assigned(aReglement.modeReglement) then
               begin
                // mode reglement : chèque : si chèque référence CODE HDT = 2
                 if aReglement.modeReglement.codehighDeal = 2 then
                    begin
                      vLigne := vLigne + aReglement.referenceDetail + vCarSep;
                      vLigne := vLigne + aReglement.nomBanque + vCarSep;
                      vLigne := vLigne + aReglement.numCompteLibre + vCarSep;
                      vLigne := vLigne + aReglement.referenceDetail + vCarSep;
                      vLigne := vLigne + '' + vCarSep;
                    end;
                 // mode reglement virement  CODE HDT = 1
                 if aReglement.modeReglement.codehighDeal = 1 then
                    begin
                        vLigne := vLigne + aReglement.referenceDetail + vCarSep;
                        vLigne := vLigne + aReglement.nomBanque + vCarSep;
                        vLigne := vLigne + '' + vCarSep;
                        vLigne := vLigne + aReglement.referenceDetail + vCarSep;
                        vLigne := vLigne + '' + vCarSep;
                    end;
                 // mode reglement Espèce : CODE HDT = 3
                 if aReglement.modeReglement.codehighDeal = 3 then
                    begin
                       vLigne := vLigne + '' + vCarSep;
                       vLigne := vLigne + '' + vCarSep;
                       vLigne := vLigne + '' + vCarSep;
                       vLigne := vLigne + '' + vCarSep;
                       vLigne := vLigne + '' + vCarSep;
                    end;
                 //Mode de règlement Orange Money
                 if aReglement.modeReglement.CODEHighDeal= 0 then
                    begin
                        vLigne := vLigne +  aReglement.referenceDetail + vCarSep;
                        vLigne := vLigne + '' + vCarSep;
                        vLigne := vLigne + '' + vCarSep;
                        vLigne := vLigne +  aReglement.referenceDetail + vCarSep;
                      vLigne := vLigne + aReglement.modeReglement.code + vCarSep;
                    end;
                 
                 vLigne := vLigne + aReglement.CaisseEntete.Caissier.Caption + vCarSep;            
                 vLigne := vLigne + aReglement.CaisseEntete.caisseDeReference + vCarSep;
                 // Factures règlées
                 vLigne := vLigne + aReglement.FacturesReglees + vCarSep;
                 vLigne := vLigne + aReglement.CaisseEntete.Caissier.telephone + vCarSep;
                 vLigne := vLigne + aReglement.CaisseEntete.Caissier.eMail + vCarSep
               end;
              // fin, génération du fichier
              vFichier.Add(vLigne);
              vFichier.SaveToFile(vNomFichier);
           except
             showMessage(e.message);
           end;

         end;
end;

Merci d'avance
Afficher la suite 

3 réponses

Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
32
0
Merci
Bonjour,

c'est normal puisqu'à chaque appel de la fonction le fichier est écrasé!
Si le fichier existe alors on le charge et on ajoute la nouvelle entrée.

Surtout ne pas oublier de libérer l'objet "vFichier" à la fin de la procédure d'enregistrement sous pêne de grosse fuites de mémoire qui risquent de mener à un plantage de l'application !
             ...
             vFichier := TStringList.create;
             try
               if FileExists(vNomFichier) then
                 vFichier.LoadFromFile(vNomFichier);
             // Initialiser la ligne d'entête
               ...
             finally
               vFichier.Add(vLigne);
               vFichier.SaveToFile(vNomFichier);
               vFichier.Free; // ne pas oublier !!!
             end;
             ...


Cordialement,
bsalissou
Messages postés
6
Date d'inscription
mercredi 15 janvier 2014
Statut
Membre
Dernière intervention
24 juin 2019
-
Bonjour,
merci de ton retour rapide à ma demande.
Peut tu mettre ce segment de codes dans les codes que j'ai envoyé et me l'envoyer ?
je l'ai inséré mais j'ai un message d'erreur à chaque fois sur "end; "ou sur "except"
Merci d'avance.
Commenter la réponse de Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
32
0
Merci
re,

voilà, je ne peux pas tester mais ça devrait fonctionner:
function genererReglementVersHighDeal(aReglement: TONI_CaisseDetail): string;
var
  vFichier     : TStringList;
  vNomFichier  : string;
  vParam       : TSHDParametresEdeal;
  vLigne       : string;
  vCarSep      : string;
begin
  vParam := classManager.findSingleton('TSHDParametresEdeal');
  if assigned(aReglement.Client) then
  begin
    try
      vNomFichier := vParam.cheminFichierEnvoi + '\' + aReglement.caisseEntete.numero.asString + '_'
        + areglement.facturesReglees + '_' + aReglement.CaisseEntete.Caissier.telephone + '.txt';
      vCarSep := vParam.carSeparation;
      vFichier := TStringList.create;
      try                                              // ---------- Ajout ------------
        if FileExists(vNomFichier) then                // ---------- Ajout ------------
          vFichier.LoadFromFile(vNomFichier);          // ---------- Ajout ------------
             // Initialiser la ligne d'entête
        vLigne := 'IDENTIFIANT SAGE' +
          vCarSep +
          'COMPTE PAYEUR' +
          vCarSep +
          'DATE ENCAISSEMENT' +
          vCarSep +
          'MONTANT' +
          vCarSep +
          'MODE DE REGLEMENT' +
          vCarSep +
          'NUMERO TRANSACTION / BORDEREAU / CHEQUE' +
          vCarSep +
          'NOM BANQUE' +
          vCarSep +
          'COMPTE BANCAIRE' +
          vCarSep +
          'REFERENCE TRANSACTION / BORDEREAU' +
          vCarSep +
          'TYPE CARTE CREDIT' +
          vCarSep +
          'NOM CAISSIER' +
          vCarSep +
          'CAISSE' +
          vCarSep +
          'FACTURE REGLEE' +
          vCarSep +
          'Téléphone Caissier' +
          vCarSep +
          'Email Caissier';
            // Ajouter la ligne d'entête
        vFichier.Add(vLigne);
        vLigne := aReglement.oid + vCarSep;
              // vLigne := aReglement.caisseEntete.numero.asString + vCarSep;
        vLigne := vLigne + aReglement.client.Caption + vCarSep;
        vLigne := vLigne + donnerDateFormatAAAAMMJJ(aReglement.caisseEntete.dateBordereau) +
          vCarSep;
        vLigne := vLigne + floatToStr(aReglement.montant.value) + vCarSep;
        if assigned(aReglement.modeReglement) then
          vLigne := vLigne + intToStr(aReglement.modeReglement.codeHighDeal) + vCarSep;
        if assigned(aReglement.modeReglement) then
        begin
                // mode reglement : chèque : si chèque référence CODE HDT = 2
          if aReglement.modeReglement.codehighDeal = 2 then
          begin
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + aReglement.nomBanque + vCarSep;
            vLigne := vLigne + aReglement.numCompteLibre + vCarSep;
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + '' + vCarSep;
          end;
                 // mode reglement virement  CODE HDT = 1
          if aReglement.modeReglement.codehighDeal = 1 then
          begin
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + aReglement.nomBanque + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + '' + vCarSep;
          end;
                 // mode reglement Espèce : CODE HDT = 3
          if aReglement.modeReglement.codehighDeal = 3 then
          begin
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + '' + vCarSep;
          end;
                 //Mode de règlement Orange Money
          if aReglement.modeReglement.CODEHighDeal = 0 then
          begin
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + aReglement.modeReglement.code + vCarSep;
          end;

          vLigne := vLigne + aReglement.CaisseEntete.Caissier.Caption + vCarSep;
          vLigne := vLigne + aReglement.CaisseEntete.caisseDeReference + vCarSep;
                 // Factures règlées
          vLigne := vLigne + aReglement.FacturesReglees + vCarSep;
          vLigne := vLigne + aReglement.CaisseEntete.Caissier.telephone + vCarSep;
          vLigne := vLigne + aReglement.CaisseEntete.Caissier.eMail + vCarSep
        end;
              // fin, génération du fichier
        vFichier.Add(vLigne);
        vFichier.SaveToFile(vNomFichier);
      finally                                          // ---------- Ajout ------------
        vFichier.Free;                                 // ---------- Ajout ------------
      end;                                             // ---------- Ajout ------------
    except
      showMessage(e.message);
    end;

  end;
end;


Cordialement,
bsalissou
Messages postés
6
Date d'inscription
mercredi 15 janvier 2014
Statut
Membre
Dernière intervention
24 juin 2019
-
Bonjour et toujours merci de ton retour rapide.
il n y a plus de message d'erreur mais cette fois ci on voit que dans le résultat l'entête est dupliquée.
ci dessous le codes:
//Function genererReglementVersHighDeal(aReglement:TONI_CaisseDetail):string;
var
  vFichier     : TStringList;
  vNomFichier  : string;
  vParam       : TSHDParametresEdeal;
  vLigne       : string;
  vCarSep      : string;
begin
  vParam := classManager.findSingleton('TSHDParametresEdeal');
  if assigned(aReglement.Client) then
  begin
    try
      vNomFichier := vParam.cheminFichierEnvoi + '\' + aReglement.caisseEntete.numero.asString + '_' + aReglement.CaisseEntete.Caissier.telephone + '.txt';
       // + areglement.facturesReglees + '_' + aReglement.CaisseEntete.Caissier.telephone + '.txt';
      vCarSep := vParam.carSeparation;
      vFichier := TStringList.create;
      try                                              // ---------- Ajout ------------
        if FileExists(vNomFichier) then                // ---------- Ajout ------------
          vFichier.LoadFromFile(vNomFichier);          // ---------- Ajout ------------
             // Initialiser la ligne d'entête
        vLigne := 'IDENTIFIANT SAGE' +
          vCarSep +
          'COMPTE PAYEUR' +
          vCarSep +
          'DATE ENCAISSEMENT' +
          vCarSep +
          'MONTANT' +
          vCarSep +
          'MODE DE REGLEMENT' +
          vCarSep +
          'NUMERO TRANSACTION / BORDEREAU / CHEQUE' +
          vCarSep +
          'NOM BANQUE' +
          vCarSep +
          'COMPTE BANCAIRE' +
          vCarSep +
          'REFERENCE TRANSACTION / BORDEREAU' +
          vCarSep +
          'TYPE CARTE CREDIT' +
          vCarSep +
          'NOM CAISSIER' +
          vCarSep +
          'CAISSE' +
          vCarSep +
          'FACTURE REGLEE' +
          vCarSep +
          'Téléphone Caissier' +
          vCarSep +
          'Email Caissier';
            // Ajouter la ligne d'entête
        vFichier.Add(vLigne);
        vLigne := aReglement.oid + vCarSep;
              // vLigne := aReglement.caisseEntete.numero.asString + vCarSep;
        vLigne := vLigne + aReglement.client.Caption + vCarSep;
        vLigne := vLigne + donnerDateFormatAAAAMMJJ(aReglement.caisseEntete.dateBordereau) +
          vCarSep;
        vLigne := vLigne + floatToStr(aReglement.montant.value) + vCarSep;
        if assigned(aReglement.modeReglement) then
          vLigne := vLigne + intToStr(aReglement.modeReglement.codeHighDeal) + vCarSep;
        if assigned(aReglement.modeReglement) then
        begin
                // mode reglement : chèque : si chèque référence CODE HDT = 2
          if aReglement.modeReglement.codehighDeal = 2 then
          begin
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + aReglement.nomBanque + vCarSep;
            vLigne := vLigne + aReglement.numCompteLibre + vCarSep;
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + '' + vCarSep;
          end;
                 // mode reglement virement  CODE HDT = 1
          if aReglement.modeReglement.codehighDeal = 1 then
          begin
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + aReglement.nomBanque + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + '' + vCarSep;
          end;
                 // mode reglement Espèce : CODE HDT = 3
          if aReglement.modeReglement.codehighDeal = 3 then
          begin
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + '' + vCarSep;
          end;
                 //Mode de règlement Orange Money
          if aReglement.modeReglement.CODEHighDeal = 0 then
          begin
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + aReglement.modeReglement.code + vCarSep;
          end;

          vLigne := vLigne + aReglement.CaisseEntete.Caissier.Caption + vCarSep;
          vLigne := vLigne + aReglement.CaisseEntete.caisseDeReference + vCarSep;
                 // Factures règlées
          vLigne := vLigne + aReglement.FacturesReglees + vCarSep;
          vLigne := vLigne + aReglement.CaisseEntete.Caissier.telephone + vCarSep;
          vLigne := vLigne + aReglement.CaisseEntete.Caissier.eMail + vCarSep
        end;
              // fin, génération du fichier
        vFichier.Add(vLigne);
        vFichier.SaveToFile(vNomFichier);
      finally                                          // ---------- Ajout ------------
        vFichier.Free;                                 // ---------- Ajout ------------
      end;                                             // ---------- Ajout ------------
    except
      showMessage(e.message);
    end;

  end;
end;

Merci de ton aide
Commenter la réponse de Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
32
0
Merci
re,
cette fois c'est la bonne :
function genererReglementVersHighDeal(aReglement: TONI_CaisseDetail): string;
var
  vFichier     : TStringList;
  vNomFichier  : string;
  vParam       : TSHDParametresEdeal;
  vLigne       : string;
  vCarSep      : string;
begin
  vParam := classManager.findSingleton('TSHDParametresEdeal');
  if assigned(aReglement.Client) then
  begin
    try
      vNomFichier := vParam.cheminFichierEnvoi + '\' + aReglement.caisseEntete.numero.asString + '_'
        + areglement.facturesReglees + '_' + aReglement.CaisseEntete.Caissier.telephone + '.txt';
      vCarSep := vParam.carSeparation;
      vFichier := TStringList.create;
      try                                      // ---------- Ajout ------------
        if FileExists(vNomFichier) then        // ---------- Ajout ------------
          vFichier.LoadFromFile(vNomFichier)   // ---------- Ajout ------------
        else  // nouveau fichier
        begin                                  // ---------- Ajout ------------
             // Initialiser la ligne d'entête
          vLigne := 'IDENTIFIANT SAGE' +
            vCarSep +
            'COMPTE PAYEUR' +
            vCarSep +
            'DATE ENCAISSEMENT' +
            vCarSep +
            'MONTANT' +
            vCarSep +
            'MODE DE REGLEMENT' +
            vCarSep +
            'NUMERO TRANSACTION / BORDEREAU / CHEQUE' +
            vCarSep +
            'NOM BANQUE' +
            vCarSep +
            'COMPTE BANCAIRE' +
            vCarSep +
            'REFERENCE TRANSACTION / BORDEREAU' +
            vCarSep +
            'TYPE CARTE CREDIT' +
            vCarSep +
            'NOM CAISSIER' +
            vCarSep +
            'CAISSE' +
            vCarSep +
            'FACTURE REGLEE' +
            vCarSep +
            'Téléphone Caissier' +
            vCarSep +
            'Email Caissier';
            // Ajouter la ligne d'entête
          vFichier.Add(vLigne);
        end;                                   // ---------- Ajout ------------
        vLigne := aReglement.oid + vCarSep;
              // vLigne := aReglement.caisseEntete.numero.asString + vCarSep;
        vLigne := vLigne + aReglement.client.Caption + vCarSep;
        vLigne := vLigne + donnerDateFormatAAAAMMJJ(aReglement.caisseEntete.dateBordereau) +
          vCarSep;
        vLigne := vLigne + floatToStr(aReglement.montant.value) + vCarSep;
        if assigned(aReglement.modeReglement) then
          vLigne := vLigne + intToStr(aReglement.modeReglement.codeHighDeal) + vCarSep;
        if assigned(aReglement.modeReglement) then
        begin
                // mode reglement : chèque : si chèque référence CODE HDT = 2
          if aReglement.modeReglement.codehighDeal = 2 then
          begin
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + aReglement.nomBanque + vCarSep;
            vLigne := vLigne + aReglement.numCompteLibre + vCarSep;
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + '' + vCarSep;
          end;
                 // mode reglement virement  CODE HDT = 1
          if aReglement.modeReglement.codehighDeal = 1 then
          begin
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + aReglement.nomBanque + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + '' + vCarSep;
          end;
                 // mode reglement Espèce : CODE HDT = 3
          if aReglement.modeReglement.codehighDeal = 3 then
          begin
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + '' + vCarSep;
          end;
                 //Mode de règlement Orange Money
          if aReglement.modeReglement.CODEHighDeal = 0 then
          begin
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + '' + vCarSep;
            vLigne := vLigne + aReglement.referenceDetail + vCarSep;
            vLigne := vLigne + aReglement.modeReglement.code + vCarSep;
          end;

          vLigne := vLigne + aReglement.CaisseEntete.Caissier.Caption + vCarSep;
          vLigne := vLigne + aReglement.CaisseEntete.caisseDeReference + vCarSep;
                 // Factures règlées
          vLigne := vLigne + aReglement.FacturesReglees + vCarSep;
          vLigne := vLigne + aReglement.CaisseEntete.Caissier.telephone + vCarSep;
          vLigne := vLigne + aReglement.CaisseEntete.Caissier.eMail + vCarSep
        end;
              // fin, génération du fichier
        vFichier.Add(vLigne);
        vFichier.SaveToFile(vNomFichier);
      finally // ---------- Ajout ------------
        vFichier.Free; // ---------- Ajout ------------
      end; // ---------- Ajout ------------
    except
      showMessage(e.message);
    end;

  end;
end;


Normalement ^^
Cordialement,
bsalissou
Messages postés
6
Date d'inscription
mercredi 15 janvier 2014
Statut
Membre
Dernière intervention
24 juin 2019
-
Bonjour,
Très bien cher ami.
je vous accorde tous mes remerciements.
Cordialement
Commenter la réponse de Cirec