Sisällysluettelo | |
---|---|
|
Räätälöidyt raportit
SKJ Pääohjelma → Raportit → Räätälöidyt raportit: voidaan tehdä asiakaskohtaisia raportteja.
Voit tuoda valmiita raportteja sisään ohjelmaan SKJ Pääohjelma → Tiedosto → Tuo raporttipohja -toiminnolla.
Raportteja voidaan ajaa myös yöajossa ajastetuilla raporteilla (Raporttijonot). Raporttijonossa voi käyttää raportin parametreja tyylillä:
Code Block |
---|
parametri:tyyppi=arvo |
Näytön alalaidassa on kolme SQL-välilehteä, joista jokainen vastaa yhtä tietolähdettä (datapipeline) raportilla.
Lisäksi on olemassa yksi tieto -niminen tietolähde, jota voidaan käyttää apuna, kun halutaan tulostaa vain yksi sivu/asia.
Esimerkiksi Crosstab datapipeline1:n tiedoista.
SQL on normaalia Pervasiven SQL:a. Raportin rajausarvot voidaan saada mukaan parametreilla esimerkiksi:
Code Block |
---|
select sum(summa) from tuotemyy where pvm between :spvmalku and :spvmloppu |
(tuotemyy:n pvm on yyyymmdd muotoinen merkkijono) tai
Code Block |
---|
select sum(summa) from mt where tilauspaiva between :pvmalku and :pvmloppu |
(mt:n tilauspaiva on pervasiven date kenttä yyyy-mm-dd muotoinen).
Jos raportille haluaa tulostaa nuo päivät, pitää raportille luoda Label ja Calc-välilehdelle laittaa ko. Labelin OnGetText:iin seuraava koodi:
Panel |
---|
procedure Label12OnGetText(var Text: String); end; |
Päivä loppu on vastaavasti
Code Block |
---|
Report.Parameters['paivaloppu'] |
Lisäksi voidaan laittaa muita parametrerjä esim. asiakasryhmä.
Code Block |
---|
select nro, nimi, sum(summa) from mt,asiakas where asiakas.asiakas=mt.toimitusasiakas and asiakas.ryhma =:asryhma group by nro,nimi |
Painamalla päivitä parametrit :asryhma ilmestyy ylös ja siihen voidaan ilmoittaa ryhmän numero.
Huom. parametrissä ei saa olla skandeja. :asryhmä ei ole siis kelvollinen.
SQL-lauseiden ketjuttaminen
Usein on tarpeen tehdä laskentaa ennen raportin tulostusta, esimerkiksi kerätä asiakkaiden myynti aputauluun useasta kannasta.
Tätä varten on lisätty --EIVIRHE kommentti, jolla voidaan seuraavasta SQL-lauseesta tuleva virhe ohittaa.
Esimerkkinä alla olevat sql-lauseet keräävät saldosumma-tauluun neljästä kannasta tiettyjen asiakasryhmien tilisaldotapahtumat ja raportoi ne yhteen. Tässä taulun tyhjentäminen ja luomisen virheet on ohitettu, koska taulun uudelleenluominen tuottaisi virheen.
Lauseiden erottimena kannattaa käyttää puolipistettä. Ja huom. puolipistettä EI SAA laittaa heti edellisen sanan perään, ohjelma ei tunnista sitä.
Code Block |
---|
--EIVIRHE DELETE FROM SALDOSUMMA ; --EIVIRHE CREATE TABLE SALDOSUMMA (kanta varchar(20),asiakas integer ,summa float,primary key(kanta,asiakas)) ; insert into SALDOSUMMA (select 'KUOPIO',a.asiakas,round(sum(if(tyyppi=0,-suoritus,suoritus)),2) from KUOPIO.salsuor s, lielahti.asiakas a where s.asiakas = a.asiakas and tyyppi in (0,1) and a.ryhma in (1,2,3,4,8,34) and pvm between :pvmalku and :pvmloppu group by a.asiakas ) ; insert into SALDOSUMMA (select 'TAMPERE',a.asiakas,round(sum(if(tyyppi=0,-suoritus,suoritus)),2) from TAMPERE.salsuor s, elovainio.asiakas a where s.asiakas = a.asiakas and tyyppi in (0,1) and a.ryhma in (1,2,3,4,8,34) and pvm between :pvmalku and :pvmloppu group by a.asiakas ) ; insert into saldosumma (select 'HELSINKI',a.asiakas,round(sum(if(tyyppi=0,-suoritus,suoritus)),2) from HELSINKI.salsuor s, kulju.asiakas a where s.asiakas = a.asiakas and tyyppi in (0,1) and a.ryhma in (1,2,3,4,8,34) and pvm between :pvmalku and :pvmloppu group by a.asiakas ) ; insert into saldosumma (select 'JKYLA',a.asiakas,round(sum(if(tyyppi=0,-suoritus,suoritus)),2) from JKYLA.salsuor s, NOKIA.asiakas a where s.asiakas = a.asiakas and tyyppi in (0,1) and a.ryhma in (1,2,3,4,8,34) and pvm between :pvmalku and :pvmloppu group by a.asiakas) ; Select asiakas.asiakas asnro, nimi, sum(summa) as saldo from asiakas left outer join saldosumma on asiakas.asiakas= saldosumma.asiakas where ryhma in (1,2,3,4,8,34) group by asnro,nimi |
"Makroparametrit"
Tiettyjä asioita ei voi välittää sql lauseelle normaalina parametrina. Tällaisia ovat esim järjestys (order by ) , in lauseen arvot, poikkevat kenttänimet jne. Tätä puutetta varten on räätälöityyn raporttiin laitettu makroparametrit. Eli esim
Code Block |
---|
select numero, nimi, {hintakentta} from tuote order by {jarjestys} |