+1 800 256 3608 (toll-free in North America) or +49 7531 90 60 10| service@combit.com

Grundsatzfrage: In welcher Reihenfolge werden Tabellen durchlaufen?

Hallo,

ich habe zwei Fragen zur zeitlichen Abarbeitung von Tabellen in LL:

  1. Ein Berichtscontainer hat mehrere Tabelle, die jeweils N Records haben. Wenn ich jetzt eine Filterbedingung auf ein Feld habe und erst der letzte Record erfüllt diese Bedingung - werden dann (wie in einer Schleife) alle anderen Records auch durchgearbeitet?

  2. Es gibt mehrere Container mit je einer Tabelle: In welcher Reihenfolge werden die Daten durchgearbeitet? Muss ich hier eine zeitliche Verkettung in der Objektliste eintragen?

Zusatzfrage: Kann man diese Reihenfolge der Abarbeitung im Logfile von debwin3 sehen?

Danke

Nikolaus Kern

Hi!
zu 1. kann ich dir was sagen :slight_smile:
Schau mal hier wegen Filterung:
https://blog.combit.net/en/blog/development/april-2014/filtering-at-database-level/

Hallo,

zu 1. pflichte ich Hans Peter vollkommen bei. Voraussetzung ist halt eben, dass der verwendete Datanprovider das kann bzw. unterstützt. Sollte er das nicht können, so ist es dann wie vermutet: Es landen ja dann auch ALLE Daten in List & Label und hier muss dann List & Label dann selbst entscheiden auf Grund des Filters, welche Daten relevant sind. Und dafür muss es dann aber auch komplett selbst durch die Daten laufen. Egal wie: ich würde immer versuchen zu schauen einen Datenprovider zu verwendet - das kann immense Performance bringen.

Beim 2. Punkt ist es so, dass die Tabellen, die sich in einem Berichtscontainer befinden genau so abgearbeitet werden, wie sie dort im Container platziert wurden - von oben nach unten und eine nach der anderen. Daher braucht es hier keine komplexe/aufwändige Verkettung mehr - total easy. Und wenn man zwischen den Tabellen im Container noch einen Seitenumbruch braucht kann man auch noch einfach die Eigenschaft “Umbruch vor” auf “True” stellen.

Es kommt noch Debwin3 zum Einsatz? Also auch eine etwas ältere LL Version vermute ich. Min. in der aktuellen Version 24 mit Debwin4 (sehr komfortabel mit Suchen, Filter etc.) kann man sehen, wann wie welche Tabelle gedruckt wird. Hier sieht man dann bspw. gut den Datenkontext für Datenprovider (siehe Punkt 1.):

LL.DataProvider;4D0;100:2=CMLL24♦101:1=0; >OpenChildTable(006FB164/0EE7FBD0, ‘Customers2Orders’)
LL.DataProvider;4D0;100:2=CMLL24♦101:1=0; <OpenChildTable(006FB164/0EE7FBD0, ‘Customers2Orders’) -> 0EE7FBAC
LL.DataProvider;4D0;100:2=CMLL24♦101:1=0; Orders uses ‘Orders.CustomerID’
LL.DataProvider;4D0;100:2=CMLL24♦101:1=0; ‘Orders.Freight’
LL.DataProvider;4D0;100:2=CMLL24♦101:1=0; ‘Orders.OrderDate’
LL.DataProvider;4D0;100:2=CMLL24♦101:1=0; ‘Orders.OrderID’
LL.DataProvider;4D0;100:2=CMLL24♦101:1=0; ‘Orders.ShippedDate’
LL.DataProvider;4D0;100:2=CMLL24♦101:1=0; ILLDataProvider(006FB164)::SetUsedIdentifiers(Orders.CustomerID; Orders.Freight; Orders.OrderDate; Orders.OrderID; Orders.ShippedDate) -> S_OK
LL.DataProvider;4D0;100:2=CMLL24♦101:1=0; >DataProvider((Orders [0EE7FBB0]))::NextRecord()
LL.DataProvider;4D0;100:2=CMLL24♦101:1=0; >DataProvider((Orders [0EE7FBB0]))::Skip()
LL.DataProvider;4D0;100:2=CMLL24♦101:1=0; <DataProvider((Orders [0EE7FBB0]))::Skip() -> OK
LL.DataProvider;4D0;100:2=CMLL24♦101:1=0; >DataProvider((Orders [0EE7FBB0]))::DefineRow() [master=0]
LL.Generic;4D0;100:2=CMLL24♦101:1=0; FIELD LIST: ‘Orders.CustomerID’
LL.DataProvider;4D0;100:2=CMLL24♦101:1=0; DATAPROVIDER: QUERY_COLUMNS:
LL.DataProvider;4D0;100:2=CMLL24♦101:1=0; table: Orders, mode ROWMODE_ALL_COLUMNS, ROWMODE_DATA_PRINT_REALDATA, ROWMODE_FIELD
LL.API;4D0;100:2=CMLL24♦101:1=0; >LlDefineFieldExt(2,‘Orders.OrderID’,‘10643’,0x08000002,00000000)
LL.API;4D0;100:2=CMLL24♦101:1=0; <LlDefineFieldExt() -> 0 (00000000)
LL.DataProvider;4D0;100:2=CMLL24♦101:1=0; <DataProvider((Orders [0EE7FBB0]))::DefineRow() [master=0]
LL.DataProvider;4D0;100:2=CMLL24♦101:1=0; <DataProvider((Orders [0EE7FBB0]))::NextRecord() -> OK

Und dann noch die einzelnen Objekte, die ausgegeben werden - als der visuelle Teil:


LL.ObjectStates;4D0;100:2=CMLL24♦101:1=3; >OBJSTATE(HEADER:“Firma”): WAITING (API: unfinished=0, has_data_to_print=1)
LL.ObjectStates;4D0;100:2=CMLL24♦101:1=1; <OBJSTATE(HEADER:“Firma”): WAITING (API: unfinished=0, has_data_to_print=0)
LL.Notification;4D0;100:2=CMLL24♦101:1=1; >@NOTIF.(code= 11, param=006F96E4, user=00000000)
LL.Notification;4D0;100:2=CMLL24♦101:1=1; <@NOTIF.(code= 11) -> 00000000
LL.ObjectStates;4D0;100:2=CMLL24♦101:1=1; >OBJSTATE(HEADER:“Adresse”): WAITING (API: unfinished=0, has_data_to_print=1)
LL.ObjectStates;4D0;100:2=CMLL24♦101:1=1; <OBJSTATE(HEADER:“Adresse”): WAITING (API: unfinished=0, has_data_to_print=0)
LL.Notification;4D0;100:2=CMLL24♦101:1=1; >@NOTIF.(code= 11, param=006F96E4, user=00000000)
LL.Notification;4D0;100:2=CMLL24♦101:1=1; <@NOTIF.(code= 11) -> 00000000
LL.ObjectStates;4D0;100:2=CMLL24♦101:1=1; >OBJSTATE(HEADER:“KundenNr”): WAITING (API: unfinished=0, has_data_to_print=1)
LL.ObjectStates;4D0;100:2=CMLL24♦101:1=1; <OBJSTATE(HEADER:“KundenNr”): WAITING (API: unfinished=0, has_data_to_print=0)

Hoffe das reicht erstmal als Input :wink:

Danke für die beiden Antworten.

Die Version von DebWinx habe ich übersehen… Es handelt sich um LL23 in einem und LL24 in einem anderen Projekt.

Nikolaus Kern