Wirabumi Softaware

Take your ERP new leap: Agility! Make it Dynamic and Flexible.

  • Besarkan font
  • Font Normal
  • Kecilkan font

subtle bug openbravo pada penggunaan to_number postgresql

E-mail Cetak PDF

Ada banyak kasus bug pada openbravo disebabkan penggunaan postgresql buillt-in function TO_NUMBER(). penggunaan TO_NUMBER() pada openbravo harus hati-hati karena postgresql secara default menggunakan locale setting sebagai decimal point dan thousand separator. fenomena ini menjadi subtle bug yang sulit ditelusuri karena openbravo tidak menyampaikan error message, dan memang tidak terjadi error, hanya behaviour-nya yang tidak seperti yang diharapkan. contohnya, jika hal ini dibiarkan, lalu kita membuat invoice dalam mata uang asing pada tanggal 1 juli 2014, maka hasil konversi saat posting akan salah, dan akan memunculkan jurnal ke akun currency balancing pada jurnal pembayaran (payment-in/out atau financial account transaction) atas invoice tersebut.

 

sebagai contoh query berikut ini akan menghasilkan 5724.14

 

SELECT C_Currency_Convert(TO_NUMBER('83.00'), '102', '100',TO_DATE('01-07-2014'),TO_CHAR('S'), '23C59575B9CF467C9620760EB255B389', '2E60544D37534C0B89E765FE29BC0B43') AS CONVERTED FROM DUAL
padahal seharusnya 57.24. mengapa demikian? karena pada 83.00 postgresql menganggap tanda titik (.) sebagai thousand separator, dan bukan decimal point.
sekarang, kita akan menelusuri bagaimana hal ini bisa terjadi. perhatikan LC_NUMERIC pada database anda dengan menjalankan query berikut:
show LC_NUMERIC;
dan akan menampilkan
id_ID.UTF-8
perhatikan, numeric setting pada postgresql anda adalah indonesia. pada seting locale indonesia, thousand separator menggunakan tanda titik (.) sedangkan decimal point menggunakan tanda koma (,). anda juga perlu memperhatikan seting locale pada postgresql anda karena secara default akan mengikuti locale setting pada operating system anda. jika sistem operasi anda berbasis ubuntu, maka anda bisa melihat local setting dengan menjalankan perintah ini pada terminal:
$ locale
perhatikan informasi pada LC_NUMERIC, value-nya akan sama dengan locale setting pada postgresql.
mengapa local setting ini bermasalah di openbravo? sebenarnya locale setting tidak akan bermasalah di openbravo kalau thousand separator dan decimal point pada file konfigurasi openbravo (Openbravo.properties) sama dengan locale setting pada posgresql.
dalam kasus ini, kita akan ubah locale setting pada postgresql dan sistem operasi sehingga sama dengan openbravo. di Openbravo.properties tertera thousand separator menggunakan tanda koma (,) dan decimal point menggunakan tanda titik (.), atau disimpulkan locale setting pada openbravo adalah en_US.UTF-8. untuk mengubah di postgresql, jalankan perintah berikut:
ALTER DATABASE openbravo SET lc_numeric = 'en_US.UTF-8';
sekarang jalankan ulang query:
SELECT C_Currency_Convert(TO_NUMBER('83.00'), '102', '100',TO_DATE('01-07-2014'),TO_CHAR('S'), '23C59575B9CF467C9620760EB255B389', '2E60544D37534C0B89E765FE29BC0B43') AS CONVERTED FROM DUAL
perhatikan, sekarang hasilnya 57.24. untuk mengubah locale setting pada sistem operasi, edit file /etc/default/locale, edit LC_NUMERIC sehingga menjadi
LC_NUMERIC="en_US.UTF-8"
Update terakhir Selasa, 14 Oktober 2014 13:35  

Contact Us

Zaien Aji Trahutomo
zaien@wirabumisoftware.com
+ 62 89 777 20002

Our Certification

Openbravo Certified Partner | Wirabumi Openbravo Indonesia

PostgreSQL associate certified professional | Wirabumi Openbravo Indonesia

Login