DataItemTable

6. September 2006 13:50

DataItemTable = Ganzzahl.

Wo finde ich weitere Tabellen die ich als DatItemTable verwenden kann, und wo ist beschrieben, für was ich die nutzen kann.

z.B. DataItem Item , dadrunter Zwei DataItems Ganzzahl(eingerückt)

Warum so? und nicht richtige DataItems. (In diesem Fall SalesPrices und SalesLineDiscs)

Was sagt mir folgendes DataItemTableView : SORTING(Nummer) WHERE(Nummer=FILTER(1..))

Hoffe , es weiß jemand was ich meine :)
Danke

6. September 2006 15:46

Ein DataItem vom Typ Integer wird verwendet, wenn der Report auf einer Section eine Anzahl Iterationen durchlaufen soll. Die maximal Anzahl Durchläufe entspricht dem maximalen Wert einer Integer-Variable. Deshalb der Filter WHERE(Nummer=FILTER(1..). Dieses DAtaItem wird also nur einmal durchlaufen.

Integer ist eine virtuelle Tabelle. Es gibt auch noch eine solche Tabelle mit Namen 'Date' für Datumsoperationen. Diese Tabelle findet z.B. auch Verwendung in Trendscape-Ansichten

6. September 2006 22:09

Nicht ganz perfekt beantwortet.
Der Filter WHERE(Nummer=FILTER(1..)) dient dazu, dass das DataItem Ganzzahl erst ab der Nummer 1 anfängt zu zählen, so dass man damit wunderbar ARRAY-Elemente addressieren kann.
Würde dieser Filter so nicht angegeben werden, so würde das Ganzzahl-DataItem nämlich beim ersten Element (irgendwas mit -2,1 Millarden) anfangen.
Da der oben genannte Filter kein definiertes Ende hat, würde es bis zum Maximum von (irgenwas mit) 2,1 Milliarden laufen, daher sieht man mit absoluter Sicherheit irgendwo einen CurrReport.BREAK;.

Was du meintest war der Filter WHERE(Nummer=CONST(1)) bzw. WHERE(Nummer=FILTER(1))

Gerne sieht man auch mal das C/AL-Pendant in Form von SETRANGE(Nummer,1,MyTempTable.COUNT;.
Hier ist dann das definierte Ende mit der Anzahl Datensätze der Tabelle MyTempTable angegeben, so dass das DataItem exakt so oft durchlaufen wird, wie Datensätze in der Tabelle MyTempTable existieren.

Es gibt drei hauptsächliche Einsatzzwecke für das Ganzzahl-DataItem:
  1. Ein notwendiges Mittel, um temporär definierte Record-Variablen in einem Report ausgeben zu können
  2. Ein Trick, um ein altbekanntes Problem mit dem PageHeader zu lösen, wenn jeder Datensatz mit einer neuen Seite starten soll (z. B. Report 206 & Co.)
    Leider druckt Navision erstmal die Header-Section aus, um anschließend festzustellen, dass der letzte Datensatz bereits durchlaufen wurde.
  3. Ein Trick, um ein altbekanntes Problem bei der Platz-Reservierung für eine unterdrückte Section zu lösen.
    Ein CurrReport.SHOWOUTPUT := FALSE; reserviert leider trotzdem ein klein wenig Platz, obwohl die Section gar nicht ausgegeben werden soll.
    Hat man sehr sehr viele Sections, wo jeweils nur eine bestimmte angedruckt wird, so würde der Seitenumbruch viel zu früh erfolgen.
    Packt man diese Section in ein (untergeordnetes) Ganzzahl-DataItem, welches nur ein einziges Mal durchlaufen wird, so kann man die Ausgabe der Section auch per CurrReport.SKIP; bzw. CurrReport.BREAK; unterdrücken, ohne dass dabei Platz auf dem Papier reserviert wird.

Ist zwar jetzt ein halber Roman geworden, aber ich hoffe, hiermit ein wenig Licht in das Dunkel gebracht zu haben.

7. September 2006 09:44

zu 3:
Das Probem mit der fehlerhaften Platzreservierung bei unterdrückten Sections schient zumindest ab 4.0 SP 1 jetzt behoben zu sein. Wegen einem anderen altbekannten Problem ( falsche Summen im Übertrag ) hatte ein Kollege die Auftrags/Rechungsbelege umgebaut und die DataItems als normale Tabelle verwendet. Das Probem , dass der Zeilenumbruch zu früh erfolgt , ist trotzdem nicht mehr aufgetaucht.