Create a report (RDLC 2005)
Cerinta
Exemplu cerinta raport: Top vanzari grupate pe client intr-o anumita perioada. Vanzarile se refera la facturi.
Pasul 1 - Cod raport
Luam urmatorul cod de raport din /wiki/spaces/OEC/pages/4220682245. Daca ultimul cod este ANZ urmatorul pe care il vom lua va fi AOA. Alfabetul este format din literele : A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, Z, Y, Z
Pasul 2 - Procedura stocata
Vom creea o procedura stocata in baza de date cu numele rpt_AOA. Deoarece ne intereseaza topul vanzarilor pe o anumita perioada vom avea nevoie de doi parametri: startDate si endDate pe care ii vom pune ca parametri ai procedurii
CREATE PROCEDURE `rpt_AOA`( IN `startDate` DATE, IN `endDate` DATE ) LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN SELECT t.denumire, SUM(valoare_cu_tva) AS total,COUNT(f.id_factura) AS nr_facturi FROM factura f JOIN tert t USING (id_tert) WHERE f.id_document_tip IN (11,15) AND f.`data` BETWEEN startDate and endDate GROUP BY t.id_tert ORDER BY total DESC; END
Pasul 3 - Design raport in Visual Studio 2005
Solutie noua
Cu VisualStudio 2005 in folderul rap_one_erp, vom creea o nou solutie denumita AOA de tipl Visual C# - Windows Application. Atentie sa fie bifat Create directory for solution
Stergem Form1 si Program.cs din solutie.
Data set
Adaugam item nou de tipul Data Set denumit rpt
In DataSetDesigner click dreapta in spatiul gol ->Add DataTable cu numele AOA. In tabel adaugam proprietatile care ne intereseaza, adica cele care sunt returnate de SELECT-ul proceduri stocate (prin Click dreapta-> Add Column). Adaugam denumire, total si nr_facturi. Setam tipul de date din fereastra Properties pentru fiecare coloana in parte (daca nu aparut fereastra de proprietati mergem la View->Properties Window) dupa cum urmeaza:
Colona | Tip Date |
---|---|
denumire | String |
total | Decimal |
nr_facturi | Int |
Design raport
Din solutie, click dreapta pe proiectul AOA, Add new item - Report, denumit AOA.
Raportul va fi tio Portrait A4. Daca vrem sa fie lansdscape din meniul Report->Report properties inversam la Layout PageWidth cu Page Height. Tot aici setam marginile mai mici
In meniul Report deschidem Report Parameters unde punem parametrii din procedura stocata cu aceeasi denumire si in aceeasi ordine
In Designer, din toolbox tragem un Table si completam in Header coloanele. Din fereastra Data Sources deschidem AOA si tragem fiecare coloana pe rand in tabel in randul de mijloc. La campul total, din fereastra Properties modificam formatul in N2 pentru a rotunji la 2 zecimale numarul. Daca spre exemplu era un camp de data am fi pus la format dd.MM.yyyy
Deoarece nu avem nevoie de Footer dam click pe tabel, click dreapta in zona Header/Footer si deselectam Footer
Deasupra tabelului tragem din ToolBox un Textbox in care vom pune titlul tabelului si perioada. Pentru aceasta vom folosi o expresie de forma: ="Vanzari clienti in perioada "+ FORMAT(Parameters!startDate.Value,"dd.MM.yyyy")+" - "+FORMAT(Parameters!endDate.Value,"dd.MM.yyyy"). Din Properties modificam Fontul (Bold, Size 12, etc).
La sfarsit dam Save All
Pasul 4 - Configurare raport in ONE ERP
Raport
In OneErp in Aplicatia Develop, deschidem meniul Reports si creem un nou raport. Completam informatiile si alegem fisierul AOA.rdlc din folderul de rapoarte.
Salvam (cu tasta CTRL apasata) si apoi deschidem tabul Filters unde adaugam cele doua filtre de data ca in imagine.
Dupa ce salvam (cu tasta CTRL apasata) apasam butonul Create frame view. Revenim in tabul Report de unde copiem Link-ul, in cazul de fata #frame$rpt_AOA
Meniu
In aplicatia Develop mergem la meniul Menus si intr-unul din meniuri adaugam si raportul nostru folosind link-ul din clipboard
Note
Daca se modifica designul raportului adica fisierul rdlc si trebuie reincarcat mai intai alegeti un alt fisier cu alta denumire si apoi incarcati fisierul rdlc dorit.
Pentru un raport de pe CORE sau o instanta de DEV, daca se modifica filtrele pe raport trebuie modificat frame view-ul manual! Se poate da Create Frame View din nou doar cand se lucreaza pe un raport care este direct pe instanta clientului si nu exista o instanta de dev pentru clientul respectiv.
Numele parametrilor din FrameView trebuie sa fie acelasi cu numele parametrilor din RDLC. Ordinea din RDLC trebuie sa fie aceeasi cu ordinea din procedura stocata.
Formatare date
Pentru formatul numeric de tipul 100.00,00 (adica punct ca separatori mii si virgula ca separator zecimal) in procedura stocata MySql se foloseste FORMAT(numar, 2, ‘ro_RO’)
Pentru a afisa o data de forma 21 Ianuarie 2021 se foloseste
SET lc_time_names = 'ro_RO'; DATE_FORMAT(data, "%d %M %Y")
Alternativ, daca nu se doreste schimbare formatului :
SELECT CONCAT(DATE_FORMAT(CURDATE(), ‘%d’), ” “, CASE WHEN DATE_FORMAT(CURDATE(), ‘%b’) = ‘Jan’ THEN ‘Ianuarie’ WHEN DATE_FORMAT(CURDATE(), ‘%b’) = ‘Feb’ THEN ‘Februarie’ WHEN DATE_FORMAT(CURDATE(), ‘%b’) = ‘Mar’ THEN ‘Martie’ WHEN DATE_FORMAT(CURDATE(), ‘%b’) = ‘Apr’ THEN ‘Aprilie’ WHEN DATE_FORMAT(CURDATE(), ‘%b’) = ‘May’ THEN ‘Mai’ WHEN DATE_FORMAT(CURDATE(), ‘%b’) = ‘Jun’ THEN ‘Iunie’ WHEN DATE_FORMAT(CURDATE(), ‘%b’) = ‘Jul’ THEN ‘Iulie’ WHEN DATE_FORMAT(CURDATE(), ‘%b’) = ‘Aug’ THEN ‘August’ WHEN DATE_FORMAT(CURDATE(), ‘%b’) = ‘Sep’ THEN ‘Septembrie’ WHEN DATE_FORMAT(CURDATE(), ‘%b’) = ‘Oct’ THEN ‘Octombrie’ WHEN DATE_FORMAT(CURDATE(), ‘%b’) = ‘Nov’ THEN ‘Noiembrie’ WHEN DATE_FORMAT(CURDATE(), ‘%b’) = ‘Dec’ THEN ‘Decembrie’ END, ” “, DATE_FORMAT(CURDATE(), ‘%Y’)) AS DATE
Sursa raportului se poate descarca de aici