Tworzenie raportów na podstawie ustalonych szablonów

Tworzenie raportów na podstawie ustalonych szablonów
DA
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam,
Chce zrobić aplikacje która będzie generowała pewien wydruk danych - raport. Moja baza danych jest zrobiona na podstawie rekordów. Chce aby wygląd wydruku mozna zmieniac bez wchdzenia w kod, cos tak jak szablony. Widzialem w pewnej apce ze ktos miał utworzony szablon w pliku doc i mozna bylo dostosowywac wyglad wydruku. Plik doc miał odwołania jakies do pól ktore sa uzupelnianie zaciagajac dane z bazy.

KamilAdam
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Silesia/Marki
  • Postów: 5555
0
damkon napisał(a):

Chce zrobić aplikacje która będzie generowała pewien wydruk danych(raport)

I co cie powstrzymuje? Oprócz tego że chcesz użyć w tym celu Pascala?

DA
  • Rejestracja: dni
  • Ostatnio: dni
0

Chodzi o to w jaki sposob stworzyc szablon w doc badz docx i na podstawie tego szablonu generowac raporty podstawiajac dane z bazy w odpowiednie miejsca w pliku doc.

JZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

Dawno dawno temu w Delphi 7, coś takiego robiłem, może coś ci pomoże :

Kopiuj

type
  TWordReplaceFlags = set of (wrfReplaceAll, wrfMatchCase, wrfMatchWildcards);

.....
.....
procedure TfrmDrukowanieDokumentow.OtworzDokumentDOC(plik:string);
const
  wdFindContinue = 1;
  wdReplaceOne = 1;
  wdReplaceAll = 2;
  wdDoNotSaveChanges = 0;
var
  WordApp: OLEVariant;
  Flags: TWordReplaceFlags;
  x:integer;
  i:integer;
begin


 if assigned(GRID) then
  begin
   for x:=0 to GRID.SelectedRows.Count-1 do
    begin
     Flags:=[wrfReplaceAll];
     try
       WordApp := CreateOLEObject('Word.Application');
     except
       on E: Exception do
       begin
         E.Message := 'MSWord nie jest dostępny.';
         raise;
       end;
     end;

     with GRID.DataSource.DataSet do
       GotoBookmark(Pointer(GRID.SelectedRows.Items[x]));
     for i:=0 to GRID.DataSource.DataSet.FieldCount-1 do
      begin


       try


        try
          { Hide Word }
          WordApp.Visible := True;
          { Open the document }
          WordApp.Documents.Open(sciezka+'\'+plik);
          { Initialize parameters}
          WordApp.Selection.Find.ClearFormatting;
          WordApp.Selection.Find.Text := '['+GRID.DataSource.DataSet.Fields[i].DisplayName+']';
          WordApp.Selection.Find.Replacement.Text := GRID.DataSource.DataSet.Fields[i].AsString;
          WordApp.Selection.Find.Forward := True;
          WordApp.Selection.Find.Wrap := wdFindContinue;
          WordApp.Selection.Find.Format := False;
          WordApp.Selection.Find.MatchCase := wrfMatchCase in Flags;
          WordApp.Selection.Find.MatchWholeWord := False;
          WordApp.Selection.Find.MatchWildcards := wrfMatchWildcards in Flags;
          WordApp.Selection.Find.MatchSoundsLike := False;
          WordApp.Selection.Find.MatchAllWordForms := False;
          { Perform the search}
          if wrfReplaceAll in Flags then
            WordApp.Selection.Find.Execute(Replace := wdReplaceAll)
          else
            WordApp.Selection.Find.Execute(Replace := wdReplaceOne);
        finally
          { Quit Word }
      //    WordApp.Quit;
        end;
       except
       end;
      end;
     WordApp := Unassigned;
    end;
  end;
end;

a z drugiej strony nie lepiej np fastreporta użyć ??

DA
  • Rejestracja: dni
  • Ostatnio: dni
0

A fastreport nie będzie miał problemu pobierać dane z pliku typu rekordowego ?

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
1

do FR dorzucasz UserDataSet i możesz tam przekazać cokolwiek zechcesz

woolfik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1611
1

FR niestety jest płatny ale szczerze mówiąc to były najlepiej wydane pieniądze w życiu ... tworzenie raportów w FR jest tak proste i przyjemne, że łatwiej chyba tylko w apex mi się robi :)

robertz68
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Zielona Góra
0

Jeszcze w wersji 10.3 Community Edition FR był dokładany w specjalnej wersji dla Embarcadero i była to wersja bardzo użyteczna. Od wersji 10.4 już go chyba nie ma a klucze do 10.3 wygasły. Tak więc albo zakup albo ... nie wiem co.

PD
  • Rejestracja: dni
  • Ostatnio: dni
1

w tagach masz Lazarus-a, więc jak chcesz to jest dostępny LazReport (czyli przeniesiony i trochę rozbudowany FreeReport, darmowa wersja FastReports).
Komponenty znajdują się na dysku po standardowej instalacji lazarusa. Należy tylko zainstalować (Menu: Pakiet > instaluj / odinstaluj pakiety)

KK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 43
0

Dodajmy jeszcze, że LazReport ma polską wersję językową i jest możliwy eksport do PDF.

DA
  • Rejestracja: dni
  • Ostatnio: dni
0

Ok. Ale jak załadować dane z pliku typu rekordowego. Bo pobranie danych z bazy SQL jest spoko ale mam problem z plikiem aby z niego zaciągnąć dane.

KK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 43
1

Musisz zdefiniować DataSet. Poczytaj sobie to:
https://wiki.freepascal.org/How_to_write_in-memory_database_applications_in_Lazarus/FPC
Znajdziesz też stosowne poradniki w google. Ogólnie to wbrew pozorom proste. Musisz po prostu napisać import z pliku do stworzonego przez siebie DataSeta (moim zdaniem należy użyć do tego klasy TBufDataSet). W przykładzie powyżej masz import z csv.
Jeśli jednak piszesz bazę od zera to nie ma jednak większego sensu. TBufDataSet ma metody do odczytu i zapisu danych. Stwórz sobie więc odpowiedni DataSet i z nim pracuj.

DA
  • Rejestracja: dni
  • Ostatnio: dni
0

Zrobiłem szablon w HTML i używając stringreplace podmieniam dane pobrane z pliku np: %numer% jest podmieniane na 123. Dodatkowo dodam jeszcze jeden plik przechowujący zmienne przypisane do danych w bazie. Przez co łatwo będzie dodawać nowe zmienne do szablonu. Czyli np: %nowa_zmienna% - urzadzenie.model. potem można wstawić gdzie się chce nową zmienna do szablonu w HTML.

PD
  • Rejestracja: dni
  • Ostatnio: dni
2

ale korzystając z komponentu do raportowania możesz od razu wynika zapisać do pdf, html, obrazka, czy puścić bezpośrednio na drukarkę.
tutaj masz przykład użycia LazReport: Eksport tekstu ze znakami specjalnymi do PDF

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.