L&L erste Seite immer leer

Moderator: Moderatoren

Antworten
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

L&L erste Seite immer leer

Beitrag 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
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Beitrag 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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag 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"?
Herzlich,
Tom
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag 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
Benutzeravatar
Josef Stockinger
UDF-Programmierer
UDF-Programmierer
Beiträge: 53
Registriert: So, 25. Sep 2005 18:06
Wohnort: Nähe Regensburg
Kontaktdaten:

Beitrag 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
Zuletzt geändert von Josef Stockinger am Do, 14. Sep 2006 17:07, insgesamt 1-mal geändert.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag 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()
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag 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)
Herzlich,
Tom
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag von Rudolf »

Hallo Tom,
hilft leider auch nicht, werde mal ein eigenständiges Beispiel machen, vielleicht finde ich es dann.
Grüsse
Rudolf
Benutzeravatar
Josef Stockinger
UDF-Programmierer
UDF-Programmierer
Beiträge: 53
Registriert: So, 25. Sep 2005 18:06
Wohnort: Nähe Regensburg
Kontaktdaten:

Beitrag von Josef Stockinger »

Hallo Tom und Rudolf,

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

Gruß
Josef
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag von Rudolf »

Hallo Josef,
welchen Codeabschnitt meinst Du ?
Grüsse
Rudolf
Benutzeravatar
Josef Stockinger
UDF-Programmierer
UDF-Programmierer
Beiträge: 53
Registriert: So, 25. Sep 2005 18:06
Wohnort: Nähe Regensburg
Kontaktdaten:

Beitrag 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
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag 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
Antworten