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:
  1. 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.
  2. Jeśli walidacja nie działa i nie wiesz dlaczego, postaw break-point przed

    Kod: Zaznacz cały

    CHECK bkpf-bukrs EQ '0606'.
    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
Dziękuję za pomoc. Zaraz wykorzystam porady 😊😊😊

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 ;)