Affichage de tous les détails du bordereau et stockage dans un fichier

Résolu
bsalissou Messages postés 6 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 24 juin 2019 - Modifié le 22 juin 2019 à 19:09
bsalissou Messages postés 6 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 24 juin 2019 - 24 juin 2019 à 13:16
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

3 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 48
22 juin 2019 à 19:24
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,
0
bsalissou Messages postés 6 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 24 juin 2019
24 juin 2019 à 10:22
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.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 48
24 juin 2019 à 10:53
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,
0
bsalissou Messages postés 6 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 24 juin 2019
Modifié le 24 juin 2019 à 11:44
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
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 48
24 juin 2019 à 11:44
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,
0
bsalissou Messages postés 6 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 24 juin 2019
24 juin 2019 à 13:16
Bonjour,
Très bien cher ami.
je vous accorde tous mes remerciements.
Cordialement
0