Autor Beitrag
Libella
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Di 13.07.10 09:38 
Hallo,

Mir wurde ein schon "fast" fertiges Projekt übergeben. Nun hat sich herausgestellt das die Ausdrucke der Formulare
nicht wirklich dem Kundenanforderungen entsprechen.

Ich habe noch nie mit Crystal Reports gearbeitet und stehe nun vor einem (für mich) großen Problem.

Vom Programm aus werden Parameter an den Report übergeben.


Mit dieser Methode weise ich dem Report eine DataTable zu.

mCryRpt.SetDataSource(mDT)


In diesem DataTable sind nun(zum Beispiel) 5 Zeilen befüllt.


Anschließen werden die Parameterfelder befüllt.


Wenn ich das Formular nun Ausdrucke und 3 Seiten gedruckt werden sollen kommen stattdessen 15 Seiten dabei heraus.

Falls im DataTable 20 Zeilen vorhanden sind und 4 Seiten gedruckt werden sollen kommen beim Ausdruck 80 Seiten raus.

usw...

Er wiederholt das ganze quasi so oft wie Zeilen im DataTable vorhanden sind.


Der Report an sich besteht aus einem Seitenkopf und 7 Detail Sektionen. In der ersten Detail Sektion befindet sich ein Deckblatt. Die Restlichen 6 Detail Sektionen beinhalten Subreports die dann mit den Parametern aus dem Programm befüllt werden.


Mein Problem ist nun das ich nicht weis ob es am Code liegt oder am Report an sich. Die Ausdrucke passen ja eigenlich. Es wird eben nur zu viel gedruckt.

Gibt es eventuell eine Möglichkeit dem Report zu sagen das er wenn sich eine Sektion wiederholt(zum Beispiel die Sektion in dem das Deckblatt gedruckt wird) das er den Druck abbrechen soll oder etwas in der Art?

Falls irgendetwas nicht verständlich sein sollte bitte einfach nachfragen.

Hier der Code:

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
            string[] vParam = { "ReportParameter1","para_date","para_page",
                                
                                "para_mid1","para_gw_USA1","para_gw_EU1",
                                "para_akz_USA1","para_akz_EU1","para_grenze_kalif1",
                                
                                "para_mid2","para_gw_USA2","para_gw_EU2","para_akz_USA2","para_akz_EU2",
                                "para_grenze_kalif2",      
                          
                                "para_mid3","para_gw_USA3","para_gw_EU3","para_akz_USA3","para_akz_EU3",
                                "para_grenze_kalif3",
 
                                "para_mid4","para_gw_USA4","para_gw_EU4","para_akz_USA4","para_akz_EU4",
                                "para_grenze_kalif4",
 
                                "para_mid5","para_gw_USA5","para_gw_EU5","para_akz_USA5","para_akz_EU5",
                                "para_grenze_kalif5",
 
                                "para_mid6","para_gw_USA6","para_gw_EU6","para_akz_USA6","para_akz_EU6",
                                "para_grenze_kalif6",
 
                                //FUSSFORMULAR
                                "para_ges_freigabe_USA","para_ges_freigabe_EU","para_ueber_gw_kalif",
                                "para_Verteiler2","para_Verteiler3","para_unterschrift1","para_unterschrift2",
                                "para_Verteiler4","para_Verteiler5"
                              };

            string vSQL = "SELECT messpos.mpid, messpos.mid, messpos.mvol1, messpos.mvol2, messpos.mvoli, messpos.mvolg, messpos.marea, messpos.marea_e, messpos.mfdap, messpos.mfdap_e, " +
                          "messpos.mfdac, messpos.mcalc, messpos.mdinv, messpos.mdinv_e, messpos.mdinc, messpos.mcomp, messpos.mtrco, messpos.mfdyg , messpos.mfdyg_e, " +
                          "messung.mpart, " +
                          "artikel.arid, artikel.arart, artikel.arnam, artikel.arnum, " +
                          "auftrag.aid, auftrag.aedat, auftrag.aadat, auftrag.abrty, auftrag.abrda, auftrag.ahnam, auftrag.ahnum, auftrag.afnam, auftrag.afnum, auftrag.adnam, " +
                          "auftrag.adnum, auftrag.aaunu, auftrag.aauja, auftrag.acomp, auftraggeber.aufid, auftraggeber.aufna, auftraggeber.aufks " +
                          "FROM messpos " +
                          "LEFT JOIN messung ON messpos.mid = messung.mid " +
                          "LEFT JOIN artikel ON messung.marid = artikel.arid " +
                          "LEFT JOIN auftrag ON artikel.aid = auftrag.aid " +
                          "LEFT JOIN auftraggeber ON auftraggeber.aufid = auftrag.aufid " +
                          "WHERE artikel.aid = " + mCtrl.mDataSet.mAuftrag.mAID.ToString() + 
                          " AND ( messung.mpart = " + "'" + aElem + "'"+ " OR messung.mpart = " + "'" +"TR_"+aElem + "'"+" ) "+
                          " AND artikel.arid = " + aArid +
                          "ORDER BY messpos.mpid ";


            mDS = mCtrl.searchDataSet(vSQL);
            mDT = mDS.Tables[0];

            if (mDS.Tables[0].Rows.Count > 0)
            {
                mPrintCheck = true;

                if (aElem == "BLEI")
                {
                    if (mEng == true)
                    {
                        mCryRpt.Load(Directory.GetCurrentDirectory() + mFolder + "\\Report_Bleilaessigkeit_En.rpt");
                    }
                    else
                    {
                        mCryRpt.Load(Directory.GetCurrentDirectory() + mFolder + "\\Report_Bleilaessigkeit_Deu.rpt");
                    }
                }
                else if (aElem == "CAD")
                {
                    if (mEng == true)
                    {
                        mCryRpt.Load(Directory.GetCurrentDirectory() + mFolder + "\\Report_cadmium_En.rpt");
                    }
                    else
                    {
                        mCryRpt.Load(Directory.GetCurrentDirectory() + mFolder + "\\Report_cadmium_Deu.rpt");
                    }
                }

                mCryRpt.SetDataSource(mDT);
               

                ParameterFieldDefinitions[] crParameterFieldDefinitions = new ParameterFieldDefinitions[vParam.Length];
                ParameterFieldDefinition[] crParameterFieldDefinition = new ParameterFieldDefinition[vParam.Length];
                ParameterValues[] crParameterValues = new ParameterValues[vParam.Length];
                ParameterDiscreteValue[] crParameterDiscreteValue = new ParameterDiscreteValue[vParam.Length];

                for (int i = 0; i < vParam.Length; i++)
                {
                    crParameterValues[i] = new ParameterValues();
                    crParameterDiscreteValue[i] = new ParameterDiscreteValue();

                    //Hier werden einfach nur die Parameterfelder befüllt. Wenn zum Beispiel vParam.Length 5 ist dann läuft er hier 5 mal rein und wählt jedes mal                   eine                  andere Case anweisung aus. Er befüllt jeden Parameter nur einmal!
                    crParameterDiscreteValue[i].Value = checkParam_LeachPage(i, aElem, aArid, aCurArid);

                    crParameterFieldDefinitions[i] = mCryRpt.DataDefinition.ParameterFields;
                    crParameterFieldDefinition[i] = crParameterFieldDefinitions[i][vParam[i]];
                    crParameterValues[i] = crParameterFieldDefinition[i].CurrentValues;

                    crParameterValues[i].Clear();
                    crParameterValues[i].Add(crParameterDiscreteValue[i]);
                    crParameterFieldDefinition[i].ApplyCurrentValues(crParameterValues[i]);
                }

                mCryRpt.PrintToPrinter(1, false, 0, 0);