Thursday, June 21, 2007

Gradient Form In VB

Mungkin anda pernah lihat ada form yang warna backgroundnya berwarna dengan tipe gradient. Jika program tersebut dibuat melalui VB, maka hanya ada 2 (dua) cara untuk membuat hal tersebut, yaitu :

  1. Buat gambar gradient melalui software Adobe Photoshop, Macromedia Fireworks, dll. kemudian taruh gambar tersebut sebagai background picture dari form.
  2. Ketikkan kode ini di form :
Private Sub Form_Paint()
ON ERROR RESUME NEXT
ScaleMode = vbPixels
DrawStyle = 5
DrawWidth = 1
For I = 0 To ScaleHeight Step ScaleHeight \ 64

Line (-1, I - 1)-(ScaleWidth, I + ScaleHeight \ 64),
RGB(0, 255 - I * 255 \ ScaleHeight, 200), BF

DoEvents
Next I
End Sub

Sudah dicoba code diatas ? Nah sekarang anda tahu kan gradient itu sebenarnya terbuat dari apa. Tipuan mata saja kok, sebenarnya gradient itu hanya terdiri dari garis - garis yang dibuat dengan warna yang berlainan untuk.

Anda bisa lihat penggunaan sintax "Line" di MSDN, untuk pemilihan warna terletak pada code berikut :

RGB(0, 255 - I * 255 \ ScaleHeight, 200)

Perintah diatas menentukan pilihan warna pada garis yang akan digambar. Karena perintah Line terdapat di dalam looping For, maka warnanya juga berubah seiring dengan lokasi penggambaran garis.

Tuesday, June 19, 2007

Set Tanggal Update secara Otomatis

Kebiasaan aku nih, kalo bikin tabel selalu menambahkan field "dtModified" yang bertipe datetime. Untuk mengisi tanggal update dari suatu record, kita bisa menambahkan trigger sbb :

CREATE TRIGGER [dbo].[trg_MAkun_dtModified] ON [dbo].[MAkun]
FOR UPDATE
AS

if not update( dtModified )
update MAkun
set dtModified = getdate()
from MAkun R, Inserted I
where R.AkunID = I.AkunID

Keterangan : pada contoh diatas, nama tabelnya MAkun, dengan demikian jika ada perubahan nilai pada field apapun ( kecuali field "dtModified") tanpa harus mengisikan nilainya dari program.

Kenapa kok tidak semua field ???

Karena kalau tidak kita filter

if not update( dtModified )

Maka trigger ini akan dijalankan terus menerus oleh SQL Server. Selain itu filter ini juga berguna jika kita ingin merubah field "dtModified"-nya. Trust me, kadang-2 hal itu perlu juga ... :)

ACCOUNTING PROGRAMMING Bag. 1 : MASTER

Accounting, kalo di-Bahasa Indonesia-kan artinya “meng-akun-kan” ( berdasarkan kamus boso Inggris Jowo by Dhani …:) ) sebenarnya adalah proses pemilahan pos-pos penampungan nilai ( yang biasanya dinilai dengan uang ) dari suatu badan usaha. Selanjutnya akan saya sebut akuntansi.

Disini saya akan menjelaskan bagaimana desain database untuk pembuatan master data bagi database untuk accounting. Anda dapat menggunakan database engine apapun, namun penjelasan saya dibawah ini memakai bahasa2 dalam Microsoft SQL Server 2000.

Hubungannya dengan programming dapat dihubungkan sebagai berikut :

  • Karena dalam akuntansi ( di dunia pada umumnya dan terutama di Indonesia ) dikenal 5 grup akun yaitu AKTIVA ( Asset ), KEWAJIBAN ( Liability ), MODAL ( Equity ), PENDAPATAN ( Revenue ), dan BIAYA ( Expense ). Maka anda harus membuat 1 ( satu ) table yang menyimpan data2 tersebut, anjuran desain table :
Nama Tabel : MGrupAkun

Field, Tipe Data, Not Null, Primary Key, Identity, Default Value, Description
GrupAkunID, int, Yes, Yes, Yes, [EMPTY], Menyimpan ID Grup Akun
GrupAkun, varchar( 25 ), Yes, No, No, [EMPTY], Menyimpan Nama Grup Akun dalam Bahasa Indonesia
GrupAkunEng, varchar( 25 ), Yes, No, No, [EMPTY] , Menyimpan Nama Grup Akun dalam Bahasa Inggris
dtCreated, datetime, Yes, No, No, getdate(), tanggal dibuat
dtModified, datetime, Yes, No, No, getdate(), tanggal dimodifikasi
UpdatedBy, varchar( 25 ), Yes, No, No, ‘PRGMR’, User yang menambahkan / mengganti data

Catatan : Sekiranya setelah table ini dibuat, segera isikan ke-lima grup akun yang sudah dibahas diatas. Karena kelima grup tersebut sebenarnya tidak akan pernah bisa ditambah atau diganti ( kecuali kalo memang akan ditemukan satu Grup Akun lagi yang diakui oleh orang2 accounting di seluruh dunia. Jadi isinya kurang lebih ( atau pasti ) sbb :

GrupAkunID, GrupAkun, GrupAkunEng, dtCreated, dtModified, UpdatedBy
1, Aktiva, Asset, [automatic], [automatic], ‘PRGMR’
2, Kewajiban, Liability, [automatic], [automatic], ‘PRGMR’
3, Modal, Equity, [automatic], [automatic], ‘PRGMR’
4, Pendapatan, Revenue, [automatic], [automatic], ‘PRGMR’
5, Biaya, Expense, [automatic], [automatic], ‘PRGMR’

  • Setelah kita membuat table untuk Master Grup Akun, untuk mempermudah pelaporan di akuntansi, saya sarankan anda membuat 1 ( satu ) table yang menyimpan data – data JENIS AKUN. Tabel ini sebenarnya bersifat sunnah ( tidak wajib ), namun akan sangat membantu kita dalam pelaporan akuntansi. Anjuran desain table :
Nama Tabel : MJenisAkun

Field, Tipe Data, Not Null, Primary Key, Identity, Default Value, Description
JenisAkunID, int, Yes, Yes, Yes, [EMPTY], Menyimpan ID Jenis Akun
GrupAkunID, int, Yes, No, No, [EMPTY], Menyimpan nilai Grup Akun dari Jenis Akun tersebut
KodeJenisAkun, varchar( 5 ), Yes, No, No, [EMPTY], Menyimpan kode Jenis Akun
JenisAkun, varchar( 50 ), Yes, No, No, [EMPTY], Menyimpan Nama Jenis Akun dalam Bahasa Indonesia
JenisAkunEng, varchar( 50 ), Yes, No, No, [EMPTY] , Menyimpan Nama Jenis Akun dalam Bahasa Inggris
dtCreated, datetime, Yes, No, No, getdate(), tanggal dibuat
dtModified, datetime, Yes, No, No, getdate(), tanggal dimodifikasi
UpdatedBy, varchar( 25 ), Yes, No, No, ‘PRGMR’, User yang menambahkan / mengganti data

Catatan : Jenis akun sangat bervariasi tergantung bagaimana perusahaan tersebut ingin mengelompokkan akun-akunnya. Berikut ini contoh Jenis Akun di dalam database yang dipakai untuk perusahaan retail / restoran / hotel :

JenisAkunID, GrupAkunID, KodeJenisAkun, JenisAkun, JenisAkunEng, dtCreated, dtModified, UpdatedBy
1, 1, 101, Kas, Cash, [automatic], [automatic], ‘PRGMR’
2, 1, 102, Bank, Bank, [automatic], [automatic], ‘PRGMR’
3, 1, 103, Aktiva Tetap, Fixed Asset, [automatic], [automatic], ‘PRGMR’
4, 1, 104, Aktiva Lain-Lain, Other Asset, [automatic], [automatic], ‘PRGMR’
5, 1, 105, Aktiva Lancar lain-lain, Other Current Asset, [automatic], [automatic], ‘PRGMR’
6, 1, 106, Akumulasi Penyusutan, Accumulated Depreciation, [automatic], [automatic], ‘PRGMR’
7, 1, 107, Piutang Giro, Note Receivables, [automatic], [automatic], ‘PRGMR’
8, 1, 108, Piutang Usaha, Account Receivables, [automatic], [automatic], ‘PRGMR’
9, 1, 109, Piutang Lain - Lain, Other Receivables, [automatic], [automatic], ‘PRGMR’
10, 1, 110, Persediaan Barang, Inventories, [automatic], [automatic], ‘PRGMR’
11, 2, 201, Hutang Jangka Pendek, Short - Term Loan, [automatic], [automatic], ‘PRGMR’
12, 2, 202, Hutang Pajak, Tax Payables, [automatic], [automatic], ‘PRGMR’
13, 2, 203, Hutang Usaha, Account Payables, [automatic], [automatic], ‘PRGMR’
14, 2, 204, Hutang Lain - Lain, Other Payables, [automatic], [automatic], ‘PRGMR’
15, 3, 301, Modal Dasar, Capital Stock, [automatic], [automatic], ‘PRGMR’
16, 3, 302, Laba Ditahan, Retained Earning, [automatic], [automatic], ‘PRGMR’
17, 3, 303, Laba Rugi Tahun Berjalan, Profit ( Loss) Current Year, [automatic], [automatic], ‘PRGMR’
18, 4, 401, Penjualan Tunai, Cash Sales, [automatic], [automatic], ‘PRGMR’
19, 4, 402, Penjualan Kredit, Credit Sales, [automatic], [automatic], ‘PRGMR’
20, 4, 403, Pendapatan Lain - Lain, Other Revenue, [automatic], [automatic], ‘PRGMR’
21, 5, 501, Harga Pokok Penjualan, Cost Of Goods Sold, [automatic], [automatic], ‘PRGMR’
22, 5, 502, Biaya Retur Pembelian, Purchasing Return, [automatic], [automatic], ‘PRGMR’
23, 5, 503, Biaya Penjualan, Sales Expenses, [automatic], [automatic], ‘PRGMR’
24, 5, 504, Biaya Umum dan Administrasi, General & Administrative Expenses, [automatic], [automatic], ‘PRGMR’
25, 5, 505, Biaya Lain - Lain, Other Expenses, [automatic], [automatic], ‘PRGMR’

  • Jika kita akan membuat program multi currency, maka sebaiknya kita membuat satu table untuk menyimpan data mata – uang apa saja yang dipakai, anjuran desain table :
Nama Tabel : MMataUang

Field, Tipe Data, Not Null, Primary Key, Identity, Default Value, Description
MataUangID, int, Yes, Yes, Yes, [EMPTY], Menyimpan ID MataUang
InisialMU, varchar(5), Yes, Yes, Yes, [EMPTY], Menyimpan inisial matauang
NamaMU, varchar(25), Yes, Yes, Yes, [EMPTY], Menyimpan Nama matauang
dtCreated, datetime, Yes, No, No, getdate(), tanggal dibuat
dtModified, datetime, Yes, No, No, getdate(), tanggal dimodifikasi
UpdatedBy, varchar( 25 ), Yes, No, No, ‘PRGMR’, User yang menambahkan / mengganti data

Contoh data mata uang :

MataUangID, InisialMU, NamaMU, dtCreated, dtModified, UpdatedBy
1, IDR, Indonesian Rupiah, [automatic], [automatic], ‘PRGMR’
2, USD, American Dollar, [automatic], [automatic], ‘PRGMR’
3, SGD, Singapore Dollar, [automatic], [automatic], ‘PRGMR’
4, EUR, Euro, [automatic], [automatic], ‘PRGMR’
5, JPY, Japan Yen, [automatic], [automatic], ‘PRGMR’

  • Di dalam accounting ada yang namanya Laporan Laba Rugi, nah di dalam laporan itu dikelompokkan menjadi beberapa bagian, sebaiknya anda juga membuat table untuk menyimpan keoompok2 Laba / Rugi tersebut. Anjuran desain table :
Nama Tabel : CGrupLR

Field, Tipe Data, Not Null, Primary Key, Identity, Default Value, Description
GrupLRID, int, Yes, Yes, Yes, [EMPTY], Menyimpan ID Grup Laba Rugi
GrupLR, varchar(50), Yes, Yes, Yes, [EMPTY], Menyimpan Nama Grup Laba / Rugi dalam Bahasa Indonesia
GrupLREng, varchar(50), Yes, Yes, Yes, [EMPTY], Menyimpan Nama Grup Laba / Rugi dalam Bahasa Inggris
dtCreated, datetime, Yes, No, No, getdate(), tanggal dibuat
dtModified, datetime, Yes, No, No, getdate(), tanggal dimodifikasi
UpdatedBy, varchar( 25 ), Yes, No, No, ‘PRGMR’, User yang menambahkan / mengganti data

Catatan : sepengetahuan saya, hanya ada 7 ( tujuh ) kelompok Laba / Rugi, di dalam database bisa anda isi sbb :

GrupLRID, GrupLR, GrupLREng, dtCreated, dtModified, UpdatedBy
1, Biaya Administrasi & Umum, General & Administrative Expenses, [automatic], [automatic], ‘PRGMR’
2, Biaya Lain – Lain, Non – Operating Expenses, [automatic], [automatic], ‘PRGMR’
3, Biaya Penjualan, Selling Expenses, [automatic], [automatic], ‘PRGMR’
4, Harga Pokok, Cost Of Goods Sold, [automatic], [automatic], ‘PRGMR’
5, Pajak Penghasilan, Tax Expense (Income), [automatic], [automatic], ‘PRGMR’
6, Pendapatan Lain – Lain, Non- Operating Income, [automatic], [automatic], ‘PRGMR’
7, Penjualan, Sales, [automatic], [automatic], ‘PRGMR’

  • Sekarang kita masuk ke bagian yang paling “mengasyikkan” di desain database master akuntansi, yaitu pembuatan akun – akun untuk transaksi yang terjadi di dalam suatu badan usaha. Anjuran desain table :
Nama Tabel : MAkun

Field, Tipe Data, Not Null, Primary Key, Identity, Default Value, Description
AkunID, int, Yes, Yes, Yes, [EMPTY], Menyimpan ID Akun
JenisAkunID, int, Yes, No, No, [EMPTY], Menyimpan nilai Jenis Akun dari Akun tersebut
KodeAkun, varchar( 10 ), Yes, No, No, [EMPTY], Menyimpan Kode Akun
NamaAkun, varchar( 50 ), Yes, No, No, [EMPTY], Menyimpan Nama Akun dalam Bahasa Indonesia
NamaAkunEng, varchar( 25 ), Yes, No, No, [EMPTY] , Menyimpan Nama Akun dalam Bahasa Inggris
MataUangID, int, Yes, No, No, [EMPTY], Menyimpan mata uang dari akun tersebut
GrupLRID, int, No, No, No, [EMPTY], Menyimpan grup Laba / Rugi dari akun
SaldoNormal, varchar( 1 ), Yes, No, No, [EMPTY], Menyimpan sifat akun ( hubungannya dengan debet / kredit )
StsAktif, bit, Yes, No, No, 1, Menyimpan status akun tersebut aktif / tidak ( 1 = aktif, 0 = tidak aktif )
dtCreated, datetime, Yes, No, No, getdate(), tanggal dibuat
dtModified, datetime, Yes, No, No, getdate(), tanggal dimodifikasi
UpdatedBy, varchar( 25 ), Yes, No, No, ‘PRGMR’, User yang menambahkan / mengganti data

Catatan : seperti yang saja uraikan diatas bahwa jenis akun dapat bervariasi antar satu perusahaan dengan yang lain, kalau akun malah lebih bervariasi lagi, berdasarkan pengalaman saya, ada 1 perusahaan yang mempunyai akun sebanyak 1500 akun, tapi ada juga yang hanya 100 – 200 akun. Berikut ini saya sertakan contoh akun, saya batasi hanya untuk 2 mata uang saja :

AkunID, JenisAkunID, KodeAkun, NamaAkun, NamaAkunEng, MataUangID, GrupLRID, SaldoNormal, StsAktif, dtCreated, dtModified, UpdatedBy
1, 1, 101001, Kas IDR, Cash IDR, 1, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
2, 1, 101002, Kas USD, Cash USD, 2, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
3, 2, 102003, Bank Mandiri IDR, Bank Mandiri IDR, 1, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
4, 2, 102004, Bank Mandiri USD, Bank Mandiri USD, 2, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
5, 7, 107005, Piutang Giro IDR, Note Receivables IDR, 1, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
6, 7, 107006, Piutang Giro USD, Note Receivables USD, 2, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
7, 8, 108007, Piutang Usaha IDR, Account Receivables IDR, 1, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
8, 8, 108008, Piutang Usaha USD, Account Receivables USD, 2, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
9, 8, 108009, Piutang Usaha IDR, Account Receivables IDR, 1, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
10, 8, 108010, Piutang Usaha USD, Account Receivables USD, 2, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
11, 8, 108011, Piutang Kartu Kredit IDR, Credit Card Receivables IDR, 1, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
12, 8, 108012, Piutang Kartu Kredit USD, Credit Card Receivables USD, 2, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
13, 9, 109013, Piutang Klaim IDR, Claim Receivables IDR, 1, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
14, 9, 109014, Piutang Klaim USD, Claim Receivables USD, 2, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
15, 9, 109015, Piutang Staff IDR, Staff Receivables IDR, 1, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
16, 9, 109016, Piutang Staff USD, Staff Receivables USD, 2, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
17, 10, 110017, Persediaan Barang Stock IDR, Stocked Inventories IDR, 1, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
18, 10, 110018, Persediaan Barang Stock USD, Stocked Inventories USD, 2, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
19, 10, 110019, Persediaan Barang UnStock IDR, UnStocked Inventories IDR, 1, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
20, 10, 110020, Persediaan Barang UnStock USD, UnStocked Inventories USD, 2, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
21, 16, 116021, Laba Ditahan IDR, Retained Earning IDR, 1, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
22, 16, 116022, Laba Ditahan USD, Retained Earning USD, 2, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
23, 17, 117023, Laba Rugi Tahun Berjalan IDR, Profit ( Loss) Current Year IDR, 1, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
24, 17, 117024, Laba Rugi Tahun Berjalan USD, Profit ( Loss) Current Year USD, 2, NULL, +, 1, [automatic], [automatic], ‘PRGMR’
25, 18, 118025, Penjualan Tunai IDR, Cash Sales IDR, 1, 7, -, 1, [automatic], [automatic], ‘PRGMR’
26, 18, 118026, Penjualan Tunai USD, Cash Sales USD, 2, 7, -, 1, [automatic], [automatic], ‘PRGMR’
27, 19, 119027, Penjualan Kredit IDR, Credit Sales IDR, 1, 7, -, 1, [automatic], [automatic], ‘PRGMR’
28, 19, 119028, Penjualan Kredit USD, Credit Sales USD, 2, 7, -, 1, [automatic], [automatic], ‘PRGMR’
29, 21, 121029, Pembelian IDR, Purchasing IDR, 1, 4, +, 1, [automatic], [automatic], ‘PRGMR’
30, 21, 121030, Pembelian USD, Purchasing USD, 2, 4, +, 1, [automatic], [automatic], ‘PRGMR’
31, 21, 121031, Harga Pokok Penjualan IDR, Cost Of Goods Sold IDR, 1, 4, +, 1, [automatic], [automatic], ‘PRGMR’
32, 21, 121032, Harga Pokok Penjualan USD, Cost Of Goods Sold USD, 2, 4, +, 1, [automatic], [automatic], ‘PRGMR’
33, 25, 125033, Selisih Kas IDR, Cash Difference IDR, 1, 2, +, 1, [automatic], [automatic], ‘PRGMR’
34, 25, 125034, Selisih Kas USD, Cash Difference USD, 2, 2, +, 1, [automatic], [automatic], ‘PRGMR’
35, 24, 124035, Biaya Gaji IDR, Salary Expenses IDR, 1, 1, +, 1, [automatic], [automatic], ‘PRGMR’
36, 24, 124036, Biaya Gaji USD, Salary Expenses USD, 2, 1, +, 1, [automatic], [automatic], ‘PRGMR’
37, 24, 124037, Biaya Lembur IDR, Overtime Expenses IDR, 1, 1, +, 1, [automatic], [automatic], ‘PRGMR’
38, 24, 124038, Biaya Lembur USD, Overtime Expenses USD, 2, 1, +, 1, [automatic], [automatic], ‘PRGMR’
39, 24, 124039, Biaya Kasir IDR, Cashier Expenses IDR, 1, 2, +, 1, [automatic], [automatic], ‘PRGMR’
40, 24, 124040, Biaya Kasir USD, Cashier Expenses USD, 2, 2, +, 1, [automatic], [automatic], ‘PRGMR’
41, 25, 125041, Biaya Barang Hilang IDR, Cost Of Goods Lost IDR, 1, 2, +, 1, [automatic], [automatic], ‘PRGMR’
42, 25, 125042, Biaya Barang Hilang USD, Cost Of Goods Lost USD, 2, 2, +, 1, [automatic], [automatic], ‘PRGMR’