Seite 1 von 1

Felder zur Laufzeit füllen

Verfasst: Mo, 13. Feb 2012 15:25
von KlausL
Hallo,

in meinem aktuellen Projekt muß ich mit LL12 Reports erstellen. Nun habe ich das folgende (eigentlich sehr triviale) Problem, während der Abarbeitung ein Feld immer wieder mit unterschiedlichen Werten zu füllen:

LlDefineFieldExt(hJob, "NAME_1", "Xyz", LL_TEXT, "")
.
.
.
Do While !Eof()
//--> hier muß ich das oben deklarierte Feld füllen

Leider stelle ich mich zu dumm an, wie muß ich die Wertzuweisung codieren; habe in den Unterlagen nichts gefunden, sicherlich mein Fehler.

Vielen Dank im Voraus,

Klaus

Re: Felder zur Laufzeit füllen

Verfasst: Mo, 13. Feb 2012 15:39
von Tom
LlDefineFieldExt(hJob, "NAME_1", <Wert in diesem Augenblick>, LL_TEXT, "")

Wenn Du mit Charset OEM arbeitest, sollte <Wert in diesem Augenblick> mit ConvToAnsiCp() verbunden sein.

Re: Felder zur Laufzeit füllen

Verfasst: Di, 14. Feb 2012 16:49
von KlausL
Hallo,

wenn ich im Designer eine Datenzeile bearbeite (Tabelleninhalt, Karteireiter "Variablen und Funktionen"), werden mir alle Felder der aktuellen DBF sowie die LL-Variablen angeboten. Eigene Variablen allerdings, die ich im Designer unter "Benutzer-Variablen" angelegt habe und zur Lauf- bzw. Designzeit aus dem aufrufenden Quellcode via LlDefineFieldExt() mit Werten versorge, werden mir hier nicht angezeigt ?!

Konkret habe ich eigentlich folgendes Problem: Für eine Reportzeile benötige ich die Daten aus den beiden Tabellen "Verkaufsstatistik" und "Artikelstamm", als Foreign-Key in den Artikelstamm verwende ich die Indexdatei mit dem Schlüssel "Artikelnummer":

vksta->(DbSetRelation("artsta", {|| vksta->art_nr}, "vksta->art_nr", "art_nr", "VKSTA_ARTSTA", .T.))

Im Designer habe ich nur Zugriff auf die Tabelle in der aktuellen Workarea, also VKSTA.DBF. Ich schaffe es beim besten Willen nicht, zusätzlich auch auf die ARTSTA.DBF zuzugreifen, z. B. mit LlDbAddTable(). Deshalb mein Versuch, an die benötigten Felder aus ARTSTA.DBF über den Umweg als Variablen zuzugreifen.

Wer kann sich denken, welchen Fehler ich mache? Oder funktioniert ein Zugriff auf mehrere DBFs in der Version List& Label 12 generell nicht?

Re: Felder zur Laufzeit füllen

Verfasst: Di, 14. Feb 2012 18:05
von Tom
Hallo, Klaus.

Die Benutzervariablen im Designer dienen anderen Zwecken, etwa für Zwischensummen oder auf andere Art erzeugten Ergebnissen, die sich aus Feldern ergeben.

Wahrscheinlich arbeitest Du mit etwas, das auf einem der Beispiele aus L&L basiert. Dort gibt es zwei sehr wesentliche Punkte, nämlich LlDefineFieldStart() und DefineData(). Ersteres eröffnet die Deklaration von Feldern (LlDefineField/DefineFieldExt - ist letztlich dasselbe, nur "Ext" ist typisiert), zweiteres ist eine Beispiel-UDF, die die Inhalte einer Tabelle publiziert, nämlich derjenigen, die beim Aufruf selektiert ist.

Vermutlich hast Du Deine Felddefinitionen versehentlich vor das LlDefineFieldStart() gesetzt, wodurch sie wirkungslos sind. Du musst nicht mit LlDbAddTable() und dem dahinterstehenden, ziemlich komplexen Mechanismus herumlavieren, um Felder aus zwei oder mehr Tabellen zu übergeben. Am einfachsten wäre es, das DefineData() mit anderen Parametern zu wiederholen, und zwar vor Aufruf des Designers und in der Druckschleife: Einmal für die Haupttabelle, dann für die andere. Du kannst natürlich auch, wie Du es versucht hast, einfach LlDefineFieldExt() für alle Felder aus der zweiten Tabelle auslösen (aber auch in der Druckschleife! Navigation nicht vergessen!), aber ein DefineData() mit zusätzlichen Arrays ist einfacher, solange es keine Feldnamensüberschneidungen gibt.

Wie gesagt, Du machst es vermutlich einfach nur an der falschen Stelle. Felder, die mit LlDefineFieldExt() vor dem Aufruf des Designers und nach LlDefineFieldStart() übermittelt wurden, sollten auch sichtbar sein. Was passiert, wenn Du den gewählten Feldnamen einfach eintippst?
Oder funktioniert ein Zugriff auf mehrere DBFs in der Version List& Label 12 generell nicht?
L&L sind DBFs egal, es hat keinen Kontakt zu ihnen. Schau Dir mal DefineData() an!

Re: Felder zur Laufzeit füllen

Verfasst: Do, 16. Feb 2012 12:09
von KlausL
Hallo Tom,

Du hast natürlich recht, genau diesen Fehler habe ich gemacht. Funktioniert jetzt super!

Nochmals vielen Dank für Deine Bemühungen,

Klaus

Re: Felder zur Laufzeit füllen

Verfasst: Do, 16. Feb 2012 14:12
von Tom
Schön! :)

Denk doch bitte an das [ERLEDIGT] im Threadtitel. :wink: