Powered By

Skin Design:
Free Blogger Skins

Powered by Blogger

Cari Blog Ini

Tampilkan postingan dengan label Adempiere. Tampilkan semua postingan
Tampilkan postingan dengan label Adempiere. Tampilkan semua postingan

24 September 2021

Mencoba plug-in yang sudah ada - Idempiere

Setelah berhasil mempersiapkan environtment dev untuk idempiere 5.1 maka selanjutnya saya mencoba untuk melakukan development plug-in. Namun saya tidak membuat dari nol, karena untuk konsepnya saya masih meraba-raba. Saya coba ambil dari plug-in yang telah ada. Saya pilih coba mengembangkan  Plugin: Create from requisition - iDempiere en. Plug in ini berguna untuk melakukan generate PO line dari requisition line. Default di iDempiere fungsi untuk generate PO langsung melalu menu Create PO from Requisition (Process ID-337) - iDempiere en. Namun saya rasa kurang fleksibel.

Langkahnya:

1. Download dahulu source codenya disini. Kemudian di extract ke folder yang di inginkan.
2. Buka menu File -> Open Project From File System

 

3. Pilih directory tempat folder tadi diekstrak, dan tekan finish. Maka akan muncul project baru seperti dibawah ini.
4. Terlihat JRE yang dipakai adalah Java 1.6 (Java 6). Hal ini karena plug-in tersebut dibuat di iDempiere versi 2.0 yang masih menggunakan Java 6.  Apakah bermasalah? Saya juga belum tahu, tapi amannya saya ganti versi java nya difile MANIFEST.MF (Klik 2x pada file tersebut)

5. Pada tab Overview (Manifest.fm) ubah execution environment menjadi Java 8 seperti gambar dibawah.


6. Pada tab Dependencies terlihat ada error. Hal ini terjadi karena saat ini library yang digunakan berganti nama. Maka lakukan remove kemudian add lagi dengan memilih zk (8.0.2.2)

7. Pilih ZK 8.0.2.2 dan Zul (8.0.2.2) kemudian tekan OK. Di source aslinya hanya ada zkoss library. Di versi idempeire 5.1 library tersebut dipisah menjadi ZK dan Zul.
8. Error akan hilang setelah proses refresh dan build (jika build manual) 
9. Setelah error hilang, setting Run Configurations dan pastikan plugin muncul dipilihan. Centang sehingga saat run plug-in akan terload dan bisa digunakan. 

10. Sebelumnya, kita harus melakukan setting pada Application Dictionary iDempiere yaitu dengan menambah tombol pada tabel C_Order dan window Purchase Order. Jalankan query dibawah ini untuk mudahnya:
ALTER TABLE adempiere.c_order    
ADD COLUMN createfrom CHAR(1) ;

--Columnm
INSERT INTO "ad_column" ("ad_column_id", "ad_client_id", "ad_org_id", "isactive", "created", "updated", "createdby", "updatedby", "name", "description", "help", "version", "entitytype", "columnname", "ad_table_id", "ad_reference_id", "ad_reference_value_id", "ad_val_rule_id", "fieldlength", "defaultvalue", "iskey", "isparent", "ismandatory", "isupdateable", "readonlylogic", "isidentifier", "seqno", "istranslated", "isencrypted", "callout", "vformat", "valuemin", "valuemax", "isselectioncolumn", "ad_element_id", "ad_process_id", "issyncdatabase", "isalwaysupdateable", "columnsql", "mandatorylogic", "infofactoryclass", "isautocomplete", "isallowlogging", "formatpattern", "ad_column_uu", "isallowcopy", "seqnoselection", "istoolbarbutton", "issecure", "ad_chart_id", "fkconstraintname", "fkconstrainttype", "pa_dashboardcontent_id") VALUES (912001, 0, 0, 'Y', '2021-08-14 20:52:31.914', '2021-08-14 20:52:31.914', 0, 0, 'Create lines from', 'Process which will generate a new document lines based on an existing document', 'The Create From process will create a new document based on information in an existing document selected by the user.', 0, 'U', 'CreateFrom', 259, 28, NULL, NULL, 1, NULL, 'N', 'N', 'N', 'Y', NULL, 'N', 0, 'N', 'N', NULL, NULL, NULL, NULL, 'N', 1490, NULL, 'N', 'N', NULL, NULL, NULL, 'N', 'Y', NULL, 'fc189bcf-2b48-4969-818c-2341f6d76749', 'Y', 0, 'Y', 'N', NULL, NULL, 'N', NULL);
--
--Field
INSERT INTO "ad_field" ("ad_field_id", "ad_client_id", "ad_org_id", "isactive", "created", "createdby", "updated", "updatedby", "name", "description", "help", "iscentrallymaintained", "ad_tab_id", "ad_column_id", "ad_fieldgroup_id", "isdisplayed", "displaylogic", "displaylength", "isreadonly", "seqno", "sortno", "issameline", "isheading", "isfieldonly", "isencrypted", "entitytype", "obscuretype", "ad_reference_id", "ismandatory", "included_tab_id", "defaultvalue", "ad_reference_value_id", "ad_val_rule_id", "infofactoryclass", "ad_field_uu", "isallowcopy", "seqnogrid", "isdisplayedgrid", "xposition", "numlines", "columnspan", "isquickentry", "isupdateable", "isalwaysupdateable", "mandatorylogic", "readonlylogic", "istoolbarbutton", "isadvancedfield", "isdefaultfocus", "vformat", "ad_labelstyle_id", "ad_fieldstyle_id") VALUES (912001, 0, 0, 'Y', '2021-08-14 20:55:13.451', 0, '2021-08-14 20:55:13.451', 0, 'Create lines from', 'Process which will generate a new document lines based on an existing document', 'The Create From process will create a new document based on information in an existing document selected by the user.', 'Y', 294, 912001, NULL, 'Y', NULL, 0, 'N', 510, 0, 'N', 'N', 'N', 'N', 'U', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'd99471ce-72a0-418d-8809-861d1d3a8a72', NULL, 510, 'Y', 1, 1, 1, 'N', NULL, NULL, NULL, NULL, NULL, 'N', 'N', NULL, NULL, NULL);
11. Buka form PO, maka akan muncul tombol create lines.




Penjelasan:
Fungsi action button di iDempiere ada di class org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java

Di class tersebut, ketika terdapat button dengan nama columnnya "CreateForm" maka akan memanggil fungsi WCreateFromFactory.create(GridTab tab). Fungsi itu akan melist semua object yang memiliki interface ICreateFromFactory baik dicore iDempiere ataupun di plug-in nya. Di plug-in yang kita coba terdapat class  FaaCreateFromFactory yang mengimplementasikan ICreateFromFactory. Kebetulan Tab Purchase Order standartnya tidak ada kolom CreateFrom, jadi cukup menambah kolom CreateFrom akan dapat memanggil form dari plug-in.

Jika kolom sudah ada, maka pendekatannya bisa menggunakan membuat process yang memanggil form custom.

16 Desember 2011

Barcode project di Adempiere [versi Kantor ku]

Setelah dipromosikan, bos telepon (salah satu teman menyebut beliau begitu hehehe) melakukan gebrakan. Ingin menggunakan barcode untuk input barang di adempeire! Begitu mendengar berita itu, angan-angan melayang membayangkan aplikasi adempiere yang seperti itu di padukan dengan barcode. Efektifkah???
Sebagai "tukang parkir" ga ada hak bagi saya untuk menolak. Jadi ya kita jalanin aja permintaan si bos. Sekalian nambah jam terbang ngoprek Adempiere. Kali aja di bajak ke ladang yang lebih subur hehehe.

Setelah beberapa kali meeting (sebagai tukang parkir, saya cukup meeting 1x saja), akhirnya di rumuskan bagian mana yang akan di masukkan sistem barcode. Yaitu bagian 1. Input barang produksi (Material Receipt), dan 2 Bagian cek/loading barang untuk pengangkutan (cek shipment).

Dengan base Adempeire 342 maka solusi-solusinya adalah:

1. Barcode untuk Material Receipt

Pada Adempiere 342 sudah support penggunaan barcode. Sejatinya barcode scanner hanya tools untuk membaca barcode dan mengetikkan pada cursor saat itu. Maka kita tinggal set UPC/EAN dengan string barcode. 

UPC/EAN di input sesuai dengan kode barcode nya

Lookup product menggunakan empat kolom untuk searching, yaitu: Value, Name, SKU, dan UPC. 
Code lookup product. Terlihat menggunakan 4 field untuk searching
Dengan mengeset UPC maka tinggal cursor kita arahkan pada field product ketika input material receipt line, kemudian kita tembakkan scanner ke barcode, maka product akan terinput. Hal ini juga berlaku pada form-form lain yang menggunakan lookup Product seperti Order, dan Invoice.

2. Cek Input Loading
Nah sekarang modul cek barang waktu loading. Jadi ceritanya saat menaikkan barang ke truck, di cek menggunakan barcode scanner. Banyak model yang bisa digunakan, misalnya digunakan seperti ship/receipt confirmation. Namun saya putus kan membuat form baru dengan mencontoh form create line form pada saat membuat Material Receipt dari Invoice.
Tampilan Form baru Input Loading
Dalam form baru ini ada field Business Partner dan Locator. Proses input loading memang tidak berdasarkan nomor Shipment, namun berdasarkan Business Partner (Customer). Sedangkan locator hanya sebagai pelengkap karena secara default shipment hanya dilayani oleh satu gudang. Untuk keperluan ini diperlukan beberapa tambahan tabel yaitu: M_Loading dan M_LoadingLine. M_Loading akan berisi Business Partner, Locator, Nomor Loading digunakan sebagai nomor document transaksi loading, dan Tanggal Loading yaitu tanggal saat itu. Sedangkan M_LoadingLine berisi Qty loading, Product, dan ShpmentLine.
Kemudian pada tabel M_InOutLine ditambahkan field isBarcodeChecked untuk menyimpan status MInoutLine yang artinya line sudah terkirim semua dan BarcodeCheckedQty yang digunakan untuk menyimpan total qty yang telah terkirim.
Proses pada form ini pertama adalah mengisikan business partner kemudian locator dan nomor loading. Untuk semetara nomor loading diisikan sembarang. Kemudian masukkan qty barang yang akan di scan barcode dan enter, maka cursor akan aktif pada field barcode. Lakukan scan maka otomatis data masuk pada grid dibagian bawah. Setelah input pertama maka field business partner, locator, serta nomor loading akan readonly. Jadi maksudnya kita lakukan terus scan barcode sampai proses selesai. Setelah selesai tinggal tekan tombol dibawah yang akan menutup proses input pada nomor loading tersebut.

Selain itu diperlukan juga print format yang dapat menampilkan barcode dari produk-produk yang ada. Di adempiere 342 sudah support print barcode, namun ada "bug" nya, yaitu printnya terlalu besar. Tidak bisa dikecilkan via setting di printformat item. Setelah dicoba-coba akhirnya saya berhasil mengecilkan barcode yaitu dengan menset barwidth menjadi 1.
Update code agar ukuran barcode kecil.

Contoh hasil cetak barcode tipe code-128

Untuk mendapatkan file-file class baru serta SQL perubahan data bisa didownload dibawah ini:


28 Juli 2011

[Update] Kenalan dengan Adempiere 360 LTS

Sudah lebih dari satu tahun kantor pake adempiere 342. Rasanya sudah saatnyau untuk update. Versi stabil terakhir adalah 360 (Laura). Ada beberapa fitur-fitur baru:
(diambil dari: http://www.adempiere.com/Release_360LTS)

Major Enhancements

  • Improved Manufacturing libero-MFG
  • Improve the visual layout of Info and InfoProduct task pane
  • Stabilization of replication
  • Translation
    • Improved German translations.
    • Swedish translations.
    • Improve Thai Language Pack
    • Translation statistics
  • Improve ADempiere Web Applications
  • Add more details to Organization
  • Documentation update
    • Better looking Help windows.
  • Replication: opening connections
  • Move Adempiere to Java 6
  • Production
    • BOM - Back to Product Window
    • Added new tab "Product Costs" to "Product" window
    • Price List Improvement:allow importing with ID's for PriceList and Version
  • Implementation of zoom to detail tab
  • Calculate Measure based on the script to PA
  • Dunning Stabilization
  • Reporting
    • Improved pdf rendering
    • Report - Storage per Product Improved
    • Added new Report Parameter: Organization
  • ChartOfAccount for Vietnam
  • Improved prcess on Create PO from RfQ
  • Improved borwser IE support
  • Zoom to child tab - Improved performance
  • Improved Credit Limit check (when Invoice BP is <> from Ship BP)
  • Adding weight to base type for tax
  • Fixed Assets Application Dictionary stabilization
  • InfoPanel performance enhancement
  • turn off alternate color row striping to improve rendering performance
  • use database paging and sorting for high volume table

Major Fixes

  • CreateFrom not calling info on zk
  • Initial Client Setup - Accounting schema - empty line
  • stop execution of event when save failed
  • Wrong name and description for DiscontinuedBy field
  • Fixed SQL script to add in Callouts to OrderLine Resource Assignment - thanks to iCyLand, Bangkok's help.
  • Fixed Tax Errors: a) Rate Parent window not working b) Handle the case when no Default Tax Rate is specified.
  • Error in context when Key field is found in different tabs.
  • Error in context when IsActive field is found in different
  • Guarantee backward compatibility with previous approach
  • Added method to get tab context variables without defaulting to window or login variable (required safety measure)
  • Some refactorings to improve reading and performance
  • Reactivate hidden tabs - and move back BOM & Formula window to manufacturing menu
  • Fix Perpetual Inventory window
  • Jasper Report in Process problem
  • Accounting Fact Summary
  • Wrong behavior of non-automatic commit VOSS Com
  • Model Validation Engine duplicate listeners
  • Database issues with Missing foreign keys and Tables without primary key

Prerequisites

  • Java 1.6
  • Oracle >= 10G or PostgresQL >= 8.2
  • To develop and integrate jasper reports use version 3.7.3

Setelah berhasil mendownload source code via svn, kemudian saya coba membukanya di eclipse. Tapi ternyata ada bebarapa error. Tapi saya bisa perbaiki karena baru ingat kalau ademepire 360 pake java 6. Setelah di ganti ke java 6 ternyata masih ada satu file yang error!
Tampilan error adempire 360 di eclipse
Error nya ada pada class CCachedRowSet, "Name clash: The method setTypeMap...has the same erasure as set TypeMap(Map)..."
Saya coba cari di internet, hanya beberapa yang menjelaskan. Salah satunya di situs compiere, dibilang bahwa itu karena masalah java version. Apa mungkin karena versi java saya yang salah? Saya cek ternyata memang benar java 6 (1.6) 
Java 6 !
Tidak mau ambil pusing, saya coba download java 6 terbaru (java 1.6.0-26) namun hasilnya tetap sama. Hmm apa mungkin ada cache yang nyantol? (Seperti kata mas wahyu). Maka saya coba rename java 5 sehingga tidak bisa diakses (jadi di komputer hanya ada java 6), ternyata tetap sama saja! Hmm apa ya?
Kemudian saya coba build dengan RUN_Build.sh, ternyata sukses! Berarti bukan masalah java yang terinstall.
Diskusi sama mas wahyu lagi, disarankan coba dibuka pake netbean. Hasilnya: sukses tanpa error seperti yang ada di eclipse! Berarti sekarang masalah ada pada eclipse! Saya putuskan download versi terakhir dari eclipse (3.7)
Di eclipse yang baru saya coba buat workspace baru dan import project Adempiere lagi. Hasilnya ternyata tetap error. Wah tambah pusing saya, apa kira-kira penyebabnya.
Iseng-iseng saya coba buat class baru pada project baru di eclipse yang mirip dengan class CCachedRowSet

public class test extends CachedRowSetImpl  implements CachedRowSet  {
        private static final long serialVersionUID = 1L;
        private test() throws SQLException
{
super ();
setSyncProvider("com.sun.rowset.providers.RIOptimisticProvider");
} // CCachedRowSet
}
Nah ternyata tidak ada pesan error! Berarti bukan karena masalah eclipsenya. Tapi masalah di project Adempeire. Akhirnya saya coba copy file-file setting project dari tempat mas Wahyu ke tempat saya. Sayang sekali tidak berhasil juga. Tetap ada error! Kemudian saya masukkan test.java itu ke dalam project Adempiere. Ternyata berhasil!! Wah kayaknya harus dipancing dulu baru bisa. Berarti hipotesa pak wahyu bener tuh. Ini pasti gara cache. Jadi masih ambil java 1.5 pada librarynya.

Tampilan setelah test.java di masukkan di project Adempiere. Error pada CCachedRowSet tidak muncul lagi!!



UPDATE

Ternyata masalah "Name clash: The method setTypeMap...has the same erasure as set TypeMap(Map)..." tidak hanya menyerang Adempire 360LTS. Setelah 360 LTS (dengan java 6 nya) sembuh, ternyata Adempiere 342-nya tertular juga. Padahal dengan java 5. Saya coba dengan cara diatas tidak bisa. Hanya saja ketika saya buat project baru dengan java 5, dan membuat class yang diturunkan dari CachedRowSetImpl dan implemen CachedRowSet hasilnya tidak ada error. Trus class itu saya copy ke Adepiere. Jadi error! Hmm, perbedaan project Adempiere dan project Test adalah pada library nya. Jika di Test hanya menggunakan default JRE, maka di Adempire menggunakan eksternal JAR juga. Maka semua eksternal JAR tersebut saya coba lihat satu-satu. Saya curiga ada class dari JRE standart yang ter-replace oleh eksternal JAR. Dan kecurigaan saya benar class javax.sql.RowSet ternyata di override oleh jbossall-client.jar

Class javax.sql.RowSet lain yang ada pada jbossall-client.jar
Nah untuk solusinya, tingal mensetting build path nya aja dan mengganti urutan library yang dipakai. 

Posisi urutan library. Terlihat JRE terletak dibawah jboss-j2ee. Maka menyebabkan RowSet yang diambil adalah dari jboss-j2ee.jar
Tampilan setelah urutan diganti. Tidak ada error lagi.

26 November 2010

JasperReport di Adempiere

Hari ini ada lagi pengunjung blog yang bertanya tentang JasperReport. Kali ini, masalah ketika integrasi di Adempiere. Maunya menampilkan fungsi terbilang (amt in words) di JasperReport. Hmm, selalu saya jawab, saya belum pernah implementasi JasperReport di Adempiere, karena memang saya belum pernah coba. Kali ini saya niat nyoba. Cari-cari tutorial di internet via Google memang banyak sekali, terutama dari situs Adempiere itu sendiri. Saya coba dari sini.

NB: IReport versi: 2.0.2
    Adempiere versi: 342 (Desktop version)
    OS: Ubuntu 8.10

Langkah:
Pertama, buat dulu JasperReportnya via iReport. Gunakan koneksi sesuai koneksi adempiere. Saya coba menampilkan tanggal server.
Query nya: SELECT now() as sekarang
Di test run iReport, hasilnya ok.


Kedua, kita buat process/report baru di Adempiere. 
Login dengan user System, kemudian masuk window Report & Process. Buat baru (pencet New). Isi data-data yang diperlukan. 
Pada  Classname, isikan dengan org.compiere.report.ReportStarter 
Kenapa harus itu? Karena ya class itu yang digunakan untuk load JasperReport di Adempeire. Jika ingin meng-custom proses load, ya tinggal ganti class itu atau buat class baru. (lagian..buat apa custom load JasperReport hehehe...)

Kemudian di field Jasper Report, isikan dengan nama jrxml nya yang akan diload. Ada beberapa pilihan menentukan setting lokasi report. 

Pilihannya (berdasarkan awalan pada field Jasper Report):
http:// atau  https:// : report di simpan pada suatu webserver
attachment:  :report di simpan di attachment adempiere
/  : report di disk. Lokasi langsung fullpath contoh /home/test/test.jrxml
file:/  : lokasi report di tulis dengan format URI
resouce:  : report di simpan dalam bentuk resource
file.jrxml : jika hanya menuliskan nama filenya saja. Maka nanti ada dua pilihan lagi. 
Pertama, ambil folder dari paramteer di org.compiere.report.path, Kedua, jika pilihan pertama tidak di set, diambil dari folder [AdempiereHome]\reports\

Selesai mengisi, lanjutkan ke Tab Paramter jika di niatkan ada parameter di report tersebut.
Field nama digunakan untuk mengisi field's caption pada dialog input parameter. Sedang nama parameter di JasperReport di isikan di DB Column Name.

Setting koneksi pada JasperReport diambilkan current koneksi pada Adempiere. Coba dilihat pada /JasperReports/src/org/compiere/report/ReportStarter.java::startProcess()
conn = getConnection();
JasperPrint jasperPrint = JasperFillManager.fillReport( jasperReport, params, conn);

Ketiga, kita apply proces/report yang telah dibuat. Untuk implementasikan bisa dengan membuat menu sendiri, attach di button, atau menggantikan action print.

Hasilnya:

Nah sekarang, "Bagaimana mengimplementasikan AmtInWords di Jasper Report-Adempiere?"  Setelah baca-baca. Ternyata lebih mudah daripada saat mengimplementasikan di JasperReport via Scriplet. Dengan menggabunkan dengan Adempiere, maka otomatsi semua class di Adempiere dapat di akses dari JasperReport. Jadi kita tinggal panggil class AmtInWords yang telah ada di Adempiere. Prakteknya...

Kita gunakan parameter sebagai inputan yang akan dikonvert jadi terbilang. Pada JasperReport kita tambah Field untuk menampilkan terbilang tersebut. Tipe field String. 
Isikan Expr-nya: new org.compiere.util.AmtInWords_IN().getAmtInWords($P{param1})

Coba di compile...
Eh hasilnya:

Errors compiling ./testJasper2.jasper.
net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file: 1. org.compiere.util.AmtInWords_IN cannot be resolved to a type

Hal ini terjadi karena class-class adempiere (adempiere.jar) belum dapat diakses di IReport. Untuk itu tambahkan adempiere.jar di classpath iReport. (Saat adempiere.jar telah masuk di classpath, maka tiap kali compile akan terasa lebih lama, walau yang dicompile tidak memakai adempiere.jar)

Sebenarnya kita bisa langsung gunakan report di Adempiere tanpa perlu meng-compile. Jika memang yakin report betul, langsung kita save repot di folder report Adempiere, dan run Adempiere. Hasilnya:
Nah jadi kan. Silahkan dicoba dan di kembangkan. Karena dengan bisa mengakses class-class di Adempiere, maka kita bisa melakukan banyak hal. 

By the way, setelah mencoba, ada bug di 342. Yaitu ketika window hasil repot muncul, dan tidak kita close. Maka window itu tetap muncul walau kita melakukan logout dan login lagi dengan session yang berbeda.

23 Juni 2009

Setting Environment untuk Customisasi Adempeire

Selama ini setiap kali ada customisasi di adempiere, saya selalu compile ulang seluruh source. Padahal customisasi hanya di satu class.
Di adempiere telah mensuport hal tersebut. Telah di sediakan 2 penampung customisasi yaitu: customization.jar dan patches.jar. Jika kita lihat source dari Adempiere.bat atau Adempiere.sh, maka urutan prioritas class-class nya adalah:
Customization.jar kemudian Pathces.jar dan baru Adempiere.jar
Maksudnya, jika class MProduct ada di Customization.jar maka di Adempiere.jar tidak dipakai

Untuk membuatnya, tinggal buat new project. Kemudian built path nya di tambah project Adempiere aslinya. Copy kan source yang akan dicustom. Ingat path folder dan package nya di buat sama sesuai dengan aslinya.

Compile dan debug nya seperti biasa karena sudah ada referensi dari project aslinya. Untuk menjadikan JAR tinggal di export ke jar. Kemudian replace Customize.jar yang ada di direktori /lib.

Setup ulang adempiere anda, dan siap digunakan.
Jika tidak maka akan muncul error ketika class baru digunakan.

Source:
http://www.adempiere.com/index.php/Create_your_ADempiere_customization_environment

24 Mei 2008

Adempiere, open ERP

Adempeire ERP
Kenal Adempiere kira-kira setahun yang lalu. Awalnya sih "dikenalin" oleh Compiere, trus karena ternyata banyak yang bilang klo Compiere sedikit "matre" akhirnya lebih deket sama Adempiere. Malah sekarang gak berhubungan dengan Compiere lagi.

Hal sangat menarik dari Adempiere/Compiere adalah struktur programnya yang benar-benar rumit. Dengan semangat fully customized maka sangat sedikit yang terdapat di source code Adempiere, termasuk design form. Design form di lakukan secara on the fly, dan layout form di simpan di database. Jadi, jika Anda ingin melakukan perubahan pada code, lebih baik berpikir dua kali, karena satu perubahan tersebut mungkin akan mempengaruhi seluruh sistem Adempiere. Fitur-fitur Adempiere sudah hampir lengkap. Dengan meliputi Sales, Material Management, Accounting, maka tinggal modul HRD dan Manufacturing untuk menjadiakan Adempiere benar-benar ERP yang sempurna. Selain itu ada fitur Multi yaitu multi currency, multi Organization, Multi Company, Multi Price List, Multi Language, dan multi-multi lainnya.

Saat ini, perusahaan tempat saya bekerja sudah menggunakan Adempiere sebagai software penjualan. Ya, hanya sebagai software penjualan. Hal ini karena proses accounting di perusahaan ini masih belum standart, sehingga akan sulit jika di applikasikan menggunakan Adempiere. Selain itu, dengan cabang yang tersebar di seluruh Indonesia maka sulit dalam melakukan kolaborasi data. Perlu di ingat, bandwidh di Indonesia masih mahal.

Beberapa masalah yang sering kita jumpai dalam penggunaan Adempiere antara lain kesalahan penggunaan oleh user. User perlu di training dengan detail. Karena user adalah pemain utamanya. Ada juga faktor teknis yang sering mengganggu. Penggunaan Posgresql di PC non server menurunkan performansi postgresql itu sendiri, yang pada akhirnya juga menurunkan performansi Adempiere. Begitu juga penggunaan PC dengan spesifikasi rendah di sisi client akan membatasi kecepatan Adempiere.

Seperti yang telah di bahas di atas, struktur kode Adempiere sangat sehingga sulit untuk melakukan trace atau debug, atau saat kita ingin mengubah code. Sebaiknya, programmer meminimalkan oprek-oprek code Adempiere. Jika ingin melakukan penambahan fitur, atau edit rule bisnis, gunakan Adempiere itu sendiri. Karena Adempiere sudah bersifat customable. Namun, jika terpaksa harus coding, lakukan coding yang aman, yaitu lewat Callout. Tapi klo tetap gak bisa? Terserah anda, yang penting berpikirlah code yang akan diubah dapat mempengaruhi seluruh sistem.