0

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

null
    • Michi.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    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.

    • + Maßanzug statt Massenware +
    • RonaldP
    • vor 1 Jahr
    • Gemeldet - anzeigen

    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

      • + Maßanzug statt Massenware +
      • RonaldP
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Korrektur:

      let myVPSel := (select Vertragspartner where Auswertung = true) order by Firma;
      let myASel := select Abrechnungen;
      for i in  myVPSel 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;
      
      • Michi.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      DIGITOOL geht so leider auch nicht schneller... also wir reden da von 20 sekunden bei überschaubaren Datensätzen... Der hautpübeltäter ist die Auswertung (for i in ... ) aller Kunden/Datensätze. Wenn man den weg lässt geht es. Hier ist die dauer abhängig vom ausgewählen zeitraum. Geht aber schneller und behindert das arbeiten nicht.

      Danke dir trotzdem