Strona 1 z 1
Warunki walidacji.
: wt gru 11, 2018 10:53 am
autor: anetajur
Witam, może byłby ktoś chętny mi pomóc w poprawce walidacji. Tworzę ją w GGB0. Pierwszy raz piszę exitem warunki dla kontroli i od wczoraj nad tym siedzę i nie działa. Może ktoś mnie na coś naprowadzi. Najpierw wyjaśnię co walidacja ma sprawdzać.
Jest tabelka z-towa ZZokres gdzie użytkownik definiuje otwarte okresy VAT. Kolumny JG, miesiąc i rok.
Walidacja ma sprawdzać przy ZMIANIE dokumentu księgowego (np. FB02) pole BKPF-VATDATE czy nie należy do okresu zamkniętego. Jeżeli należy, to użytkownik nie może zmienić tej daty na inną.
Więc w GGB0 programuję WARUNKI, a kontrola zawsze będzie false.
Mój kod to:
FORM u200 USING b_result.
TABLES ZZokres.
CHECK bkpf-bukrs EQ '0606'.
"KONTROLA
SELECT SINGLE *
FROM ZZokres
WHERE bukrs EQ bkpf-bukrs
AND gjahr EQ bkpf-vatdate+0(4)
AND monat EQ bkpf-vatdate+4(2).
"Otwarty okres VAT
IF sy-subrc NE 0.
B_RESULT = B_TRUE.
ELSE.
B_RESULT = B_FALSE.
ENDIF.
ENDFORM.
Proszę o wyrozumiałość i ewentualną pomoc, wskazówki
dziękuję.
Re: Warunki walidacji.
: wt gru 11, 2018 11:37 am
autor: dominik.tylczynski
Nie jestem specjalistą od FI i walidacji. Tym nie mniej mam dwie uwagi do Twojego kodu:
- Wewnątrz definicji procedury nie wolno używać TABLES - szczegółowy opis dlaczego zamieściłem w artykule: Niebezpieczna deklaracja TABLES.
Bez wnikania w samo działanie walidacji napisałbym selekcję następująco:Kod: Zaznacz cały
FORM u200 USING b_result.
CHECK bkpf-bukrs EQ '0606'.
"KONTROLA
SELECT SINGLE bukrs into bkpf-bukrs
FROM ZZokres
WHERE bukrs EQ bkpf-bukrs
AND gjahr EQ bkpf-vatdate+0(4)
AND monat EQ bkpf-vatdate+4(2).
"Otwarty okres VAT
IF sy-subrc NE 0.
B_RESULT = B_TRUE.
ELSE.
B_RESULT = B_FALSE.
ENDIF.
ENDFORM.
- Jeśli walidacja nie działa i nie wiesz dlaczego, postaw break-point przed
Wtedy wykonanie walidacji zatrzyma się w debuggerze i będziesz mogła dokładnie sprawdzić co i jak działa.
Re: Warunki walidacji.
: wt gru 11, 2018 3:12 pm
autor: anetajur
Re: Warunki walidacji.
: wt gru 11, 2018 4:40 pm
autor: marek.turczynski
Kilka uwag z mojej uwaga dotyczących dobrej praktyki w substytucjach i walidacjach w F:
Nie hardkoduj jednostek gospodarczych w exitach - do tego lepiej stworzyć set i ustawić warunek początkowy w walidacji, że firma musi być w secie (do utworzenia w transakcji GS01 jako 'basic set' na podstawie tabeli T001).
Do tego w kodzie od Dominika zmieniłbym jedną rzecz:
Kod: Zaznacz cały
FORM u200 USING b_result.
"KONTROLA
SELECT SINGLE bukrs into @Data(lv_bukrs)
FROM ZZokres
WHERE bukrs EQ @bkpf-bukrs
AND gjahr EQ @bkpf-vatdate+0(4)
AND monat EQ @bkpf-vatdate+4(2).
"Otwarty okres VAT
IF sy-subrc NE 0.
B_RESULT = B_TRUE.
ELSE.
B_RESULT = B_FALSE.
ENDIF.
ENDFORM.
Nie robiłbym selekcji do dostarczonych danych z BKPF, czyli do BKPF-BUKRS bo tam już jest dostarczona wartość i nie powinno się jej zmieniać.
W Twoim przypadku nie robiłbym w ogóle tego poprzez walidację tylko poprzez implict enhancement w metodzie VATDATE_CHECK w BADI VATDATE_VALUES_DEFAULT_SAP. Tam na końcu metody możesz dodać check, który będzie widoczny wtedy w każdym module i, co ważniejsze, będzie w jednym miejscu, które jest z góry przeznaczone na kontrolę daty VAT a nie ukryte w walidacjach.
Re: Warunki walidacji.
: wt gru 11, 2018 5:02 pm
autor: yacol
Jeżeli już stosujemy nową składnię ABAPa to tego selecta można napisać jeszcze tak:
select single @abap_true
into @data(lv_exists)
from zzokres
where ...
if lv_exists = abap_true.
...
else.
...
endif.
w ten sposób w ogóle unikamy transferu danych z serwera BD do serwera aplikacyjnego - przecież chodzi nam tylko o sprawdzenie czy dana krotka istnieje w tabeli.
Re: Warunki walidacji.
: wt gru 11, 2018 5:07 pm
autor: marek.turczynski
Tego sposobu nie znałem, że można @abap_true używać. Zapisany - dzięki, mogę uprościć mój kod o kolejne niepotrzebne dane.
Pozdrawiam,
Marek
Re: Warunki walidacji.
: śr gru 12, 2018 10:37 am
autor: anetajur
Przy próbie debagowania mam taki komunikat. Wie ktoś o co chodzi?
Re: Warunki walidacji.
: czw gru 13, 2018 10:06 am
autor: dominik.tylczynski
Samej procedury-rozszerzenia walidacji nie możesz wprost debugować.
Musisz normalnie księgować dokument i zatrzymać przy pomoc break-point przebieg wykonania w Twojej procedurze walidację.
Re: Warunki walidacji.
: czw gru 13, 2018 10:38 am
autor: anetajur
Rozumiem. Czyli ustawiam break aktywuje walidacja i przechodzę do księgowania dokumentu. Oki. Dziekuje