Willkommen im kivitendo Forum! Hier erweitern und teilen AnwenderInnen und EntwicklerInnen ihr Wissen.

Teste kivitendo!

kivitendo Demo

kivitendo Demo mit Schweizer Kontenplan

Geld allein macht nicht glücklich - benutzt kivitendo!

0 Punkte

Nachdem ich einen Opendoc Lieferschein erstellt habe, der auch tadellos funktioniert, möchte ich nun gerne die Chargennummern mit ausdrucken.
Ich habe eine Tabelle, die die einzelnen Positionen darstellt.
In einer Zelle sollen wenn vorhanden die diversen Chargennummern des Artikels mit ausgedruckt werden.
Allerdings funkioniert das Konstrukt

<%foreach si_number%>Seriennummer: <%si_chargenumber%><%end si_number%>

nicht.
Das Dokument kann wegen Fehlern nicht geöffnet werden.
Nun habe ich folgendes in der Dok. gelesen

Besonderheit in OpenDocument-Vorlagen: Tritt ein <%foreach%>
-Block innerhalb einer Tabellenzelle auf, so wird die kom- plette Tabellenzeile so oft wiederholt wie notwendig. Tritt er außerhalb auf,
so wird nur der Inhalt zwischen <%foreach%> und <%end%> wiederholt,
nicht aber die komplette Zeile, in der er steht.

Heißt das, dass ich die Chargennummern in Zellen nicht ausgeben kann, oder verstehe ich das falsch?

Gefragt von (420 Punkte)
Bearbeitet von

2 Antworten

+1 Punkt

Die Variablen, die mit si_... beginnen, sind Variablen, die nur für Ein-/Auslagerungen gesetzt sind. Das sind diejenigen Einträge, die man in dem kleinen Popup "?" macht.

Außerdem sind sie bezogen auf die aktuelle Positionsspalte. Das heißt, dass diese Schleife nur innerhalb einer <%foreachrow number%> Sinn ergibt. Du brauchst also zwei verschachtelte Schleifen: die äußere iteriert über alle Positionen, die innere ist deine über si_number iterierende.

Die äußere Schleife sollte, wenn man in OpenDocument ist, in der Tat mit foreachrow gebildet werden, die innere aber nicht.

Beantwortet von (12.2k Punkte)

ok, vielen Dank für die Antwort.
So hatte ich mir das auch gedacht.
Hier ein Auszug aus einem Dokument.

Lieferschein
<%if ustid%>Umsatzsteuerfreie innergemeinschaftliche Lieferung<%end if%>
<%if notes%><%notes%><%end if%>

Pos. Artikel-Nr. Beschreibung Einheit Liefermenge
<%foreachrow number%><%runningnumber%> <%if reqdate%>Lieferung vom <%reqdate%>
<%end if%><%number%>
<%description%><%if ic_cvar_Stat_WA_NR%>
stat. Warennummer: <%ic_cvar_Stat_WA_NR%> Ursprungsland: <%ic_cvar_Ursprungsland%><%end if%>
<%foreach si_number%>Seriennummer: <%si_chargenumber%><%end si_number%> <%unit%> <%qty%><%end number%>

Naja, das Format hat jetzt ein bisschen gelitten, aber ich glaube man sieht was es werden soll.

Wenn man ein Dokument druckt, dass nur eine Chargennummer enthält, dann kommt alles wie gewünscht raus.
Druckt man aber ein Dokument, wo eine oder mehr Positionen mehrere Chargennummern enthält, dann kann das erzeugte Dokument nicht geöffnet werden, und Word gibt folgende Fehlermeldung aus.

"Der im Endtag des Elements enthaltende Name muss mit dem Elementtyp im Starttag übereinstimmen."

Auch in OpenOffice kann das Dolument nicht geöffnet werden.

Mache ich da was falsch?

0 Punkte

Ah, Fehlermeldung des öffnenden Programmes. Hatte ich überlesen.

Das passiert dann, wenn Formatierungen innerhalb einer foreach-Schleife anfangen und dahinter enden, oder aber auch gerne, wenn innerhalb einer foreach-Schleife echte Absätze (Return) benutzt werden. Zeilenumbrüche (Ctrl+Return) innerhalb von foreach sind OK!

Lösung:

  1. Zuerst alle Absätze und Zeilenumbrüche innerhalb der inneren foreach entfernen.
  2. Den gesamten Text von <%foreach si_number%> bis hin zum dazugehörigen <%end%> markieren, Rechtsklick, "Direkte Formatierungen entfernen" (so oder so ähnlich heißt es bei OpenOffice/LibreOffice -- auf Englisch "Clear direct formatting", keine Ahnung, wie es bei Word heißt)
  3. Speichern und ausprobieren.
  4. Wenn es funktioniert: an den gewünschten Stellen wieder Zeilenumbrüche (Ctrl+Return) aber keine Absätze einfügen, speichern, erneut ausprobieren.
Beantwortet von (12.2k Punkte)

Nein, damit seint es nichts zu tun zu haben.
ich habe natürlich das Template in LibreOffice angelegt. Nur das Resultat öffne ich in der Regel mit Word, aber es geht auch nicht mit LibreOffice.
Es handelt sich um eine Tabelle. Die Tabelle hat 4 Spalten. Da ist zwangsweise in jeder Spalter ein Absatzende (RETURN) drin, was man auch nicht entfernen kann.
Habe das ganze aber auch außerhalb einer Tabelle versucht und eine einfache äußere Schleife mit <%foreachrow number%> und eine innere mit <%foreach si_number%> gebildet, aber es kommt immer noch der gleiche Fehler.

Naja, werde morgen mal weiter testen.

Glaub mir, das Problem ist exakt das, was ich beschreibe. In Tabellen ist normalerweise nie ein Return notwendig, auch nicht am Ende der Zeile. Stell dir Originalvorlage irgendwo zum Download zur Verfügung und ich behebe dir das Problem.

Generell ist es bei solchen Problemen eigentlich immer notwendig, dass die Originalvorlage zur Verfügung gestellt wird, weil ansonsten nur viel Kaffeesatzleserei betrieben werden kann.

Hab dir ne private Nachricht geschickt

Danke

Ähnliche Fragen

0 Punkte
3 Antworten
Gefragt 14, Jun 2012 von new2kivi (100 Punkte)
0 Punkte
1 Antwort
0 Punkte
2 Antworten
Gefragt 23, Aug 2013 von ich_bins (210 Punkte)
...