Język programowania Delphi, czyli Turbo Pascal, stał się punktem wyjścia dla wielu programistów. Dzięki prostej i jasnej składni oraz umiejętności pisania w stylu proceduralnym okazało się, że jest ton bardzo łatwy do nauczenia. Wielu porównałoby go z Visual Basic, ale u szczytu swojej popularności Delphi dał znacznie więcej możliwości dzięki komponentom do pracy z bazami danych i własną bazą danych – Interbase.
Pomimo tego, że C # i platforma .Net zastąpiły Delphi i VCL, wciąż jest wielu ich zwolenników. Nawet stare aplikacje napisane w tym języku można łatwo uaktualnić przy użyciu nowoczesnych bibliotek, na przykład generator raportu FastReport 6 VCL. Na przykład zautomatyzowane systemy księgowe wymagają raportowania.
Zautomatyzowany system księgowania sprzedaży powinien umożliwiać tworzenie dokumentów płatności, takich jak paragon sprzedaży. W tym artykule przyjrzymy się, jak utworzyć i wydrukować pokwitowanie sprzedaży z aplikacji Delphi. Użyjemy generatora raportów FastReport VCL, do utworzenia paragonu i aplikację użytkownika, aby go wydrukować. Oprócz drukowania można po prostu wyświetlić paragon w oknie przeglądania raportu, z którego można wydrukować paragon, zapisać go w jednym z popularnych formatów dokumentów, wysłać go jako e-mail lub przesłać na dysk w chmurze.
Aby utworzyć paragon sprzedaży, potrzebujemy informacji o: zamówieniu, kliencie, sprzedawcy i treści zamówienia.
W tym przykładzie użyjemy demo.mdb bazy danych z dystrybucji VCL FastReport.
Aby utworzyć aplikację, użyjemy środowiska programistycznego Delphi 7.
Dodajmy dwa przyciski do formularza: jeden do uruchomienia projektanta raportów, drugi do wyświetlania lub drukowania gotowego raportu. Dodaj OpenDialog do formularza, to pozwoli nam to wybrać żądany plik raportu i otworzyć go.
Teraz przejdźmy do tworzenia źródła danych dla raportu — paragonu sprzedaży. Jak wspomniano powyżej, korzystamy z bazy danych demo.mdb, a dokładniej tabel: Zamówienia, Klienci, Przedmioty, Części i Pracownik. Użyjemy składnika ADOConnection do łączenia się z bazą danych i składnikami ADOTable w celu uzyskania danych z każdej tabeli. Tabela Zamówienia jest połączona z tabelami Klienci, Towary i Pracownicy. W związku z tym musimy skonfigurować te połączenia. Aby to zrobić, należy dodać składnik DataSource dla każdej tabeli ADOTable i w celu udostępnienia wszystkich tych tabel w raporcie, dodaj składnik frxBDDataSet dla każdej tabeli.
W związku z tym do pracy z jedną tabelą, powinniśmy uzyskać trzy składniki: ADOTable, DataSource, frxDBDataSet.
W ADOConnection utwórz połączenie z bazą danych demo.mdb z dostarczania listy VCL FastReport.
Te ustawienia składników (dla każdej z pięciu tabel) znajdują się poniżej.
Tabela zamówień:
1. Dla ADOTable ustaw właściwości:
− Połączenie – ADOConnection1;− Nazwa – Zamówienia;− Nazwa tabeli – zamówienia.
2. Dla DataSource ustaw właściwości:
− DataSet – Zamówienia.
3. Dla frxDBDataSet, ustaw właściwości:
− DataSet – Zamówienia;
− Nazwa użytkownika – zamówienia.
Tabela klienci:
1. Dla ADOTable ustaw właściwości:
− Połączenie – ADOConnection1;
− Imię i nazwisko – klient;
− Nazwy pól indeksowych – CustNo;
− MasterSource – DataSource1;
− MasterFields - CustNo;
− TableName – klient.
2. Dla DataSource ustaw właściwości:
− DataSet – Klient.
3. Dla frxDBDataSet, ustaw właściwości:
− DataSet – Klient;
− Nazwa użytkownika – Klient.
Tabela elementów:
1. Dla ADOTable ustaw właściwości:
− Połączenie – ADOConnection1;
− Nazwa – Przedmioty;
− Nazwy pól indeksowych – OrderNo;
− MasterSource – DataSource1;
− MasterFields - OrderNo;
− TableName – przedmioty.
2. Dla DataSource ustaw właściwości:
− Zestaw danych – Przedmioty.
3. Dla frxDBDataSet, ustaw właściwości:
− Zestaw danych – pozycje;
− Nazwa użytkownika – Przedmioty.
Tabela Parts:
1. Dla ADOTable ustaw właściwości:
− Połączenie – ADOConnection1;
− Nazwa – części;
− TableName – części.
2. Dla DataSource ustaw właściwości:
− Zestaw danych – części.
3. Dla frxDBDataSet, ustaw właściwości:
− Zestaw danych – części;
− Nazwa użytkownika – części.
Tabela pracowników:
1. Dla ADOTable ustaw właściwości:
− Połączenie – ADOConnection1;
− Imię i nazwisko – pracownik;
− Nazwy pól indeksowych – EmpNo;
− MasterSource – DataSource1;
− Pola nadrzędne - EmpNo;
− TableName – pracownik.
2. Dla DataSource ustaw właściwości:
− DataSet – Pracownik.
3. Dla frxDBDataSet, ustaw właściwości:
− DataSet – Pracownik;
− Nazwa użytkownika – Pracownik.
Tabele Nabywcy, Towarów i Pracownika mają relację z DataSource1 (pierwsza tabela — zamówienia). Są one połączone kluczem, dzięki czemu dla jednego rekordu w tabeli Zamówienia zostaną wybrane odpowiednie rekordy z tych tabel.
Tabela Pozycję zawiera informacje o towarach w zamówieniu. Nie ma żadnych konkretnych danych dotyczących towaru— tylko link do tabeli Parts. Dodajmy dwa pola z tabeli Parts— Cena i Opis – do tabeli ADOTable dla tabeli Items.
Dzięki temu nie musimy używać tabeli Części w przyszłości.
Aby dodać pola obliczeniowe do tabeli Elementy, kliknij dwukrotnie obiekt ADOTable i zobacz okno z polami tabeli. Początkowo nie będzie tam żadnych danych, ale można je załadować z menu kontekstowego, wybierając Dodaj pola ...:
Pola Cena i Opis zostaną pobrane z tabeli Parts
Wybierz pozycję Nowe pole... w menu kontekstowym i dodaj pole Cena:
Dodaj opis produktu (pole opisu) w ten sam sposób:
Teraz, gdy tylko utworzyliśmy źródło danych i skonfigurowaliśmy relacje między tabelami, dodajmy do formularza kilka przycisków. Jeśli dobrze pamiętasz, to pierwszy przycisk uruchamia projektanta raportów, a drugi wyświetla raport.
Nie zapomnij dodać składnika frxReport do formularza.
Dodaj zdarzenie kliknięcia dla każdego z przycisków. Oto kod obsługi zdarzeń, do wyświetlania projektanta raportów:
1 |
frxReport1.DesignReport();
|
Aby wydrukować gotowy raport, można dodać okno dialogowe Open File do formularza, aby wybrać raport utworzony w projektancie. Kod do wydrukowania raportu będzie wyglądać następująco:
1 2 3 4 5 6 7 8 |
OpenDialog1.Filter := 'FastReport VCL (*.fr3)|*.FR3'; OpenDialog1.Execute(); if Length(OpenDialog1.FileName)>0 then begin frxReport1.LoadFromFile(OpenDialog1.FileName); frxReport1.PrepareReport(); frxReport1.Print(); end |
Aby wyświetlić podgląd raportu, można zastąpić funkcję Drukuj ekranem raportu:
1 |
frxReport1.ShowReport();
|
Teraz możesz uruchomić aplikację, kliknąć przycisk Projektuj raport i przejść do tworzenia raportu.
Przede wszystkim wybierz zestawy danych raportu.
Nie potrzebujemy tabeli o nazwie Parts w tym raporcie, więc nie ma potrzeby jej wybierania. Przejdźmy do tworzenia szablonu. W naszym raporcie znajdują się dwa pasma danych: MasterData i DetailData. W pierwszym paśmie danych wyprowadzamy informacje o kliencie:
- nazwa - Customer.Company;
- adres - Customer.Addr1;
- telefon - Customer.Phone.
... a klient:
- nazwa firmy;
- pracownik — Pracownik.FirstName Employee.Nazwisko;
- numer zamówienia – Orders.OrderNo;
- data sprzedaży – Zamówienia.Data sprzedaży.
Ten zespół jest połączony z tabelą Zamówienia. Informacje o zawartości zamówienia będą wyświetlane w podrzędnym paśmie Dane: nazwa produktu, ilość, cena towaru, cena dla określonej ilości.
Sumy, takie jak całkowita kwota netto, stawka podatku, ostateczna kwota wraz z podatkiem, będą wyświetlane w stopce.
Sumy częściowe sumy wiersza są obliczane przez pomnożenie ilości i ceny towaru jako części pojedynczego zapisu tabeli:
[<Items."Qty">*<Items."Price">]
Net subtotals is calculated by the formula:
∑(item quantity * item price)
[SUM(<Items."Qty">*<Items."Price">)]
Total tax value:
∑(item quantity* item price * tax rate)
[SUM(<Items."Qty">*<Items."Price">)*0.05]
Total due:
∑(item quantity * item price)+ ∑( item quantity * item price * tax rate)
[SUM(<Items."Qty">*<Items."Price">) + SUM(<Items."Qty">*<Items."Price">)*0.05]
Również metoda płatności jest widoczna w stopce bazy danych. Oczekuje się, że zostanie to określone podczas ręcznego drukowania paragonu sprzedaży.
Tutaj możemy powiedzieć, że nasz raport jest gotowy do wyświetlenia. Zapisz go w rejestrze lokalnym i zamknij projektanta raportów. Za pomocą drugiego przycisku w formularzu wybierz zapisany raport i wydrukuj (jeśli użyto opcji drukowania w kodzie) lub wyświetl go ponownie, jeśli wybrano opcję podglądu raportu – ShowReport().
To wszystko. Przy niewielkim wysiłku można wdrożyć przydatne funkcje dla systemu księgowego. Teraz, w oknie przeglądania raportu, można go wydrukować lub zapisać w jednym z popularnych formatów dokumentu: PDF, DOCS, XLSX, XML, RTF i wielu innych.