Wieloznacznik - parametr w funkcji

Jeśli programujesz, administrujesz, integrujesz i masz wątpliwość lub obawę, to właśnie najlepsze miejsce dla Ciebie. Pisz śmiało...
ODPOWIEDZ
izabela
Posty: 4
Rejestracja: czw lut 03, 2022 10:08 pm
Has thanked: 3 times

Wieloznacznik - parametr w funkcji

Post autor: izabela »

Potrzebuję aby przy wpisaniu parametru wejściowego modułu funkcji użytkownik uzyskał rezultaty tak jak przy użyciu symbolu wieloznacznego % do zastępowania jednego lub więcej znaków w ciągu.
Np. przy wpsianiu numeru materiału 9280 uzyskał wszystkie materiały z 9280 w numerze.
Jak i czy można użyć wieloznacznika w połączeniu z parametrem materialno w SELECT?

Kod: Zaznacz cały

  SELECT SINGLE matnr mtart 
    FROM mara INTO material_details WHERE matnr = materialno.
ZETKA
Posty: 69
Rejestracja: czw lis 04, 2010 10:49 pm
Has thanked: 1 time
Been thanked: 71 times
Kontakt:

Re: Wieloznacznik - parametr w funkcji

Post autor: ZETKA »

Z pomocą SELECT SINGLE uzyskamy zawsze jeden wynik :wink:

Kod: Zaznacz cały

materialno = |%{ materialno }%|.   " bądź inna alternatywna metoda konkatenacji

SELECT...

	...WHERE matnr LIKE materialno.
Pozdrawiam,
Krzysiek
izabela
Posty: 4
Rejestracja: czw lut 03, 2022 10:08 pm
Has thanked: 3 times

Re: Wieloznacznik - parametr w funkcji

Post autor: izabela »

Zgadza się co do SELECT SINGLE. Aczkolwiek przy tym rozwiązaniu wyskauje błąd:

"MATERIALNO" cannot be converted to a character-like value.
dominik.tylczynski
Posty: 8326
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1915 times
Been thanked: 1474 times
Kontakt:

Re: Wieloznacznik - parametr w funkcji

Post autor: dominik.tylczynski »

Wygląda na to, że parametr wejściowy MATERIALNO Twojej funkcji ma nieprawidłowy typ. Najlepiej zadeklarować go z referencją do elementu danych MATNR.
K602
Posty: 135
Rejestracja: śr sie 24, 2022 11:50 am
Has thanked: 60 times
Been thanked: 86 times
Kontakt:

Re: Wieloznacznik - parametr w funkcji

Post autor: K602 »

Bo zapewne jest numerem... a tu trzeba rzutowania do string/char... np. wspomniany MATNR.
SAP ABAP Certified Developer
ZETKA
Posty: 69
Rejestracja: czw lis 04, 2010 10:49 pm
Has thanked: 1 time
Been thanked: 71 times
Kontakt:

Re: Wieloznacznik - parametr w funkcji

Post autor: ZETKA »

Zapis, który zastosowałem w przykładzie radzi sobie z wartościami numerycznymi.
Pozdrawiam,
Krzysiek
izabela
Posty: 4
Rejestracja: czw lut 03, 2022 10:08 pm
Has thanked: 3 times

Re: Wieloznacznik - parametr w funkcji

Post autor: izabela »

Jak sobie poradzić z wartościamy typu Character String? Parametr wejściowy jest z referencją do elementu danych MATNR.
dominik.tylczynski
Posty: 8326
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1915 times
Been thanked: 1474 times
Kontakt:

Re: Wieloznacznik - parametr w funkcji

Post autor: dominik.tylczynski »

Pokaż może cały kod tej funkcji razem z definicją parametrów - tak będzie łatwiej.
K602
Posty: 135
Rejestracja: śr sie 24, 2022 11:50 am
Has thanked: 60 times
Been thanked: 86 times
Kontakt:

Re: Wieloznacznik - parametr w funkcji

Post autor: K602 »

izabela pisze: śr wrz 14, 2022 3:37 pm Jak sobie poradzić z wartościamy typu Character String?
Tzn.? Umieść proszę kod, to pomożemy...

Zakładam, że jest jakiś problem w parametryzowaniu MF, bo sam kod działa dobrze:

Kod: Zaznacz cały

DATA:
      lv_where TYPE matnr VALUE '%9280%'.

SELECT matnr, mtart FROM mara WHERE matnr LIKE @lv_where ORDER BY PRIMARY KEY INTO TABLE @DATA(lt_material_details).
Załączniki
tab.jpg
tab.jpg (18.75 KiB) Przejrzano 1457 razy
SAP ABAP Certified Developer
izabela
Posty: 4
Rejestracja: czw lut 03, 2022 10:08 pm
Has thanked: 3 times

Re: Wieloznacznik - parametr w funkcji

Post autor: izabela »

New Bitmap Image.gif
New Bitmap Image.gif (109.05 KiB) Przejrzano 1453 razy
2.GIF
2.GIF (42.67 KiB) Przejrzano 1453 razy
New Bitmap Image (2).gif
New Bitmap Image (2).gif (145.92 KiB) Przejrzano 1453 razy

Kod: Zaznacz cały

  SELECT *
    FROM mara
    INTO CORRESPONDING FIELDS OF TABLE material_details
    WHERE matnr = material.
ZETKA
Posty: 69
Rejestracja: czw lis 04, 2010 10:49 pm
Has thanked: 1 time
Been thanked: 71 times
Kontakt:

Re: Wieloznacznik - parametr w funkcji

Post autor: ZETKA »

I wszystko jasne, tak podejrzewałem.
Parametr MATERIAL jest strukurą, więc trzeba napisać ...WHERE material-matnr...

Przytaczając mój poprzedni fragment:

Kod: Zaznacz cały

material-matnr = |%{ material-matnr }%|.   " bądź inna alternatywna metoda konkatenacji

SELECT...

	...WHERE matnr LIKE material-matnr.
Chyba tylko przy IMPORTING VALUE da się bezpośrednio modyfikować parametr importowy? Niech ktoś mnie ewentualnie poprawi.
Pozdrawiam,
Krzysiek
K602
Posty: 135
Rejestracja: śr sie 24, 2022 11:50 am
Has thanked: 60 times
Been thanked: 86 times
Kontakt:

Re: Wieloznacznik - parametr w funkcji

Post autor: K602 »

ZETKA pisze: czw wrz 15, 2022 1:32 pm Chyba tylko przy IMPORTING VALUE da się bezpośrednio modyfikować parametr importowy? Niech ktoś mnie ewentualnie poprawi.
Z oznaczeniem importu przez wartość, a nie referencję...


Reszta już wyjaśniona.
SAP ABAP Certified Developer
dominik.tylczynski
Posty: 8326
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1915 times
Been thanked: 1474 times
Kontakt:

Re: Wieloznacznik - parametr w funkcji

Post autor: dominik.tylczynski »

ZETKA pisze: czw wrz 15, 2022 1:32 pm Chyba tylko przy IMPORTING VALUE da się bezpośrednio modyfikować parametr importowy? Niech ktoś mnie ewentualnie poprawi.
Znaczenie IMPORTING VALUE w definicji funkcji jest wyjaśnione na SAP Help Properties of Interface Parameters:
  • In pass by reference, the formal parameter points directly to the actual parameter, so that changes to the formal parameters have an immediate effect on the actual parameter.
  • In pass by value, when the function module is called, the formal parameter is created as a copy of the actual parameter (in IMPORTING and CHANGING parameters), or initial (in EXPORTING parameters) in the stack. In CHANGING and EXPORTING parameters, the formal parameter is copied to the actual parameter when returning from the function module.
Czyli prostymi słowami:
  • w przypadku IMPORTING VALUE w funkcji zmieniana jest tylko lokalna kopia parametru - program wywołujący funkcję nie widzi zmian
  • w przypadku IMPORTING bez VALUE zmieniana jest referencja do parametru - program wywołujący funkcję widzi zmiany
Przekazywanie parametrów przez wartości, IMPORTING VALUE, jest nieco mniej wydajne, gdyż wartość parametru trzeba skopiować lokalnie.

Istotnie wartości parametrów importowych, przekazywanych przez referencję, tj. bez VALUE nie można modyfikować w funkcji. Jeśliby modyfikacja była dozwolona, to w istocie takie parametr zachowywałby się ja parametr wyjściowy, bo program wywołujący funkcję widziałby zmiany parametru wykonane wewnątrz funkcji.
ODPOWIEDZ