MS-Tech
21st September 2016, 17:05
Hallo Zusammen,
ich habe einen Report, auf dem ich zeilenweise Daten ausgebe. Das funktioniert einwandfrei. Jetzt ist es aber so, dass ich zu jeder Zeile noch weitere Detaildaten ausgeben muss, sozusagen eine Liste in einer Liste ausgeben. Wie kann ich das bewerkstelligen? Im Report selber gibt es nur eine Detailsektion. Kann ich das mit ... einem Textfeld lösen? Gibt es denn soetwas??
Beispiel:
Zeile1: 11111111 Test 333333 5555555
Deta1: abce 545454 45454545
Deta2: tz 232323 23232332
Deta3: ert 191919 9090909
Zeile2: 22222222 Testa 888888 9999999
Deta1: 3333 wwww aaaaaaa
Ich hoff das Beispiel ist verständlich?
Viele Grüße
MS-Tech
hklett
21st September 2016, 21:34
Einfach ein neues detail layout einfügen ( z.B. detail 10 )
dann im report script
detail.10:
before.layout:
if not <read.next.from.list> then
lattr.print = false
endif
after.layout:
if <more.to.print> then
layout.again()
endif
MS-Tech
22nd September 2016, 12:16
Hi,
danke für deine Antwort, aber so ganz versteh ich nicht, wie ich das nun in meinen Code einbaue.
Ich hab ein neues Detail (Detail 2) hinzugefügt. Wie gehts dann weiter?
Detail.2:
before.layout:
| Abfrage für die Unterliste, siehe mein Posting
select value
from Unterliste
where Bedingung
selectdo
| Hier können dann mehrere Zeilen geladen werden, aber
| wie mache ich hier dann weiter? soll ich mir hier z.B. ein
| Boolean-Flag speichern, den ich dann im after.report abfrage?
if not <read.next.from.list> then
lattr.print = false
endif
endselect
after.layout:
if <more.to.print> then
layout.again()
endif
Viele Grüße
MS-Tech
hklett
22nd September 2016, 12:34
Der Ansatz wäre hier das ich im Reportscript eine variable definiere in der ich den Schlüssel des zuletzt gelesenen Datensatz speichere und dann im before.layout den nächsten Datensatz auslese und wenn kein weiterer gefunden wird das layout unterdrücke
z.B:
declaration:
long key
detail.1:
after.layout:
key = 0 | Initialisieren des keys im vorherigen layouts
detail.2:
before.layout:
select table.*
from table
where table._index1 > {:key }
order by key as set with 1 rows
selectdo
key = table.key
selectempty
key = 0
lattr.print = false
endselect
after.layout:
if key then
layout.again()
endif
Eventuell ist die Abfrage nach dem key in dem after.layout überhaupt nicht nötig .
after.layout wird glaube ich gar nicht aufgerufen wenn das layout nicht gedruckt wird.
MS-Tech
22nd September 2016, 12:41
Hallo,
danke für die Antwort.
Wenn aber der key kein nummerischer Wert, sondern ein String ist? Kann dann hier trotzdem mit ._index1 > key abgeprüft werden? Bin leider noch neu in der Infor Programmierung.
Aktuell Frage ich die Detaildaten anhand einer Produktionsauftragsnummer ab und diese ist ein String-Wert.
Viele Grüße
MS-Tech
hklett
22nd September 2016, 12:45
Dann einfach long mit der domain des Tabellenfeldes ersetzen
domain domaindesfeldes key
und in der vorigen layout-Section mit einem leeren String intialisieren
key = ""
MS-Tech
22nd September 2016, 13:31
Hi,
habs umgesetzt und etwas erweitert und es schaut sehr gut aus.
Vielen Dank für die Hilfe!
Grüße
MS-Tech