Etiketten und ILLDataProvider

Lieber Support,
wir kriege ich ein Etikett dazu, mit einem ILLDataProvider zusammenzuarbeiten, der die Daten für die zu druckenden Etiketten abliefern möchte? Wenn ich einen ILLDataProvider an L&L vermelde, dann kann ich mein Etikett mit den gelieferten Daten designen. Im Preview / Ausdruck wird aber immer nur ein Etikett erzeugt.
Beste Grüße
Michael Hoffmann

HI willkommen im LL Forum,
zeig doch mal deine Implementierung und Aufruf etc.

Hallo Erdal,

was willst Du genau sehen von “meiner Implementierung”? Ich habe einen ILLDataProvider für Xbase++ mit L&L-Framework dazu geschrieben. Ein bißchen viel, das alles zu zeigen.

Das Problem ist doch, wie ich inzwischen erkannt habe, dass ich dem Etikett keinen ReportContainer einpflanzen kann, der dann den ILLDataProvider traversiert. Richtig?

Ich hatte gehofft, das würde automatisch passieren und habe damit Pech gehabt.

Viele Grüße
Michael

Wenn wir hier vom Etikett sprechen, gehe ich mal davon aus das du den ProjectTyp Label verwendest, oder? Und Label Projecttyp hat keinen Berichtscontainer oder Tabelle, ein Etikett ist ein Datensatz. Was genau hast du als ProjectTyp

Btw. für Xbase++ müsste es einen Datenprovider geben der den man verwenden kann, sollte sogar glaub als Beispiel im Beispiel Ordner von Xbase++ sein, schon gesehen?

An sich sollte das auch mit einem eigenen Datenprovider klappen, auch wenn wir das bisher nicht dokumentiert haben. Bei Etiketten stehen immer nur Variablen zur Verfügung, d. h. es gibt - wie @Erdal_Alacali richtig sagt - keinen Berichtscontainer und man kann auch keine 1:n-Beziehungen abbilden. Stattdessen sollte vor dem Druckstart die eine Tabelle angemeldet werden, die für das Etikett herangezogen wird, und genau diese auch als Mastertable ausgezeichnet werden:

LlDbAddTable(...)
LlDbSetMasterTable(...)

Die Druckschleife für die Etiketten sieht dann nur noch so aus (Pseudocode):

LlSetOption(...LL_OPTION_ILLDATAPROVIDER...)
LlPrintWithBoxStart(...)
// alle Etiketten ausgeben
while (LlPrint(...) == LL_WRN_REPEAT_DATA);
LlPrintEnd(...)

d. h. LlPrint wird so oft aufgerufen, bis nicht mehr LL_WRN_REPEAT_DATA zurückkommt. Danach kann der Druck dann per LlPrintEnd beendet werden.

Hilft das weiter?

Hallo Erdal und Jochen,

genau das, was Jochen vorschlägt, habe ich versucht. Eben dieses führt zu meinem Problem.

Natürlich nehme ich Variablen, denn mein ILLDataprovider kriegt ja von L&L gesagt, wie er seine Daten vermelden soll. Es gibt da aber noch eine andere Gretchenfrage: Woher sollte denn Freund L&L wissen, welche Daten er traversieren soll? Genau dafür braucht es ja den Container, den es nicht gibt.

Ich bin froh, dass ich nicht als einziger auf die Idee gekommen bin, dass müsste/könnte so gehen. Die angeführten Xbase++ Beispiele ziehen bei mir nicht. Ich mache das mit ILLDataProvider (oder wollte es damit machen…)

Inzwischen habe ich einen Loop gezimmert, der meinen ILLDataProvider öffnet und traversiert. Geht einwandfrei.

Vielen Dank und schönes Wochenende
Michael

Woher sollte denn Freund L&L wissen, welche Daten er traversieren soll? Genau dafür braucht es ja den Container, den es nicht gibt.

Das läuft eben durch das Iterieren der als “Master” übergebenen Tabelle. Pro Etikett wird damit ein Datensatz angemeldet. Dafür braucht es eigentlich keinen Container.

Aber wenn es jetzt klappt - um so besser :slight_smile:. Der einzige Vorteil bei einer “echten” Datenproviderverwendung ist, dass eine Sortierung für die Daten angemeldet werden kann (wenn die Tabelle eine Sortierung unterstützt). Wenn das nicht gebraucht wird ist eine “normale” Druckschleife natürlich auch in Ordnung.

Schönes Wochenende :sunglasses:!

Interessant. Auf das LLDbSetMasterTable Funktiönchen bin ich bei der Lösungssuche auch gestoßen. Aber die Doku ließ jeden Hoffnungsschimmer platzen. Mit Relationen hatte mein Problem schon nix zu tun und als ich dann noch container object las, war es ganz vorbei:

“If the master data is passed as variables, List & Label needs to know which table is the “master” table in order to be able to offer the suitable sub-tables in the table structure window. If you set the master table name using this method, all tables related to this table can be inserted at the root level of the report container object.”

Mein Framework kann jetzt beides. Eigener Loop oder Master, wenn festgelegt. Ich brauche die Sortierung. Beim ILLDataProvioder habe ich sie nun definiert. Wie kriege ich die jetzt aktiviert? (Master wurde gesetzt.)

Vor dem Aufruf des Designer sollten die Sortierungen per LlDbAddTableSortOrder hinzugefügt werden, dann kann auch für Etikettenprojekte unter den Projekteigenschaften eine Sortierung gewählt werden. So sollte das zumindest klappen, ich kann gerade nicht nachsehen. Die Verwendung für Etiketten ist derzeit nicht dokumentiert, daher passt die Doku nicht zu den benötigten Aufrufen.

Leider nein. Ich find da nix. Sortierung wurde vorher definiert.

Nur damit wir vom Gleichen sprechen: ich meine die Eigenschaften im Eigenschsftenfenster, wenn man in der Objektliste “Projekt” im Tree selektiert.

Wenn das nicht klappt würde ich gerne mal ein Logfile analysieren.

Ja. Ich habe im Baum das Projekt selektiert. Im Eigenschaftenfenster gebe ich “sort” als Suchbgeriff ein. Das wirkt wie Alpina-Weiß. Keine Option wird mehr angezeigt.
Dass die Sortierung definiert ist, weiß ich hochsicher, denn wenn ich meinen Label-Daten-Loop verwende, dann kann ich die Sortierung über ILLDataProvider wählen und das geht.
Jetzt aber Schluss für heute. Vielen Dank!

1 Like

Wir können hier gerne weitermachen - ich schaue mir jederzeit gerne ein Logfile an, um das Problem weiter zu verstehen. Wenn wir das ganze bei uns compilieren können können wir es auch gerne am lebenden Objekt untersuchen :slight_smile:.