Nov 27

Invoicing and payment terms

Commonly used invoice payment terms and their meanings

This list explains many of the terms commonly used on invoices.

Invoice payment terms

Net 7 Payment seven days after invoice date
Net 10 Payment ten days after invoice date
Net 30 Payment 30 days after invoice date
Net 60 Payment 60 days after invoice date
Net 90 Payment 90 days after invoice date
EOM End of month
21 MFI 21st of the month following invoice date
1 % 10 Net 30 1 per cent discount if payment received within ten days otherwise payment 30 days after invoice date
COD Cash on delivery
Cash account Account conducted on a cash basis, no credit
Letter of credit A documentary credit confirmed by a bank, often used for export
Bill of exchange A promise to pay at a later date, usually supported by a bank
CND Cash next delivery
CBS Cash before shipment
CIA Cash in advance
CWO Cash with order
1MD Monthly credit payment of a full month’s supply
2MD As above plus an extra calendar month
Contra Payment from the customer offset against the value of supplies purchased from the customer
Stage payment Payment of agreed amounts at stages

Many of them are working out-of-the-box in our Goodwill ERP. However in implementations we sometimes find a very unusual requirement. Like in one case, in Karawang, they sell  motorcycles with payment term “after harvesting” (what?) which means the customer will pay you after the next harvest season. Only in Indonesia, grrr…. 😀

Anyway, if you need a special treatment for your business case, let us know. We can help you.

Nov 22

Flexible Precision In Numeric Display Type

Hi all,

Today I would like to share my approach to provide  flexible precision in numeric display type. As you know there are several numeric display types in Adempiere / Idempiere. You can find them in the list of Reference Type in Table & Column window. You can see you can have either Number, Amount, Cost+Price, Quantity or Integer. While Integer is obviously for whole number, there is confusion to know the difference between the rest.

The differences are easily tracked down in DisplayType class which you can find in org.compiere.util. It is the minimum number of digits allowed in the fraction portion of a number. So there you have:

Integer  : None
Quantity : None
Amount   : 2
Cost+Price: 2
Number   : 1

As you can see Cost+Price is having the same number of digits as Amount. You can not tell the difference between the two. So let’s make some difference. My workaround is to modify one line in DisplayType class. I would change the code so the minimum fraction digits for Cost+Price is taken from System Configuration that I can manage later. It even gives me better flexibility!

else if (displayType == CostPrice)
{
format.setMaximumIntegerDigits(MAX_DIGITS);
format.setMaximumFractionDigits(MAX_FRACTION);
format.setMinimumFractionDigits(
MSysConfig.getIntValue(“DISPLAY_TYPE_COSTPRICE_FRACTION”, AMOUNT_FRACTION, Env.getAD_Client_ID(Env.getCtx())));
}

In implementation you would probably need to have a numeric display type where it can support more than 2 number of digits in the fraction portion. I hope the modification I share with you today can help you in this situation.

Goodwill Consulting is a long time Adempiere / Idempiere supporter since their inception. We are offering software-as-a-service solution on the cloud based on Adempiere / Idempiere. For more information, you can drop us a visit at www.goodwillerp.com

Nov 21

Keamanan Software Open Source

Banyak orang kerap meragukan sistem keamanan software open source. Menurut anggapan mereka, karena open source maka siapa saja bisa mengetahui sistem keamanan yang digunakan, membongkar kelemahannya dan akhirnya membobolnya.

Menurut saya sebaliknya. Beberapa software propietary memang ada yang menerapkan sistem keamanan yang sifatnya propietary. Tetapi dalam banyak hal, sistem keamanan software open source sama dengan sistem keamanan yang dipakai di software lain. Dengan model terbuka, software open source justru menjamin bahwa sistem keamanan yang dipakai adalah sistem yang jujur.

Cobalah baca berita yang satu ini.

The NSA has asked Linus Torvalds to install backdoors into GNU/Linux

Berita yang mengejutkan ini datang dari pengakuan Nils Torvalds, ayah dari Linus Torvalds si pembuat Linux, yang adalah anggota parlemen Uni Eropa. Karena Linux adalah sistem operasi open source maka hal tersebut mustahil untuk dilakukan karena siapa pun akan dapat menemukan backdoor yang dipasang.

Akan berbeda ceritanya dengan software propietary. Kita tidak akan pernah tahu apa yang terdapat di dalam software tersebut. Pemakai tidak akan pernah tahu ada tidaknya backdoor. Bahkan pejabat resmi vendor software tersebut pun tidak dapat (atau tidak mau) menjawabnya.

Untuk video lengkapnya tonton disini

Kenyataan ini sangat mengerikan apabila kita membayangkan orang lain bisa mengakses dan mengontrol komputer kita karena sistem operasi yang kita pakai mempunyai backdoor. Bagaimana pula dengan aplikasi finansial kita ? Database kita ? Atau firmware yang dipakai di handphone kita ? Tidak heran apabila para pejabat di negeri kita pun tidak luput dari penyadapan yang dilakukan oleh pihak asing.

Karena sebagai pemakai software propietary kita berada dalam posisi konsumen yang lemah. Ibaratnya anda sedang menyantap makanan yang tidak dapat anda ketahui isi dan resepnya. Sebaliknya pada software open source, resiko keamanan seperti ini justru dapat terhindarkan.

Nov 11

Payment Term with Fixed Payment Schedule date

How often you wish you could do something to tweak your ERP ? The blessing to use an open source ERP is you have access to its source codes. Isn’t it great if you could just make a lil bit change so you can get exactly what you want, and not to depend on what your software dictates you.

During one implementation in a car dealer, we were facing with one requirement to support installment sales. We thought it should be easy as we knew Adempiere has already payment schedule feature. Just open up Payment Term window and create a new payment term with Fixed Due Date being checked.

1-year-installment

1-year-installment

And then we entered all the schedules with equally divided percentages, for example if it is a one-year installment than the percentage is 100/12, which 8.3333. The net days is how Adempiere will determine the due date of each schedule, which in this case is the accumulation of 30 days that end up to 360 days (supposedly equal to one year length).

Payment Schedule

Payment Schedule

However, the Fixed Due Date option didn’t give what we expected. The Due date is falling on different date each month! And the worst is in one occasion, two schedules can due on the same month (see month of July in the picture below).

Order Schedule before tweak

Order Schedule before tweak

How it happens ? Because every month has a different length in days, you can’t just accumulate the net days with an exact 30-day length. That explains how we end up with 360 days a year, and not 365 days as in actual.

Luckily we are using open source ERP. There is nothing can stop us. The show must go on. So what we did it back in the day is to bring a new option called Fixed Payment Schedule date. This option will complement the existing Fixed Due date feature.

1-year-installment_fixed

1-year-installment_fixed

The following is how the schedule is generated using this new option. It exactly gives what our client wants that for each month of the installment period, the Due date will certainly fall into the same date. And that shows the power of open source ERP!

Order Schedule after fixed

Order Schedule after fixed

If you think this feature is worthy enough to be included in the next release of Adempiere or Idempiere, let us know. We will also be grateful to have your feedback. Until next time!

Goodwill Consulting is a long time Adempiere / Idempiere supporter since their inception. We are offering software-as-a-service solution on the cloud based on Adempiere / Idempiere. For more information, you can drop us a visit at www.goodwillerp.com

Nov 03

Adempiere, Idempiere atau OpenERP

Sebagai praktisi Open Source ERP, kami sering ditodong dengan pertanyaan ini. Bagaimana memilih open source ERP yang paling sesuai dengan kebutuhan Anda ?

Di Indonesia setidaknya tercatat ada beberapa software open source ERP yang cukup populer. Awal mulanya berangkat dari kemunculan Compiere ERP yang mulai dipakai di sini sejak tahun 2002. Nama-nama seperti Openbravo, Adempiere dan (sekarang) Idempiere semuanya merupakan turunan dari Compiere ERP.

Pengembang awal Compiere dan OpenERP (mula-mula bernama Tiny ERP) mempunyai pendekatan yang berbeda dalam membangun software ERP. OpenERP dirancang sebagai ERP yang ringan, sederhana dan mudah dipakai (makanya dulu namanya Tiny ERP). Jika Anda dahulu adalah pengguna aplikasi akuntansi semacam Accurate atau Zahir, maka pindah ke OpenERP bukanlah persoalan besar.

Jika Anda mengharapkan yang lebih kompleks dari OpenERP, maka Anda perlu mencoba menginstall beberapa modul untuk menemukan fitur yang paling pas buat kebutuhan Anda. Misalnya jika Anda perusahaan distributor, setidaknya Anda memerlukan 5 modul tambahan. Tentunya dengan bantuan konsultan berpengalaman, Anda bisa melalui proses ini dengan lebih cepat.

OpenERP dikembangkan dengan bahasa pemrograman Python yang kurang populer di Indonesia. Oleh sebab itu apabila Anda ingin mengembangkan OpenERP lebih jauh, sebaiknya Anda memiliki professional support sebab mencari programmer yang menguasai Python sangatlah sulit.

Dan sama seperti Compiere, OpenERP juga mengalami nasib di-fork oleh komunitas dengan nama Tryton. Untuk mengetahui perbedaan keduanya dapat dibaca disini.

Kebalikan dari OpenERP, Adempiere dan (sekarang) Idempiere disiapkan dalam satu bundel besar berisi seluruh fitur yang ada dan dirancang untuk mendukung bisnis skala menengah ke atas. Anda dapat mengabaikan fitur-fitur yang tidak ingin Anda pakai dengan mengatur akses pada menu-menunya. Dari sisi skalabilitas, konfigurasi standard Adempiere sanggup mendukung 100 concurrent user. Untuk skala yang lebih besar, Anda bisa menerapkan load balancer dan database cluster.

Adempiere adalah aplikasi berbasiskan Java (J2EE). Ia menggunakan platform ZK (ajax-based) untuk web UI-nya. Pada tahun 2010, Low Hengsin, salah satu top kontributor, melakukan eksperimen mengubah arsitektur Adempiere ke dalam OSGI supaya Adempiere menjadi lebih modular.  OSGI sendiri adalah teknologi atau platform service dan module system untuk Java. Eksperimen ini akhirnya berujung kepada forking baru bernama Idempiere setelah beberapa top kontributor lainnya turut bergabung ke dalamnya.

Secara teknis, apa yang ada di dalam Adempiere diwariskan oleh Idempiere. Pengembangan lanjutan di Idempiere dapat dibuat seperti plug-in. Anda nanti bisa mengaktifkan atau menon-aktifkan plug-in tersebut kapan saja. Namun demikian teknologi ini masih tergolong baru dan saya pikir kita semua masih sama-sama harus sabar menunggu proses pematangan Idempiere.

Goodwill sendiri adalah pendukung dan pengembang Adempiere dan (sekarang) Idempiere. Jadi mungkin Jawaban kami di atas agak bias. Tapi mudah-mudahan penjelasan ini bisa memberikan Anda lebih banyak gambaran. Jika Anda harus memutuskan saat ini, Adempiere masih merupakan pilihan yang bijak. Seperti biasa, kami selalu merekomendasikan versi yang paling stabil (business-wise) – bukan versi yang paling terakhir atau yang paling canggih (technology-wise). Produk utama kami, yakni paket distro Adempiere Indonesia a.k.a Goodwill ERP adalah berbasiskan Adempiere v.3.6.1 dimana kelak Anda dengan mudah dapat bermigrasi ke Idempiere.

Oct 29

Adempiere Cheat Sheet (2)

Ok, sesuai janji penulis akan meneruskan artikel mengenai Adempiere Cheat Sheet.

Apa bedanya SubType SO (Sales Order) ?

Sales Order terdiri atas beberapa sub tipe. Setiap sub tipe mempunyai kelakuan khusus. Untuk tipe POS misalnya, jika dicomplete maka ia akan langsung membuat Shipment, Invoice dan Cash Journal. Sementara pada tipe Standard Order, seluruh dokumen tersebut harus dibuat satu per satu mengikuti aturan yang ada.

Ini dia daftar selengkapnya:

POS = SO -> MM -> AR -> Cash Journal
On Credit Order = SO -> MM -> AR
Prepay Order = SO -> waiting for Payment -> MM -> AR
Warehouse Order = SO -> MM

DOCUMENT SEQUENCE PREFIX PATTERN

Tahukah Anda Adempiere memiliki fitur canggih dalam penomoran dokumen ? Anda bisa menyisipkan nilai dari sebuah kolom ke dalam prefix atau suffix dari nomor dokumen yang digenerate oleh sistem. Misalnya, jika Anda menerapkan penomoran dokumen per cabang, maka Anda ingin menyisipkan kode cabang pada prefix dokumen supaya nomor dokumennya unik dan mudah diidentifikasikan.

Caranya mudah. Pada window Document Sequence, sebagai contoh masukan “SO/@AD_Org_ID@” pada field Prefix.

Maka variabel @AD_Org_ID@ akan diartikan sebagai perintah untuk mencetak kode id organisasi yang bersangkutan secara otomatis. Jika kode id dirasa tidak manusiawi, maka Anda pun bisa melakukan seperti ini:

Ubahlah isian di atas menjadi “SO/@AD_Org_ID<Value>@”.

Adempiere akan menerjemahkan ini sebagai perintah untuk lookup ke table AD_Org dan mengambil isi dari field Value yang ada pada table tersebut untuk disisipkan ke dalam prefix nomor dokumen. Dengan demikian, maka nomor dokumen Anda kira-kira akan seperti ini hasilnya:

SO/JKT/1…

SO/MDN/1…

SO/SBY/1…

Libero BOM

Set the BOM Type to ‘Make-to-Kit’, as this option will be useful when we create manufacturing order directly from the sales order. BOM Type has following options

Make-to-Kit -> Create a Manufacturing Order, Receipt for the finish product and issue the Components automatically
Current Active -> Only one active BOM will be allowed for a product
Make-to-Order – > Components can have attribute set instance, otherwise it will not allow
Product Configure -> No Implementation
Repair -> No Implementation

Set BOM Use to ‘Manufacturing’. Following BOM Use options are available

Master -> No Implementation
Engineering -> No Implementation
Manufacturing -> Create a Manufacturing Order, Receipt the finish product and issue the Components automaticaly
Planning -> No Implementation
Quantity -> No Implementation

Change Notice is useful, when some one wants to change the composition of existing BOM product. Generally in manufacturing, changing composition is governed by set rules.

Step (4) Configure Product Components in ‘Components’ included tab on the BoM tab of product window

Set Component Type to Component
Set Issue Method to Back Flush. Following Issue Method Types are supported:
Back Flush – Raw Material will be reduced automatically and components will be increased automatically
Issue – No implementation
Floor Stock – No Implementation
Components Can be configured as percentage, but in the current example we have used quantity

————————————————————————————-
The Libero BOM Component Type can be:

1.- By Product: Define a By Product as Component into BOM
2.- Component: Define a normal Component into BOM
3.- Option: Define an Option for Product Configure BOM  -> Optional
4.- Phantom: Define a Phantom as Component into BOM
5.- Packing: Define a Packing as Component into BOM
6.- Planning : Define Planning as Component into BOM
7.- Tools: Define Tools as Component into BOM
8.- Variant: Define Variant  for Product Configure BOM -> Alternative 1..9, then Optional

Daftar Table ID dan Urutan Proses Posting (Adempiere v.342)

public static int[]  documentsTableID = new int[] {
MJournal.Table_ID,            //  GL_Journal – 224
MOrder.Table_ID,            //  C_Order – 259
MInvoice.Table_ID,            //  C_Invoice – 318
MInOut.Table_ID,            //  M_InOut – 319
MInventory.Table_ID,        //  M_Inventory – 321
MMovement.Table_ID,            //  M_Movement – 323
X_M_Production.Table_ID,    //  M_Production – 325
MPayment.Table_ID,             //  C_Payment – 335
MBankStatement.Table_ID,    //  C_BankStatement – 392
MCash.Table_ID,                //  C_Cash – 407
MMatchInv.Table_ID,            //  M_MatchInv – 472
MMatchPO.Table_ID,            //  M_MatchPO – 473
MProjectIssue.Table_ID,        //    C_ProjectIssue – 623
MRequisition.Table_ID,        //    M_Requisition – 702
MAllocationHdr.Table_ID    //  C_Allocation – 735
};

Price List Schema

Ketika menyusun Price List Schema, mulailah dari kondisi yang general menuju spesifik. Baris pertama biasanya diisi dengan kondisi yang general (biarkan semua kolom kosong). Ini memastikan semua item akan masuk ke dalam Price List nantinya. Kemudian lanjutkan pada baris kedua dengan kondisi yang agak spesifik (misalnya Product Category diisi). Lalu lanjutkan lagi pada baris ketiga dengan kondisi yang makin spesifik (misalnya kolom Product diisi).

Cara pengisian yang terbalik (spesifik -> general) akan membuat hasil proses Generate Price List menjadi tidak benar karena rumusan kondisi yang spesifik akan tertimpa dengan rumusan yang general.

Staging Discount

Anda bisa menerapkan staging discount di dalam Discount Schema. Yang Anda harus perhatikan adalah urutan pengisiannya harus dimulai dari nilai break yang terbesar. Misalnya Anda sedang menyiapkan promo diskon untuk pembelian 10 unit diskon 1%, 50 unit diskon 2% dan 100 unit diskon 4%. Maka urutan pengisiannya harus dimulai dari yang terbesar yakni 100 unit pada baris 10, disusul dengan 50 unit pada baris 20 dan terakhir 10 unit pada baris 30.

discountbreak

Catatan: Nomor baris sengaja dilongkapi 10 supaya jika Anda butuh penambahan, maka Anda bisa menyisipkannya dengan mudah tanpa harus melakukan pengurutan seluruhnya.

Demikian Adempiere Cheat Sheet kali ini. Mudah-mudahan bermanfaat. Sampai jumpa.

Goodwill Consulting adalah bagian dari komunitas pengembang dan pendukung Adempiere. Jika Anda membutuhkan bantuan profesional untuk implementasi Adempiere, silahkan menghubungi kami.

Oct 29

Implementation options for holding company

Implementation options for holding company.

Many times we are facing this scenario. Our client has more than one business (legal) entities. How do you deal with that ?

Option 1: Implement in single Adempiere client (A as the holding company). The subsidiaries will go as Organization A1, Organization A2, and so on.

Consequences:
– All subsidaries must be 100% own, as Adempiere don’t take care of % role up.
e.g. Company A own 51% of company A1, hence only will take in 51% of profit, assets, liability…etc…
– All data is in one Client instance. So,
+ Online realtime information access & reports
+ One mass up, all mass up (possible)
+ One Financial Calendar (not all company share the same Financial Calendar.
Some are Industry driven.)   – You can make each Organization have their own calendar but at the end you lose the ability to consolidate)
+ So everyone open and close period the same time.
+ One accounting schema (Segment value is also very much Industry specific)
+ One accounting elements (COA) – Don’t think it goes well with CFO of each subsidary. Normally they like to be in FULL control of their accounts set up/make up.
+ No need manual export, format, load data
+ Security access control is much more challenging
+ All must have real time connection to one server

Option 2: Implement into separate Adempiere clients.

Consequences:
– Will be the opposite of above
– Need a consolidation module to produce consolidated Financial Report for holding company.

– If you install in different instances (can be physical or virtual server), you can back up separately. One goes down, the rest is still intact. – But you need to do updates and upgrades to each instances.

Conclusion:

If all of your subsidiaries are the same industry, you can take your bet on first option. Just make sure you have a strong backup and recovery strategy. If not, it is still better to choose second option.

Goodwill Consulting adalah bagian dari komunitas pengembang dan pendukung Adempiere. Jika Anda membutuhkan bantuan profesional untuk implementasi Adempiere, silahkan menghubungi kami.

Oct 27

Adempiere Cheat Sheet

Bergelut dengan aplikasi seluas ERP, banyak hal yang harus nempel terus di otak kita. Tapi seringkali justru hal-hal yang kecil dan sepele malah menjadi tidak mudah diingat. Kiat penulis adalah membuat catatan sederhana yang berfungsi sebagai “cheat sheet” alias kertas contekan supaya kita dengan cepat menemukan kembali jawabannya.

Berikut ini penulis ingin berbagi beberapa contekan yang sering dipakai oleh penulis.

ADempiere Conversion

Kalau anda sering lupa atau menjadi linglung bagaimana mengentri konversi kurs atau UOM, ini patokannya.

USD ke IDR, isi nilai tukarnya di kolom “multiply rate” (misalnya 10000).

Untuk UOM, jika satuan terkecil di master Product adalah kg.
Konversi Kg ke Ton, masukan angka “1000” di kolom “divide rate”.

Inget ya, jangan kebalik 🙂

DISPLAY TYPE

Adempiere menyediakan beberapa macam “display type” untuk tipe data numerikal. Pada window Table & Column, Anda bisa menentukannya dengan mudah lewat field Reference. Namun demikian, ternyata acapkali kita sering dibuat bingung mau pilih “display type” yang mana, karena Adempiere sama sekali tidak memberi petunjuk perbedaannya.

Ok, dengan menengok coding-nya (DisplayType.java) ternyata perbedaannya adalah pada pengaturan “minimum fraction digit” seperti ini:

Integer  : –
Quantity : –
Amount   : 2
CostPrice: 2
Number   : 1

Catatan: Ternyata Amount dan Cost Price tidak memiliki perbedaan. Dengan sedikit modifikasi, penulis membuat tipe Cost Price bisa dikonfigurasi. Sehingga jika ada kebutuhan di atas 2 digit di belakang koma, maka penulis tinggal mengaturnya saja di System Configurator.

Why can’t I issue my Expense report ?

Ketika kita menjalankan proses Project Issue dengan menggunakan Expense Report, sering kali kita mengalami kegagalan dengan pesan yang sama sekali tidak dapat memberi petunjuk kepada user apa yang menjadi penyebabnya.

Sebenarnya penyebabnya ada 4 hal, yakni:
1.    Expense Report harus punya Product
2.    Expense Report harus punya Quantity
3.    Expense Report harus sama Project
4.    Expense Report belum pernah diissue sebelumnya.

Dengan sedikit modifikasi, sekarang penulis membuat pesan kesalahan menjadi jelas sehingga user tahu penyebabnya yang mana.

SEED COST LOGIC

Bagaimana cara Adempiere mencari harga pokok sebuah produk ? Ini dia yang sering membuat mumet. Kalau Anda tidak tahu logik pencariannya, dijamin Anda bakal sering-sering menepuk jidat Anda sendiri.

Ok, ini dia urutan pencariannya (asumsi pakai Costing Method Average PO):

1. M_Cost (Costing tab), field CurrentCostPrice, Cost Element = Average PO
2. C_OrderLine_ID, field PriceCost then field PriceActual (included tax corrected)
3. M_Cost (Costing tab), field CurrentCostPrice, Cost Element = Standard Costing, per Org
4. Last Invoice Price (included tax corrected)
5. Last PO Price (included tax corrected)
6. M_Product_PO (Purchasing tab), field PO Price, current vendor first
7. Purchase Price List, most current, field PriceStd then field PriceList

Print Format Lookup Logic

Bagaimana Adempiere menemukan default Print Format untuk form yang mau kita cetak ? Tergantung jenis formnya, Anda bisa mengeceknya dalam daftar berikut. Apabila Anda sudah tahu logik ini, maka Anda bisa membuat pengaturan default Print Format dengan lebih baik.

1. CHECK – Bank Account Document, then Document Type
2. DUNNING – Dunning Level
3. REMITTANCE – Print Form
4. PROJECT – Print Form
5. RFQ – RFQ Topic
6. MOVEMENT – Document Type
7. REQUISITION – Document Type
8. VOUCHER – Document Type
9. ORDER – Document Type, then Print Form
10. SHIPMENT – Document Type, then Print Form
11. INVOICE – Business partner, then Document Type, then Print Form
12. MANUFACTURING ORDER – Print Form
13. DISTRIBUTION ORDER – Print Form
14. INVENTORY – Document Type

VARIABLE SPESIAL UNTUK PENCETAKAN

Tahukah Anda jika Adempiere menyediakan beberapa variable spesial yang bisa Anda pakai dalam pencetakan, misalnya ketika Anda butuh mencetak nomor halaman dan jumlah halaman seperti ini.

“Hal 1 dari 10”

Variable ini tidak terdokumentasi dengan baik tetapi sebenarnya dapat Anda baca dengan menekan F1 (Help) ketika berada di jendela Print Format. Berikut kutipannya:

Item in the print format maintaining layout information. The following additional variables are available when printing:
@*Page@ – the current page number
@*PageCount@ – the total number of pages
@*MultiPageInfo@ – “Page x of y” – only printed if more than one page
@*CopyInfo@ – if it is a copy of the document “Duplicate” is printed
@*ReportName@ – name of the report
@*Header@ – Full Header with user/client/org name and connection
@*CurrentDate@ – the user who prints this report
@*CurrentDateTime@ – the print time
@*CurrentUser@ – the user who prints this report
The layoit logic for forms is:
– if not printed: ignore
– set New Line Position
– new page
– new line, if something was printed since last new line
– format item
– print it (if not null/empty selected)
(i.e. supress null does not prevent new line)

Catatan: khusus variable @*CurrentUser@ adalah tambahan fitur dari tim Goodwill. Jika Anda membutuhkannya, silakan hubungi tim Goodwill untuk penjelasan teknisnya.

Sekian dulu sharing “Adempiere cheat sheet”-nya. Penulis berjanji akan meneruskan sharingnya di lain kesempatan. Semoga bermanfaat.

Goodwill Consulting adalah bagian dari komunitas pengembang dan pendukung Adempiere. Jika Anda membutuhkan bantuan profesional untuk implementasi Adempiere, silahkan menghubungi kami.

Oct 25

Pengaturan Akses Field di Adempiere

Ketika Anda dihadapkan pada situasi dimana Anda harus membatasi siapa yang bisa mengakses data tertentu, Anda tidak perlu khawatir karena Adempiere memiliki fitur Role-based Security Access yang sangat lengkap. Anda bisa mengatur akses data mulai dari level Tabel, Column atau Field, sampai ke Record. Dalam kesempatan ini, saya akan bahas bagaimana melakukan pengaturan akses field di Adempiere.

Misalnya, Anda diminta untuk membatasi siapa yang dapat mengganti Price List di jendela Sales Order. Ketika kita memasukkan Business Partner, field Price List ini akan terisi dengan Price List yang sudah diatur dalam master Business Partner tersebut. Sehingga idealnya, field ini tidak boleh diganti-ganti lagi. Staf Sales Admin dapat melihat field tersebut tetapi mereka tidak diperkenankan untuk mengubahnya. Hanya Sales Manager saja yang diperkenankan untuk mengubahnya.

Untuk melakukan pengaturan ini, Anda bisa membuka menu Role Data Access. Kemudian pilihlah Role yang hendak kita setup, misalnya role Sales Admin. Pindah ke tab Column Access, pilih tabel C_Order, lalu pilih kolom M_PriceList_ID. Centang Exclude dan Read Only. Simpan.

Ya, cukup begitu saja. Mudah bukan ? Sekarang Anda logout dan login dengan role Sales Admin. Bukalah menu Sales Order. Anda masih bisa menemukan field Price List tetapi Anda tidak dapat mengubah-ubahnya lagi. Jika Anda login sebagai Sales Manager, Anda masih dapat mengubah field tersebut.

Kasus lain, mungkin Anda harus menyembunyikan seluruh kolom yang berkaitan dengan harga, misalnya kolom Total Lines dan Grand Total di jendela Sales Order. Juga kolom Price, Unit Price, List Price dan Line Net Amount di tab Sales Order Line.

Anda bisa melakukan langkah-langkah yang sama seperti di atas. Jika Read Only tidak dicentang, maka berarti kolom-kolom tersebut tidak dapat dilihat sama sekali oleh role bersangkutan.

Namun demikian langkah-langkah ini akan sangat panjang karena jumlah kolom yang berkaitan dengan harga sangatlah banyak. Untuk itu tim Goodwill menambahkan satu fitur di dalam menu Role, dimana Anda cukup mengatur apakah role tersebut “Can Read Price” dan / atau “Can Read PO”.

Jika Anda mencentang “Can Read Price” maka role tersebut dapat membaca semua kolom yang berkaitan dengan harga, jika tidak dicentang maka sebaliknya role tersebut tidak dapat membaca harga, bahkan sampai termasuk harga-harga yang ada di dalam jendela Product Info, Order Info dan Invoice Info, serta harga-harga yang ada di dalam report tertentu.

akses field

Sedangkan “Can Read PO” mempunyai maksud apabila dicentang maka role tersebut dapat mengakses informasi mengenai harga beli dan harga pokok. Dengan membuang centangnya, maka Anda bisa memastikan role tersebut tidak dapat membaca informasi yang sangat rahasia ini.

Kedua fitur ini sangat memudahkan Anda untuk melakukan pengaturan yang sangat penting ini karena harga adalah salah satu informasi yang sangat sensitif dan patut dijaga dari pihak-pihak yang tidak berkepentingan.

Goodwill Consulting adalah bagian dari komunitas pengembang dan pendukung Adempiere. Jika Anda membutuhkan bantuan profesional untuk implementasi Adempiere, silahkan menghubungi kami.

Oct 24

Penerapan Cost Center atau Profit Center di Adempiere

Dalam implementasi Adempiere, sering kita dihadapkan pada pertanyaan bagaimana menerapkan Cost Center atau Profit Center dengan tepat. Adempiere menyediakan berbagai pilihan untuk model konsep ini.

Pertama, dan yang terpenting adalah pengaturan Organisasi. Di Adempiere, Anda dapat membuat entitas organisasi tanpa batas . Anda dapat menentukan dan membedakan berbagai jenis organisasi ( Divisi , Cabang, Anak Perusahaan, Sister Company, dll). Anda juga bisa menciptakan beberapa hirarki organisasi yang berbeda ( misalnya dari sudut pandang kepemilikian, geografis, pelaporan , dsb ) . Sebuah Organisasi setidaknya mempunyai Asset, entah itu berupa kas atau persediaan barang. Jadi ketika Anda membuat sebuah Organisasi, biasanya akan diikuti pula dengan pembuatan buku kas dan gudang.

Setiap transaksi dalam Adempiere (seperti Invoice dan Payment) harus diasosiasikan dengan suatu Organisasi, karena nantinya Organisasi tersebut juga dipakai dalam laporan pembukuan.

Organisasi dapat dihubungkan dengan Business Partner (Mitra Usaha) sehingga Anda bisa menciptakan transaksi antar Organisasi dengan mudah. Dari sudut pandang akuntansi, entitas Organisasi ini merupakan segment yang harus balance. Oleh karena itu, secara default, Adempiere akan menciptakan jurnal hutang & piutang inter-company secara otomatis sehingga Anda bisa mendapatkan laporan yang balance dari sudut mana pun. Adempiere bahkan juga mampu menciptakan dokumen lawan transaksi secara otomatis, jika fitur Counter Document diaktifkan.

Tetapi mungkin pula Anda tidak membutuhkan fitur ini. Mungkin Anda mempunyai bisnis proses yang melibatkan banyak transaksi antar unit, dan Anda sama sekali tidak membutuhkan tambahan jurnal inter-company. Dengan sedikit pengaturan, Anda bisa membuat Adempiere bekerja seperti yang Anda inginkan.

Dalam Adempiere, ada dua segment Organisasi yakni Organization (AD_Org_ID) dan Transaction Organization (AD_OrgTrx_ID). Anda bisa menempatkan badan usaha (legal entity) sebagai Organization, sementara unit-unit usaha yang lebih kecil sebagai Transaction Organization. Adempiere tidak akan menciptakan tambahan jurnal inter-company pada  segment Transaction Organization.

Contoh implementasi seperti ini adalah pada perusahaan dealer mobil yang memiliki 10 cabang yang masing-masing memiliki 1 sampai 3 unit bisnis yakni Sales, Spareparts dan Services. Karena cabang adalah legal entity (NPWP sendiri, laporan neraca dan rugi laba yang terpisah), maka Anda menempatkan cabang sebagai Organization. Sedangkan 3 unit bisnis tadi sebagai Transaction Organization. Dengan demikian, Anda dapat membagi satu Invoice ke dalam beberapa unit bisnis ( misalnya baris transaksi jasa masuk ke unit Services dan baris transaksi barang masuk ke unit Spareparts ).

Dengan sedikit customization, Anda bisa melakukan pengaturan misalnya cabang X mempunyai ketiga unit tersebut sementara cabang Y hanya memiliki unit Sales saja. Tekniknya adalah cukup dengan menggunakan Dynamic Validation. Untuk kasus yang lebih kompleks, Anda bisa juga menerapkan Model Validation.

Apabila kondisi Cost Center mempunyai struktur yang lebih lepas (tidak terkait dengan struktur Organisasi, tidak mempunyai Asset), Anda cukup menggunakan segment Activity. Semoga tulisan ini bermanfaat dan memberikan pencerahan.

Goodwill Consulting adalah bagian dari komunitas pengembang dan pendukung Adempiere. Jika Anda membutuhkan bantuan profesional untuk implementasi Adempiere, silahkan menghubungi kami.