Wie ein Druckkalkulator rechnet — und warum fast nichts daran linear ist

Von außen sieht der Preis für einen Druckauftrag aus wie eine Multiplikation: Seitenzahl mal Auflage mal Preis pro Seite. Wer das in Software gießen will, merkt nach zwei Tagen, dass fast nichts daran linear ist.

· 7 Minuten Lesezeit· Steven Gerth

Ich habe für unseren Betrieb einen Online-Kalkulator gebaut. Vorher lief die Kalkulation im Kopf oder in einer Excel-Datei, ein Angebot brauchte rund 15 Minuten. Heute sind es zwei bis drei. Bei 30 bis 50 Angeboten in der Woche ist das der Unterschied zwischen „mache ich heute Abend“ und „geht sofort raus“.

Das Schwierige war nicht das Rechnen. Das Schwierige war, Regeln aufzuschreiben, die vorher niemand aufgeschrieben hatte.

Es gibt nicht eine Preisschwelle, es gibt drei — und sie überlagern sich

Die naive Vorstellung ist: Ab einer bestimmten Menge wird es günstiger. Tatsächlich laufen bei uns mehrere Schwellenlogiken gleichzeitig, und sie greifen auf verschiedenen Ebenen.

Die erste ist die Klickstaffel — der Preis pro gedrucktem Klick, gestaffelt nach Menge, gerechnet pro Position. Sie unterscheidet außerdem zwischen Schwarzweiß und Farbe und zwischen A4 und A3.

Die zweite ist die auftragsweite Staffel. Sie schaut nicht auf die einzelne Position, sondern auf den gesamten Auftrag, und führt dafür vier getrennte Töpfe: A4 Schwarzweiß, A4 Farbe, A3 Schwarzweiß, A3 Farbe.

Die dritte ist die Verfahrensschwelle, und die ist keine Preis-, sondern eine Materialgrenze: Über 300 g/m² wird zwingend im Digitaldruck produziert und nicht auf dem Kopierer. Das Papier läuft dort schlicht nicht sauber durch. Diese Grenze ist im Kalkulator hart hinterlegt — sie ist nicht verhandelbar, weil sie physikalisch ist.

Dazu kommt die Weiterverarbeitung, die einer vierten Logik folgt: Sie springt nach Bogenzahl, nicht nach Auflage. Zweihundert Exemplare eines einzelnen Blattes und zwanzig Exemplare eines zehnseitigen Hefts ergeben dieselbe Bogenmenge — für die Schneidemaschine ist das derselbe Aufwand, für den Kunden fühlt es sich völlig unterschiedlich an.

Wer diese vier Logiken in einer Formel zusammenziehen will, bekommt Preise, die an den Rändern Unsinn sind. Sie müssen nebeneinander stehen bleiben.

Die Grenze, die ich wieder rausgeworfen habe

Ursprünglich gab es im Online-Kalkulator eine Obergrenze: Ab 500 Klicks konnte nicht mehr selbst gerechnet werden, es erschien nur noch „bitte anfragen“. Der Gedanke dahinter war vernünftig — größere Aufträge sollten durch menschliche Hände.

Diese Grenze hat einen Auftrag gekostet. Die Anfrage kam herein, das Angebot ging drei bis vier Stunden später raus, der Kunde hatte in der Zwischenzeit woanders bestellt. Nicht wegen des Preises. Wegen der Wartezeit.

Die Grenze ist ersatzlos gefallen. Die Staffel läuft heute nach oben unbegrenzt weiter. Was geblieben ist, ist etwas Weicheres, und es sind zwei Schwellen statt einer: Ab 200 € Auftragswert erscheint der Hinweis, dass sich günstigere Konditionen anfragen lassen — gerechnet wird trotzdem weiter. Ab 500 € geht der Fall intern als Großauftrag in die Handkalkulation, dorthin, wo tatsächlich Verhandlungsspielraum besteht. Dazwischen liegt die Zone, die die Engine vollständig automatisch bedient.

Der Unterschied ist wichtig: Vorher hat die Software den Kunden gebremst. Jetzt informiert sie ihn und rechnet trotzdem.

Eine Ungenauigkeit, die ich bewusst drinlasse

In den vier Staffeltöpfen zählt ein A3-Klick nicht als zwei A4-Klicks. Rechnerisch wäre das sauberer. Praktisch würde es bedeuten, dass ein Auftrag mit gemischten Formaten in einen Topf fällt, dessen Stufe niemand mehr nachvollziehen kann — weder der Kunde am Bildschirm noch der Mitarbeiter, der das Angebot erklären muss.

Ich habe die Ungenauigkeit stehen lassen und weiß, dass sie da ist. Das ist etwas anderes als sie zu übersehen. Es gibt in so einem System eine Menge Stellen, an denen die exakte Lösung schlechter ist als die erklärbare.

Eine zweite Grenze in dieselbe Richtung: Über 300 g/m² blockiert die Produktion bei weniger als zehn Bögen. Ein Kleinstauftrag auf schwerem Papier lohnt weder die Rüstzeit noch den Bogen. Auch das ist keine Rechnung, das ist eine Entscheidung.

Mehrlauf: wenn eine Position dreimal durch die Preis-Engine läuft

Der Teil, der mich am längsten beschäftigt hat, ist der Mehrlauf.

Ein „Lauf“ ist bei uns ein Durchgang durch die Preis-Engine. Eine einzige Angebotsposition kann bis zu drei davon haben: Innenteil farbig, Innenteil schwarzweiß, Deckel. Der Fall tritt auf, sobald ein Teil des Auftrags anders gedruckt wird als der Rest — eigenes Papier, andere Farbigkeit, gemischter Innenteil.

Daraus ergeben sich zwei Regeln, die beide wehtun, wenn man sie falsch herum baut.

Erstens: Rüstkosten trägt nur der Hauptlauf. Der erste vorhandene Lauf ist der Hauptlauf, und nur er rechnet Einrichten, Schneiden und Servicepauschale — jeweils genau einmal pro Position. Die Nebenläufe rechnen ausschließlich Klick und Papier. Ohne diese Regel zahlt der Kunde für einen einzelnen Deckel ein zweites Mal die volle Rüstzeit.

Zweitens: Die Klickstaffel gilt gemeinsam über alle Läufe. Erst werden die Klicks aller Läufe summiert, dann wird daraus die Staffelstufe bestimmt, und dieser Einzelpreis gilt für alle Läufe. Andersherum passiert Folgendes: Ein Deckel mit zehn Farbklicks landet in der teuersten Stufe, obwohl die Position insgesamt hundertzehn Farbklicks hat. Der Kunde bekommt für einen Teil seines Auftrags einen Kleinmengenpreis, obwohl er eine große Menge bestellt.

Ein dritter Punkt ist Detailarbeit, aber er kostet sonst Papier, das es nicht gibt: Bei gemischter Farbigkeit sind die Schwarzweiß-Blätter der Rest — sie werden nicht separat aufgerundet. Rundet man beide Teile einzeln auf, entsteht bei beidseitigem Druck rechnerisch ein Blatt, das physisch nicht existiert.

Und eine Absicherung, auf die ich Wert lege: Bei genau einem Lauf schaltet die gesamte Mehrlauf-Logik sich ab und rechnet bitgleich wie die Fassung davor. Das ist durch einen Test abgesichert. Eine neue Funktion darf den Normalfall nicht anfassen.

Bindearbeiten: Grenzen, die schützen, und Grenzen, die schaden

Die Weiterverarbeitung ist kein Aufpreis am Ende. Sie ist ein eigener Kalkulationsstrang mit eigenen physikalischen Grenzen.

Bei uns gibt es drei Familien: Spiralbindung, Leimbindung und Hardcover. Jede hat eine maximale Blockstärke, und die hängt am Papiergewicht des Innenteils. Bei 100 g fasst die Spirale 120 Blatt, die Leimbindung 280, das Hardcover 160. Bei 120 g sinken alle drei Werte. Nach unten gibt es Mindestblattzahlen: zehn Blatt bei der Spirale, zwanzig bei Leimbindung und Hardcover — darunter hält die Bindung schlicht nicht.

Dazu kommen Kombinationen, die die Maske aktiv verhindert:

  • Hardcover gibt es nur in A4. Wechselt jemand von A5 auf Hardcover, springt das Format automatisch mit.
  • Leimbindung und Hardcover vertragen nur 80, 100 oder 120 g Innenpapier. Ein unzulässiges Papier springt selbsttätig zurück.
  • Prägung geht nur auf Karton. Wählt jemand Folie oder einen bedruckten Deckel, verschwindet das Häkchen und der Artikel wird zurückgesetzt. Sonst bleibt im Angebot ein Posten stehen, den man am fertigen Produkt nicht sieht — und über den sich später jemand streitet.
  • Hardcover kennt keinen bedruckten Deckel, sondern drei Farben, die im Bindungspreis stecken.

Der wichtigste Punkt bei alldem ist aber, was keine Sperre ist. Die Blattzahl-Grenzen sind Hinweise, keine Blockaden. Ausnahmen kalkuliert ein Mitarbeiter von Hand. Wer die Maske härter macht, verliert genau die Aufträge, die Geld bringen — die ungewöhnlichen.

Eine gute Eingabemaske verhindert das physikalisch Unmögliche und lässt das wirtschaftlich Ungewöhnliche durch. Diese beiden auseinanderzuhalten ist der ganze Job.

Der Fehler: dieselbe Logik existierte dreimal

Jetzt der Teil, an dem das Projekt fast gescheitert wäre.

Die Bildung des Positionstitels — der Text, der im Angebot über der Zeile steht — existierte an drei Stellen: im Standard-Kalkulator, im Sonderfall-Kalkulator und im Tresen-Kalkulator. Drei Kopien derselben Logik, die zwangsläufig auseinanderliefen. Die dritte kannte andere Produktbezeichnungen und rechnete die Auflage anders.

Schlimmer war die Preislogik selbst. Eine Rundungsfunktion existierte in zwei Fassungen: Der Server rechnete mit einer Toleranzkonstante gegen Fließkomma-Ungenauigkeiten, der Browser ohne. Bei Beträgen bis rund vier Euro kippte das Ergebnis dadurch um einen Cent. Und weil der Server jede gespeicherte Position nachrechnet und bei mehr als einem Cent Abweichung abbricht, ließ sich das Angebot schlicht nicht speichern. Neu rechnen half nicht. Im getesteten Raster waren es 48 nachgewiesene Fälle.

Dass der Server überhaupt nachrechnet, ist kein Übereifer. Es ist Narbengewebe. An doppelter Preislogik ist das Projekt schon einmal fast gescheitert, und diese Prüfung ist die Konsequenz daraus.

Ganz sauber ist es bis heute nicht: Bindungspreise werden an zwei Stellen gepflegt, mit unterschiedlichen Werten und unterschiedlichem Steuersatz. Dieselbe Ringbindung kostet je nach Weg etwas anderes. Das steht auf der Liste.

Die Regel, die ich daraus mitgenommen habe, ist knapp: Eine Zahl hat genau eine Quelle. Wer eine Summe im Browser rechnet, die der Server nachrechnet, importiert dieselbe Funktion — er schreibt sie nicht nach. Beide Kalkulatoren teilen sich heute eine einzige reine Funktion für die Preisbildung.

Was davon übertragbar ist

Der eigentliche Aufwand steckte nicht in der Software. Er steckte darin, Erfahrungswissen aus der Produktion in Regeln zu übersetzen, die auch dann noch stimmen, wenn niemand danebensteht. „Das sieht man doch“ ist im Betrieb eine vollkommen brauchbare Auskunft. In einem Kalkulator ist sie nichts wert.

Die Entwicklungszeit lag bei etwa einem Monat neben dem Tagesgeschäft. Der überwiegende Teil davon war nicht Programmieren, sondern Sonderfälle sammeln und Leuten zuhören, die den Fall schon dreihundertmal hatten.