Skript in html beschleunigen
Grüßt euch,
auch wenn ich sicher vieles falsch gemacht hab in der tabelle, so passt das ergebniss. 3 eigenständige Tabellen in einer ansicht. Leider bekomm ich es aber nicht hin es so zu schreiben, das es schnell ist. So legt es Ninox einfach lahm. Ergebnisse passen aber.
Wie bekomm ich es nur schneller? do as server hilft auch nicht. Würd ungern drauf verzichten wollen.
let n := number('Auftraggeber Auswahl');
let v := von;
let b := bis;
let content := "
<style>
table{
width:100%;
}
.tableFixHead {
overflow-y: auto;
height: 378px;
}
th {
padding: .2em .5em .2em .5em;
border-radius: .3em .3em .3em .3em;
font-size:medium;
}
td{
font-size:small;
background-color: rgb(133,148,194,.3);
padding: .1em .5em .1em .5em;
border-radius: .3em .3em .3em .3em;
}
thead,tfoot{
background-color:rgb(133,148,194);
position: sticky;
font-size:small;
}
thead {
top: -.3em;
text-align:center;
}
tfoot{
bottom: -.3em;
}
tr:nth-child(odd) td{
background-color: rgb(240,240,240);
}
td:nth-child(3), td:nth-child(4){
text-align:right;
}
td:nth-child(5), td:nth-child(6){
text-align:center;
}
</style>
<div class='tableFixHead'>
<head>
<title>Statistik</title>
<style>
table, th, td {
padding: 10px;
border: 1px solid black;
border-collapse: collapse;
}
</style>
</head>
<body>
</body>
<caption>
<h4><center> Statistik </center></h4>
</caption>
<table>" +
do as server
for i in (select Vertragspartner where Auswertung = true) order by Firma do
let aa := cnt(select Abrechnungen where 'Aufträge'.Vertragspartner.Nr = i and 'anfahrt Nr' > 1);
let bb := cnt(select Abrechnungen where 'Aufträge'.Vertragspartner.Nr = i and 'anfahrt Nr' = 1);
let cc := aa * 100 / bb;
"<tr><td>" + i.Firma + " - " + i.'Firmen zusatz' + " " +
"</td><td>erstanfahrten : " +
bb +
" " +
"</td><td>Reklafahrten : " +
aa +
" " +
"</td><td>Reklamationsquote in % : " +
round(cc, 2) +
"</td></tr>"
end +
"</table>
</body>
<table>
<thead>
<tr>
<th> Auslieferung </th>
<th> Name </th>
<th> Abrechnung mit </th>
<th> Anfahrt Nr </th>
<th> Trent </th>
<th>Preis</th>
</tr>
</thead>
<tbody>
" +
((select Abrechnungen) order by 'Abrechnung vom')['Aufträge'.Vertragspartner.Nr = n and 'Abrechnung vom' >= v and 'Abrechnung vom' <= b and
'anfahrt Nr' = 1].("
<tr>
<td> " +
'Abrechnung vom' +
" </td>
<td> " +
'Aufträge'.Name +
" </td>
<td> " +
text(Abrechnungsinfo) +
" </td>
<td> " +
'anfahrt Nr' +
"</td>
<td><meter value='" +
'anzahl fahrten' +
"' min='0' low='1' optimum='4' high='7' max='9'></meter></td>
<td> " +
'Aufträge'.Auftragswert +
"</td>
</tr>
") +
"
</tbody>
<tfoot>
<tr>
<th style = text-align:left>Erstanfahrten: " +
cnt(select Abrechnungen
where 'Aufträge'.Vertragspartner.Nr = n and 'Abrechnung vom' >= v and 'Abrechnung vom' <= b and
'anfahrt Nr' = 1) +
"</th>
</tfoot>
</table>
</div>
<table>
<thead>
<tr>
<th> Auslieferung Reklamation </th>
<th> Name </th>
<th> Abrechnung mit </th>
<th> Anfahrt Nr </th>
<th> Trent </th>
<th>Preis</th>
</tr>
</thead>
<tbody>
" +
((select Abrechnungen) order by 'Abrechnung vom')['Aufträge'.Vertragspartner.Nr = n and 'Abrechnung vom' >= v and 'Abrechnung vom' <= b and
'anfahrt Nr' > 1].("
<tr>
<td> " +
'Abrechnung vom' +
" </td>
<td> " +
'Aufträge'.Name +
" </td>
<td> " +
text(Abrechnungsinfo) +
" </td>
<td> " +
'anfahrt Nr' +
"</td>
<td><meter value='" +
'anzahl fahrten' +
"' min='0' low='1' optimum='4' high='7' max='9'></meter></td>
<td> " +
'Aufträge'.Auftragswert +
"</td>
</tr>
") +
"
</tbody>
<tfoot>
<tr>
<th style = text-align:left>Reklafahrten: " +
cnt(select Abrechnungen
where 'Aufträge'.Vertragspartner.Nr = n and 'Abrechnung vom' >= v and 'Abrechnung vom' <= b and
'anfahrt Nr' > 1) +
"</th>
</tfoot>
</table>
</div>"
end;
html(content)
4 Antworten
-
Vertragspartner ist 1:N mit Aufträge verknüpft
Aufträge ist 1:N mit Abrechnungen verknüpft
Abrechnungen enthält 1400 Datensätze ( also eigentlich nicht viel )
Die erste Tabelle berücksichtigt alle abrechnungen zu dem jeweiligen Vertragspartener.
Die 2. & 3. Tabelle ist aufgeschlüsselt nach zu wählenden zeitraum und Vertragspartner.
-
Moin Michi,
auf die schnelle:
versuche die selects möglichst nur einmal auszuführen.
Z.B. sehe ich öfter "select Abrechnungen", wenn du dieses ganz am Anfang und vorallem vor/außerhalb der i-Schleife ausführst sollte das schon viel helfen, da dann die Tabelle Abrechnungen nur einmal geladen wird
So in dieser Richtung:let myVPSel := select Vertragspartner where Auswertung = true); let myASel := select Abrechnungen; for i in (select order by Firma do let aa := cnt(myASel['Aufträge'.Vertragspartner.Nr = i and 'anfahrt Nr' > 1]; let bb := cnt(myASel['Aufträge'.Vertragspartner.Nr = i and 'anfahrt Nr' = 1]; let cc := aa * 100 / bb;
VG Ronald
Content aside
- Status Answered
- vor 1 JahrZuletzt aktiv
- 4Antworten
- 79Ansichten
-
2
Folge bereits