BAPI_ACC_DOCUMENT_POST Nedir, Extension nasıl eklenir?
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?
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 |
|---|---|
| STRUCTURE | Aktarı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. |
| VALUEPART1 | Veri paketinin ilk 240 karakterlik kısmı (kullanıma göre değişir). |
| VALUEPART2 | Veri paketinin ikinci 240 karakterlik kısmı (kullanıma göre değişir). |
| VALUEPART3 | Veri paketinin üçüncü 240 karakterlik kısmı (kullanıma göre değişir). |
| VALUEPART4 | Veri 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
| STRUCTURE | VALUEPART1 | VALUEPART2 | VALUEPART3 | VALUEPART4 |
|---|---|---|---|---|
| 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:
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:
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ç ↗