28
2016
Faturanın Tersi ile Eşlenerek Kapatılması (Fatura Alacaklandırma) İşlemi
Merhaba,
Bu yazımda Alacaklar Faturasının tersini oluşturup eşleyerek kapatma işleminin public api ile yapılması aktarmaya çalışacağım.
ra_customer_trx_all tablosunda INV (Satış tipli pozitif fatura) tipli olarak oluşturulan faturanın tersi işle eşlenerek kapatılması işlemi
faturanın ne kadarlık tutarı alacaklandırılacaksa belirlenir. Bu tutarın belirlenme işleminin objesi
l_cm_lines_tbl arw_cmreq_cover.cm_line_tbl_type_cover |
cm_line_tbl_type_cover |
bu obje üzerinde belirlenen tutar kadarlık bir faturanın iade faturası oluşturularak orjinal fatura kapatılacaktır.
Yapılan işlemin R11 için kullanılan apinin tarih parametresi olmamasından dolayı sysdate te yapılacaktır.
Sysdate tarihinin Alacaklar Döneminin açık olması gerekmektedir. Ayrıca bir şekilde açıkta kalan fatura tutarı kapatılacağı için açıkta kalan tutarın üzerinde bir Credit Memo oluşturulamaz.
DECLARE TYPE invoicelines_records IS TABLE OF ra_customer_trx_lines_all%ROWTYPE INDEX BY PLS_INTEGER; p_customer_trx_id NUMBER := 13542; l_cm_lines_tbl arw_cmreq_cover.cm_line_tbl_type_cover; l_invlines_recs invoicelines_records; v_return_status VARCHAR2 (1); l_return_status VARCHAR2 (1); l_message VARCHAR2 (2400); v_msg_count NUMBER; v_msg_data VARCHAR2 (2400); v_request_id NUMBER; p_count NUMBER := 0; l_orj_trx_date DATE; l_line_tax_amount NUMBER; l_cm_trx_id NUMBER; FUNCTION calc_line_tax_amount (p_customer_trx_line_id IN NUMBER) RETURN NUMBER IS l_tax_amount NUMBER; BEGIN SELECT SUM (NVL (extended_amount, 0)) INTO l_tax_amount FROM ra_customer_trx_lines_all rctl WHERE 1 = 1 AND line_type = 'TAX' AND rctl.link_to_cust_trx_line_id = p_customer_trx_line_id; RETURN l_tax_amount; END calc_line_tax_amount; FUNCTION get_memo_trx_id (p_req_id IN NUMBER) RETURN NUMBER IS l_cm_trx_id ra_cm_requests_all.cm_customer_trx_id%TYPE; BEGIN SELECT cm_customer_trx_id INTO l_cm_trx_id FROM ra_cm_requests_all WHERE 1 = 1 AND cm_customer_trx_id IS NOT NULL AND request_id = p_req_id; RETURN l_cm_trx_id; EXCEPTION WHEN OTHERS THEN RETURN 0; END get_memo_trx_id; BEGIN --> fnd_global.apps_initialize (0, 50289, 20003); --> apps init olmadan işlemler hata verecektir fmb içerisinde SELECT trx_date INTO l_orj_trx_date FROM ra_customer_trx_all WHERE 1 = 1 AND customer_trx_id = p_customer_trx_id; BEGIN SELECT * BULK COLLECT INTO l_invlines_recs FROM ra_customer_trx_lines_all rctl WHERE 1 = 1 AND rctl.customer_trx_id = p_customer_trx_id AND line_type = 'LINE'; END "Collect Orj Invoice Line Recs"; IF l_invlines_recs.COUNT = 0 THEN l_return_status := fnd_api.g_ret_sts_error; l_message := 'No LINE type rows found'; DBMS_OUTPUT.put_line ('return_status : ' || l_return_status); DBMS_OUTPUT.put_line ('return_message : ' || l_message); RETURN; END IF; FOR i IN 1 .. l_invlines_recs.COUNT LOOP --*********************************************************************************** l_cm_lines_tbl (i).customer_trx_line_id := l_invlines_recs (i).customer_trx_line_id; l_cm_lines_tbl (i).quantity_credited := l_invlines_recs (i).quantity_invoiced * -1; l_cm_lines_tbl (i).price := l_invlines_recs (i).unit_selling_price; --*********************************************************************************** l_line_tax_amount := calc_line_tax_amount (l_invlines_recs (i).customer_trx_line_id); --*********************************************************************************** l_cm_lines_tbl (i).extended_amount := l_invlines_recs (i).quantity_invoiced * l_invlines_recs (i).unit_selling_price * -1 + (l_line_tax_amount * -1); END LOOP; fnd_msg_pub.initialize; ar_credit_memo_api_pub.create_request (p_api_version => 1.0 ,p_init_msg_list => fnd_api.g_true ,p_commit => fnd_api.g_false ,p_customer_trx_id => p_customer_trx_id ,p_line_credit_flag => 'Y' ,p_cm_line_tbl => l_cm_lines_tbl ,p_cm_reason_code => 'RETURN' ,p_skip_workflow_flag => 'Y' ,p_batch_source_name => 'MAĞAZACILIK' /*ra_batches_all.name*/ , p_credit_method_installments => NULL ,p_credit_method_rules => NULL ,x_return_status => v_return_status ,x_msg_count => v_msg_count ,x_msg_data => v_msg_data ,x_request_id => v_request_id ); -- dbms_output.put_line ('credit memo return_status : ' || v_return_status); -- dbms_output.put_line ('credit memo message_data : ' || v_msg_data); -- dbms_output.put_line ('credit memo v_msg_count : ' || v_msg_count); IF v_return_status <> fnd_api.g_ret_sts_success THEN IF v_msg_count = 1 THEN l_return_status := fnd_api.g_ret_sts_error; l_message := v_msg_data; DBMS_OUTPUT.put_line ('return_status : ' || l_return_status); DBMS_OUTPUT.put_line ('return_message : ' || l_message); RETURN; ELSIF v_msg_count > 1 THEN LOOP p_count := p_count + 1; v_msg_data := fnd_msg_pub.get (fnd_msg_pub.g_next, fnd_api.g_false); IF v_msg_data IS NULL THEN EXIT; END IF; l_message := l_message || 'Message' || p_count || ' ---' || v_msg_data || CHR (10); END LOOP; l_message := RTRIM (l_message, CHR (10)); END IF; l_return_status := fnd_api.g_ret_sts_error; /*1.5.10.0.1*/ ELSE l_cm_trx_id := get_memo_trx_id (v_request_id); IF l_cm_trx_id = 0 THEN l_return_status := fnd_api.g_ret_sts_error; l_message := 'Request_id : ' || v_request_id || ' ' || ' , No cm_trx_id found RA_CM_REQUESTS_ALL'; RETURN; END IF; l_return_status := v_return_status; l_message := 'New Memo Invoice created and fully applied to original invoice'; END IF; DBMS_OUTPUT.put_line ('return_status : ' || l_return_status); DBMS_OUTPUT.put_line ('return_message : ' || l_message); DBMS_OUTPUT.put_line ('credit memo trx id : ' || l_cm_trx_id); END; |
SELECT * FROM ra_customer_trx_all WHERE 1=1 AND previous_customer_trx_id = :orj_cust_trx_id; |
Mustafa Korkmaz
Oldu, 2011 Yılında Ahmet Yesevi Üniversitesi Bilgisayar Mühendisliğinde
Yüksek Lisansını Tamamlandı,2012 Yılında Doğuş Üniversitesinde Bilgisayar
Mühendisliği Doktora Eğitimine Başladı.10 yılı aşkın bir zamandır Oracle
Ürünleri Uygulama Yazılım Uzmanı Olarak profesyonel kariyerine devam
etmektedir. İlgi alanları Middleware, CI/CD,
Oracle Database , PL/SQL , Java , Makine Öğrenmesi ve Veri Madenciliği alanlarındadır.
2 versiyon Oracle Database ' (10g, 11g) inde OCA(Oracle Certificate Associate) ve
PL/SQL Certificated Professional ünvanları bulunmaktadır.
Mail: mustafakorkmz@gmail.com
Latest posts by Mustafa Korkmaz (see all)
- Log4j CVE-2021-45046 Zafiyeti - 16 Aralık 2021
- Materialized View Verisi Purge ya da Delete (atomic_refresh) - 12 Kasım 2021
- HTML Görüntüsü için Unicode Dönüşümü - 27 Temmuz 2020
Güzel çalışma, aynen kullandım