Muhasebe Belgesi Oluşturma: BAPI_ACC_DOCUMENT_POST ve EXTENSION Alanları
Muhasebe Belgesi Oluşturma: BAPI_ACC_DOCUMENT_POST ve EXTENSION Alanlarının Kullanımı
SAP sistemlerinde muhasebe belgesi oluşturmak için ABAP raporlarında sıklıkla tercih edilen yöntemlerden biri BAPI kullanmaktır. Bu amaç için kullanılan standart BAPI, BAPI_ACC_DOCUMENT_POST'tur.
BAPI_ACC_DOCUMENT_POST Nedir?
BAPI_ACC_DOCUMENT_POST, SAP'de muhasebe belgelerini (Accounting Document) otomatik olarak oluşturmak için kullanılan standart bir arayüzdür. Belge içeriğini parametre olarak alır ve rapor içerisinde belgeyi otomatik olarak kaydeder.
Bu BAPI'nin temel parametreleri IMPORT, EXPORT ve TABLES olarak ayrılır. Ancak standart arayüzde yer almayan ek verileri veya özelleştirilmiş alanları aktarmak için EXTENSION1, EXTENSION2 ve CRITERIA parametreleri kullanılır.
EXTENSION1, EXTENSION2 ve CRITERIA Alanları Nedir? Farkları Nelerdir?
BAPI'de bulunan bu uzatma 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)
- Amaç: Doğrudan SAP'nin Kontrol (CO) ve Karlılık Analizi (CO-PA) türetme motoruna veri sağlar.
- İşlev: Muhasebe belgesi hareketinin hangi Karlılık Segmentine ait olacağının doğru boyutlarla belirlenmesine yardımcı olur.
- Gereksinim: Bu süreç, BAPI’nin dahili mantığı içerisinde, özel bir BAdI geliştirmesine ihtiyaç duyulmadan yürütülür.
Genel Alan Modifikasyonu (EXTENSION1/EXTENSION2)
- Amaç: CO-PA türetme mantığıyla doğrudan ilgili olmayan, belgenin nihai kaydedilmiş hali üzerindeki herhangi bir özel alanın veya standart alanın güncellenmesi/eklenmesi için kullanılır.
- İşlev: Aktarılan bu verilerin BAPI içinde anlam kazanması ve belgeye uygulanması, mutlak suretle bir müşteri geliştirimi (BAdI) gerektirir.
- Tercih: EXTENSION2, genellikle
ACC_DOCUMENTBAdI'si ile birlikte kullanılan, daha esnek ve güncel bir uzatma mekanizmasıdır. Çoğu modern geliştirme senaryosunda bu alan tercih edilir.
EXTENSION2 Parametresinin Kullanım Mantığı
EXTENSION2 tablosu, aktarılacak verileri yapısal olarak paketler. İçerdiği alanlar şunlardır:
| Alan Adı | Açıklama |
|---|---|
| STRUCTURE | Aktarılacak verinin orijinal SAP yapısının adı (örneğin: BKPF, BSEG, ACCIT, ACCHD). Hangi tabloya veya yapıya veri aktarılacağını belirtir. |
| VALUEPART1 | Veri paketinin ilk 240 karakterlik kısmı (Pozisyon numarası vb. kullanılabilir). |
| VALUEPART2 | Veri paketinin ikinci 240 karakterlik kısmı (Hedef yapının adı kullanılabilir). |
| VALUEPART3 | Veri paketinin üçüncü 240 karakterlik kısmı (Hedef alanın adı). |
| VALUEPART4 | Veri paketinin dördüncü 240 karakterlik kısmı (Hedef alanın değeri). |
Nasıl Kullanılır? (BAdI Uygulaması)
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 BAdI implementasyonu gerekir. BADI_ACC_DOCUMENT BAdI'sinin CHANGE metodu bu atamayı yapmak için kullanılır.
Aşağıdaki ABAP kodu, BAdI içerisinde EXTENSION2 parametresinden gelen veriyi okuyarak muhasebe belgesi yapılarındaki ilgili alanı güncelleyen temel mantığı göstermektedir:
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>.
* VALUEPART2 alanındaki hedef tablo/yapı adını temizleme (Örn: 'C_ACCIT')
CALL FUNCTION 'SCP_REPLACE_STRANGE_CHARS'
EXPORTING
intext = <fs_extens>-valuepart2
IMPORTING
outtext = <fs_extens>-valuepart2
EXCEPTIONS
OTHERS = 6.
* Hedef tabloya (Örn: C_ACCIT) dynamic olarak atama
ASSIGN (<fs_extens>-valuepart2) TO <fs_table>.
CHECK sy-subrc = 0.
TRY.
* Belge içerisindeki ilgili pozisyonu bulma
READ TABLE <fs_table> WITH KEY ('BAPI_PARAM') = <fs_extens>-structure
('POSNR') = <fs_extens>-valuepart1 ASSIGNING <fs_header>.
CHECK sy-subrc = 0.
* Aynı pozisyon için EXTENSION2'deki tüm alanları döngüye alma
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>.
* VALUEPART3'teki alan adını (Örn: 'BSCHL') hedef yapıdaki (C_ACCIT) ilgili alana atama
ASSIGN COMPONENT <fs_extens2>-valuepart3 OF STRUCTURE <fs_header> TO <fs_field>.
CHECK sy-subrc = 0.
* VALUEPART4'teki değeri (Örn: '37') alana set etme
<fs_field> = <fs_extens2>-valuepart4.
ENDLOOP.
CATCH cx_root.
UNASSIGN: <fs_table>.
ENDTRY.
ENDIF.
ENDLOOP.
Örnek Senaryo: Kayıt Anahtarı (BSCHL) Güncelleme
Yukarıdaki BAdI implementasyonu ile beraber, ABAP raporunda EXTENSION2 parametresi kullanılarak bir alıcı (Account Payable) pozisyonunun Kayıt Anahtarı (BSCHL) alanının '31' değerinden '37' değerine güncellenmesi sağlanabilir.
BAPI'ye Gönderilecek EXTENSION2 İçeriği:
APPEND VALUE #( structure = 'ACCOUNTPAYABLE' "BAPI'deki hesap tablosunun adı
valuepart1 = '0000000002' "Değiştirilecek pozisyon numarası
valuepart2 = 'C_ACCIT' "Hedef belge yapısı
valuepart3 = 'BSCHL' "Değiştirilecek alan
valuepart4 = '37' ) "Yeni değer
TO lt_extension2.
BAPI Çağrısı:
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. "Uzatma tablosu BAPI'ye geçirilir
Bu kullanım sonucunda, muhasebe belgesi oluşurken alıcı (Account Payable) pozisyonunun Kayıt Anahtarı (BSCHL) alanı BAdI içerisindeki kod sayesinde '37' olarak güncellenir. Oluşan belge görüntüsü:
Notlar ve gereksinimler
- EXTENSION2 verileri tek başına çalışmaz — BAdI (ör.
BADI_ACC_DOCUMENT) içinde bu verilerin ilgili yapıya kopyalanması gerekir. - BAdI içinde genellikle
CHANGEmetodu kullanılarak gelenextension2tablosundaki satırlar ilgili ACCHD / ACCIT / BSEG gibi yapılara atanır. - Her SAP sürümünde veya müşteriye özel projede farklı iç yapı isimleri olabilir; bu nedenle kullanmadan önce çevrenizdeki BAdI uygulamasını kontrol edin.