1

In html Tabelle den Betrag in € ausgeben bzw formatieren

Hallo zusammen,

ich habe in einem Berechnungsfeld mit html eine Tabelle erstellt. Soweit so gut, nur dass die Beträge (Brutto und Total) sind mit einer Stelle nach dem Komma ausgegeben.

Hat jemand eine Idee, wie ich das mit zwei Stellen nach dem Komma und € hinbekomme?

format(Zahlenfeld, "#,##0.00 €") hat leider nicht funktioniert.

Hier ist noch das Script dazu

 

let vRaiting := "minRt: " + min + " maxRt: " + max;
let vRtMin := min;
let vRtMax := max;
let myFilter := trim(this.text(Rechnungsarten));
let hasFilter := if length(myFilter) > 0 then true else false end;
let vArtist := trim(text(this.Rechnungsarten));
let myObject := do as server
        ((select '4. Rechnungen'
            where 'Brutto Gesamt:' >= vRtMin and 'Brutto Gesamt:' <= vRtMax and
            Rechnungsart like vArtist) order by -Rechnungsdatum).{
            nid: raw(Nr),
            datum: date(Rechnungsdatum),
            nummer: Rechnungsnummer_,
            statusam: 'Status am',
            knd: 'Zu Kunde'.Firma,
            art: text(Rechnungsart),
            status: text(Status),
            total: 'Brutto Gesamt:'
        }
    end;
let myDisplayObject := if hasFilter then
        myObject[pago = myFilter]
    else
        myObject
    end;
let content := "
<style>
.grid-container {
    display:grid;
    /*hier kann die Spaltenanzahl festgelegt werden*/
    grid-template-columns:repeat(auto-fill, minmax(20em, 1fr));
    grid-gap:5px;
}
.gridFormat, .gridHeader, .gridHeader1{
    font-size:large;
    text-align:center;
    border-radius:.0em;
    padding:1px;
box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;

    color:black;
}
.gridHeader {
    grid-column: 1 / -4;
    background:Silver;
    font-size:x-large;

}
.gridHeader1 {
    grid-column: 1 / -1;
    background:Silver;
    font-size:x-large;

}
.gridOne {background-color:#b0aac0;}
.gridTwo {background-color:#ddeedd;}
.gridThree {background-color:#c2d4dd;}
.gridFour {background-color:#AD5C62;color:black;}
.gridFive {background-color:#ffffff;}

table{
    width:100%;
}
.tableFixHead {
    overflow-y: auto;
       height: 470px;
        width: 1100px;
      }
.right {
    text-align: right
}
.center {
    text-align: center
}
th {
    font-size:small;
    padding: .5em .5em .5em .5em;
    border-radius: .0em .0em .0em .0em;
}
td{
    font-size:small;
    background-color: #ddeedd;
    padding: .1em .5em .1em .5em;
    text-align: center;    
    border-radius: .0em .0em .0em .0em;
}
button{
    font-size:small;
    background-color:#ffffff;color:black;
    padding: .1em .5em .1em .5em;
    text-align: center;    
    border-radius: .0em .0em .0em .0em;
}
thead,tfoot{
      background-color:#c0d576;
    position: sticky;
    font-size:small;
}
thead {
    top: -.2em;
    text-align:center;
}
tfoot{
      bottom: -.2em;
}
tr:nth-child(odd) td{ /*ungerade Zeile einfärben*/
      background-color: #ffffff;
}
p {
    visibility: hidden
}

</style>
<aside class = 'grid-container'>
<header class = 'gridFormat gridFive gridHeader1'>
<div class='tableFixHead'>
<table>
    <thead>
        <tr>
                        <th> RG-Datum </th>
                        <th> RG-Nummer </th>

<th> Zu Kunde </th>                                          
                         <th> RG-Art </th>     
                        <th> Status </th>  
                        <th> Status am </th>
                        <th> Brutto </th>        
                        <th> ➔ Go </th>
        </tr>
    </thead>
    <tbody>";
let mitte := for a in myObject do
        "<tr>
            <td  style=background-color:> " +
        a.date(datum) +
        " </td>
            <td  style=background-color: >" +
        a.nummer +
        " </td>

<td  style=background-color: >" +
        a.knd +
        " </td>            
            <td  style=background-color: >" +
        a.text(art) +
        " </td>                     
             <td  style=background-color: >" +
        a.text(status) +
        " </td>
 <td  style=background-color: >" +
        a.date(statusam) +
        " </td>    
             <td  style=background-color: >" +
        a.total +
        " </td>
            <td style=background-color:" +
        ---
                border="" ">
            <button onclick="ui.popupRecord('{ a.nid }')">{ "Zur RG " }</button>
        --- +
        " </td>
        </tr>"
    end +
    "</header>
  </div>
<tfoot>
    <tr>    
             <th style = text-align:center scope='colgroup' colspan='1' >∑ Total = #" +
    cnt(myObject) +
    "</th>                 
             <th style = text-align:center scope='colgroup' colspan='7' >∑ Brutto Total  = " +
    round(sum(myObject.number(total)), 2) +
    "</th>

</tr>
    </tfoot>
</div>
</body>
</html>";
html(content + mitte)

Vielen Dank schon mal.

Gruß Kruna

17 Antworten

null
    • Rafael_Sanchis
    • vor 1 Jahr
    • Gemeldet - anzeigen

    <td  style=background-color: >" +
            a.total +
            "€" +
            " </td>

      • Kruna
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Hi Rafael, thank you for your help. :-)

      I was thinking about that too, but it would be just a workaround as some amoungts look like this

      So at least in my case its also a formatting issue and I dont know why and where to look for it.

      • Rafael_Sanchis
      • vor 1 Jahr
      • Gemeldet - anzeigen

        Tu formato en el campo Brutto en la tabla ? Prueba a ver

      • Kruna
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Rafael Sanchistambien lo he visto, pero mira que si esta formato bien o no?

      Trate de buscar por todas las tablas y campos relacionados, pero no encuentro para nada donde podria ser el error.

      • Rafael_Sanchis
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Everything seems fine

      • Kruna
      • vor 1 Jahr
      • Gemeldet - anzeigen

      yes, thats why I dont get it 😅

    • Kruna
    • vor 1 Jahr
    • Gemeldet - anzeigen

    HAllo zusammen,

    sorry, dass ich nochmal nachhake, aber hat jemand eventuell eine Idee, woran meine Problematik liegen könnte?

    Was mir gerade auch auffällt - die Dezimalstelle ist mit einem Punkt versehen statt mit einem Komma.

    Wie könnte man das beheben?

    Vielen Dank.

     

    gruß Kruna

    • Kruna
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Nun hat es doch mit

    total: format(Zahlenfeld, "#,##0.00 €#,#0.0")

    funktioniert.

    • Kruna
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Entschuldigt mich bitte,

    es hat nur bedingt geklappt, denn nun wird Total = im footer nicht mehr summiert, es bleibe bei 0.

    Was müsste ich denn hier ändern?

         <th style = text-align:center scope='colgroup' colspan='7' >∑ Brutto Total  = " +
        round(sum(myObject.number(total)), 2) +
        "</th>

    Gruß Kruna

      • mirko3
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Hi Kruna. Du hast aus deinem Rechenfeld jetzt ein Textfeld gemacht. Ich nehme an, dass "total" als Feld in der Ursprungstabelle ein Funktionsfeld ist. Dann würde ich die Rundung hier einfügen: round(Feldinhalt, 2) und in der html-Tabelle den Eintrag so wie Rafael schrieb:

      <td  style=background-color: >" +
              a.total +
              "€" +
              " </td>
      

      Im footer kann alles so bleiben, wobei das number(total) nicht nötig ist, da total ja einen Zahlenwert hat. Wenn das nicht geht, dann schreibe noch worum es sich bei dem Feld "total" handelt und wie das Script dazu aussieht. Mirko

      • Kruna
      • vor 1 Jahr
      • Gemeldet - anzeigen

      MirkoHAllo Mirko,

      vielen Dank für Deine Hilfe.

      Also das ganze Script lautet:

       

      let vRaiting := "minRt: " + min + " maxRt: " + max;
      let vRtMin := min;
      let vRtMax := max;
      let myFilter := trim(this.text(Rechnungsarten));
      let hasFilter := if length(myFilter) > 0 then true else false end;
      let vArtist := trim(text(this.Rechnungsarten));
      let myObject := do as server
              ((select '4. Rechnungen'
                  where 'Brutto Gesamt:' >= vRtMin and 'Brutto Gesamt:' <= vRtMax and
                  Rechnungsart like vArtist) order by -Rechnungsdatum).{
                  nid: raw(Nr),
                  datum: date(Rechnungsdatum),
                  nummer: Rechnungsnummer_,
                  statusam: 'Status am',
                  knd: substr('Zu Kunde'.Firma, 0, index('Zu Kunde'.Firma, " ")),
                  ort: first(Rechnungspositionen.'Werbeträger'.Standortbezeichnung) + "<br>" +
                  first(Rechnungspositionen.'Werbeträger'.PLZ) +
                  " " +
                  first(Rechnungspositionen.'Werbeträger'.Ort),
                  art: text(Rechnungsart),
                  status: text(Status),
                  total: round('Brutto Gesamt:', 2)
              }
          end;
      let myDisplayObject := if hasFilter then
              myObject[pago = myFilter]
          else
              myObject
          end;
      let content := "
      <style>
      .grid-container {
          display:grid;
          /*hier kann die Spaltenanzahl festgelegt werden*/
          grid-template-columns:repeat(auto-fill, minmax(20em, 1fr));
          grid-gap:5px;
      }
      .gridFormat, .gridHeader, .gridHeader1{
          font-size:large;
          text-align:center;
          border-radius:.0em;
          padding:1px;
      box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;
          color:black;
      }
      .gridHeader {
          grid-column: 1 / -4;
          background:Silver;
          font-size:x-large;
      
      }
      .gridHeader1 {
          grid-column: 1 / -1;
          background:Silver;
          font-size:x-large;
      
      }
      .gridOne {background-color:#b0aac0;}
      .gridTwo {background-color:#ddeedd;}
      .gridThree {background-color:#c2d4dd;}
      .gridFour {background-color:#AD5C62;color:black;}
      .gridFive {background-color:#ffffff;}
      
      table{
          width:100%;
      }
      .tableFixHead {
          overflow-y: auto;
             height: 470px;
              width: 1100px;
            }
      .right {
          text-align: right
      }
      .center {
          text-align: center
      }
      th {
          font-size:small;
          padding: .5em .5em .5em .5em;
          border-radius: .0em .0em .0em .0em;
      }
      td{
          font-size:small;
          background-color: #F7F7F6;
          padding: .1em .5em .1em .5em;
          text-align: center;
          border-radius: .0em .0em .0em .0em;
      }
      button{
          font-size:small;
          background-color:#ffffff;color:black;
          padding: .1em .5em .1em .5em;
          text-align: center;
          border-radius: .0em .0em .0em .0em;
      }
      thead,tfoot{
      
            background:    linear-gradient(to bottom, #355A71 0%,#4F6A79 100%);
          color:white;
          position: sticky;
          font-size:small;
      }
      thead {
          top: -.2em;
          text-align:center;
      }
      tfoot{
            bottom: -.2em;
      }
      tr:nth-child(odd) td{ /*ungerade Zeile einfärben*/
            background-color: #ffffff;
      }
      p {
          visibility: hidden
      }
      </style>
      <aside class = 'grid-container'>
      <header class = 'gridFormat gridFive gridHeader1'>
      <div class='tableFixHead'>
      <table>
          <thead>
              <tr>
                              <th> RG-Datum </th>
                              <th> RG-Nummer </th>
      
                              <th> Zu Kunde </th>
            <th> Standort </th>
                               <th> RG-Art </th>
                              <th> Status </th>
                              <th> Status am </th>
                              <th> Brutto </th>
                              <th> ➔ Go </th>
              </tr>
          </thead>
          <tbody>";
      let mitte := for a in myObject do
              "<tr>
                  <td  style=background-color:> " +
              a.date(datum) +
              " </td>
                  <td  style=background-color: >" +
              a.nummer +
              " </td>
      
                  <td  style=background-color: >" +
              a.knd +
              " </td>
           <td  style=background-color: >" +
              a.ort +
              " </td>
      
                  <td  style=background-color: >" +
              a.text(art) +
              " </td>
                   <td  style=background-color: >" +
              a.text(status) +
              " </td>
       <td  style=background-color: >" +
              a.date(statusam) +
              " </td>
                  <td  style=background-color: >" +
              a.total +
              "€" +
              " </td>
                  <td style=background-color:" +
              ---
                      border="" ">
                  <button onclick="ui.popupRecord('{ a.nid }')">{ " " }</button>
              --- +
              " </td>
              </tr>"
          end +
          "</header>
        </div>
      <tfoot>
          <tr>
                   <th style = text-align:center scope='colgroup' colspan='1' > #" +
          cnt(myObject) +
          "</th>
                   <th style = text-align:center scope='colgroup' colspan='8' >∑ Brutto Total  = " +
          round(sum(myObject.number(total)), 2) +
          "</th>
      
          </tr>
          </tfoot>
      </div>
      </body>
      </html>";
      html(content + mitte)

      Das total ist kein Feld, sondern soll als Variable für das Zahlenfeld 'Brutto gesamt' dienen.

      Was mich halt stutzig macht, ist die Dezimalstelle als Punkt und nicht Komma dargestellt wird, als ob es US format wäre.

       

      Ich habe mal dieses Script  ausprobiert und da ist alles ok.

       

      let vPreisAnzeige := "minPreis: " + text(min) + "| maxPreis: " + text(max);
      let vPreisMin := min;
      let vPreisMax := max;
      let P := ((select '4. Rechnungen') order by -Rechnungsdatum)['Brutto Gesamt:' >= vPreisMin]['Brutto Gesamt:' <= vPreisMax];
      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;
      }
      </style>
       <div class='tableFixHead'>
      <table>
          <thead>
              <tr>
                  <th> Datum </th>
                  <th> Produkt </th>
                  <th> Anzahl </th>
                  <th>" +
          vPreisAnzeige +
          " </th>
                  <th> Record Öffnen </th>
              </tr>
          </thead>
          <tbody>
              " +
          P.("
              <tr>
                  <td> " +
          Rechnungsdatum +
          " </td><td> " +
          Rechnungspositionen.'Werbeträger'.Standortbezeichnung +
          " </td><td> " +
          'Netto Gesamt:' +
          " </td><td> " +
          'Brutto Gesamt:' +
          "</td><td> <button><a href= " +
          urlOf(Nr) +
          ">OpenRecord</a> </button> </td>
              </tr>
              ") +
          "
          </tbody>
          <tfoot>
              <tr>
                  <th style = text-align:left># " +
          cnt((select '4. Rechnungen')['Brutto Gesamt:' >= vPreisMin]['Brutto Gesamt:' <= vPreisMax]) +
          "</th>
                  <th style = text-align:center scope='colgroup' colspan='2' >∑<sub>g</sub> " +
          sum((select '4. Rechnungen').'Brutto Gesamt:') +
          "</th>
                  <th style = text-align:right >∑<sub>f</sub> " +
          sum((select '4. Rechnungen')['Brutto Gesamt:' >= vPreisMin]['Brutto Gesamt:' <= vPreisMax].'Brutto Gesamt:') +
          "</th>
                  <th style = text-align:right ></th>
              </tr>
          </tfoot>
      </table>
      </div>
      ";
      html(content)

      Das ist aus diesem Thread

      https://forum.ninox.de/t/x2h7y97/html-tabelle-anlegen-und-befullen#h7h7mt3

      Leider verstehe ich nicht so viel von diesen zwei Scripten. Ich habe sie lediglich ein wenig anpassen können. Beim zweiten Script fehlen allerdings die Filter, die ich auch einsetze.

      Wenn ich number(total) weglasse, wird 'gemeckert'

      Gruß Kruna

      • mirko3
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Hast Du eine leere DB zum schauen? Dann würde ich sie mir im Laufe der Woche ansehen.

      • Kruna
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Hallo Mirko,

      hat ein bisschen gedauert 😊

      Anbei die Beispieldatenbank, angelehnt an die Vorlage  Rechnungen.

      Da sieht man, dass die Währung verschieden angezeigt wird.

      Was leider gerade nicht funktioniert ist, die Auswahl beim DMAF.

      In meiner db funktioniert das, aber leider nur bei einer Auswahl - mehrfach funktioniert dann wiederum nicht. Das wäre die nächste 'Baustelle', aber dafür kann ich einen neuen Thread erstellen.

       

      Vielen Dank und gruß kruna

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

     Hi  hier mal Beispiele. Manche Spalten habe ich nicht verstanden und selbst eingefügt. Die Tabelle enthielt unnötige Formate, die ich gelöscht habe und ich habe das Objekt entfernt und einen einfaches select() eingefügt. Filter für das dmfa funktioniert jetzt. Ich weiß nicht ob die Performance bei riesigen Datenmengen ok ist, wirst Du ja sehen. Mirko

      • Kruna
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Guten Morgen Mirko,

      vielen, vieeln Dank, jetzt funktioniert alles so wie gewünscht. :-)

      Zwei Fragen habe ich dennoch.

      1. Die Beispiele in Deiner db unterscheiden sich doch nur in der Größe der Tabelle, oder?

      2. Wie kann ich die Spalten breiter machen bzw. in meiner db ist das € in der zweiten Zeile. Interessanterweise ist es in der Kopie meiner db ok, obwohl ich den Code einfach nur copy/paste in das Formelfeld eingefügt habe. Hast Du eine Idee, woran das liegen könnte?

       

      Gruß Kruna

      • mirko3
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Vielleicht änderst Du die Tabellenspalte noch in 

      <td class='right'>" +
              format(i.'Brutto-Gesamt:', "0.00 €#,#") +
              " </td>
      

      Ansonsten kann ich den Fehler nicht nachstellen und eben auch nicht beheben. Die Beispiele sind tatsächlich nur verschiedene Breiten, bis auf das letzte, da sind die Produkte mit first() beschränkt, so wie ich dachte, daß Du es in Deiner DB haben wolltest. Die Tabelle wird bei vielen Produkten pro Rechnung schnell unförmig. Mirko

      • Kruna
      • vor 1 Jahr
      • Gemeldet - anzeigen

      guten Morgen Mirko,

      ja, first() reicht mir in dem Fall auch aus, weil ich eben nicht alle 'Produkte' in der Tabelle sehen muss.

      Die Änderung bewirkt leider nichts. Vllt ist es einfach ein bug, der sich eingeschlichen hat.

       

      Interessant ist auch, dass wenn ich im DMAF die Option Rechnung wähle, dann ist der Header anders ald wenn ich zB Storno wähle.

      Bei Rechnung ist die Höhe anders und RG-Datum und RG-Nummer sind in zwei Zeilen. Hast Du eine Idee, woran das liegen könnte?

      Eine andere Frage hätte ich noch - in Dash2 hast Du join() benutzt. Kann ich da auch first() mit einbauen? Ich habe es gefühlt an jeder Stelle ausprobiert, bekomme jedoch nur Fehler angezeigt.

      Könnte man auch join() + first() und zB Produkt Name + Produkt ID benutzen. Im Moment habe ich

      first( Produkt Name) +" "+ first( Produkt ID)

      Gruß Kruna