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

FastReport Discussion :

Impression Grille avec FastReport


Sujet :

FastReport

  1. #1
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    août 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : août 2005
    Messages : 214
    Points : 168
    Points
    168
    Par défaut Impression Grille avec FastReport
    Depuis la version Sydney, quickReport n’est plus compatible(car la version 7 est soi-disant annoncée !! mais on ne sait pas pour quand !)
    Il me faut donc me résoudre à migrer vers FastReport.

    Mon problème vient lors de l’impression d’une facture.
    Je n’utilise pas de Base de données mais je travaille avec des Records (c’est une vielle version) et j’affiche alors mes résultats dans une StringGrid
    Avec QuickReport aucun problème pour l’impression de la grille, mai avec fastreport fourni avec Delphi, pour imprimer une grille il faudrait utiliser une Cross table et donc acheter une version pro
    J’ai trouvé une solution qui devrai marcher, mais j’obtiens cette erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     MemoRef := frxReportImpFacture.FindObject('MemoRf') as TfrxMemoView;
          MemoRef.Text := Grid.Cells[0, 0];
     
          memoDesi := frxReportImpFacture.FindObject('MemoDesi') as TfrxMemoView;
          memoDesi.Text := Grid.Cells[1, 0];
     
          MemoUnit := frxReportImpFacture.FindObject('MemoUnit') as TfrxMemoView;
          MemoUnit.Text := Grid.Cells[2, 0];
    et voici l'erreur obtenue à l'exécution
    Nom : Erreur.jpg
Affichages : 141
Taille : 33,4 Ko seulement

    J'ai regarder dans la doc (On ne parle à 99% que d'exemples d'impressions à partir d'une base)
    Rien trouver sur l'impression des StringGrid ?

    Avez vous une solution à proposer SVP

    Par Avance Merci pour votre aide

  2. #2
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    août 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : août 2005
    Messages : 214
    Points : 168
    Points
    168
    Par défaut
    Bonjour

    Je me répond avec un peu de retard

    Pour résoudre mon Problème d'impression d'une StringGrid j'ai donc acheté la version Standard de FastReport et utilisé un frxCrossObjet qui permet d'imprimer une grille.

    En effet la version livrée avec Delphi ne possède pas cela.

    Et pour l'afficher voici le 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
    procedure TForm19.frxReportImprimeBeforePrint(c: TfrxReportComponent);
    var
      Cross: TfrxCrossView;
      i, j: Integer;
    begin
     
      if c is TfrxCrossView then
      begin
        Cross := TfrxCrossView(c);
        for i := 0 to Grid.ColCount - 1 do // Ligne
          for j := 0 to Total_Lignes do // Colonne
            Cross.AddValue([j], [i], [Grid.Cells[i, j]]);
      end;
    end;
    Par contre ce n'est pas gagné car il y a tellement de possibilités que l'on se perd facilement
    J'ai par contre utilisé du PascalScript pour gérer les largeurs différentes des colonnes par exemple, mais je n'ai encore trouver comment gérer l'alignement du texte individuellement pour celles-ci.

    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
    procedure Cross1OnCalcWidth(ColumnIndex: Integer; ColumnValues: Variant; var Width: Extended);
    begin
    if (VarToStr(ColumnValues[0]) = '0') then
        Width :=90;        
    if (VarToStr(ColumnValues[0]) = '1') then
        Width :=380;
    if (VarToStr(ColumnValues[0]) = '2') then
        Width := 50;
    if (VarToStr(ColumnValues[0]) = '3') then
        Width := 50;
    if (VarToStr(ColumnValues[0]) = '4') then
        Width := 60;
    if (VarToStr(ColumnValues[0]) = '5') then
        Width := 70;  
    end;
    Par exemple: pour une facture de 5 colonnes je voudrais avoir la colonne 0,3,4 texte centré
    la colonne 2 texte aligné à gauche
    la colonne 5 texte aligné à droite
    Si quelqu'un connait la solution ?

    Par avance merci

  3. #3
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    août 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : août 2005
    Messages : 214
    Points : 168
    Points
    168
    Par défaut
    Comme Sergio, il suffit de poser la question et on trouve.

    Pour aligner indépendamment les colonnes il suffit de faire cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure Cross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
    begin
     case ColumnIndex of
       0, 1: Memo.HAlign := haLeft;
       2, 3: Memo.HAlign := haCenter;
       5, 6: Memo.HAlign := haRight;
     end;
    end;
    Merci le PascalScript
    Je clos donc cette discussion.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    14 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 14 628
    Points : 39 802
    Points
    39 802
    Billets dans le blog
    59
    Par défaut
    Bonjour,

    Comme Sergio
    Je note

    Désolé de ne pas avoir répondu avant, bien que j'ai vu la discussion
    - pour le #1 il me manquait des informations tout en restant persuadé qu'il est possible de le faire
    - pour le #2 je n'ai jamais utilisé frxCrossObjet (même si j'ai la version pro)

    Toutefois, j'ai bien envie d'essayer le scénario #1 avec mes idées

    Merci le PascalScript
    oui, même si je peste régulièrement dessus (trop réducteur à mon goût)
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) ,D11 (Alexandria)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    14 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 14 628
    Points : 39 802
    Points
    39 802
    Billets dans le blog
    59
    Par défaut
    Bonjour,

    Je n’utilise pas de Base de données mais je travaille avec des Records (c’est une vielle version)
    A ma manière sans utiliser ni Script, ni de base de données, ni frxCrossTable mais en utilisant quand même un frxUserDataset. A mon avis c'est là que tout aurait du se jouer.

    Ma base de travail
    Nom : Capture.PNG
Affichages : 113
Taille : 63,2 Ko
    Considère que le PrototypeBindSource est là pour remplacer tes records, et le livebindings pour remplir le tableau.
    Comme je suis maintenant plus à l'aise avec FMX, ce programme a été fait avec mais il pourrait tout aussi bine fonctionner en VCL

    le report (pas de fioritures) juste un bande Maitre
    Nom : Capture_1.PNG
Affichages : 154
Taille : 39,4 Ko

    Toute l'astuce à l'utilisation d'un frxUserDataset est dans la gestion de ses évènements
    Code delphi : 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
      private
        { Déclarations privées }
        l : integer;  // pour connaitre la ligne à récupérer 
      public
        { Déclarations publiques }
      end;
     
    var
      Form122: TForm122;
     
    implementation
     
    {$R *.fmx}
     
    procedure TForm122.Button1Click(Sender: TObject);
    begin
    frxReport1.PrepareReport();
    frxReport1.ShowPreparedReport;
    end;
     
    procedure TForm122.frxUserDataSet1CheckEOF(Sender: TObject; var Eof: Boolean);  // équivalent d'un onNeedData de Quickreport
    begin
    Eof:= l>StringGrid1.RowCount;
    end;
     
    procedure TForm122.frxUserDataSet1First(Sender: TObject);
    begin
    l:=0;  // première ligne
    end;
     
    procedure TForm122.frxUserDataSet1GetValue(const VarName: string;
      var Value: Variant);
    begin 
    // valeurs à affecter récupérées dans le stringgrid (remplacable par un accés direct aux records ;))
    if SameText(VarName,'Col1') then Value:=StringGrid1.Cells[0,l];
    if SameText(VarName,'Col2') then Value:=StringGrid1.Cells[1,l];
    if SameText(VarName,'Col3') then Value:=StringGrid1.Cells[2,l];
    end;
     
    procedure TForm122.frxUserDataSet1Next(Sender: TObject);
    begin
    inc(l);  // prochaine ligne
    end;

    Et voilà, c'est tout et c'est valable avec la version 'Fastreport Delphi'

    Pour ce qui est du post #1 sans le dessin du FastReport je ne sais pas trop quoi en penser ça peut être un problème de page, de zone etc..
    en tout cas pour éviter l'erreur il eusse fallu écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MemoRef := frxReportImpFacture.FindObject('MemoRf') as TfrxMemoView;
    if assigned(memoref) then  MemoRef.Text := Grid.Cells[0, 0];
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) ,D11 (Alexandria)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  6. #6
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    août 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : août 2005
    Messages : 214
    Points : 168
    Points
    168
    Par défaut
    Bonjour Sergio

    il est vrai que j'ai résolu mon problème avec l'utilisation d'un "CrossObject" mais
    Je vais essayé ta solution pour voir, mais cela me parait séduisant d'entrée.

    Merci pour tes conseils

  7. #7
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    août 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : août 2005
    Messages : 214
    Points : 168
    Points
    168
    Par défaut
    Bonjour Sergio,

    J'ai essayé ta solution sur VCL et elle marche parfaitement en plus elle facile à mettre en œuvre.
    J'espère que cela pourra servir à beaucoup

    Encore Merci

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

Discussions similaires

  1. Impression avec FastReport FMX
    Par Wachter dans le forum FastReport
    Réponses: 1
    Dernier message: 18/05/2016, 13h16
  2. Impression d'état avec FastReport
    Par Lucien Cansani dans le forum FastReport
    Réponses: 0
    Dernier message: 29/01/2015, 17h49
  3. Problème impression avec fastreport
    Par fabpan dans le forum Composants VCL
    Réponses: 0
    Dernier message: 07/05/2010, 15h39
  4. Grille avec saisie & Combos lié
    Par J-P-B dans le forum XMLRAD
    Réponses: 2
    Dernier message: 12/06/2003, 11h08
  5. [VB6] [Interface] Grille avec combobox
    Par khany dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 15/01/2003, 09h55

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