HTML-Report-Designer in 14 Tagen – AI-gestützt von der Idee zur Basisversion

Moderator: Moderatoren

Antworten
Benutzeravatar
azzo
1000 working lines a day
1000 working lines a day
Beiträge: 942
Registriert: So, 28. Mär 2010 19:21
Hat sich bedankt: 15 Mal
Danksagung erhalten: 22 Mal

HTML-Report-Designer in 14 Tagen – AI-gestützt von der Idee zur Basisversion

Beitrag von azzo »

Vor 14 Tagen noch belächelt – heute präsentationsreif.

Mit großer Freude kann ich heute die erste lauffähige Basisversion meines HTML-Reportdesigners vorstellen.
Was vor Kurzem noch nach Spielerei aussah, zeigt nun konkrete Ergebnisse: ein visuell editierbarer, seitenbasierter Berichtsgenerator – direkt im Browser, JSON-basiert, AI-unterstützt und vollständig portable.

Der Weg ist noch nicht zu Ende – aber die Basis steht.

Bild
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2620
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 23 Mal
Danksagung erhalten: 97 Mal

Re: HTML-Report-Designer in 14 Tagen – AI-gestützt von der Idee zur Basisversion

Beitrag von ramses »

Hallo Otto
ich belache es immer noch. Die Präsentaion stellt sich einfach nur als "Wildes rumgeklicke" dar unter welchem man sich eigentlich nichts vorstellen kann und auch nicht sieht ob es denn auch wirklich funktioniert .....

Wieso stellst du keinen Link oder Download bereit ? Dann könnte man die "Stärken" sehen und sich etwas darunter vorstellen .....
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15796
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 87 Mal
Danksagung erhalten: 43 Mal
Kontaktdaten:

Re: HTML-Report-Designer in 14 Tagen – AI-gestützt von der Idee zur Basisversion

Beitrag von brandelh »

Ich verstehe das mittlerweile so, dass er sich und seinen Kunden ein Reportgenerator flexibel anbieten möchte und keine fremden Tools nutzen und bezahlen möchte, das kann ich nachvollziehen.
Wie die Druckergebnisse aussehen ... kann ich nicht beurteilen, mit der GMX eMail Druckfunktion bekomme ich zwar den Inhalt zuverlässig, allerdings nicht immer schön und keineswegs flexibel.

Möglich dass er es besser macht :D
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9933
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 142 Mal
Danksagung erhalten: 484 Mal
Kontaktdaten:

Re: HTML-Report-Designer in 14 Tagen – AI-gestützt von der Idee zur Basisversion

Beitrag von Tom »

So oder so, das ist ein reiner Applikationsporno. Otto überschwemmt das Forum mit solchen Videos, aber genau genommen teilt er überhaupt nichts.
Herzlich,
Tom
sammler0002
UDF-Programmierer
UDF-Programmierer
Beiträge: 77
Registriert: Mi, 23. Dez 2015 22:46
Hat sich bedankt: 26 Mal
Danksagung erhalten: 13 Mal

Re: HTML-Report-Designer in 14 Tagen – AI-gestützt von der Idee zur Basisversion

Beitrag von sammler0002 »

Mal blöd gefragt: Was bringen solche Post?

Es gibt keinen Code, nichts zum runterladen ...

Einfach nur ein: Guck mal, was ich gemacht habe. Damit kann doch keiner hier was anfangen.
Grüße von Philipp
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21600
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 292 Mal
Danksagung erhalten: 91 Mal

Re: HTML-Report-Designer in 14 Tagen – AI-gestützt von der Idee zur Basisversion

Beitrag von Manfred »

ich glaube zu erkennen wer dahinter steckt.
https://de.wikipedia.org/wiki/Momo_(Roman)
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14937
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 42 Mal
Danksagung erhalten: 133 Mal
Kontaktdaten:

Re: HTML-Report-Designer in 14 Tagen – AI-gestützt von der Idee zur Basisversion

Beitrag von Jan »

:lol:
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
azzo
1000 working lines a day
1000 working lines a day
Beiträge: 942
Registriert: So, 28. Mär 2010 19:21
Hat sich bedankt: 15 Mal
Danksagung erhalten: 22 Mal

Re: HTML-Report-Designer in 14 Tagen – AI-gestützt von der Idee zur Basisversion

Beitrag von azzo »

Hallo Carlo, hallo Hubert,

vielen Dank für eure Rückmeldungen.

@Carlo: Dass das auf den ersten Blick nach wildem Geklicke aussieht, kann ich nachvollziehen. Es handelt sich nicht um ein fertiges Tool, sondern um einen Prototyp – bewusst offen und bewusst roh gehalten. Was man im Video nicht sieht: Die Basisfunktionen laufen bereits erstaunlich stabil – seitenbasiertes Layout, wiederholbare Bereiche (z. B. Artikel), Wasserzeichen, Summen – alles direkt im Browser, komplett auf JSON-Basis.

@Hubert: Du hast meine Motivation genau erkannt. Ich möchte kein überladenes Monster-Tool, keine externen Abhängigkeiten und keine laufenden Lizenzkosten. Mein Ziel ist eine schlanke, leicht verständliche Lösung, die man als Entwickler vollständig selbst kontrollieren und anpassen kann. Genau so etwas fehlt am Markt. Und der entscheidende Punkt: Der Designer soll so einfach bedienbar sein, dass auch Endanwender selbst Änderungen vornehmen können – z. B. Positionen verschieben oder Texte anpassen.

Das System besteht aus reinem HTML und JavaScript und lädt die Daten über eine lokale JSON-Datei (z. B. rechnung.json). Es ist komplett eigenständig und statisch aufgebaut:

– Kein Server notwendig – kann direkt per `file://` oder über einen beliebigen Webserver geöffnet werden
– Volle Portabilität – ideal für den Einsatz auf USB-Stick, im Kioskmodus oder in einem eingebetteten WebView
– Die gesamte Logik für Layout, Seitenumbruch und Formatierung läuft clientseitig
– Datenquellen wie DBF können vorgelagert in JSON umgewandelt oder dynamisch eingebunden werden

Das Ganze funktioniert also auch problemlos in einer WebView-Steuerung oder jedem eingebetteten Browser. Es läuft offline – ohne Server – und ist damit extrem flexibel für interne Berichte oder, wie bei mir, für Anwendungen in der Hotelautomation.

Ein Demo-Projekt bereite ich gerade vor.

Viele Grüße
Otto



PS: Die Idee zum Designer entstand übrigens durch dieses Posting hier im Forum:  
viewtopic.php?p=150371#p150371

Günter hatte darin nach einer Möglichkeit gefragt, vor mehreren Etiketten auf einer A4-Seite einmalig einen variablen Textblock zu drucken – also quasi einen Seitenkopf.  
Die Diskussion dazu war spannend, aber zeigte auch: Selbst mit Tools wie List & Label ist das nicht so einfach umzusetzen, wie es eigentlich sein sollte.

Genau das war für mich der Auslöser, ein eigenes System zu entwickeln, das solche Anforderungen nativ unterstützt:  
Ein Bericht besteht aus flexiblen Bereichen (Kopf, Etiketten, Summen, Wasserzeichen), die logisch und seitenbasiert kombiniert werden können – ohne Umwege, ohne Tricks.

So entstand innerhalb von 14 Tagen die Basisversion meines HTML/JS-Designers, mit der ich genau solche Fälle abbilden kann:  
– Etiketten pro Seite  
– Textblöcke vor den Etiketten  
– Summenblöcke am Ende  
– alles JSON-basiert und vollständig im Browser lauffähig.


Code: Alles auswählen

async function loadReportConfig() {
  const res = await fetch("rechnung.json");
  report = await res.json();

  // 📄 Etikettendaten vorbereiten

 reportData = {
  rechnungsnummer: "RE-2024-0012",
  datum: "2024-06-03", // 🔁 neu
  kunde: {
    name: "Max Mustermann",
    strasse: "Teststraße 12", // 🔁 neu
    plz: "9999",              // 🔁 neu
    ort: "Musterstadt"        // 🔁 neu
  },
  artikelListe: [
    { artikel: "Apfel", preis: "1.50" },
    { artikel: "Brot", preis: "2.00" },
    { artikel: "Käse", preis: "3.75" },
    { artikel: "Wurst", preis: "4.10" },
    { artikel: "Milch", preis: "1.20" },
    { artikel: "Kaffee", preis: "5.00" },
    { artikel: "Zucker", preis: "1.10" },
    { artikel: "Butter", preis: "2.80" },
    { artikel: "Eier", preis: "2.30" },
    { artikel: "Müsli", preis: "3.90" }
  ],
  summe_netto: "27.65",         // optional, für MwSt-Anzeige
  summe_mwst: "5.53",           // optional
  summe_brutto: "33.18"         // optional
};
json:

Code: Alles auswählen

{
  "paper": {
    "top1": 20,
    "top2": 45,
    "pageHeight": 297
  },
  "areas": [
    {
      "id": "area7458",
      "title": "Logo",
      "top": 0,
      "height": 50,
      "printCondition": "always",
      "topDependsOnPrevious": false,
      "disallowChildren": false,
      "items": [
        {
          "type": "text",
          "x": 100,
          "y": 5,
          "value": "MyLogo",
          "fontSize": 60,
          "bold": false,
          "color": "#d9913f",
          "align": "left"
        }
      ]
    },
    {
      "id": "kopf",
      "title": "Rechnungskopf",
      "top": 70,
      "height": 40,
      "topDependsOnPrevious": true,
      "items": [
        {
          "type": "text",
          "x": 0,
          "y": 2,
          "value": "Rechnungsnummer: {rechnungsnummer}",
          "fontSize": 10,
          "bold": true
        },
        {
          "type": "text",
          "x": 0,
          "y": 8,
          "value": "Datum: {datum}",
          "fontSize": 10
        },
        {
          "type": "text",
          "x": 0,
          "y": 16,
          "value": "An: {kunde.name}",
          "fontSize": 10
        },
        {
          "type": "text",
          "x": 0,
          "y": 22,
          "value": "{kunde.strasse}",
          "fontSize": 10
        },
        {
          "type": "text",
          "x": 0,
          "y": 28,
          "value": "{kunde.plz} {kunde.ort}",
          "fontSize": 10
        }
      ],
      "printCondition": "",
      "disallowChildren": false
    },
    {
      "id": "wasser",
      "title": "Wasserzeichen",
      "top": 150,
      "height": 100,
      "disallowChildren": true,
      "items": [
        {
          "type": "text",
          "x": 100,
          "y": 20,
          "value": "KOPIE",
          "fontSize": 70,
          "bold": true,
          "color": "#50ce58",
          "align": "left",
          "fontFamily": "Courier"
        }
      ],
      "printCondition": "",
      "topDependsOnPrevious": false,
      "repeatFor": "artikelListe",
      "columns": 1
    },
    {
      "id": "einleitung",
      "title": "Überschrift / Einleitung",
      "height": 15,
      "printCondition": "always",
      "topDependsOnPrevious": true,
      "items": [
        {
          "type": "text",
          "x": 0,
          "y": 2,
          "value": "Vielen Dank für Ihre Bestellung",
          "fontSize": 11,
          "bold": true
        }
      ],
      "top": 0
    },
    {
      "id": "artikelblock",
      "title": "Artikelblock",
      "repeatFor": "artikelListe",
      "columns": 1,
      "labelWidth": 160,
      "height": 8,
      "topDependsOnPrevious": true,
      "items": [
        {
          "type": "text",
          "x": 0,
          "y": 2,
          "value": "{artikel}",
          "fontSize": 10,
          "bold": true
        },
        {
          "type": "text",
          "x": 90,
          "y": 2,
          "value": "{preis} €",
          "fontSize": 10
        }
      ],
      "top": 225,
      "printCondition": "",
      "disallowChildren": false
    },
    {
      "id": "summe",
      "title": "Summenbereich",
      "top": 200,
      "height": 20,
      "topDependsOnPrevious": false,
      "items": [
        {
          "type": "text",
          "x": 0,
          "y": 2,
          "value": "Netto: {summe_netto} €",
          "fontSize": 10
        },
        {
          "type": "text",
          "x": 60,
          "y": 2,
          "value": "MwSt (20 %): {summe_mwst} €",
          "fontSize": 10
        },
        {
          "type": "text",
          "x": 120,
          "y": 2,
          "value": "Brutto: {summe_brutto} €",
          "fontSize": 10,
          "bold": true
        }
      ]
    },
    {
      "id": "endtext",
      "title": "Rechnungs-Endtext",
      "top": 325,
      "height": 45,
      "topDependsOnPrevious": true,
      "items": [
        {
          "type": "text",
          "x": 0,
          "y": 2,
          "value": "Vielen Dank für Ihren Einkauf!\n\nBitte überweisen Sie den Gesamtbetrag innerhalb von 14 Tagen auf folgendes Konto:\nEmpfänger: Hotel Bergland\nIBAN: ATxx xxxx xxxx xxxx xxxx\nBIC: XXXXXXXX\nVerwendungszweck: Rechnungsnummer {rechnungsnummer}\n\nBei Fragen stehen wir Ihnen gerne zur Verfügung.\nMit freundlichen Grüßen\nIhr Team vom Hotel Bergland",
          "fontSize": 9
        }
      ]
      }
  ]
}
Benutzeravatar
azzo
1000 working lines a day
1000 working lines a day
Beiträge: 942
Registriert: So, 28. Mär 2010 19:21
Hat sich bedankt: 15 Mal
Danksagung erhalten: 22 Mal

Re: HTML-Report-Designer in 14 Tagen – AI-gestützt von der Idee zur Basisversion

Beitrag von azzo »

@Manfred
„Momo“ – schöne Assoziation
Ich nehme das mal als Kompliment: etwas bauen, das keiner erwartet, aber funktioniert – und sich nicht hetzen lässt.
(Und wenn die grauen Herren das Konzept nicht verstehen, ist es vielleicht genau richtig.)

Viele Grüße
Otto
Benutzeravatar
azzo
1000 working lines a day
1000 working lines a day
Beiträge: 942
Registriert: So, 28. Mär 2010 19:21
Hat sich bedankt: 15 Mal
Danksagung erhalten: 22 Mal

Re: HTML-Report-Designer in 14 Tagen – AI-gestützt von der Idee zur Basisversion

Beitrag von azzo »

@Jan
Vielleicht lachst du, weil du der graue Herr bist?
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14937
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 42 Mal
Danksagung erhalten: 133 Mal
Kontaktdaten:

Re: HTML-Report-Designer in 14 Tagen – AI-gestützt von der Idee zur Basisversion

Beitrag von Jan »

Otto,

lass es einfach sein bitte.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
azzo
1000 working lines a day
1000 working lines a day
Beiträge: 942
Registriert: So, 28. Mär 2010 19:21
Hat sich bedankt: 15 Mal
Danksagung erhalten: 22 Mal

Re: HTML-Report-Designer in 14 Tagen – AI-gestützt von der Idee zur Basisversion

Beitrag von azzo »

Hi,
Trotz mancher Kritik denke ich, dass ich auf einem guten Weg bin – Schritt für Schritt entsteht ein flexibler, HTML-basierter Reportdesigner, der sich klar an realen Anforderungen orientiert.
Ich sehe es als Ergänzung zu bestehenden Lösungen – keine Konkurrenz, aber ein Werkzeug, auf das man zurückgreifen kann, wenn man’s mal braucht.

Bisher wurden ausschließlich Textelemente (`type: "text"`) unterstützt. Jetzt lässt sich mit minimalem Zusatzaufwand auch jedes andere HTML-Element integrieren – den Anfang macht das `image`-Element.

Erweiterung in `rechnung.json`

 

Code: Alles auswählen

{
   {
      "id": "logoarea",
      "title": "Logo",
      "top": 0,
      "height": 50,
      "printCondition": "always",
      "topDependsOnPrevious": false,
      "disallowChildren": false,
      "items": [
        {
          "type": "image",
          "src": "image/logo.png",
          "x": 100,
          "y": 5,
          "width": 80,
          "height": 40
        },
        {
          "type": "image",
          "src": "image/logo.png",
          "x": 20,
          "y": 5,
          "width": 40,
          "height": 20,
          "rotate": 90
        },{
          "type": "image",
          "src": "image/logo.png",
          "x": 60,
          "y": 5,
          "width": 40,
          "height": 20,
          "rotate": 45
        },
        {
          "type": "text",
          "x": 100,
          "y": 5,
          "value": "WINHOTEL",
          "fontSize": 10,
          "bold": false,
          "color": "#d9913f",
          "align": "left"
        }
      ]
    }
Erweiterung in der item-Schleife:

Code: Alles auswählen

else if (item.type === "image") {
  const img = document.createElement("img");
  img.src = item.src;


  img.style.position = "absolute";
  img.style.left = (item.x ?? 0) + "mm";
  img.style.top = (item.y ?? 0) + "mm";
  img.style.width = (item.width ?? 30) + "mm";
  img.style.height = (item.height ?? 20) + "mm";
  img.style.objectFit = "contain";

  if (item.rotate) {
    img.style.transform = `rotate(${item.rotate}deg)`;
    img.style.transformOrigin = "left top";
  }

  box.appendChild(img);
}
Alle weiteren HTML-Elemente lassen sich über dieselbe item.type-Logik einbinden – sei es line, hr, barcode, qr, button, div, svg, u.v.m.
Der Report bleibt dabei komplett datengetrieben und portable.

Ich bleib dran.
LG
Otto 

Bild
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2620
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 23 Mal
Danksagung erhalten: 97 Mal

Re: HTML-Report-Designer in 14 Tagen – AI-gestützt von der Idee zur Basisversion

Beitrag von ramses »

azzo hat geschrieben: Do, 05. Jun 2025 10:56 Trotz mancher Kritik denke ich, dass ich auf einem guten Weg bin – Schritt für Schritt entsteht ein flexibler, HTML-basierter Reportdesigner, der sich klar an realen Anforderungen orientiert.
Ich sehe es als Ergänzung zu bestehenden Lösungen – keine Konkurrenz, aber ein Werkzeug, auf das man zurückgreifen kann, wenn man’s mal braucht.
Hallo Otto
das denke ich nicht. Eher auf dem Holzweg ... Auch wenn dein Argument keine fremden Tools bezahlen zu müssen auf den ersten Anblick plausibel erscheint ist dies doch ein sehr grosser Trugschluss. Du bezahlst es nämlich mit sehr viel Ärger und eigener verbratener Zeit die sich sicher besser anders monetarieren lässt.

Du hast wohl ein scheinbar ein flexibler Report, der eben flexibel ist und auf jedem PC und Browser ein wenig anders gedruckt wird.

Und dies wird dir dann sicher Ärger, Probleme und Umtriebe ohne Ende bereiten sobald Kundschaft damit arbeiten müss.

Zudem ist er höchstens für ein seitige Ausdrucke mit wenig Inhalt benutzbar. Einen mehrseitigen Report lässt sich damit vernutlich schon gar nicht mehr so einfach und ohne Programmieren erstellen.

Bis jetzt habe ich in deinen Mustern noch nichts gesehen was ich mit L&L nicht einfacher in einem Bruchteil der Zeit und problemloser erstellen kann.

Leider schreibst du nur immer was für tolle Dinge du zusammen baust, ein Beispiel, Muster, Code oder Demo hast du noch nie zu keinem deiner Dinge zum Test gestellt. So bleibt auch hier, mangels Demo, nur der Eindruck m%4&.

So werden Ottos Dinge langsam langweilig ....
Valar Morghulis

Gruss Carlo
Benutzeravatar
Marcus Herz
Programmier-Gott
Programmier-Gott
Beiträge: 1035
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 51 Mal
Danksagung erhalten: 252 Mal
Kontaktdaten:

Re: HTML-Report-Designer in 14 Tagen – AI-gestützt von der Idee zur Basisversion

Beitrag von Marcus Herz »

Es braucht immer zwei: einer, der ärgert und einer, der sich ärgern lässt.
Fehlt einer, ist das Spiel aus
Gruß Marcus

Den Kopf in den Sand zu stecken rettet die Welt auch nicht.
Benutzeravatar
azzo
1000 working lines a day
1000 working lines a day
Beiträge: 942
Registriert: So, 28. Mär 2010 19:21
Hat sich bedankt: 15 Mal
Danksagung erhalten: 22 Mal

Re: HTML-Report-Designer in 14 Tagen – AI-gestützt von der Idee zur Basisversion

Beitrag von azzo »

Hallo Carlo,
Jede logische Einheit (z. B. Summenbereich, Endtext) wird als eigene Area verwaltet – mit fest definierter Höhe und automatischer top-Positionierung auf Basis der vorherigen Elemente.

Im Code wird lastRenderedBottom verwendet, um dynamisch festzuhalten, wo der jeweils nächste Bereich anschließen soll.
Damit kann topDependsOnPrevious: true zuverlässig funktionieren – egal ob auf Seite 1 oder 5.

LG
Otto
Antworten

Zurück zu „HTML“