ABAP12 Haziran 2026· 7 dk okuma

BAPI_ACC_DOCUMENT_POST Nedir, Extension nasıl eklenir?

Enes Malik Yüksek

BAPI_ACC_DOCUMENT_POST — EXTENSION ve CRITERIA Alanları

SAP · ABAP · FI Geliştirme

Muhasebe Belgesi Oluşturma: BAPI_ACC_DOCUMENT_POST

EXTENSION1, EXTENSION2 ve CRITERIA alanlarıyla standart arayüzde bulunmayan özel verileri muhasebe belgelerine nasıl aktarırsınız?

BAPI_ACC_DOCUMENT_POST EXTENSION2 BADI_ACC_DOCUMENT CO-PA

SAP sistemlerinde Muhasebe belgesi yaratmak için ABAP raporlarında sıkça kullanılan bir metot da BAPI kullanmaktır. BAPI_ACC_DOCUMENT_POST bapisi bu amaca hizmet eder.

01BAPI_ACC_DOCUMENT_POST nedir?

BAPI_ACC_DOCUMENT_POST, SAP'de muhasebe belgelerini (Accounting Document) otomatik olarak oluşturmak için kullanılan standart bir BAPI'dir. Belge içeriğini parametre olarak alır ve otomatik olarak rapor içinde belgeyi oluşturur. Alacağı parametreler kısaca IMPORT, EXPORT ve TABLES olarak ayrılır.

Bu yazımızda parametreler arasında bulunmayan ve ihtiyacımız olan alanları nasıl kullanacağız o anlatılacaktır. EXTENSION1, EXTENSION2 ve CRITERIA alanları işlenecektir.

02EXTENSION1, EXTENSION2 ve CRITERIA alanları nedir? Farkları nelerdir?

BAPI'de bulunan EXTENSION1, EXTENSION2 ve CRITERIA parametreleri, standart arayüzde bulunmayan ek verilerin veya özelleştirilmiş alanların aktarılmasına ve kârlılık analizi (CO-PA) verilerinin atanmasına olanak tanır.

Boyutsal Türetme (CRITERIA)

Bu parametre, doğrudan SAP'nin Kontrol (CO) ve Karlılık Analizi (CO-PA) türetme motoruna veri sağlar. Amacı, muhasebe belgesi hareketinin hangi Karlılık Segmentine ait olacağının doğru boyutlarla belirlenmesine yardımcı olmaktır. Bu süreç, BAPI'nin dahili mantığı içerisinde, özel bir BAdI geliştirmesine ihtiyaç duymadan yürütülür.

Genel Alan Modifikasyonu (EXTENSION1 / EXTENSION2)

Bu tablolar ise, CO-PA türetme mantığıyla doğrudan ilgili olmayan, belgenin nihai kaydedilmiş hali üzerindeki herhangi bir özel alanın güncellenmesi veya eklenmesi için kullanılır. Bu verilerin BAPI içinde anlam kazanması ve belgeye uygulanması, mutlak suretle bir müşteri geliştirimi (BAdI) gerektirir.

Örnek senaryo: Muhasebe Belgesi oluşurken EXTENSION2 parametresi kullanılacak ve Kayıt Anahtarı (BSCHL) alanı güncellenecektir.


03EXTENSION2 parametresinin kullanım mantığı

EXTENSION2 genellikle ACC_DOCUMENT BAdI'si ile birlikte kullanılan, daha esnek ve güncel bir uzatma mekanizmasıdır. Çoğu modern geliştirme senaryosunda, özel alanları veya standart arayüzde olmayan standart alanları aktarmak için EXTENSION2 tercih edilir. İçerdiği alanlar şu şekildedir:

Alan AdıAçıklama
STRUCTUREAktarılacak verinin orijinal SAP yapısının adı (örneğin: BKPF, BSEG, ACCIT, ACCHD). Bu alan, hangi tabloya veya yapıya veri aktarılacağını belirtir.
VALUEPART1Veri paketinin ilk 240 karakterlik kısmı (kullanıma göre değişir).
VALUEPART2Veri paketinin ikinci 240 karakterlik kısmı (kullanıma göre değişir).
VALUEPART3Veri paketinin üçüncü 240 karakterlik kısmı (kullanıma göre değişir).
VALUEPART4Veri paketinin dördüncü 240 karakterlik kısmı (kullanıma göre değişir).

04Nasıl Kullanılır?

Bu uzatma tabloları tek başlarına çalışmaz; aktarılan verilerin muhasebe belgesi yapılarındaki (örneğin ACCHD, ACCIT) karşılık gelen alanlara atanması için mutlaka bir Customer Exit veya BAdI (Business Add-In) implementasyonu gerekir.

Örnek tablo içeriği

STRUCTUREVALUEPART1VALUEPART2VALUEPART3VALUEPART4
ACCOUNTRECEIVABLE 0000000001 C_ACCIT BSTAT S

Bu içerik ile beraber C_ACCIT tablosunun BSTAT alanına S değeri aktarılır; aktarıldığı üzere tek başına çalışamaz. BADI_ACC_DOCUMENT Badisinin kullanılması gerekmektedir. Verilen değerler CHANGE methodunda tabloya aktarılmalıdır. Örnek kod aşağıdaki gibidir:

ABAP · BADI_ACC_DOCUMENT~CHANGE
DATA: t_extension2 TYPE STANDARD TABLE OF bapiparex.

FIELD-SYMBOLS: <fs_table>   TYPE STANDARD TABLE,
               <fs_header>  TYPE any,
               <fs_field>   TYPE any,
               <fs_extens>  TYPE bapiparex,
               <fs_extens2> TYPE bapiparex.

t_extension2[] = c_extension2[].
SORT t_extension2.
DELETE ADJACENT DUPLICATES FROM t_extension2 COMPARING ALL FIELDS.

LOOP AT t_extension2 ASSIGNING <fs_extens>.
  IF NOT <fs_extens>-valuepart1 IS INITIAL.
    UNASSIGN: <fs_table>.
    CALL FUNCTION 'SCP_REPLACE_STRANGE_CHARS'
      EXPORTING
        intext            = <fs_extens>-valuepart2
      IMPORTING
        outtext           = <fs_extens>-valuepart2
      EXCEPTIONS
        invalid_codepage  = 1
        codepage_mismatch = 2
        internal_error    = 3
        cannot_convert    = 4
        fields_not_type_c = 5
        OTHERS            = 6.
    ASSIGN (<fs_extens>-valuepart2) TO <fs_table>.
    CHECK sy-subrc = 0.
    TRY.
        READ TABLE <fs_table> WITH KEY ('BAPI_PARAM') = <fs_extens>-structure
                                       ('POSNR') = <fs_extens>-valuepart1 ASSIGNING <fs_header>.
        CHECK sy-subrc = 0.
        LOOP AT c_extension2 ASSIGNING <fs_extens2> WHERE structure = <fs_extens>-structure
                                                      AND valuepart1 = <fs_extens>-valuepart1
                                                      AND valuepart2 = <fs_extens>-valuepart2.
          UNASSIGN: <fs_field>.
          ASSIGN COMPONENT <fs_extens2>-valuepart3 OF STRUCTURE <fs_header> TO <fs_field>.
          CHECK sy-subrc = 0.
          <fs_field> = <fs_extens2>-valuepart4.
        ENDLOOP.
      CATCH cx_root.
        UNASSIGN: <fs_table>.
    ENDTRY.
  ENDIF.
ENDLOOP.

Bu kod bloğu değiştirmek istediğimiz alanı günceller. Sonrasında istenilen raporda extension2 parametresi kullanılabilir. Örnek olarak:

ABAP · Rapor kullanımı
APPEND VALUE #( structure  = 'ACCOUNTPAYABLE'
                  valuepart1 = '0000000002'
                  valuepart2 = 'C_ACCIT'
                  valuepart3 = 'BSCHL'
                  valuepart4 = '37' ) TO lt_extension2.


CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
  EXPORTING
    documentheader = ls_documentheader
  IMPORTING
    obj_key        = lv_obj_key
  TABLES
    accountgl      = lt_accountgl
    accountpayable = lt_accountpayable
    currencyamount = lt_currencyamount
    return         = lt_return
    extension2     = lt_extension2.

Şeklinde kullanılır ve oluşan belge görüntüsü aşağıdaki gibidir:

Oluşan muhasebe belgesi ekran görüntüsü

Görseli aç ↗
SAP FI · BAPI_ACC_DOCUMENT_POST · Teknik Not