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



rpt_AOA
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:

ColonaTip Date
denumire String
totalDecimal
nr_facturiInt


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