Jeśli chodzi o aplikacje Delphi, rozumiemy, że mówimy o aplikacjach zaimplementowanych w VCL (Visual Component Library) dla systemu operacyjnego Windows. W raz z pojawieniem się platformy C i .Net popularność Delphi VCL nieco, mimo to na całym świecie istnieje wiele programistów Delphi. Wiele aplikacji jest napisanych w VCL i wymagają zmiany.
Jeśli wdrażasz system informacji księgowej dla obrotu towarami, musisz wygenerować niektóre dokumenty z aplikacji. Mogą to być raporty, czeki sprzedaży i kasjera, faktury. W tym artykule przyjrzymy się całemu procesowi drukowania faktury zaczynając od tworzenia aplikacji do wyświetlania raportu.
Do tworzenia aplikacji użyjemy środowiska programistycznego Delphi 7 i generatora raportów FastReport VCL do utworzenia raportu.
Praca nad aplikacją sprowadza się do dodawania niezbędnych składników do formularza i konfigurowania ich.
Znajdź kartę FastReport w panelu komponentów i dodaj składnik frxReport do formularza. Musimy również utworzyć źródło danych dla raportu. Na przykład użyjemy bazy danych demo.mdb z dystrybucji VCL FastReport. Użyj następujących tabel: Zamówienia, Klienci, Towary, Części.
Przeciągnij i upuść składnik ADOConnection na formularz z karty ADO w palecie komponentów. Następnie dodaj cztery składniki ADOTable.
Na karcie DataAccess dodaj cztery składniki DataSource.
Na karcie FastReport dodaj cztery składniki frxDBDataSet.
Teraz mamy: ADOTable, DataSource, frxDBDataSet i trzeba skonfigurować je jako trzy.
Zróbmy to.
Pierwsze trzy:
- W przypadku tabeli ADOTable ustaw właściwości:
− Połączenie – ADOConnection1;
− Nazwa – zamówienia;
− Nazwa tabeli – zamówienia.
- W przypadku źródła danych ustaw właściwości:
− DataSet – Zamówienia.
- W przypadku zestawu frxDBDataSet ustaw właściwości:
− DataSet – Zamówienia;
− Nazwa użytkownika – zamówienia.
Drugie trzy:
- W przypadku tabeli ADOTable ustaw właściwości:
− Połączenie – ADOConnection1;
− Imię i nazwisko – klient;
− Nazwy pól – CustNo;
− MasterSource – DataSource1;
− Pola nadrzędne - CustNo;
− TableName – klient.
- W przypadku źródła danych ustaw właściwości:
− DataSet – Klient.
- W przypadku zestawu frxDBDataSet ustaw właściwości:
− DataSet – Klient;
− Nazwa użytkownika – Klient.
Trzecie trzy:
- W przypadku tabeli ADOTable ustaw właściwości:
− Połączenie – ADOConnection1;
− Nazwa – Przedmioty;
− IndexFieldnames – OrderNo;
− MasterSource – DataSource1;
− MasterFields - OrderNo
− TableName – przedmioty.
- W przypadku źródła danych ustaw właściwości:
− DataSet– Przedmioty.
- W przypadku zestawu frxDBDataSet ustaw właściwości:
− DataSet– pozycje;
− UserName – Przedmioty.
Czwarte trzy:
- W przypadku tabeli ADOTable ustaw właściwości:
− Połączenie – ADOConnection1;
− Nazwa – części;
− TableName – części.
- W przypadku źródła danych ustaw właściwości:
− DataSet – części.
- W przypadku zestawu frxDBDataSet ustaw właściwości:
− DataSet – części;
− UserName – części.
Prawdopodobnie zauważyłeś, że tabela Odbiorca i Elementy mają relację z DataSource1 (pierwsza tabela — zamówienia). Oznacza to, że są one połączone kluczem (relacja jeden do wielu). Wiele zamówień może mieć tylko jednego Klienta itp. Jest to konieczne, aby podczas wyświetlania informacji o konkretnym zamówieniu w raporcie, dane były pobierane z połączonych tabel istotnych dla tego zamówienia.
Utwórzmy obliczalne pola w tabeli ADOTable dla tabeli Elementy, aby uprościć naszą dalszą pracę z szablonem raportu. Kliknij dwukrotnie ten obiekt i zobacz okno z polami tabeli. Początkowo będą one puste, ale można je załadować z menu kontekstowego, wybierając Dodaj pola ...:
Pola Cena i Opis zostaną pobrane z tabeli Part.
Wybierz pozycję Nowe pole... w menu kontekstowym i dodaj pole Cena:
Dodaj opis produktu (pole opisu) w ten sam sposób:
W ten sposób wyeliminowaliśmy konieczność korzystania z tabeli Part w naszym raporcie; zdobyliśmy już wszystko, czego potrzebowaliśmy.
Teraz, gdy tylko utworzyliśmy źródło danych i skonfigurowaliśmy relacje między tabelami, dodajmy kilka przycisków do formularza: Raport projektu i ShowReport.
Jak zapewne się domyślacie, pierwszy przycisk uruchamia projektanta raportów, a drugi wyświetla raport.
Dodaj zdarzenie kliknięcia dla każdego z przycisków. Oto kod obsługi zdarzeń, aby wyświetlić projektanta raportów:
1 |
frxReport1.DesignReport();
|
Aby wydrukować gotowy raport, można dodać okno dialogowe Otwórz plik do formularza, aby wybrać raport utworzony w projektancie. Kod do drukowania raportu będzie taki:
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 |
Jeśli chcesz wyświetlić podgląd raportu, możesz zastąpić funkcję Drukuj wyświetlaniem raportu:
1 |
frxReport1.ShowReport();
|
Teraz możesz uruchomić aplikację, kliknąć przycisk Projektuj raport i przejść do tworzenia raportu.
Nadszedł czas, aby omówić o raport, które zamierzamy stworzyć. Aby dokument był prosty i czytelny dla klienta, musisz umieścić na nim wszystkie niezbędne informację. Ale pamiętaj aby nie przesadzić z ich zawartością. Spróbujmy utrzymać tę delikatną równowagę. Tak więc, naszym zdaniem, faktura powinna zawierać następujące informacje:
Na rysunku tym przedstawiono ważne obszary dokumentu.
-
Dane sprzedawcy. Każdy dokument powinien zawierać informacje o sprzedawcy: imię i nazwisko, adres, telefon, adres e-mail, dodatkowe informacje (opcjonalnie);
-
Dane Nabywcy – konieczne jest wskazanie osoby faktycznie odpowiedzialnej za płatność;
-
Identyfikatory zamówień i faktur, wystawienie faktury i terminy płatności. Identyfikatory te pomogą znaleźć fakturę lub zamówienie w bazie danych, w przypadku gdy klient ma jakiekolwiek pytania później;
-
Informacje o zawartości zamówienia. Klient musi zrozumieć, za co płaci. Konieczne jest określenie nazwy i ilości towarów, a także koszt jednostkowy;
-
Całkowita kwota. Łączne kwoty są niezbędne nie tylko do dokonania płatności, ale także do wykonywania obliczeń;
-
Szczegóły płatności. Ponieważ jest to faktura płatnicza, powinna ona zawierać dane odbiorcy;
-
Dane bankowe dotyczące płatności za granicą. Nawet jeśli w tym przypadku klient nie pochodzi z zagranicy, możesz pozostawić te dane dla ujednoliconej formy;
-
Informacje wyjaśniające. Ważne jest, aby podać dane kontaktowe w przypadku pytań. Należy również ostrzec o konsekwencjach opóźnionych płatności. Zmobilizuje to klienta do dotrzymania terminu płatności.
Stworzymy taki dokument w projektancie raportu, który już uruchomiliśmy. Przede wszystkim wybierz zestawy danych raportu.
Nie potrzebujemy tabeli Part 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:
- numer faktury – Orders.OrderNo;
- data faktury – zmienna systemowa [Data];
- termin płatności – bieżąca data [Data] + liczba dni.
Ten zespół jest połączony z tabelą Zamówienia. Informacje o zawartości zamówienia będą wyświetlane w podrzędnym pasie Dane: nazwa produktu, ilość, cena towaru, cena dla określonej ilości, podatek VAT, który nie jest uwzględniony w cenie w niektórych krajach (pokazany jako przykład), całkowita kwota PODATKU VAT.
Kwota VAT, kwota netto, suma faktury będą wyświetlane w stopce. Zostaną tam również podane szczegóły płatności.
Dodaj kilka informacji wyjaśniających do stopki strony, aby uniknąć pytań od klientów:
Sumy częściowe netto są obliczane w ramach rekordu pojedynczej tabeli przez pomnożenie ilości towarów przez cenę towaru:
[<Items."Qty">*<Items."Price">]
Kwota PODATKU VAT jest obliczana według wzoru:
Ilość towarów * cena towaru * VAT %
[<Items."Qty">*<Items."Price">]
Całkowita kwota netto:
∑(ilość towaru * cena towaru)
[SUM(<Items."Qty">*<Items."Price">)]
Łączna kwota podatku VAT:
∑( ilość towarów * cena towaru * stawka VAT)
[SUM(<Items."Qty">*<Items."Price">)*0.05]
Suma faktury:
∑(ilość towaru * cena towaru)+ ∑( ilość towarów * cena towaru * stawka VAT)
[SUM(<Items."Qty">*<Items."Price">) + SUM(<Items."Qty">*<Items."Price">)*0.05]
To wszystko. Zapisz raport w schowku i zamknij projektanta raportów. Za pomocą drugiego przycisku wybierz wygenerowany raport i pobierz okno dialogowe Drukowanie lub okno podglądu, jeśli w kodzie przycisku użyto programu ShowReport().
W ten sposób stworzyliśmy fakturę płatniczą i wyświetliliśmy ją użytkownikowi w zaledwie pół godziny. Teraz, z okna podglądu raportu, możemy wysłać dokument do wydrukowania lub wyeksportować do jednego z popularnych formatów dokumentów elektronicznych: PDF, DOCX, XLSX, RTF i wielu innych.