Temat: Wyświetlanie nagłówków w temp-table
Sprawa wygląda tak:
Ponieważ nie masz nie masz zdfiniownej jaie formatki do prezentowania danych.
W pierwszym przykładzie używasz jednego bloku przetwarzania i system tworzy jedną domyślną formatkę dla tego bloku i wszystko jest OK. Nagłówek pojawia się na każdej stronie. Nie wiem jak ustawioną nasz wielkość strony (liczbę wierszy) ale domyślnie jest chyba 24 wiersze. Jeśli gdzieś wcześniej ustawiłeś 0 to pojawi się tylko raz.
W drugim przykładzie masz dwa bloki wzajemnie zagnieżdżone i system domyślnie tworzyć bedzie oddzielne formatki dla tych obu bloków.
Zatem:
1. Dla pierwszej instrukcji display utworzy formatkę dla pierwszej tablicy i wyświetli przy tym nagłówek (bo jest to pierwszy wiersz w formatce)
2. Po wyświetleniu pierwszego wiersza wchodzi do drugiego bloku gdzie tworzy nową formatkę dla drugiej tablicy - oczywiście wyświetli nagłówek a jednocześnie zamyka poprzednią formatkę. Po wyświetleniu wszystkich rekordów zależnych kończy pracę tego bloku i tym samym zamyka formatkę drugą.
3. Wraca do pętli głównej i ponieważ nie ma tam już pierwszej formatki to utworzy ją od nowa i oczywiście ponownie wyświetli nagłówek - bo bedzie to pierwszy wiersz w nowej formatce.
Aby tego uniknąć można robić to na dwa sposoby:
1. prostszy i prymitywniejszy to wykorzystać jedną pętlę:
for each tbl1 no-lock, each tbl2 no-lock where tbl2.tbl2_1 = tbl1.tbl1_2:
display tbl1_1
tbl1_2
tbl2_1
tbl2_2.
end.
2. Bardziej rozwinięta forma to:
for each tbl1 no-lock, each tbl2 no-lock where tbl2.tbl2_1 = tbl1.tbl1_2
break by tbl1.tbl1_2:
if first-of(tbl1.tbl1_2) then display tbl1_1
tbl1_2 skip with frame ramka1.
display
tbl2_1
tbl2_2 with frame ramka1.
end.
3. Można zdefiniować ramkę dla obu tabel poprzez instrukcję define frame ramka1 ..... itp. ale jeszcze przed pętlą.
Na szczęście takich instrukcji już się prawie nie wykorzytuje w nowszych wersjach OE z ręki.