Gökhan Baştürk

Bilgisayar Yüksek Mühendisi

VF01 – Faturalama Ekranında Tarih Kontrolü Yapalım

Öncelikle sonuç olarak ne olacak onu göstereyim. Belki farklı bir konuyu araştırıyorsanız zaman kaybetmeden bu blogu okumak zorunda kalmayın.

Amacımız, VF01 faturalama ekranında teslimat numarası girip faturasını oluştururken bir kontrol gerekliyse onu yapmaktır.

 

Eğer yukarıdaki gibi tarihe bağlı teslimatı kontrol edecekseniz bu yazı tam sizi nokta atışı bilgiye ulaştırabilir.

Kullanmanız gereken exit :

RV60AFZC

Bu exit içinde nasıl bir kod yazılabilir kısmında da kendi örnek kodumu aşağıda sizlerle paylaşayım.

 

Kodu kopyalamak isteyebilirsiniz, sadece görsel olarak kalmaması için aşağıda da kod bloğunu sizlerle paylaşıyorum.

FORM USEREXIT_NUMBER_RANGE_INV_DATE USING US_RANGE_INTERN.

* Example: Number range from TVFK like in standard
* US_RANGE_INTERN = TVFK-NUMKI.
*{   INSERT         TEUK900013                                        1

  DATAlv_wadat_ist  TYPE datum,
        lv_bldat      TYPE bldat,
        lv_fkdat      TYPE sydatum,
        lv_fkdat_2    TYPE sydatum,
        lv_tablo_adi2 TYPE char30 VALUE ‘(SAPMV60A)RV60A’,
        lv_country    TYPE land1_gp,
        ls_parabirim  TYPE zsd_ulke_parabrm.

  FIELD-SYMBOLS<fs_rv60a_2> TYPE any,
                 <fs_value_2> TYPE any.

  CALL FUNCTION ‘Z_DTY_FT_FG04_07’
    EXPORTING
      i_vbrk vbrk
      i_vbrp vbrp.
  IF sytcode ‘VF01’.
    SELECT SINGLE land1 FROM kna1 INTO lv_country WHERE kunnr vbrkkunag.
    SELECT SINGLE FROM zsd_ulke_parabrm INTO ls_parabirim WHERE country lv_country.
    IF sysubrc IS INITIAL.
      IF ls_parabirimwaers NE vbrkwaerk.
        MESSAGE ‘Para Birimi Hatası’ TYPE ‘E’.
      ENDIF.
    ENDIF.

    ASSIGN (lv_tablo_adi2TO <fs_rv60a_2>.
    IF <fs_rv60a_2> IS ASSIGNED.
      ASSIGN COMPONENT ‘FKDAT’ OF STRUCTURE <fs_rv60a_2> TO <fs_value_2>.
      IF <fs_value_2> IS ASSIGNED.
        lv_fkdat_2 <fs_value_2>.
      ENDIF.
    ENDIF.
    IF lv_fkdat_2 > sydatum.
      MESSAGE e169(zfi).
    ENDIF.
    IF lv_fkdat_2 < likpbldat AND likpvbeln(3NE ‘804’ AND likpvstel NE ‘2500’.
      MESSAGE e176(zfi).
    ENDIF.
  ENDIF.

  IF sytcode NE ‘VF11’ AND likpvkorg EQ ‘1000’ OR
                              likpvkorg EQ ‘2000’ .
    SELECT SINGLE bldat wadat_ist FROM likp INTO lv_bldat,lv_wadat_ist )
                                 WHERE vbeln EQ xvbupvbeln.
    IF sysubrc EQ 0.
      IF likpvkorg EQ ‘2000’.
        IF lv_fkdat_2+4(2NE lv_bldat+4(2).
          MESSAGE ‘Teslimat Belgesi ayı ile Faturalama ayı aynı olmalıdır.’ TYPE ‘E’.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
*}   INSERT

ENDFORM.