Olteteanu Bogdan Andrei

From a to z

Archive for November, 2009

Crystal Reports – Rapoarte multiple

leave a comment

La un moment dat a trebuit sa ma lupt cu o problema aparent usoara la inceput dar care a degenerat pe masura ce incercam solutii si solutii. Scenariul arata cam asa:

  • Se da un numar de rapoarte folosite ca Embedded Resource.
  • Utilizatorul trebuie sa aibe optiunea de a le printa / vizualiza pe toate.
  • Se da o tabela care contine numele raportului(cel din proiect), descrierea lui, si firma de care apartine.

Eu trebuia sa selectez anumite nume de rapoarte din tabela, sa le regasesc in proiectul meu dupa care sa le afisez/printez.

Problema nr1:

Cum regasesc si folosesc raportul meu in viewer in functie de numele lui din tabela?

Dupa multe sapaturi am hotarat ca solutia cea mai buna era sa imi salvez fiecare document pe disc dupa care sa-l incarc in Viewer iar apoi sa-l sterg.

Metoda pentru a-l scrie pe disc:


private void LoadReportToFile(string nameOfTemplateFile, string pathToDest)
{
System.IO.FileInfo fi = new System.IO.FileInfo(pathToDest);
if (fi.Exists) fi.Delete();
System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
foreach (string str in asm.GetManifestResourceNames())
{
if (str.ToLower().IndexOf(nameOfTemplateFile.ToLower()) > -1) nameOfTemplateFile = str;
}
System.IO.Stream file = asm.GetManifestResourceStream(nameOfTemplateFile);
System.IO.FileStream outFile = new System.IO.FileStream(pathToDest, System.IO.FileMode.Create);
int bufferLen = 1024;
byte[] buffer = new byte[bufferLen];
int bytesRead;
do
{
bytesRead = file.Read(buffer, 0, bufferLen);
outFile.Write(buffer, 0, bytesRead);
} while (bytesRead != 0);
outFile.Close();
outFile.Dispose();
}

Mai departe aveam un combobox care tinea selectul meu din tabela cu numele exact al raportului. Daca aveam un raport cu numele rptRaportFirma.rpt in tabela era trecut ca rptRaportFirma drept urmare m-am folosit de combobox pentru a chema functia LoadReportToFile();
Cu urmatorul cod cand selectam un raport din combobox era incarcat automat in preview.


private void cbReports_SelectedIndexChanged(object sender, EventArgs e)
{

................

String rptPath = "Reports." + cbReports.Text;
String pathToSave = Variabile.ReportTemplatePath;//cale definita global
LoadReportToFile(rptPath, pathToSave);

//aici eliberam memoria de rapoarte incarcate precedent

if (Rpt != null)
{
Rpt.Close();
Rpt.Dispose();
}

Rpt = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
Rpt.Load(pathToSave);

//stergem raportul generat
DeleteReportFile(pathToTemplateFile);

Rpt.SetDataSource(rptdataSet);

rptViewer.ReportSource = Rpt;
}

Problema nr2:

Cand incercam sa automatizez procesul de printare a peste 100-200 de rapoarte am aflat ca Crystal Reports are o anumita limita care se reflecta prin urmatoarea eroare :

“The maximum report processing jobs limit configured by your system administrator has been reached

Una din solutii a fost sa modific o anumita cheie in registry pentru a scoate aceasta limitare si anume

HKEY_LOCAL_MACHINE\SOFTWARE\CRYSTAL DECISIONS\10.0\REPORT APPLICATION SERVER\SERVER\PrintJobLimit

pentru versiunea 10.0 dar din pacate e inacceptabil sa modific pe fiecare statie registrii asa ca am ales urmatoarea metoda:


..................

String rptPath = "Reports." + lbDepartureDocuments.GetItemValue(id).ToString();
LoadReportToFile(rptPath, Variabile.ReportTemplatePrintPath);
ReportDocument Rpt = new ReportDocument();
Rpt.Load(Variabile.ReportTemplatePrintPath);
Rpt.SetDataSource(rptdataSet);
Rpt.PrintToPrinter(1, false, 0, 0);
DeleteReportFile(Variabile.ReportTemplatePrintPath);
//Eliberam fortat resursele folosite de raport pentru a nu ajunge la limita impusa de Crystal Reports:
Rpt.Close();
Rpt.Dispose();

..................

Poate aceste lucruri mai ajuta pe cineva la fel de incepator ca mine :)

Written by admin

November 23rd, 2009 at 12:07 pm

Poze nereusite

leave a comment

Written by admin

November 17th, 2009 at 7:56 pm

Posted in Fun

Evolutia Matematicii

leave a comment

Written by admin

November 17th, 2009 at 7:34 pm

Posted in Fun

Acvariul din Tulcea

one comment

Tu ce ai facut Sambata, 14 Noiembrie? Eu pot sa zic ca am facut ceva special. Pe data de 14 Noiembrie am fost pe strada 14 Noiembrie, nr. 5 ! Pura coincidenta, dar acolo este Centrul Muzeal Ecoturistic Delta Dunarii, mai pe scurt, noul(>1 an?) si laudatul Acvariu din Tulcea! Pot spune ca fata de cel din Constanta, care e la fel de cand eram de-o schioapa, nu este mult prea mare(acvariul in sine) sau cu prea multe specii acvatice dar in schimb sunt prezentate exceptional de bine. Una peste alta am ramas impresionat. Am si filmat cate ceva, poate mai doreste cineva sa stie ce pierde!

Written by admin

November 16th, 2009 at 12:12 am

Posted in Fun

Tagged with ,

CnpList

leave a comment

Vreau sa iti prezint un programel care se aseamana putin cu branza mucegaita! Pai cum asa? Pai branza asta ori iti place ori nu-ti place, nu exista cale de mijloc. O detesti sau nu! Asa e si cu CnpList, il ignori sau il folosesti!  Mi-a venit ideea sa-l fac atunci cand am fost in fata unui fisier excel cu aproximativ 20.000 randuri printre care si cnp-uri care trebuiau verificate! Cu ce am gasit pe internet nu puteai verifica decat unu cate unu, cam inutil, asa ca a luat nastere CnpList.

CnpList

Facilitati:

  • Cnp-ul poate contine spatii si puncte(.)
  • Cnp-urile pot fi delimitate cu virgula(,), punct si virgula(winking si slash (/).
  • Genereaza raport sortat dupa oricare criteriu(din fereastra principala)
  • Raportul contine grafice pe validati/nevalidati, orase si sex

Este facut pentru .Net Framework 2.0 si pentru a face uz de raport trebuie instalat si Report Viewer de la Microsoft!

  CnpList (105.5 KiB, 127 hits)

Written by admin

November 12th, 2009 at 11:00 pm

Posted in Development

Tagged with ,

Clicks

one comment

De ceva vreme am devenit fan FarmVille si il joc in fiecare zi. E un joc destul de relaxant doar ca implica foarte multe click-uri, foarte multe, atat de multe incat dai click din inertie fara sa te mai gandesti…cel putin la FarmVille, te gandesti la o gramada de alte chestii printre care si “Frate cate click-uri am dat oare numai sa imi ar ferma de 20×20?” ,bine a mea inca nu e asa mare dar imagineaza-ti sa ari,  sa plantezi si sa culegi o ferma de 20×20! Da stiu, poate trebuie sa o las mai moale cu FarmVille, dar asa s-a nascut ideea pentru Clicks care monitorizeaza cate click-uri si cate taste apesi, cati metrii ai miscat mouse-ul pe ecran si multe altele (unele inca neimplementate).Si da stiu ca mai sunt si alte aplicatii de genu…oricum va prezint:

Clicks

Clicks

Este facut pentru .Net Framework 2.0 si inca mai lucrez la el(nu intreba de ce) aka pot exista bug-uri pe care daca vrei sa mi le spui poti lasa un comentariu!

Clicks a primit un update. Continuă să citeşti.

Written by admin

November 12th, 2009 at 3:10 pm

Posted in Development, Fun

Tagged with ,

What if Matrix was shot in the silent films’ era

leave a comment

Written by admin

November 11th, 2009 at 4:30 pm

Posted in Fun