ČASTO KLADENÉ DOTAZY

HLEDAT MŮŽETE ZADÁNÍM ČÁSTI TEXTU NEBO ČÍSLA, POKUD NAPŘ. HLEDÁTE KONKRÉTNÍ CHYBOVOU HLÁŠKU

Programování v tiskové sestavě


Jedná se o pokročilou techniku kdy je možné v jakékoliv sestavě systému Palstat přidávat scripty v jazyku C#, které mohou přizpůsobit výstup speciálním požadavkům. Metoda je vhodná pouze pro IT odborníky. Technika je určená pouze pro IT pracovníky nebo uživatele chápající principy programování a znají základy práce v editoru tiskových sestav.

Všechny ukázky jsou pouze příkladem a NELZE je využít prostým CTRL+C -> CTRL+V

Aby bylo možné využít některých základních objektů systému Palstat v sestavě je nutné ve scriptech začít vložením.

using Palstat;

Použitím using může být více dalších tříd, které potřebujete v tisku využívat a v tomto návodu budou u jednotlivých příkladů použity i další třídy.

Základní ukázka jak přiřadit script na objekt v tiskové sestavě

Vytvoření scriptu

- Natáhněte si textové pole do sestavy s názvem "label3"

- V jeho vlastnostech si založte nový script, standardně je umístěn na Before Print.

- Automaticky budete přepnuti na příslušné pole v editoru scriptů. Defaultní jazyk je C#.

Načtení hodnot z databáze

Načítání hodnot zajišťuje knihovna Palstat, která umožnuje načíst několik typů proměnných:

  • String (GetString),
  • Double (GetDouble)
  • Int (GetInt)
  • DateTime (GetDateTime)

 

Jako vstupní parametry se použijí název proměnné v db a název příslušného detail reportu (tabulky), ve kterém se tato proměnná nachází.
Název proměnné v db je napsán jako poslední hodnota v nápovědě, která se objeví když  chvíli postojíte myší na příslušně hodnotě ve "Field List", např. viz obr. "Číslo kopie" je "DICOPYNUMBER".

 

Zapnutí nápovědy:

 

Zobrazení nápovědy v FieldList:

 

Název příslušného detail reportu zjistíte tak, že se podíváte do "Field List", jak se jmenuje tabulka, ve které se nachází položka, kterou chcete načítat a pak se v sestavě podíváte, jaké má tato tabulka číslo u detail reportu, např. viz obr. "Číslo kopie" patří do "Tabulka: Rozdělovník" a v sestavě se tato tabulka dotahuje jako "DetailReport2".

Ukázka

Nyní si tedy ukážeme, jak bude vypadal jednoduchý script, který do našeho ukázkového  pole "label3" načte hodnotu položky "Číslo kopie" z databáze kde se položka jmenuje "DICOPYNUMBER". Nebudeme ji nijak upravovat, pouze ji načteme do proměnné cis_kopie a tu vypíšeme do "label3":

using Palstat;

private void label3_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
        string cis_kopie = PS.GetString("DICOPYNUMBER", DetailReport2);
        label3.Text = cis_kopie;
}

 

Naplnění vlastní proměnné z dostupných políček v tisku

Data načítáme do vlastních proměných pro další zpracování.

int TEKIND = PS.GetInt("TEKIND",DetailReport1);

TEKIND = Název pole jak je veden v databázi a může být zobrazen i v editoru nebo v programu.
DetailReport1 = Z jakého reportu v sestavě data načíst. Vždy musí být report s daty do tisku vložen, aby mohl být tímto postupem přístupný.

 

using Palstat;

private void OnBeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
	string MAKIND   = PS.GetString("MAKIND", DetailReport);
	string MARESULT = PS.GetString("MARESULT", DetailReport);

        double STRATING = PS.GetDouble("STRATING", DetailReport1);
	int    TEKIND   = PS.GetInt("TEKIND",DetailReport1);

	DateTime? DatumPOV = PS.GetDateTimeN("MAPROTOCOLDATE",DetailReport);

}

Naplnění vlastní proměnné přímo z databáze

Někdy je nutné načíst do sestavy data, která momentálně nemají s aktuální sestavou souvislost nebo nejsou v sestavě dostupná. Data načteme přes SQL přímo z databáze
KEYWORD: sql dotaz, query, databaze


 

Vyhodnocení získaných dat a zapis do požadovaných polí v tisku

Opět získání dat, provedení operace a zápis výstupu do požadovaného pole, které musí být v sestavě předem vloženo a pojmenováno. Pole do kterých zapisujeme mají v tomto příkladě název "data_*".
KEYWORD: spojovani retezcu, switch, substring


 

Potlačení zobrazení části sestavy

Ukázka provede vypnutí části tiskové sestavy pokud v určitém poly nebudou data.
KEYWORD: cancel, skrýt, byte


 

Orámování objektu

Po vyhodnocení a načtení dat přidání orámování k objektu na kterém je funce pověšena.
KEYWORD: rámečky, rámeček, ramecek, border


 

Zjištění čísla týdne z datumu


using Palstat;
using System.Globalization;

public static int GetWeekNumber(DateTime dtPassed)
{
        CultureInfo ciCurr = CultureInfo.CurrentCulture;
        int weekNum = ciCurr.Calendar.GetWeekOfYear(dtPassed, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
        return weekNum;
}

private void tableCell3DatumPOV_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {

       XRLabel control = (XRLabel)sender;
       DateTime? DatumPOV = PS.GetDateTimeN("MAPROTOCOLDATE",DetailReport);

       if (DatumPOV.HasValue){
              string cislo_tydne = GetWeekNumber(DatumPOV.Value).ToString();
              control.Text = String.Format("{0:yyyy} - week {1}",DatumPOV,cislo_tydne);
       }
       else {
              control.Text = "";
       }

}

Změna fontu a velikosti

Pokud potřebujete po vyhodnocení dat provést změnu fontu, velikost, tučnost, barvu

private void tableCell_78_PrintOnPage(object sender, DevExpress.XtraReports.UI.PrintOnPageEventArgs e) {

	XRControl control = (XRControl)sender;
	control.cell.Font = new Font("Times New Roman", 12, FontStyle.Bold);
}

Práce s obrázkem

KEYWORD: zmena velikosti, umisteni prvku, rotace, otoceni, obrazek, podpis


 

Zaokrouhlení na požadovaný počet desetinných míst


 

Koláčový graf


// kolacovy graf (pie) pouzity jako progress bar na zobrazovani procent prubehu
// vysec v kruhu se zvetsuje, vybarvuje podle procent v plneni opatreni
// pokud je splneno na 100% tak se jeste zmeni barva celeho kruhu na zelenou
// je reseno tak, ze se vytvori modelovy graf, jak chceme, aby to vypadalo, takze bez legendy, oramovani, s barvami vyseci atp.
// pozivame pro to pevne hodnoty behem toho odladeni vzhledu a ty mu pak uz jen dynamicky menime podle aktualnich dat 

private void chart1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
	int Plneni = PS.GetInt("ACRUNSTATE",DetailReport1);
	chart1.Series[0].Points[0].Values = new double[1] {Plneni};
	chart1.Series[0].Points[1].Values = new double[1] {100-Plneni};
}

private void chart1_CustomDrawSeriesPoint(object sender, DevExpress.XtraCharts.CustomDrawSeriesPointEventArgs e) {
	if (PS.GetInt("ACRUNSTATE",DetailReport1) == 100) e.SeriesDrawOptions.Color = Color.Green;
}



// graf naplneny hodnotami ze scriptu - filtr dat grafu
// graf je vytvoren v zapati detailu2, nejsou na nej vazana zadna data, pak se mu jen predavaji data pro serii

private void Detail2_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {

	string KodKoty = PS.GetString("CODICODE",DetailReport2);
	if(!KodKoty.Contains("AA_OHY")) {e.Cancel = true; return;}
	int KrokCislo = PS.GetInt("STSTEPNUM",DetailReport1);
	double X = PS.GetDouble("STAVERAGEMET",DetailReport1);
	var s = chart1.Series[0];
	s.Points.Add(new SeriesPoint(KrokCislo, X));

}

Práce se String

Prohledání hodnoty na určité znaky, vyhodnocení a předání do sestavy
KEYWORD: string, str, porovnani, prohledani, slouceni
 


 

Práce s Date

Ukázka porovnání dvou datumových položek a vypsání rozdílu.

using Palstat;

private void OnBeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
	XRLabel script = (XRLabel)sender;
	string s1 = PS.GetString("PRPLANNEDEND",DetailReport);
	string s2 = PS.GetString("PRPLANNEDSTART",DetailReport);
	
	if (s1 == "") {script.Text = "X"; return;}
	if (s2 == "") {script.Text = "X"; return;}

	DateTime d1 = Convert.ToDateTime(s1);
	DateTime d2 = Convert.ToDateTime(s2);
	
	TimeSpan s = d2-d1;
	script.Text = s.TotalDays.ToString();
}

 

catch Exception

Ukázka použití Exception pro případ neočekávaného vstupu, příklad zpracovává pole "MEACCURACY", které je v programu STRING a toto se pokouší konvertovat na Double, konverze ovšem může havarovat pokud uživatel do pole nevloží očekávanou číselnou hodnotu. V takovém případě vypdat MessageBox.
KEYWORD: message, box, exception, vyjimka, convert

using Palstat;

private void label15_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
	try {
		double MEACCURACY  = Convert.ToDouble(PS.GetString("MEACCURACY", DetailReport2)); /*presnost*/
		double LITOLERANCE = Convert.ToDouble(PS.GetDouble("LITOLERANCE", DetailReport)); /*tolerance*/

		//scr_re.Text = "MEACCURACY:"+MEACCURACY+ " LITOLERANCE:"+LITOLERANCE;
		scr_re.Text = Convert.ToString(( MEACCURACY / (LITOLERANCE*100) ));

	} 
	catch (FormatException) {
		System.Windows.Forms.MessageBox.Show("PALSTAT: NO VALID DATA FOR FIELDS ACCURANCY(MEASURES) OR TOLERANCE(MSA)");
		scr_re.Text = "";
	}
}
https://www.palstat.cz/ - Systém řízení kvality Ubytování ve Vrchlabí