PDA

View Full Version : Struct in List&Label



Ralf
1-Apr-2016, 02:56 PM
Hallo ,

Ich benutze DF18.1 + LL20

ich versuche gerade das Beispiel in der "combit List & LabelLibrary for (Visual) DataFlex V20.0" Seite 11-12 um zu setzen.
ich habe soweit alle Element 1zu1 aus dem Dokument übernommen und das Struct gefüllt.
Der Berichtskontainer in LL läst sich mit "freier Inhalt" erstellen. Auch die Felder werden erkannt. Nur in LL werden dann keine Daten gezeigt.

Habe ich evtl. den letzten Satz nicht richtig verstanden?
"Now you can fill data into a variable based on tShippingAddress and simply set the property paShippingAddress to the variable."

geht das evtl. auch im VRW?

Ralf

GhostShotIV
4-Apr-2016, 08:01 AM
Hallo Ralf,

ich denke, die Option mit dem Struct ist nur dafür gedacht, um zusätzliche Informationen zu einem normalen Datensatz zur Verfügung zu haben, oder wenn Datensätze komplett von einem selbst in L&L ausgegeben werden (mit PrintData).

Wir verwenden meistens, wenn wir keine richtigen Tabellen verwenden (können) die virtuellen DDs.
Dafür erzeugen wir in der DefineAllFields ein LLDo, fügen diesem die gewünschten Felder hinzu und füllen die Daten dann in der OnStartTable.


Procedure DefineAllFields
Handle hoDo
Boolean bRet
Forward Send DefineAllFields
Get CreateLLDo "Tabelle" to hoDo
Get AddField of hoDo "NummernFeld" LL_NUMERIC to bRet
Get AddField of hoDo "TextFeld" LL_TEXT to bRet
End_Procedure

Procedure OnStartTable Integer hoDDo Integer hoParentDdo Integer iTableLevel String sRelation
Variant[][] vaData

Move 1 to vaData[0][0]//NummernFeld
Move "Toller Text" to vaData[0][1]//TextFeld

...

Send SetLLDoData hoDDo vaData
End_Procedure

Im Report selbst verwenden wir dann die "Tabelle" (oder wie auch immer man sie genannt hatte), anstelle von "freier Inhalt".

DataFlex Reports hat auch ein ähnliches Konzept, dass sich Runtime DataSource nennt und ähnlich verwendet wird.
Allerdings gibt man in diesem Fall die Tabellen und Spalten bereits im Report an und diese werden dann vom "Integration Wizard" bereits zum Füllen in die "AddRDSData" Routine des Report Objektes eingefügt

// Note: The Runtime DataSource row will be rejected if:
// 1: The number of elements in the 2nd dimension does not match with the row layout
// 2: The data-type of any element in the 2nd dimension does not match, cannot be
// converted to the data-type defined in the row layout. For example: A zero date
//
Function AddRDSData String sTableName Integer iSibling Integer iLevel Returns Variant[][]
Variant[][] vData
Integer iRow
String sArt sSKUser
Number nWert

Move 0 to iRow

Case Begin
Case (iSibling = -1 and iLevel = 0 and sTableName = "Tabelle")
// ToDo: Modify the sample code to fill the RDS array for the table Tabelle
// The first dimension identifies the row, the second dimension identifies the column.
// Repeat
// Move Number to vData[iRow][0] // Name: NummernFeld, Length: 4, Datatype: Number
// Move String to vData[iRow][1] // Name: TextFeld, Length: 100, Datatype: String
// Increment iRow
// Loop
Case Break
Case End

Function_Return vData
End_Function

Bernhard Ponemayr
4-Apr-2016, 01:29 PM
Hallo Ralf

Die Möglichkeit Daten per Strukturen zu übergeben ist tatsächlich bereits veraltet. Diese Art der Datenübertragung kann/konnte eigentlich nur verwendet werden wenn man die komplette Druckschleife selbst ausprogrammiert hat. Jedoch sind mit dem Einsatz des Berichtscontainers und der ganzen Möglichkeiten die sich daraus ergeben die Anforderungen an die Druckschleife so komplex geworden dass es viel einfacher ist die fertige mitgelieferte Druckschleife zu verwenden.

Wie bereits GhostShot erwähnt hat bieten die DataObjects eine simple und effektive Möglichkeit "virtuelle Tabellen" (also Tabellen die nicht über ein DataDictionary angesprochen werden können) für List & Label zur Verfügung zu stellen. Das in dem Posting gezeigte Beispiel sollte wie gewünscht funktionieren.

HTH
Bernhard

Ralf
5-Apr-2016, 03:52 AM
Besten Dank funktioniert bestens...

Ralf