Ekran selekcji - różna ilość Parameter

Jeśli programujesz, administrujesz, integrujesz i masz wątpliwość lub obawę, to właśnie najlepsze miejsce dla Ciebie. Pisz śmiało...
arnonim
Posty: 170
Rejestracja: czw kwie 23, 2009 9:22 am
Has thanked: 13 times
Been thanked: 12 times

Ekran selekcji - różna ilość Parameter

Post autor: arnonim »

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, ...
dominik.tylczynski
Posty: 8326
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1915 times
Been thanked: 1474 times
Kontakt:

Re: Ekran selekcji - różna ilość Parameter

Post autor: dominik.tylczynski »

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.
wojtas7
Posty: 1058
Rejestracja: pt mar 14, 2008 12:51 pm
Has thanked: 71 times
Been thanked: 313 times

Re: Ekran selekcji - różna ilość Parameter

Post autor: wojtas7 »

w ostateczności ostateczności ostateczności (celowo 3x) można wpisać kod w tabelę wewnętrzną i go odpalić.
dominik.tylczynski
Posty: 8326
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1915 times
Been thanked: 1474 times
Kontakt:

Re: Ekran selekcji - różna ilość Parameter

Post autor: dominik.tylczynski »

wojtas7 pisze: śr maja 18, 2022 9:26 pm w ostateczności ostateczności ostateczności (celowo 3x) można wpisać kod w tabelę wewnętrzną i go odpalić.
Czy mógłbyś rozwinąć ten pomysł? Przyznam, że nie go nie zrozumiałem, a brzmi ciekawie.
arnonim
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

Post autor: arnonim »

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)
dominik.tylczynski
Posty: 8326
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1915 times
Been thanked: 1474 times
Kontakt:

Re: Ekran selekcji - różna ilość Parameter

Post autor: dominik.tylczynski »

Pokaż proszę swój kod.
wojtas7
Posty: 1058
Rejestracja: pt mar 14, 2008 12:51 pm
Has thanked: 71 times
Been thanked: 313 times

Re: Ekran selekcji - różna ilość Parameter

Post autor: wojtas7 »

dominik.tylczynski pisze: czw maja 19, 2022 10:36 am
wojtas7 pisze: śr maja 18, 2022 9:26 pm w ostateczności ostateczności ostateczności (celowo 3x) można wpisać kod w tabelę wewnętrzną i go odpalić.
Czy mógłbyś rozwinąć ten pomysł? Przyznam, że nie go nie zrozumiałem, a brzmi ciekawie.
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:

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).
tylko ręki sobie nie dam uciąć że to się sprawdzi w przypadku dynamicznego ekranu selekcji (wszakże jak się aktywuje to generuje dynpro 1000). Pamiętam że nawet dało się taki kod jakoś debugować. No ale utrzymanie tego w przyszłości - lipa ;-)
arnonim
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

Post autor: arnonim »

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.
arnonim
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

Post autor: arnonim »

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ć ?
wojtas7
Posty: 1058
Rejestracja: pt mar 14, 2008 12:51 pm
Has thanked: 71 times
Been thanked: 313 times

Re: Ekran selekcji - różna ilość Parameter

Post autor: wojtas7 »

A ustawiaj tylko samo ACTIVE=0, bo

Ex: Setting ACTIVE to 0 automatically sets INPUT = 0, OUTPUT = 0, and INVISIBLE = 1.
arnonim
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

Post autor: arnonim »

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 :)
dominik.tylczynski
Posty: 8326
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1915 times
Been thanked: 1474 times
Kontakt:

Re: Ekran selekcji - różna ilość Parameter

Post autor: dominik.tylczynski »

Ciekawe, u mnie nie zostaje puste miejsce po ukrytych parametrach. Mam taki testowy kod:

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 wyłączoną linią MODIFY SCREEN:
20220519_1555.png
20220519_1555.png (1.59 KiB) Przejrzano 292 razy


Ekran selekcji z włączoną linią MODIFY SCREEN:
20220519_1556.png
20220519_1556.png (1.25 KiB) Przejrzano 292 razy

Sprawdzałem też dla zwykłych parametrów, nie typu CHECKBOX.
arnonim
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

Post autor: arnonim »

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.
  
Zrzut ekranu 2022-05-20 104958.jpg
Zrzut ekranu 2022-05-20 104958.jpg (9.22 KiB) Przejrzano 286 razy
dominik.tylczynski
Posty: 8326
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1915 times
Been thanked: 1474 times
Kontakt:

Re: Ekran selekcji - różna ilość Parameter

Post autor: dominik.tylczynski »

Proszę

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.
Ekran selekcji z ukrytymi parametrami P_01 i P_02:
20220520_1572.png
20220520_1572.png (1.36 KiB) Przejrzano 284 razy
arnonim
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

Post autor: arnonim »

No to ciekawe :D czym to jest spowodowane.
ODPOWIEDZ