Wir möchten eine Liste an Datensätzen drucken mit einer Vorlage, die in Feldern erlaubt, einen Seitenumbruch durchzuführen.
Das Problem dabei ist, dass sobald ein Datensatz einen Seitenumbruch erzeugt, LlPrint kein LL_WRN_REPEAT_DATA liefert und der nächste Datensatz dann die 2te Seite des vorhergehenden Datensatzes überschreibt.
Pseudo Code:
LlPrintWithBoxStart( LL_PROJECT_LIST,...);
while Datensatz vorhanden
LlDefineFieldExt(...);
LlPrintResetProjectState(hJob);
nRet = LlPrint(hJob);
while nRet = LL_WRN_REPEAT_DATA
nRet = LlPrint(hJob);
nächster Datensatz
LlPrintEnd(0);
Wenn Du mit Listen arbeitest, braucht’s ein LlPrintFields(), oder? Schau mal in das Einführungskapitel im Handbuch, da ist die Schleife dokumentiert, mein Wissen darum ist dank .NET Databinding schon etwas eingerostet.
Es ist richtig das LlPrintFields() benötigt wird um Listen zu füllen.
Das ganze Projekt enthält innerhalb der Datensätze auch noch mehrere Listen, jedoch werden diese ausgelassen wenn keine Daten für die Listen enthalten sind.
Sobald eine Liste Daten enthält tritt das Problem nicht auf da der erste Aufruf von LlPrintFields LL_WRN_REPEAT_DATA liefert, falls die Seite voll ist.
Pseudo Code:
LlPrintWithBoxStart( LL_PROJECT_LIST,...);
while Datensatz vorhanden
LlDefineVariableExt(...);
LlDefineFieldExt(...);
LlPrintResetProjectState(hJob);
nRet = LlPrint(hJob);
while nRet = LL_WRN_REPEAT_DATA
nRet = LlPrint(hJob);
if ListenZeile vorhanden
while ListenZeile vorhanden
LlDefineVariableExt(...);
LlDefineFieldExt(...);
Set nRet = LlPrintFields ( ):
if nRet = LL_WRN_REPEAT_DATA
LlPrint();
LlPrintFields();
nächste ListenZeile
LlPrintFieldsEnd();
nächster Datensatz
LlPrintEnd(0);