Reportbuilder ohjeita
Asiantuntijat
Sisällysluettelo |
---|
Reportbuilder ohjeita
ReportBuilder on SKJ:n käyttämä raporttityökalu, jolla tulostetaan useat raportit ja tuotetulosteet.
http://www.digital-metaphors.com/download/learning_reportbuilder.html
Tuotekuvien lisääminen tulosteeseen
Tilausvahvistukseen, hinnastoon tms. määriteltävään lomakkeeseen pystyy lisäämään tuotteen kuvan seuraavasti:
- Kuva pitää olla tietenkin tuotteen kuvataulussa.
- Haluamalle rbuilderin bandillle (esim. detail) Image
Detail band:n beforeprint event laita laita koodia esim. seuraavasti. Tässä se on tehtynä myyntitilaukselle. Image1 on kuvakomponentin nimi
procedure DetailBeforePrint; var FileName,kuvateksti: String; begin FileName :=GetTuoteKuva(Tilaukset['Tuote'], 1, kuvateksti); if FileExists(filename) then begin Image1.visible := true; Image1.Picture.loadFromFile(filename); end else begin image1.visible := false; end; end;
- Tässä ohjelma hakee kuvan jonka järjestys on 1.
- Kuvalle kannattaa laittaa strecth ja MaintainAspectRatio päälle.
- Jos haluat, että kuvattomat rivit ovat matalampia, laita detail bandille DynamicHeight
- Tietyt kuvaformaatit vaativat 'DirectDraw' -asetuksen päälle.
Tuotetekstin lisääminen tulosteeseen
Tilausvahvistukseen, hinnastoon tms. määriteltävään lomakkeeseen pystyy lisäämään tuotteen tekstin seuraavasti:
Lisätään haluttuun paikkaaa esim. Memo
ja memon OnPrint eventtiin koodi
procedure Memo1OnPrint; begin memo1.lines.text := GetTuoteTxt( Tilaukset['Tuote'], 'KUVAUS'); end;
- Tässä ohjelma hakee kuvaus otsikon alla olevan tekstin, esimerkki on tehty myyntitilausta varten . Tilaukset'tuote' korvataan tilanteeseen sopivalla viittauksella.
Myyjän ja asiakkaan kopion tulostaminen automaattisesti
Joskus halutaan esim. lähetteestä tai kassakuistista erilainen versio asiakkaalle ja myyjälle. Tälläinen esimerkkihän on oletuskuittipohjassa, jossa alhaalla lukee myyjän kappale ja asiakkaan kappale. Idea tässä on se, että laitetaan tulosteen kopiomääräksi haluttujen erilaisten versioden määrä ja ensimmäisellä kopiolla tulostetaan esim. asiakkaalle näkyvät ja toisella myyjälle näkyvät. Tässä esimerkissä lisätään joka tuoteriville viivakoodi, joka tulostuu vain myyjän kappaleeseen ja alas label, jossa lukee kumman kappale tämä on.
Tämä tehdään seuraavasti Rbuilderin lomakemäärittelyllä:
#Aseta raporttipohjan kopiot arvoon 2. File -> Page setup -> Copies 2
- Laita kaikki komponentit (jos ei ole jo) mihin muunnos vaikuttaa lomakepohjaan
#Mene Calc välilehdelle
##vasemmasta yläkulmasta klikkaa hiiren oikealla ja valitse Module.
##Sitten valitse Global ja Declarations.
##Oikealta puolelta klikkaa Variables hiiren oikealla ja valitse New.- Alapuolelle tulee Var ja sen alle kirjoita {{FCopy: Integer; }} FCopy on tässä nyt muuttuja, joka ilmaisee tulostettavavn kopion numeron
#Calc välilehden vasemmasta ylänurkasta valitse hiiren oikealla Events.
- Alapuolelle tulee Var ja sen alle kirjoita {{FCopy: Integer; }} FCopy on tässä nyt muuttuja, joka ilmaisee tulostettavavn kopion numeron
- Valitse Vasemmasta yläkulmasta Report ja oikealta OnStartPage ja hiiren oikealla ota new. Kirjoita alastulleeseen tilaan koodi
if (Report.SecondPass = True ) and (Report.AbsolutePageNo = 1) then
FCopy := FCopy + 1;
- Vasemmalta hae Detail ja oikealta klikkaa BeforePrint hiiren oikealla ja valitse New (jos new harmaana, se on perustettu). Alas kirjoita koodi
DbBarCode1.Visible := FCopy = 2;
if Fcopy = 2 then
Label39.Caption := 'Myyjän kappale'
else
Label39.Caption := 'Asiakkaan kappale';
Tässä ratkaisussa on yksi virhe. Jos tulostus tehdään polkua -> esikatsele -> tulostus esikatseluikkunasta, niin kappaleet tulotustuvat väärässä järjestyksessä johtuen siitä, että FCopy kasvaa jos esikatselussa arvo on 1.
Veloitusmuoto myyntitilauslomakkeelle
If Tilaukset['Veloitustapa']=0 then Value := '-'; If Tilaukset['Veloitustapa']=1 then Value := 'Laskutus / ' + MaksuEhto['Nimi']; If Tilaukset['Veloitustapa']=2 then Value := 'Tili'; If Tilaukset['Veloitustapa']=3 then Value := 'Kassa'; If Tilaukset['Veloitustapa']=4 then Value := 'Verkkopankki'; If Tilaukset['Veloitustapa']=5 then Value := 'Luottokortti'; If Tilaukset['Veloitustapa']=6 then Value := 'Postiennakko'; If Tilaukset['Veloitustapa']=7 then Value := 'Tilisiirto'; If Tilaukset['Veloitustapa']=8 then Value := 'Suomen Verkkomaksu'; If Tilaukset['Veloitustapa']=9 then Value := 'Bussiennakko'; If Tilaukset['Veloitustapa']=10 then Value := 'Lindorff lasku'; If Tilaukset['Veloitustapa']=11 then Value := 'Klarna lasku'; If Tilaukset['Veloitustapa']=12 then Value := 'Klarna tili';
Labelin arvon muuttaminen
Labelin arvoa voi muuttaa mm. OnGetText eventissä. Rutiini saa var parametrina Text muuttujan johon arvo pitää asetaa.
procedure Label1OnGetText(var text: String); begin if Tilaukset[ 'Tuote' ] = '100' text := 'tuote on 100' else text := 'Tuote ei ole 100'; end;
Huom OnGettext eventissä ei voi asetaa Label:n captionin arvoa suoraan, ajoitukset ei mene oikein ja arvot menevät todennäköisesti väärälle riville.