Seite 1 von 1

L&L erste Seite immer leer

Verfasst: Di, 12. Sep 2006 8:54
von Rudolf
Hallo,
habe leider immer noch das Problem, daß bei mir die erste Seite leer ist. Habe schon alles versucht, aber ohne Erfolg. Hier mein Code:


if !L8ModuleInit()
return .f.
endif
hJob := LlJobOpen(-1)
CurDir( GetDataPath() )
LlDefineVariableStart(hJob)
LlDefineFieldStart(hJob)
LlSetOption(hJob, LL_OPTION_MULTIPLETABLELINES, 1)

AFields( aField, aType, aLen, aDec )
DefineData(.t., aField, aType, aLen, aDec)
*------------------------------------------------------------
LlDefineVariableExt(hJob,"VAR1", aInfo[1] ,LL_TEXT)
LlDefineVariableExt(hJob,"VAR2", aInfo[2] ,LL_TEXT)
LlDefineVariableExt(hJob,"VAR3", aInfo[3] ,LL_TEXT)
LlDefineVariableExt(hJob,"VAR4", aInfo[4] ,LL_TEXT)
LlDefineVariableExt(hJob,"VAR5", aInfo[5] ,LL_TEXT)
LlDefineVariableExt(hJob,"VAR6", aInfo[6] ,LL_TEXT)
*------------------------------------------------------------
nRet := LlPrint(hJob) // ???
LlSetPrinterDefaultsDir(hJob, MyGetTempPath())
nArt := if(lLabel,LL_PROJECT_LABEL,LL_PROJECT_LIST)
nRet := LlPrintWithBoxStart(hJob, ;
nArt, ;
sName, ;
LL_PRINT_PREVIEW, ;
LL_BOXTYPE_NORMALWAIT, ;
SetAppWindow():GetHWND(), ;
"Ausdruck...")

LlPreviewSetTempPath(hJob, MyGetTempPath())
nAkt := 1
nCount := lastrec()
do while (nCount > 0) .AND. (nRet = 0) .AND. (!EOF())
if eval(bFilter)
DefineData(.t., aField, aType, aLen, aDec)
nRet := LlPrintFields(hJob)
while nRet=LL_WRN_REPEAT_DATA
LlPrint(hJob)
nRet:=LlPrintFields(hJob)
enddo
endif
skip(1)
LlPrintSetBoxText(hJob, "Druck", ( (100*nAkt++)/nCount ))
end do
nRet:=LlPrintEnd(hJob)
LlPreviewDisplay(hJob, sName, myGetTempPath(), SetAppWindow():GetHWND())
LlPreviewDeleteFiles(hJob, sName, MyGetTempPath())
LlJobClose(hJob)
L8ModuleExit()

Grüsse
Rudolf

Verfasst: Di, 12. Sep 2006 14:55
von Gerd König
Hallo Rudolf,

ich kann aus deinem Quellcode nicht entnehmen ob du die Felder eventuell mit LlDefineVariableExt(...) zuweist. In diesem Fall müsstest du die Funktion durch LlDefineFieldExt(...) ersetzen.

Viele Grüße
Gerd

Verfasst: Di, 12. Sep 2006 15:04
von Tom
Ich würde sagen, daß das überflüssige (weil auch zu frühe) LlPrint mit den von Dir gesetzten drei Fragezeichen dahinter einen Seitenvorschub erzeugt. Was passiert, wenn Du das auskommentierst? Liegt Deine Tabelle möglicherweise auf der Formularebene "Folgeseiten"?

Verfasst: Di, 12. Sep 2006 19:01
von Rudolf
Hallo,
das entfernen vom LlPrint () hilft leider auch nichts, und die Variablen werden bereits mit LlDefineFieldExt() definiert. Auch völlig neue Reports zeigen den Effekt, also muss es was mit meinem Code zu tun haben.

Grüsse
Rudolf

Anbei noch mein DefineData(), kann mir aber nicht vorstellen, dass da was nicht stimmt.

//-------------------------------------------------------------------
static function DefineData(bAsField, aField, aType, aLen, aDec)
//-------------------------------------------------------------------
//GR: Wird vom Programm aufgerufen, um die Daten entsprechend dem
// neuen Datensatz zu definieren. In bAsField wird festgelegt,
// ob die Daten als Felder oder als Variable an List & Label
// uebergeben werden
LOCAL FldType, FldContent, DateBuffer, lExpr
//GR: Umwandlung von xbase ++ Feldtypen in List & Label Feldtypen
FOR i:=1 to len(aField)
DateBuffer = Replicate(chr(0), 255)
DO CASE
CASE aType == "N"
FldType=LL_NUMERIC
FldContent=Str( FieldGet(i) )
CASE aType == "D"
FldType=LL_DATE
FldContent=dtoc( FieldGet(i) )
//GR: In Julianisches Datum konvertieren
//GR: Ausdruck aufbauen
//lExpr = LlExprParse(hJob,"DateToJulian(DATE("+;
// chr(34)+DTOC(FieldGet (i) )+chr(34)+"))", .F.)
//GR: Ausdruck auswerten
LlExprEvaluate(hJob, lExpr, @DateBuffer, 255)
//GR: Ausdruck wieder freigeben
LlExprFree(hJob, lExpr)
FldContent = DateBuffer
CASE aType == "L"
FldType=LL_BOOLEAN
if FieldGet(i) = .F.
FldContent="JA"
else
FldContent="NEIN"
endif

CASE aType == "C"
FldType=LL_TEXT
FldContent=ascrepl(Trim(FieldGet(i)),2)

// GR: Fuer Artikelnummer: EAN128-Barcode anlegen
/*
if upper(aField) = "NUMMER"
DO CASE
// GR: Zwischen Feld- und Variablendefinition unterscheiden
CASE bAsField==.F.
LlDefineVariableExt(hJob, "ARTICLENO_EAN128",;
Trim(FieldGet(i)), LL_BARCODE_EAN128, 0 )
CASE bAsField==.T.
LlDefineFieldExt(hJob, "ARTICLENO_EAN128",;
Trim(FieldGet(i)), LL_BARCODE_EAN128, 0 )

ENDCASE
endif
*/
CASE aType == "M"
FldType=LL_TEXT
FldContent = FieldGet(i)

END CASE
//GR: Daten an List & Label geben
if bAsField==.F.
LlDefineVariableExt(hJob, aField, FldContent, FldType, 0 )
else
LlDefineFieldExt(hJob, aField, FldContent, FldType, 0 )
endif
NEXT I
RETURN NIL

Verfasst: Do, 14. Sep 2006 9:23
von Josef Stockinger
Hallo Rudolf,

das LlPrint erscheint mir auch reichlich früh. Probier doch diese Reihenfolge, da hatte ich noch nie ein Problem. Ich vermute das eher in Deinem LL-Template wie Tom schon schreibt.

Code: Alles auswählen

if nModus = 2    // = drucken
   aField := Array( FCount() )
   aType  := Array( FCount() )
   aLen   := Array( FCount() )
   aDec   := Array( FCount() )
   go top
   AFields( aField, aType, aLen, aDec )
   L8MODULEInit()
   hJob := LlJobOpen(0)
   LlSetPrinterToDefault(hJob,LL_PROJECT_LABEL,sName)
   DefineData(.F., aField, aType, aLen, aDec)
   LlDefineVariable(hJob,"appname","sample")
   LlSetPrinterDefaultsDir(hJob, MyGetTempPath())
   nRet := LlPrintWithBoxStart(hJob, LL_PROJECT_LABEL, sName, LL_PRINT_PREVIEW, ;
                               LL_BOXTYPE_NORMALWAIT, oOwner:GetHWND(), cBoxText)
   count to nCount
   go top
   nAkt := 0
   LlPreviewSetTempPath(hJob, MyGetTempPath())
   do while (nCount > 0) .AND. (nRet = 0) .AND. (!EOF())
       DefineData(.F., aField, aType, aLen, aDec)
       nRet := LlPrint(hJob)
       nAkt := nAkt + 1
       LlPrintSetBoxText(hJob, "Drucke ...", ( (100*nAkt)/nCount ))
       skip
   enddo
[color=red]   nRet:=LlPrintFieldsEnd(hJob)
   DO WHILE nRet=LL_WRN_REPEAT_DATA
      nRet:=LlPrintFieldsEnd(hJob)
   ENDDO [/color]
   LlPrintEnd(hJob, 0)
   LlPreviewDisplay(hJob, sName, MyGetTempPath(), oOwner:GetHWND())
   LlPreviewDeleteFiles(hJob, sName, MyGetTempPath())
   LlJobClose(hJob)
   L8MODULEExit()
endif

Beste Grüße
Josef

Verfasst: Do, 14. Sep 2006 11:45
von Rudolf
Hallo Josef,
danke für das Beispiel, habe meines reduziert auf folgenden Code, aber ohne Erfolg. Auch das Projekt habe ich zur Sicherheit komplett neu erstellt. Trotzdem immer die erste Seite leer ohne Daten. Komischerweise ist im Designer die Vorschau für den Report in Ordnung.
Grüsse
Rudolf


if !L8ModuleInit()
return .f.
endif
hJob := LlJobOpen(-1)
CurDir( GetDataPath() )
AFields( aField, aType, aLen, aDec )
DefineData(.f., aField, aType, aLen, aDec)
LlSetPrinterDefaultsDir(hJob, MyGetTempPath())
nArt := if(lLabel,LL_PROJECT_LABEL,LL_PROJECT_LIST)
nRet := LlPrintWithBoxStart(hJob, ;
nArt, ;
sName, ;
LL_PRINT_PREVIEW, ;
LL_BOXTYPE_NORMALWAIT, ;
SetAppWindow():GetHWND(), ;
"Ausdruck...")
LlPreviewSetTempPath(hJob, MyGetTempPath())
nAkt := 1
nCount := lastrec()
do while (nCount > 0) .AND. (nRet = 0) .AND. (!EOF())
if eval(bFilter)
DefineData(.f., aField, aType, aLen, aDec)
nRet := LlPrintFields(hJob)
LlPrint(hJob)
endif
dc_DBSkip(1)
nAkt++
LlPrintSetBoxText(hJob, "Druck", ( (100*nAkt)/nCount ))
end do
nRet:=LlPrintEnd(hJob)
LlPreviewDisplay(hJob, sName, myGetTempPath(), SetAppWindow():GetHWND())
LlPreviewDeleteFiles(hJob, sName, MyGetTempPath())
LlJobClose(hJob)
L8ModuleExit()

Verfasst: Do, 14. Sep 2006 13:38
von Tom
Hallo, Rudolf.

Bist Du sicher, daß Du im Formular keine Darstellungsbedingung hast, die .F. erzeugt? Nicht die Ebene verwechselt? Ansonsten vermisse ich lediglich vor LlPrintEnd() das hier:

Code: Alles auswählen

[color=red]nRet:=LlPrintFieldsEnd(hJob)
DO WHILE nRet=LL_WRN_REPEAT_DATA
   nRet:=LlPrintFieldsEnd(hJob)
ENDDO[/color]
LlPrintEnd(hJob,0)

Verfasst: Do, 14. Sep 2006 13:47
von Rudolf
Hallo Tom,
hilft leider auch nicht, werde mal ein eigenständiges Beispiel machen, vielleicht finde ich es dann.
Grüsse
Rudolf

Verfasst: Do, 14. Sep 2006 17:12
von Josef Stockinger
Hallo Tom und Rudolf,

den fehlenden Codeabschnitt habe ich der Vollständigkeit halber noch oben eingefügt.

Gruß
Josef

Verfasst: Do, 14. Sep 2006 17:37
von Rudolf
Hallo Josef,
welchen Codeabschnitt meinst Du ?
Grüsse
Rudolf

Verfasst: Fr, 15. Sep 2006 9:17
von Josef Stockinger
Hallo Rudolf,

den von Tom - der ist in meinem Beitrag in rot eingefügt. Alles andere - bisherige - erscheint dort in grün. Da man die eigenen Beiträge auch nachträglich noch editieren kann, lässt sich das ganze so recht übersichtlich halten.

Viele Grüße
Josef

Verfasst: Fr, 15. Sep 2006 9:21
von Rudolf
Hallo Josef,
danke, habs schon wieder eingefügt. Es war verher in meinem Code enthalten, habs beim experimentieren entfernt. Ohne die Zeilen kommt der Report leer raus, nur der Header wird gedruckt.
Ich werd mal das eigenständige Beispiel machen, anders werde ich das Problem wohl nie finden.
Grüsse
Rudolf