Ekran selekcji - różna ilość Parameter
-
- Posty: 170
- Rejestracja: czw kwie 23, 2009 9:22 am
- Has thanked: 13 times
- Been thanked: 12 times
Ekran selekcji - różna ilość Parameter
W jaki sposób można zrobić różną ilość PARAMETER na ekranie selekcji na podstawie tabeli wewnętrznej ?
Czyli tabela np. ma 20 rekordów i na ekranie selekcji wyświetla się 20 parametrów np. P_01, P_02, P_03, ...
Czyli tabela np. ma 20 rekordów i na ekranie selekcji wyświetla się 20 parametrów np. P_01, P_02, P_03, ...
-
- Posty: 8356
- Rejestracja: wt kwie 03, 2007 4:05 pm
- Has thanked: 1924 times
- Been thanked: 1477 times
- Kontakt:
Re: Ekran selekcji - różna ilość Parameter
Jeśli jesteś w stanie określić maksymalną liczbę tych parametrów to zdefiniuj ich tyle na ekranie selekcji. Następnie w zdarzeniu AT SELECTION-SCREEN OUTPUT możesz część z nich ukryć przy pomocy LOOP AT SCREEN i MODIFY SCREEN.
-
- Posty: 8356
- Rejestracja: wt kwie 03, 2007 4:05 pm
- Has thanked: 1924 times
- Been thanked: 1477 times
- Kontakt:
Re: Ekran selekcji - różna ilość Parameter
Czy mógłbyś rozwinąć ten pomysł? Przyznam, że nie go nie zrozumiałem, a brzmi ciekawie.
-
- Posty: 170
- Rejestracja: czw kwie 23, 2009 9:22 am
- Has thanked: 13 times
- Been thanked: 12 times
Re: Ekran selekcji - różna ilość Parameter
Zrobiłem rozwiązanie, które zaproponował Dominik, ale niestety mimo ustawienia SCREEN-ACTIVE na 0 parametry się wyświetlają (INVISIBLE ustawia się na 0, INPUT oraz OUTPUT również mają wartość 0)
-
- Posty: 8356
- Rejestracja: wt kwie 03, 2007 4:05 pm
- Has thanked: 1924 times
- Been thanked: 1477 times
- Kontakt:
-
- Posty: 1061
- Rejestracja: pt mar 14, 2008 12:51 pm
- Has thanked: 71 times
- Been thanked: 315 times
Re: Ekran selekcji - różna ilość Parameter
Celowo napisałem 3x żeby raczej w ostateczności, na moich pierwszych projektach deweloperskich jeszcze w 2005 roku dostałem za zadanie mapowania struktury drzewiastej IDoca na płaskie tabele (kokpit faktur przychodzących) i tak sobie wówczas radziłem gdy nie ogarniałem jeszcze za bardzo assign field symboli ze zmiennymi itp Można zrobić to tak:dominik.tylczynski pisze: ↑czw maja 19, 2022 10:36 amCzy mógłbyś rozwinąć ten pomysł? Przyznam, że nie go nie zrozumiałem, a brzmi ciekawie.
https://answers.sap.com/questions/56305 ... ation.html
Kod: Zaznacz cały
Report z_dynamic.
data: begin of itab occurs 0,
line(150),
end of itab.
data: v_name like sy-repid.
parameters: p_table like dd02l-tabname.
itab-line = 'Report sy-repid.'.
append itab. clear itab.
itab-line = 'tables:'.
append itab. clear itab.
concatenate p_table '.' into itab.
itab-line = 'data: begin of itab occurs 0.'.
append itab. clear itab.
concatenate 'include structure' p_table '.' into itab separated by space.
itab-line = 'data:end of itab.'.
append itab. clear itab.
itab-line = 'form f_select.'.
append itab. clear itab.
itab-line = 'select * into table itab'.
append itab. clear itab.
concatenate 'FROM' p_table '.' INTO itab separated by space.
itab-line = 'endform.'.
append itab. clear itab.
generate subroutine pool itab name v_name.
perform f_select in program (v_name).
-
- Posty: 170
- Rejestracja: czw kwie 23, 2009 9:22 am
- Has thanked: 13 times
- Been thanked: 12 times
Re: Ekran selekcji - różna ilość Parameter
W linii 5 sprawdzam ilość rekordów (parametrów do wyświetlenia) i jeżeli jest większa to ustawiam w 21 linii screen-active = 0
Linie od 7 do 17 już były wcześniej. Jak debugguje to wygląda że zmienne ekranu są modyfikowane.
1 LOOP AT SCREEN.
2 IF screen-name CS 'P_0_WY'.
3
4 lv_index = lv_index + 1.
5 IF lv_index <= go_data->gv_po_items.
6
7 lv_nazwa_pola = 'P_0_NA' && screen-name+6(2).
8 ASSIGN (lv_nazwa_pola) TO <fs_field>.
9 IF <fs_field> IS INITIAL.
10 screen-input = c_no .
11 screen-output = c_yes .
12 MODIFY SCREEN.
13 ELSE.
14 screen-input = c_yes .
15 screen-output = c_yes .
16 MODIFY SCREEN.
17 ENDIF.
18
19 ELSE.
20 lv_nazwa_pola = 'P_0_WY' && screen-name+6(2).
21 screen-active = c_no.
22 MODIFY SCREEN.
23 ENDIF.
24
25 ENDIF.
26 ENDLOOP.
Linie od 7 do 17 już były wcześniej. Jak debugguje to wygląda że zmienne ekranu są modyfikowane.
1 LOOP AT SCREEN.
2 IF screen-name CS 'P_0_WY'.
3
4 lv_index = lv_index + 1.
5 IF lv_index <= go_data->gv_po_items.
6
7 lv_nazwa_pola = 'P_0_NA' && screen-name+6(2).
8 ASSIGN (lv_nazwa_pola) TO <fs_field>.
9 IF <fs_field> IS INITIAL.
10 screen-input = c_no .
11 screen-output = c_yes .
12 MODIFY SCREEN.
13 ELSE.
14 screen-input = c_yes .
15 screen-output = c_yes .
16 MODIFY SCREEN.
17 ENDIF.
18
19 ELSE.
20 lv_nazwa_pola = 'P_0_WY' && screen-name+6(2).
21 screen-active = c_no.
22 MODIFY SCREEN.
23 ENDIF.
24
25 ENDIF.
26 ENDLOOP.
-
- Posty: 170
- Rejestracja: czw kwie 23, 2009 9:22 am
- Has thanked: 13 times
- Been thanked: 12 times
Re: Ekran selekcji - różna ilość Parameter
Już wiem w czym tkwi problem, mam dla każdego PARAMETER ustawioną linię i przez to pole jest widoczne.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 1(31) lv_sp06a.
PARAMETERS p_0_na06 TYPE names MODIF ID dis.
SELECTION-SCREEN: COMMENT 79(8) lv_sp06b.
PARAMETERS p_0_wy06 TYPE c AS CHECKBOX USER-COMMAND poz.
SELECTION-SCREEN: END OF LINE.
Linii pewnie nie mogę ukryć ?
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 1(31) lv_sp06a.
PARAMETERS p_0_na06 TYPE names MODIF ID dis.
SELECTION-SCREEN: COMMENT 79(8) lv_sp06b.
PARAMETERS p_0_wy06 TYPE c AS CHECKBOX USER-COMMAND poz.
SELECTION-SCREEN: END OF LINE.
Linii pewnie nie mogę ukryć ?
-
- Posty: 170
- Rejestracja: czw kwie 23, 2009 9:22 am
- Has thanked: 13 times
- Been thanked: 12 times
Re: Ekran selekcji - różna ilość Parameter
Tak, tak ustawiam tylko ACTIVE = 0
Parametry udało się ukryć, ale ekran i tak pozostaje tak duży jak przy wszystkich parametrach, więc niestety nie osiągnąłem tego co chciałem
Parametry udało się ukryć, ale ekran i tak pozostaje tak duży jak przy wszystkich parametrach, więc niestety nie osiągnąłem tego co chciałem
-
- Posty: 8356
- Rejestracja: wt kwie 03, 2007 4:05 pm
- Has thanked: 1924 times
- Been thanked: 1477 times
- Kontakt:
Re: Ekran selekcji - różna ilość Parameter
Ciekawe, u mnie nie zostaje puste miejsce po ukrytych parametrach. Mam taki testowy kod:
Ekran selekcji z wyłączoną linią MODIFY SCREEN:
Ekran selekcji z włączoną linią MODIFY SCREEN:
Sprawdzałem też dla zwykłych parametrów, nie typu CHECKBOX.
Kod: Zaznacz cały
REPORT ztest.
PARAMETERS:
p_00 as CHECKBOX,
p_01 as CHECKBOX,
p_02 as CHECKBOX,
p_03 AS CHECKBOX,
p_04 AS CHECKBOX.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-name CS 'P_01' OR
screen-name CS 'P_03'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
Ekran selekcji z włączoną linią MODIFY SCREEN:
Sprawdzałem też dla zwykłych parametrów, nie typu CHECKBOX.
-
- Posty: 170
- Rejestracja: czw kwie 23, 2009 9:22 am
- Has thanked: 13 times
- Been thanked: 12 times
Re: Ekran selekcji - różna ilość Parameter
W najprostszej wersji może działa, ale w takiej już nie.
Kod: Zaznacz cały
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 1(31) FOR FIELD p_00.
PARAMETERS p_00 AS CHECKBOX.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 1(31) FOR FIELD p_01.
PARAMETERS p_01 AS CHECKBOX.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 1(31) FOR FIELD p_02.
PARAMETERS p_02 AS CHECKBOX.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 1(31) FOR FIELD p_03.
PARAMETERS p_03 AS CHECKBOX.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 1(31) FOR FIELD p_04.
PARAMETERS p_04 AS CHECKBOX.
SELECTION-SCREEN: END OF LINE.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-name CS 'P_01' OR
screen-name CS 'P_03'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
-
- Posty: 8356
- Rejestracja: wt kwie 03, 2007 4:05 pm
- Has thanked: 1924 times
- Been thanked: 1477 times
- Kontakt:
Re: Ekran selekcji - różna ilość Parameter
Proszę
Ekran selekcji z ukrytymi parametrami P_01 i P_02:
Kod: Zaznacz cały
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 1(31) FOR FIELD p_00 MODIF ID p00.
PARAMETERS p_00 AS CHECKBOX MODIF ID p00.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 1(31) FOR FIELD p_01 MODIF ID p01.
PARAMETERS p_01 AS CHECKBOX MODIF ID p01.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 1(31) FOR FIELD p_02 MODIF ID p02.
PARAMETERS p_02 AS CHECKBOX MODIF ID p02.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 1(31) FOR FIELD p_03 MODIF ID p03.
PARAMETERS p_03 AS CHECKBOX MODIF ID p03.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 1(31) FOR FIELD p_04 MODIF ID p04.
PARAMETERS p_04 AS CHECKBOX MODIF ID p04.
SELECTION-SCREEN: END OF LINE.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-group1 = 'P01' OR
screen-group1 = 'P03'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.