Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Sisällysluettelo

Table of Contents

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);
begin
Text := Report.Parameters['paivaalku']

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

"

Makroparamerit

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}
nyt hintakentta paremetriin voidaan laittaa esim kaksoishinta tai jopa kaksoishinta, tilauskoodi  ja jarjestys arvoksi vaikka ryhma, nimi