![]() |
![]() |
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.
- 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čítání hodnot zajišťuje knihovna Palstat, která umožnuje načíst několik typů proměnných:
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". |
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;
}
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);
}
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
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
Ukázka provede vypnutí části tiskové sestavy pokud v určitém poly nebudou data.
KEYWORD: cancel, skrýt, byte
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
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 = "";
}
}
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);
}
KEYWORD: zmena velikosti, umisteni prvku, rotace, otoceni, obrazek, podpis
// 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));
}
Prohledání hodnoty na určité znaky, vyhodnocení a předání do sestavy
KEYWORD: string, str, porovnani, prohledani, slouceni
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();
}
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 = "";
}
}
![]() |
© Copyright 1992 - 2025 PALSTAT s.r.o. |
PALSTAT s.r.o. Bucharova 230 543 02 Vrchlabí CZECH REPUBLIC |
tel.: +420 499 422 044 tel.: +420 499 692 016 www.palstat.cz |
» Hlavní strana » Školení » Reference » Novinky |
» Události » Partneři » Podpora » Kontakt |
» Produkty » Zákaznický portál » Vzdálená pomoc » Aktualizace |
» Obchodní podmínky » Fotogalerie » GDPR, zásady ochrany soukromí » Portal 3 |