Wyświetlanie w ALV - długi tekst

Jeśli programujesz, administrujesz, integrujesz i masz wątpliwość lub obawę, to właśnie najlepsze miejsce dla Ciebie. Pisz śmiało...
ODPOWIEDZ
Grzegorz Kondracki
Posty: 6
Rejestracja: czw paź 25, 2007 7:37 am
Lokalizacja: Wroc?aw

Wyświetlanie w ALV - długi tekst

Post autor: Grzegorz Kondracki »

Przede wszystkim witam i pozdrawiam wszystkich.
Ma problem z listą ALV, a właściwie z zadeklarowaniem zmiennej, która pozwoli wyświetlić na liście ALV ciąg znaków (około 2000 znaków opisu). Czytam sobie bowiem opisy środków trwałych i usiłuję je wyświetlić na ekran razem z numerem inwentarzowym, numerem środka itp. Wszystko działa ładnie ale do momentu jak nie skończy się miejsce w zmiennej. Zadeklarowałem do opisu zmienną C. Niestety nie mogę w tablicy wewnętrznej zadeklarować jednego pola jako zmiennej string. Czy ktoś zna sposób na to jak wyświetlić na ALV 2000 znaków w jednym polu ?

pozdrawiam Grzegorz
Grzegorz
yacol
Posty: 561
Rejestracja: śr kwie 04, 2007 4:32 pm
Lokalizacja: Poznań
Has thanked: 9 times
Been thanked: 165 times
Kontakt:

Post autor: yacol »

Ciekawe czy znajdziesz użytkownika, który będzie chętnie czytał prawie 2 KB tekstu ;)

Pozdrawiam,

Jacek Witczak
Grzegorz Kondracki
Posty: 6
Rejestracja: czw paź 25, 2007 7:37 am
Lokalizacja: Wroc?aw

Post autor: Grzegorz Kondracki »

Jak go wpisał to niech teraz czyta :) Ja tam mu nie kazałem Pana Tadeusza przepisywać. Ale dość, że się uparł to jeszcze chce mieć to wyświetlone.
Grzegorz
dominik.tylczynski
Posty: 8356
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1924 times
Been thanked: 1478 times
Kontakt:

Post autor: dominik.tylczynski »

IMHO, jest praktycznie nie możliwe wyświetlenie długiego tekstu w jednym polu listy ALV przynajmniej z dwóch powodów:
  1. Długi tekst ma przynajmniej teoretycznie nieograniczoną długość. Zatem zawsze może się zdarzyć tak, że zadeklarowane pole będzie za krótkie do wyświetlenia tekstu.
  2. Długi tekst zawiera pewną strukturę np. podział na paragrafy. Kiedy wrzucisz taki tekst w jedno pole stracisz tę strukturę.
Poza tym czytanie długiego tekstu w jednym polu jest skrajnie niewygodne.

Moim zdaniem masz dwie możliwości:
  1. Dla pozycji listy ALV z długim tekstem wyświetlić ikonę informującą, że taki tekst istnieje i wyświetlać długi tekst po kliknięciu w tę ikonę. Tekst możesz wyświetlić w oknie dialogowym np. przy pomocy kontrolki SAP Textedit: http://help.sap.com/saphelp_nw04/helpda ... ameset.htm.
  2. Zastosować hierarchiczną listę ALV - pozycji nadrzędnej wyświetlać wszystkie pola oprócz długiego tekstów, a w pozycjach podrzędnych wyświetlać linie długiego tekstu.
HTH
Dominik Tylczyński, ICG
Grzegorz Kondracki
Posty: 6
Rejestracja: czw paź 25, 2007 7:37 am
Lokalizacja: Wroc?aw

Post autor: Grzegorz Kondracki »

Dzięki za pomoc. Z ikonką to raczej nie bo ten raport ma za zadanie między innymi eksport tych danych do innego programu wykonywać. Ale zrobię po prostu dwie opcje do podglądu hierarchiczną ALV i do eksportu nie będę wyświetlał tylko od razu do pliku tekstowego. Tylko jeżeli chodzi o hierarchiczną ALV to gdzie można jakiś przykład jak to się robi znaleźć ? To jest mój pierwszy program jaki piszę i nie bardzo wiem skąd czerpać wiedzę o szczegółach.
pozdrawiam
Grzegorz
dominik.tylczynski
Posty: 8356
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1924 times
Been thanked: 1478 times
Kontakt:

Post autor: dominik.tylczynski »

Do wyświetlania list hierarchicznych służy funkcja REUSE_ALV_HIERSEQ_LIST_DISPLAY. Dokumentacja jest dostępna po zalogowaniu w j. angielskim. Zasadniczo ta funkcja działa analogicznie do funkcji REUSE_ALV_LIST_DISPLAY, która wyświetla listę płaską. Istotne różnice to:
  1. W parametrze IS_LAYOUT podajesz informacje o polach zarówno dla pozycji nadrzędnych jak i podrzędnych listy hierarchicznej
  2. Zamiast jednej tablicy z danymi podajesz dwie w parametrach T_OUTTAB_HEADER i T_OUTTAB_ITEM odpowiednio dla pozycji nadrzędnych i podrzędnych listy
  3. W parametrze IS_KEYINFO podajesz nazwy pól, które łączą rekordy z tablic podanych w parametrach T_OUTTAB_HEADER i T_OUTTAB_ITEM
  4. W parametrze IS_LAYOUT-EXPAND_FIELDNAME podajesz nazwę pola z tablicy dla pozycji nadrzędnych, które przechowuje informację o rozwinięciu/zwinięciu pozycji podrzędnych
Przykłady zastosowania listy hierarchicznej ALV znajdziesz w programach:
  • BALVBT02
  • BALVHD01
  • BCALV_TEST_HIERSEQ_LIST
HTH
Dominik Tylczyński, ICG
Grzegorz Kondracki
Posty: 6
Rejestracja: czw paź 25, 2007 7:37 am
Lokalizacja: Wroc?aw

Post autor: Grzegorz Kondracki »

Bardzo dziękuję. Ruszam do pracy :)

pozdrawiam Grzegorz
Grzegorz
arecki
Posty: 320
Rejestracja: wt sie 28, 2007 11:27 am
Has thanked: 3 times

Post autor: arecki »

witam,
podepnę się do tematu z trochę powiązanym tematem a mianowicie czy można zrobić w raporcie opis kolumny w 2-ch linniach jesli wykorzystuję REUSE_ALV_GRID_DISPLAY ? Potrzebuję dla części kolumn mieć bardziej wyczerpujace opisy a kolumn jest sporo więc nie mogę zrobić ich zbyt szerokich przez co opis w jednej linni mi się nie mieści i jest widoczny tylko po najechaniu kursorem :?
z góry dziękuję za podpowiedzi.
yacol
Posty: 561
Rejestracja: śr kwie 04, 2007 4:32 pm
Lokalizacja: Poznań
Has thanked: 9 times
Been thanked: 165 times
Kontakt:

Post autor: yacol »

Jeśli dobrze zrozumiałem Twoje pytanie - chcesz aby w opisie kolumny ALV można było zrobić coś takiego:

TO JEST BARDZO DŁUGI
OPIS MOJEGO MATERIAŁU

i ma to być traktowane jako opis pojedynczej kolumny (czyli jedna linia ale "złamana" na dwie).

AFAIK to nie ma takiej opcji w ALV.

Pozdrawiam,

Jacek Witczak
dominik.tylczynski
Posty: 8356
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1924 times
Been thanked: 1478 times
Kontakt:

Post autor: dominik.tylczynski »

Robiłem kiedyś podobną manipulację nagłówkami tekstowej, nie GRID listy ALV. W moim przypadku chodziło o uzyskanie jednego nagłówka dla kilku kolumn. Wykorzystałem wtedy obsługę zdarzenia TOP_OF_PAGE.
Spójrz na dokumentację do funkcji REUSE_ALV_GRID_DISPLAY, parametr I_CALLBACK_TOP_OF_PAGE:
If the caller specifies an EXIT routine, this routine must have the
following form:

FORM top_of_page.



Module REUSE_ALV_COMMENTARY_WRITE can then be called within the EXIT
routine. This module is responsible for formatting the header
information and also ensures online HTML formatting. In the print
preview or in batch mode, the text passed is then output in the normal
format.
Natomiast w dokumentacji funkcji REUSE_ALV_COMMENTARY_WRITE jest napisane:
Short Text

List body comment block output

Functionality

List header information is output according to its type. The output
information is put in an internal table. Output attributes are assigned
to each line via the TYP field.

This module outputs formatted simple header information at TOP-OF-PAGE.
Myślę, że obsługując zdarzenie TOP-OF-PAGE przy pomocy własnej procedury wzorowanej na funkcji REUSE_ALV_COMMENTARY_WRITE dałoby się osiągnąć oczekiwany przez Ciebie efekt.

Spójrz też na notę: 420643 - ALV header: Consultancy note regarding headers

Pozdrawiam
Dominik Tylczyński, ICG
Przemol
Posty: 78
Rejestracja: wt mar 25, 2008 12:25 pm
Has thanked: 13 times
Been thanked: 3 times

Post autor: Przemol »

Taki szybki przykład:

Kod: Zaznacz cały

REPORT z_test.

TYPE-POOLS slis .

DATA : BEGIN OF gi_tab OCCURS 0,
            pgmid    LIKE tadir-pgmid,
            object   LIKE tadir-object,
            obj_name LIKE tadir-obj_name,
        END OF gi_tab.



DATA : g_repid     TYPE sy-repid,
       it_fieldcat TYPE slis_t_fieldcat_alv,
       wa_fieldcat TYPE slis_fieldcat_alv,
       it_events   TYPE slis_t_event,
       wa_events   TYPE slis_alv_event,
       wa_layout   TYPE slis_layout_alv.


*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> INITIALIZATION
INITIALIZATION.
  g_repid = sy-repid.


*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> START-OF-SELECTION
START-OF-SELECTION.


* dane dla ALV-ki
  SELECT * INTO CORRESPONDING FIELDS OF TABLE gi_tab FROM tadir
      UP TO 20 ROWS.


* katalog pól
  CLEAR wa_fieldcat.
  wa_fieldcat-fieldname     = 'PGMID'.
  wa_fieldcat-ref_tabname   = 'TADIR'.
  APPEND wa_fieldcat TO it_fieldcat.

  CLEAR wa_fieldcat.
  wa_fieldcat-fieldname     = 'OBJECT'.
  wa_fieldcat-ref_tabname   = 'TADIR'.
  APPEND wa_fieldcat TO it_fieldcat.

  CLEAR wa_fieldcat.
  wa_fieldcat-fieldname     = 'OBJ_NAME'.
  wa_fieldcat-ref_tabname   = 'TADIR' .
  APPEND wa_fieldcat TO it_fieldcat.


* zdarzenia dla ALV-ki
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
       IMPORTING
            et_events = it_events.

* TOP_OF_PAGE
  READ TABLE it_events INTO wa_events
                       WITH KEY name = slis_ev_top_of_page .
  wa_events-form = slis_ev_top_of_page .

* ukrycie standardowego nagłówka ALV-ki
  MODIFY it_events FROM wa_events INDEX sy-tabix .
  wa_layout-no_colhead = 'X' .


* drukuj ALV-kę
  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
       EXPORTING
            i_callback_program = g_repid
            it_fieldcat        = it_fieldcat
            is_layout          = wa_layout
            it_events          = it_events
       TABLES
            t_outtab           = gi_tab.


*własny nagłówek listy ;)
****************************************************
FORM top_of_page.
****************************************************
  ULINE AT 1(52).

  FORMAT COLOR 1 INTENSIFIED ON.
  WRITE: / sy-vline ,
          02 'AAA' ,
          06 sy-vline ,
          07 'BBB' ,
          11 sy-vline ,
          28 'CCC' ,
          52 sy-vline.

  FORMAT COLOR 1 INTENSIFIED OFF.
  WRITE: / sy-vline ,
          02 'aaa' ,
          06 sy-vline ,
          07 'bbb' ,
          11 sy-vline ,
          28 'ccc' ,
          52 sy-vline .

ENDFORM.
ODPOWIEDZ