Anda di halaman 1dari 106

Spesifikasi:

Ukuran: 14x21 cm
Tebal: 416 hlm
Harga: Rp 63.800
Terbit pertama: Desember 2004
Sinopsis singkat:

Sistem Informasi Akuntansi - General Ledger dalam buku ini merupakan aplikasi siap pakai yang dibuat
dengan bahasa pemrograman PowerBuilder dan database SQL Server 2000. Dengan hanya memasukkan
data jurnal, semua laporan keuangan seperti rugi-laba, perubahan modal, dan neraca dapat dicetak kapan
saja. Aplikasi ini juga dapat mencetak daftar perkiraan, jurnal, buku besar dan neraca saldo (percobaan).
Buku ini memberikan penjelasan dan langkah-langkah praktis bagi Anda yang ingin mengetahui teknik
pemrograman aplikasi General Legder dengan PowerBuilder 9.0 (teknik inherit) dan/atau database SQL
Server 2000, dan juga bagi Anda yang hanya ingin memakai aplikasi General Ledger tanpa ingin mengetahui
cara pembuatan database dan aplikasinya.
Dilengkapi dengan CD berisi source code, aplikasi lengkap siap pakai, dan file-file pendukung sehingga
memudahkan Anda mengikuti semua materi yang dibahas dalam buku.
155
Bab 7
Window
Window adalah penghubung utama antara pemakai dengan aplikasi
PowerBuilder. Window dapat menampilkan informasi, menerima
masukan informasi dari pemakai, dan merespons mouse atau
keyboard yang digerakkan.
Window adalah obyek terpisah dengan obyek lainnya yang Anda buat
dengan painter Window. Pada PowerBuilder, Anda dapat membuat
window kapan saja selama proses pengembangan aplikasi.
7.1 Tipe Window
Tipe window penting dalam membuat suatu window karena masing-
masing tipe window mempunyai fungsi yang berbeda dan
PowerBuilder akan mengeset atribut window tersebut sesuai dengan
tipe yang ditentukan. Untuk memilih tipe window, pilih salah satu
tipe window yang terdapat dalam dropdown tipe window. Tipe
window akan menetapkan hubungan dengan window lain dalam
aplikasi.
Main
Window main biasanya digunakan sebagai sheet dalam aplikasi.
Window main bisa saja berfungsi sebagai induk (parent window) dari
window child, popup, atau response.
Window main biasanya berisi sebuah menu dan/atau sebuah set dari
satu CommandButton atau lebih untuk menyajikan pilihan pada
pemakai. Tipe window ini dapat diperkecil atau diperbesar. Saat
Anda melakukan hal ini, window ini akan secara otomatis
156
mengesetnya dengan ukuran yang relatif terhadap layar dan bukan
terhadap window lain.
PopUp
Window Popup adalah sebuah tipe window yang dapat digunakan
sebagai window mengapung dan dapat ditampilkan di luar window
parent. Window popup sering digunakan untuk menyediakan
informasi tambahan atau detail yang besar dari sebuah obyek dalam
sebuah window induk.
Child
Window Child adalah sebuah window anak yang terikat dengan
sebuah window induk. Artinya, sebuah window child harus
dihubungkan dengan sebuah window induk (parent window) dan
hanya dapat ditempatkan dalam window induk dan tidak dapat
ditarik (ditempatkan) keluar window induk.
Response
Window Response adalah sebuah kotak dialog yang menerima
informasi dari pemakai. Window response yang ditampilkan
merupakan window aktif. Tidak ada window lain dalam aplikasi yang
dapat diakses sampai ada respons dari pemakai. Pemakai dapat
beralih ke window aplikasi yang lain, tetapi ketika pemakai kembali
ke aplikasi, window response tetap aktif.
Sebuah window response sama seperti window popup, bedanya
window popup tidak membutuhkan respons pemakai, sedangkan
window response membutuhkan respons pemakai. Window respons
adalah application modal, yaitu window yang memerlukan respons
sebelum melanjutkan aplikasi. Saat aplikasi membuka window
response, pemakai tidak dapat berpindah ke window yang lain
(dalam aplikasi yang sama) sebelum menutup window response
tersebut. Window response selalu menampilkan sebuah pesan dan
biasanya ada satu atau lebih CommandButton yang harus
dilaksanakan pemakai. Window ini juga sering digunakan untuk
menampilkan pesan error atau tampilan keputusan sebelum proses
dilanjutkan. Window ini tidak bisa menggunakan menu, tidak dapat
diperkecil (minimize) atau diperbesar (maximize), dan tidak dapat
digulung. Anda hanya dapat memindahkan atau menutupnya.
Gambar 7.7 adalah salah satu contoh window response.
157
MDI Frame
Window MDI (Multiple Document Interface) adalah salah satu tipe
Windows yang penting Anda ketahui. Banyak aplikasi Windows
terkenal menggunakan bentuk tampilan aplikasi MDI ini. Microsoft
Word for Windows, Microsoft Excel, dan PowerBuilder adalah contoh
aplikasi MDI. Window MDI merupakan salah satu bentuk tampilan
dari window induk. Istilah lain dari window MDI adalah MDI Frame
yang berisi satu atau lebih window anak sebagai sheetwindow yang
merupakan lembaran kerja untuk menampilkan data, baik sebagai
input (lembaran kerja) maupun output (preview laporan). Dalam
Mircrosoft Word for Windows, window anak merupakan macam-
macam dokumen yang dapat diedit. Pada Excel, masing-masing
window anak ini disajikan dalam bentuk lembaran kerja
(spreadsheet).
Window MDI dapat juga berisi toolbar dan Microhelp (gunakan tipe
window MDI Frame with Microhelp).
MDI Frame with Microhelp
Pilihan lain dari tipe window adalah MDI Frame with Microhelp.
Pada window MDI Frame with Microhelp ini disediakan fasilitas untuk
menampilkan keterangan pendek pada baris status aplikasi.
Keterangan ini digunakan untuk membantu pemakai dalam
pemilihan menu dan icon menu. Hal ini akan dibahas pada bagian
pembuatan window utama dalam bab ini.
7.2 Window Pembuka
Window pembuka adalah window yang dibuka pertama kali pada
saat aplikasi dijalankan. Window ini biasa menampilkan gambar yang
aktraktif agar aplikasi yang dibuat lebih menarik. Gambar ini dapat
Anda rancang sendiri sedemikian rupa sesuai keinginan Anda.
Sebagai contoh, penulis mengikutsertakan rancangan gambar yang
disisipkan ke dalam dokumen MS Word (slide_pembuka.doc),
kemudian ditangkap (capture) dan disimpan dengan format file
gambar yang dapat digunakan pada PowerBuilder (bmp, gif, jpg,
atau format gambar lainnya).
Langkah-langkah untuk membuat window pembuka adalah sebagai
berikut:
158
1. Klik icon New pada PowerBar.
2. Klik tab PB Object.
3. Klik Window.
4. Atur ukuran window sesuai dengan keinginan Anda.
5. Klik icon Picture pada dropdown kontrol.
6. Klik area di pojok kiri atas window.
7. Klik kanan mouse kemudian pilih Properties.
8. Klik tombol select pada PictureName.
9. Klik drop down File of type:.
10. Pilih tipe file gambar yang akan disisipkan, pada contoh ini
adalah bmp karena tampilan gambar bmp jauh lebih bagus dari
pada file gambar gif dan jpg.
11. Pilih file slide_pembuka, kemudian atur tampilan gambar sesuai
ukuran tampilan window.
12. Klik tab Declare Instance Variable, kemudian ketikkan variabel
di bawah ini:
int ii_detik

13. Klik tab Event list, klik event open, kemudian ketikkan skrip di
bawah ini:
f_center_w( this ) //Center window
timer(3) //delay 3 detik

14. Klik icon Save, klik file mylibrary.pbl, ketikkan w_pembuka,
kemudian klik OK.
7.3 Window Login
Aplikasi PowerBuilder merupakan aplikasi yang mempunyai
kemampuan yang hebat dalam menangani database dan sangat
memperhatikan keamanan aplikasi dan database yang digunakan.
Kode aslinya hanya dapat dibaca oleh PowerBuilder sendiri, begitu
pula database aslinya yang telah diberi user id dan password. Hal ini
dilakukan untuk keamanan agar database tidak dapat diakses oleh
orang-orang yang tidak berhak. Selain itu, PowerBuilder
159
memberikan fasilitas window response agar pemakai menjalankan
window ini dan memasukkan user id dan password sebelum
memasuki aplikasi.
Window Login adalah suatu window yang digunakan pemakai untuk
memasukkan user id dan password sebelum masuk ke dalam
aplikasi.
7.3.1 Pembuatan Window
Selain dari window login itu sendiri, ada beberapa obyek dan kontrol
yang harus Anda buat saat pembuatan window login.
Membuat Window Login
Untuk pembuatan window login, ikuti langkah-langkah di bawah ini:
1. Klik icon New pada PowerBar.
2. Klik tab PB Object.
3. Klik Window.
4. Ubah ukuran window.
Pindahkan pointer mouse ke pojok kanan bawah window sampai
tanda anak panah dengan arah ke pojok kiri atas dan ke kanan
bawah terlihat. Tahan dan dorong mouse ke arah pojok kiri atas
untuk memperkecil window atau dorong mouse ke arah pojok
kanan bawah untuk memperbesar window. Cara seperti ini
digunakan untuk mengubah ukuran window secara proporsional
(sebanding dengan window aslinya). Anda dapat juga mengubah
ukuran window secara tidak proporsional dengan memindahkan
pointer mouse pada sisi kanan untuk memperbesar/memperkecil
ke arah kanan/kiri dan pada posisi bawah untuk
memperbesar/memperkecil ke arah bawah/atas.
5. Klik tab General pada tab Properties.
6. Ketikkan Login dalam kotak Title.
7. Hilangkan tanda centang pada kotak cek ControlMenu.
8. Pilih Response! dalam dropdown Window Type.
9. Klik tab Other dan ketikkan posisi dan ukuran window seperti
pada Gambar 7.1.
160

Gambar 7.1 Kotak dialog posisi dan ukuran window
Menambah Kontrol Gambar Bar Putih
Kontrol gambar bar ini digunakan sebagai bar tempat kontrol
gambar logo perusahaan dan kontrol teks nama aplikasi yang akan
ditampilkan. Langkahlangkah untuk membuat kontrol ini adalah
sebagai berikut:
1. Klik icon Picture dalam PainterBar1 atau klik dropdown kontrol
untuk menampilkan icon kontrol yang ada, kemudian klik icon
Create Picture control.
2. Klik mouse di mana kontrol Picture ini ditempatkan, maka akan
terbentuk kontrol gambar dengan nama p_1.
Kontrol Picture akan ditampilkan pada lokasi yang dipilih atau di
mana mouse diklik. Kontrol ini dapat dipindahkan atau dihapus.
Untuk memindahkannya, pointer (tanda tambah) berada pada
kontrol, klik kiri mouse dan tahan, pindahkan mouse ke lokasi yang
diinginkan dan lepaskan mouse. Untuk menghapus kontrol, klik
kontrol ini dan tekan tombol Delete.
Untuk menambahkan kontrol gambar, ikuti langkah-langkah berikut:
1. Klik dropdown PictureName pada tab General.
2. Pilih nama gambar yang diinginkan.
161



Dropd down
kontrol

Gambar 7.2 Dropdown kontrol
Anda juga dapat memilih nama file gambar yang dibuat sendiri.
Sebagai contoh, penulis menggunakan file gambar bar dari salah
satu clipart galery yang telah ditambahi bar warna putih di
bagian atas gambar bar aslinya. Cara menambahkan warna putih
adalah dengan menyisipkan file gambar bar pada lembaran kerja
Microsoft Word, kemudian menangkap (capture) gambar
tersebut mulai dari sisi bawah ke atas sehingga warna putih
lembaran kerja Microsoft Word tertangkap, lalu simpan dengan
nama barputih.bmp. Kotak empat persegi panjang pada
Gambar 7.3 menunjukkan area yang ditangkap pada lembaran
kerja Microsoft Word pada pembuatan bar putih.

Gambar 7.3 Pembuatan bar puntih
3. Tarik kontrol p_1 ke kanan sehingga tampilan gambar menjadi
seperti Gambar 7.4.
Menambah Kontrol Gambar Logo Perusahaan
Kontrol gambar ini digunakan sebagai tempat gambar logo
perusahaan yang akan ditampilkan. Langkahlangkah untuk membuat
kontrol ini adalah sebagai berikut:
162
1. Klik icon Picture dalam PainterBar1 atau klik dropdown kontrol
untuk menampilkan icon kontrol, kemudian klik icon Create
Picture control.
2. Klik mouse di atas bagian pojok kiri atas kontrol gambar p_1
(bertumpuk dengan kontrol p_1), maka kontrol p_2 akan
terbentuk.
3. Klik dropdown PictureName pada tab General.
4. Pilih nama gambar yang diinginkan.
5. Anda juga dapat memilih nama file gambar yang dibuat sendiri.
Sebagai contoh, penulis menggunakan file power-it.jpg.
6. Atur ukuran tampilan gambar logo perusahaan.
Menambahkan Kontrol Teks Aplikasi
Kontrol teks aplikasi adalah kontrol teks statis yang digunakan
sebagai tempat teks yang akan menampilkan nama aplikasi di
sebelah kanan kontrol p_2. Untuk menambahkan kontrol teks statis,
ikuti langkah-langkah dibawah ini:
1. Klik icon Static Text (icon huruf A) dalam PainterBar1 atau klik
dropdown kontrol untuk menampilkan icon kontrol, kemudian
klik icon Create Static Text control.
2. Klik area di sebelah kanan kontrol p_2, maka akan terbentuk
kontrol st_1.
3. Kontrol teks statis akan tampil pada lokasi. Kotak hitam kecil
pada setiap sudut menandakan bahwa kontrol ini yang dipilih.
Menambahkan Kontrol Teks UserId dan Password
Kontrol teks userid dan pasword digunakan sebagai tempat teks
User ID: dan Password. Untuk menambahkan kontrol teks ini,
ikuti langkah-langkah dibawah ini:
1. Klik icon Static Text (icon huruf A) dalam PainterBar1 atau klik
dropdown kontrol untuk menampilkan icon kontrol, kemudian
klik icon Create Static Text control.
2. Klik area di bawah kontrol p_1, maka akan terbentuk kontrol
st_2.
3. Klik kanan mouse pada kotrol teks statis dan pilih Duplicate.
163
4. PowerBuilder akan membuat sebuah duplikat dari kontrol yang
dipilh tadi.
Mengatur Properti Kontrol Teks Statis
Kontrol teks statis yang dibuat telah dapat diisi dengan teks yang
diinginkan dan dapat diatur propertinya seperti ukuran huruf, nama
huruf, tebal, dan sebagainya.
Untuk mengatur properti kontrol teks statis, ikuti langkah-langkah di
bawah ini:
1. Klik kontrol teks statis yang pertama.
2. Klik tab General.
3. Pilih teks st_1 dalam kotak Name. Ketikkan st_aplikasi dalam
kotak Name. Ganti teks none dalam kotak Text dan ketikkan
General Ledger. Anda telah membuat satu teks statis dan
memberinya awalan nama st sebagai standar kontrol teks statis.
4. Klik tab Font dan ubah ukurah huruf menjadi 16 point.
5. Sesuaikan ukuran huruf kontrol teks statis yang pantas.
Tempatkan mouse pada sudut atas kanan kontrol teks, klik
dan tahan, lalu dorong mouse ke arah kanan dan lepaskan
mouse.
Periksa apakah semua teks yang diketikkan sudah tampil
dalam kontrol atau belum.
Jika perlu, sesuaikan ukuran kontrol sampai semua teks yang
diketikkan kelihatan.
6. Sesuaikan lokasi kontrol dengan ruangan yang ada.
7. Klik kontrol teks yang kedua.
8. Klik tab General.
9. Pilih teks st_2 dalam kotak Name.
10. Hapus teks none dalam kotak Text dan ketikkan User ID:.
Lakukan juga untuk st_3 dengan nama dengan nama st_password
dan teks Password:.
164





st_aplikasi


st_userid

st_password






p_1 p_2

Gambar 7.4 Tampilan sementara window login
Kontrol SingleLineEdit
Kontrol ini digunakan sebagai tempat input atau untuk menampilkan
teks. Teks ini dapat diubah-ubah oleh pemakai.
Anda dapat membuat dua buah kontrol SingleLineEdit, yaitu untuk
input User ID dan Password. Untuk melakukan hal ini, ikuti langkah-
langkah dibawah ini:
1. Klik icon SingleLineEdit pada dropdown kontrol.
2. Klik mouse di sebelah kanan teks statis User ID:.
Sebuah kontrol SingleLineEdit tampil pada lokasi yang dipilih
tadi. Kotak hitam pada setiap sudut menandakan bahwa kontrol
ini yang dipilih.
3. Klik kanan mouse pada kontrol SingleLineEdit dan pilih
Duplicate. PowerBuilder akan membuat sebuah duplikat dari
kontrol yang dipilih tadi.
4. Sesuaikan posisi kontrol SingleLineEdit dengan posisi kontrol teks
statis.
5. Atur ukuran kontrol SingleLineEdit seperti mengubah ukuran
kontrol teks statis.
165
Mengatur Properti Kontrol SingleLineEdit
Untuk mengatur properti SingleLineEdit, ikuti langkah-langkah di
bawah ini:
1. Klik kontrol SingleLineEdit yang pertama.
2. Pilih teks sle_1 dalam kotak Name.
3. Klik tab General:
Ganti teks sle_1 dalam kotak Name dengan sle_userid.
Klik kotak Password sehingga muncul tanda centang untuk
menampilkan tanda bintang saat pengetikan.
Ketikkan 10 dalam kotak Limit.
4. Pilih teks sle_2 dalam kotak Name.
Ketikkan sle_password dalam kotak Name.
Klik kotak Password sehingga muncul tanda centang untuk
menampilkan tanda bintang saat pengetikan.
Ketikkan 10 dalam kotak Limit.
Kontrol CommandButton
CommandButton atau icon tombol merupakan kontrol yang
digunakan sebagai media penghubung pemakai dengan program.
Penekanan CommandButton akan menyebabkan dijalankannya suatu
tugas berdasarkan kondisi saat itu. Pengaksesan kontrol ini, seperti
mengklik mouse pada kontrol ini, menyebabkan terjadinya
perubahan gambar seolah-olah sebuah tombol ditekan dan
dilepaskan.
Untuk membuat kontrol CommandButton, caranya adalah sebagai
berikut:
1. Klik icon CommandButton pada dropdown kontrol.
2. Klik mouse di sebelah kanan SingleLineEdit pertama. Sebuah
kontrol CommandButton tampil pada lokasi yang dipilih.
3. Klik kanan mouse pada kontrol CommandButton dan pilih
Duplicate. PowerBuilder akan membuat sebuah duplikat dari
kontrol yang dipilih.
166
4. Sesuaikan posisi kontrol CommandButton dengan posisi kontrol
SingleLineEdit. Atur ukuran kontrol CommandButton seperti
mengubah ukuran kontrol teks statis.
Mengatur Properti Kontrol CommandButton
Untuk mengatur properti CommandButton, lakukan langkah-langkah
berikut:
1. Pilih kontrol CommandButton pertama yang telah Anda buat.
2. Klik tab General.
3. Pilih teks cb_1 dalam kotak Name.
Ketikkan cb_login dalam kotak Name.
Hapus teks none dalam kotak Text dan ketikkan Login.
Klik kotak cek Default.
Anda telah membuat satu CommandButton dan memberinya
nama. Awalan cb adalah standar kontrol CommandButton.
4. Pilih kontrol CommandButton yang kedua yang telah Anda buat.
5. Pilih teks cb_2 dalam kotak Name:
Ketikkan cb_batal dalam kotak Name
Hapus teks none dalam kotak Text dan ketikkan Batal.
Merapikan Tampilan Kontrol
Jika Anda memperhatikan posisi tampilan dari beberapa kontrol
yang telah Anda buat pada window Login, ada yang terlalu
kekiri/kanan, ke atas/bawah atau beberapa kontrol yang seharusnya
mempunyai panjang sama tapi tidak sama. Untuk memperindah
tampilan kontrol-kontrol ini PowerBuilder menyediakan fasilitas
berupa menu dan toolbar seperti pada Gambar 7.5.
Untuk mempercantik tampilan kontrol-kontrol pada window login,
ikuti langkah-langkah di bawah ini:
1. Tekan tombol Ctrl dan tahan.
2. Klik kontrol teks st_userid.
3. Klik kontrol teks st_password.
4. Lepas tombol Ctrl.
167
5. Tampilan kontrol akan ditandai dengan titik empat bujur
sangkar di masing-masing pojok empat persegi panjang kontrol.
6. Klik dropdown icon untuk memilih jenis pengaturan (perhatikan
Gambar 7.5).

Icon aktif Droo down icon
Rata kiri Rata kanan

Center Vertikal Center horizontal
Rata atas Rata bawah


Jarak horizontal Jarak vertikal
Ukuran lebar Ukuran tinggi

Ukuran sama
besar

Gambar 7.5 Toolbar untuk mempercantik tampilan kontrol
7. Klik icon Rata kiri (Align left edges).
Setelah Anda mengklik icon rata kiri maka kontrol akan
diratakan ke kiri sejajar dengan kontrol yang pertama kali
diklik, yaitu kontrol st_password akan diratakan sejajar dengan
kontrol st_userid. Hal ini dapat dilakukan dengan lebih dari satu
kontrol sekaligus diratakan sesuai dengan jumlah kontrol yang
dipilih. Pengaturan seperti ini juga berlaku nantinya pada
pengaturan kontrol pada DataWindow.
8. Klik kontrol st_userid dan kontrol sle_userid, kemudian lepas
tombol Ctrl.
9. Pilih icon ukuran tinggi (Size width) untuk menyamakan tinggi
kontrol sle_userid dengan kontrol st_userid dan selanjutnya pilih
icon Rata atas.
10. Bebaskan semua kontrol yang dipilih dengan mengklik area
window yang kosong.
11. Tekan tombol Ctrl dan tahan.
12. Klik kontrol sle_useid, kemudian lepas tombol Ctrl.
168
13. Tekan tombol Shift dan tahan.
14. Tekan tombol anak panah kanan untuk menambah ukuran lebar
kontrol sle_userid agar dapat menampung kira-kira 10 karakter.
Hal ini dapat juga Anda lakukan dengan cara menempatkan
kursor mouse di sisi sebelah kanan kontrol sehingga kursor
mouse berubah menjadi tanda anak panah kiri kanan. Tahan
mouse pada posisi ini dan dorong ke kanan untuk melebarkan,
atau ke kiri untuk memperpendek kontrol.
15. Bebaskan semua kontrol yang dipilih dengan mengklik area
window yang kosong.
16. Tekan tombol Ctrl dan tahan.
17. Klik kontrol sle_userid dan kontrol sle_password, kemudian
lepas tombol Ctrl.
18. Pilih icon rata kiri (Align left edges) untuk menempatkan
kontrol sle_password sejajar ke kiri dengan kontrol sle_userid.
19. Klik icon ukuran lebar dan tinggi (Size widths and heights)
untuk menyamakan lebar/tinggi kontrol sle_password dengan
lebar/tinggi kontrol sle_userid.
20. Bebaskan semua kontrol yang dipilih dengan mengklik area
window yang kosong.
21. Selanjutnya, samakan panjang kontrol cb_login dengan cb_batal
dan samakan tinggi kedua kontrol ini dengan kontrol sle_userid.
Menyimpan Window
Setiap kali Anda keluar dari painter window, PowerBuilder akan
menanyakan apakah window yang telah dibuat akan disimpan (Yes),
tidak (No), atau tetap berada pada layar desain untuk melanjutkan
pekerjaan (Cancel). Pilih salah satu pilihan yang diinginkan.
Untuk meyimpan window baru, caranya adalah sebagai berikut:
1. Pilih File dari menu bar atau klik icon Save, maka akan tampil
kotak dialog penyimpanan window.
2. Anda dapat juga memilih Save As. Untuk window baru, Save dan
Save As adalah sama kecuali apabila Anda ingin menyimpannya
dengan nama lain.
169
3. Pilih nama file pustaka tempat window disimpan, misalnya
disimpan dalam file pustaka mylibrary.pbl.
4. Ketikkan nama window yang diinginkan, misalnya w_login.
5. Awalan w_ adalah standar untuk penamaan windows.
6. Ketikkan keterangan dalam kotak Comments, misalnya Window
masuk aplikasi bilamana diperlukan (opsional).
7. Klik OK.
Melihat Tampilan Window
Tampilan window yang telah didesain dapat dilihat dengan perintah
Preview. Namun sebelum Anda melakukan preview window login,
berikanlah kembali tanda centang pada kotak cek ControlMenu (klik
tab General, kemudian klik kotak cek ControlMenu). Hal ini
dilakukan agar setelah melakukan preview Anda dapat kembali ke
layar desain. Jika hal tidak dilakukan maka Anda tidak akan dapat
kembali ke layar desain karena saat preview dilakukan PowerBuilder
tidak menampilkan menu atau icon Close sehingga Anda harus
menutup (Close) PowerBuilder.
Untuk melakukan preview pilih menu Design | Preview dari menu
bar atau klik icon Preview pada PainterBar.
Window yang telah didesain akan tampil dan Anda dapat mencoba
mengetikkan pada kontrol sle_userid atau sle_password yang
berwarna putih seperti pada Gambar 7.6.
Jika hasil tampilan window yang Anda buat perlu diperbaiki, Anda
dapat kembali ke layar desain dengan mengklik Close window pada
pojok kanan atas.

Gambar 7.6 Tampilan preview window login
170
Apabila tampilan window telah sesuai dengan tampilan yang Anda
inginkan, hilangkan kembali tanda centang pada kotak cek
ControlMenu, kemudian simpan window.
Menutup Window
Penutupan window dapat Anda lakukan dengan memilih menu File |
Close atau dengan mengklik icon Close.
Membuka Window
Window yang telah disimpan dapat dibuka kembali untuk diubah
atau hanya sekedar untuk menampilkannya saja. Pada window yang
telah dibuka, Anda dapat memilih menu File | Recent Objects. Klik
nama window tersebut untuk mengaktifkannya. Untuk membuka
window, ikuti langkah-langkah di bawah ini:
1. Klik icon Open.
2. Klik Window pada dropdown Objects of Type.
3. Klik nama file pustaka tempat window disimpan, misalnya
mylibrary.pbl.
4. Klik nama window yang akan dibuka, misalnya w_login.
5. Klik OK.
7.3.2 Skrip Window Login
Skrip adalah kode program dalam bahasa PowerBuilder yang akan
melakukan suatu pekerjaan saat suatu kejadian berlangsung. Apakah
program perlu memeriksa karakter yang diketikkan oleh pemakai
saat mengetikkan user id dan password program? Jika hal ini
diperlukan maka Anda harus mengetikkan skrip untuk memeriksa
karakter yang diketikkan pemakai tersebut.
Skrip SingleLineEdit
Kontrol SingleLineEdit yang telah dibuat untuk memasukkan User Id
dan Password mendukung suatu kejadian (event) jika telah terjadi
perubahan (modified) isi kontrol. Dengan adanya kejadian ini maka
kita dapat melakukan tindakan-tindakan terhadap kejadian ini.
Kejadian ini disebut dengan kejadian Modified. Skrip yang digunakan
sebagai respons dari kejadian ini diketikkan dalam kejadian ini.
171
Sebagai contoh, Anda dapat memeriksa karakter yang dimasukkan
oleh pemakai, misalnya hanya mengizinkan huruf atau angka saja.
Jika string yang diketikkan oleh pemakai tidak sah maka tampilkan
pesan Ketikkan huruf atau angka!. Untuk melakukan hal ini
diperlukan tiga buah fungsi, yaitu Isnull(), Match(), dan
Messagebox().
Untuk membuat skrip kontrol SingleLineEdit, ikuti langkah-langkah
di bawah ini:
1. Buka Window w_login.
2. Klik kanan kontrol sle_userid untuk menampilkan menu pop-up.
3. Klik menu Script pada menu pop-up.
4. Deklarasikan variable instance (klik tab Declare Instance
Variable) untuk menampung string user id dan password serta
jumlah pengulangan kesalahan.
int ii_looping //pengulangan kesalahan
string is_userid,is_password
Klik tab event Modified, kemudian ketikkan skrip di bawah
ini:
//Mengambil string user id pada kontrol sle_userid
is_userid =

5. Tempatkan kursor di belakang tanda sama dengan.
6. Klik icon Browse Object pada PainterBar.
7. Klik tab Window.
8. Klik ganda window w_login.
9. Klik ganda sle_userid.
10. Klik ganda icon Properties (perhatikan Gambar 7.7).
11. Klik dropdown pada list sebelah kanan (perhatikan Gambar 7.7).
12. Klik kanan mouse properties string text, kemudian klik Copy.
13. Klik Close untuk menutup window Browser Obyek.
14. Tekan tombol Ctrl+V untuk mem-paste obyek.
PowerBuilder akan menyalin atau menyisipkan properti obyek
w_login.sle_userid.text di belakang tanda sama dengan.
Hilangkan teks w_login, nama obyek window tidak diperlukan
krena skrip berada pada obyek aktif, yaitu sle_userid.
172
Selain cara di atas, Anda juga dapat mengetikkan langsung
properti obyek ini pada skrip.
15. Ketikkan skrip di bawah ini:
if isnull(is_userid) or len(is_userid) = 0 then return

Skrip di atas digunakan untuk memeriksa apakah variabel
ls_userid tidak berisi (null) atau panjang isi variabel ls_string
sama dengan nol. Jika salah satu dari kondisi ini dipenuhi maka
pemakai harus memasukkan ulang user id.
16. Ketikkan tiga baris skrip di bawah ini:
if match ( is_userid , "^[A-Za-z0-9]+$" ) = false then
messagebox("Perhatian","Ketikkan huruf atau angka !")
end if

Skrip di atas digunakan untuk memeriksa apakah isi variabel
ls_userid tidak sesuai (not matching) dengan A hingga Z, a
hingga z, atau 0 hingga 9. Jika kondisi ini dipenuhi maka
tampilkan pesan dan pemakai harus memasukkan user id
kembali.
17. Klik icon Compile pada PowerBar2 atau pilih menu Edit |
Compile.
PowerBuilder akan mengompilasi skrip yang telah Anda ketikkan.
Jika tejadi error saat kompilasi berlangsung, window error akan
terbuka di layar bagian bawah. Hal ini terjadi karena pengetikan
skrip yang salah. Betulkan skrip yang salah ketik dan klik
kembali icon Compile.
Skrip event modified sle_userid selengkapnya adalah seperti di
bawah ini:
//Mengambil string user id pada kontrol sle_userid
is_userid = sle_userid.text
if isnull(is_userid) or len(is_userid) = 0 then return

if match ( is_userid , "^[A-Za-z0-9]+$" ) = false then
messagebox("Perhatian","Ketikkan huruf atau angka !")
end if
173

Gambar 7.7 Window untuk menyisipkan properti obyek ke dalam skrip
Setelah Anda melakukan langkah-langkah di atas, ulangi untuk
memberikan skrip kontrol sle_password. Skrip sle_password
selengkapnya adalah sebagai berikut:
//Mengambil string password pada kontrol sle_password
is_password = sle_password.text
if isnull(is_password) or len(is_password) = 0 then return
if match ( is_password , "^[A-Za-z0-9]+$" ) = false then
messagebox("Perhatian","Isi dengan huruf atau angka !")
return
end if
cb_login.setfocus()

Skrip CommandButton Login
Skrip CommandButton login digunakan melakukan koneksi dengan
database dan masuk ke dalam aplikasi. Untuk membuat skrip
CommandButton login ikuti langkah-langkah di bawah ini:
1. Pastikan tampilan window login seperti pada pembuatan skrip
kontrol SingleLineEdit, yaitu window login dalam keadaan
aktif/terbuka. Jika window login tidak aktif, Anda harus terlebih
dahulu membukanya.
2. Klik kanan mouse pada kontrol CommandButton cb_login untuk
menampilkan menu pop-up.
3. Pilih menu Script dari menu pop-up.
4. Ketikkan skrip di bawah ini:
// Profile
SQLCA.DBMS = "MSS Microsoft SQL Server"
174
SQLCA.Database = profilestring("gl.ini","DATABASE",&
"Database","")
SQLCA.ServerName = profilestring("gl.ini","DATABASE",&
"ServerName","")
SQLCA.LogId = is_userid
SQLCA.LogPass = is_password
SQLCA.AutoCommit = True

gs_logo = rofilestring("gl.ini","COMPANY",&
"logo","")
gs_perusahaan = profilestring("gl.ini","COMPANY",&
"name","")
gs_motto = profilestring("gl.ini","COMPANY",&
"motto","")

connect using sqlca;

if sqlca.sqlcode <> 0 then
ii_looping++
MessageBox ("Koneksi Database Gagal", sqlca.sqlerrtext)

if ii_looping = 3 then
//Pemakai sudah tiga kali memasukkan user id dan
//pasword yang salah
Close ( parent )
return
end if

return
end if

Close ( parent )

open ( w_utama )

//Masuk ke dalam aplikasi dengan membuka window utama
open ( w_utama )

Skrip CommandButton Batal
Skrip CommandButton batal digunakan untuk membatalkan login ke
aplikasi atau menutup window login dan kemabali ke sistem operasi.
Untuk membuat skrip CommandButton Batal, ikuti langkah-langkah
di bawah ini:
1. Pastikan tampilan window login seperti pada pembuatan skrip
kontrol cb_login.
2. Klik kanan mouse pada kontrol cb_batal untuk menampilkan
menu pop-up.
3. Pilih menu Script dari menu pop-up.
175
4. Ketikkan satu baris skrip di bawah ini untuk menutup window
login.
Halt

5. Klik icon Save untuk menyimpan perubahan.
Skrip Event Open window login
Skrip event Open pada window login fungsinya untuk menempatkan
posisi window di tengah-tengah layar dan memutuskan koneksi
database jika ada database yang aktif.
Untuk membuat skrip event Open window login, ikuti langkah-
langkah di bawah ini:
1. Pastikan tampilan window login seperti pada pembuatan skrip
kontrol CommandButton Login.
2. Klik tab Layout.
3. Klik kanan mouse pada area window untuk menampilkan menu
pop-up.
4. Pilih menu Script dari menu pop-up.
5. Klik dropdown event dan pilih Open.
6. Ketikkan satu baris skrip di bawah ini untuk menutup window
login.
f_center_w( this )
disconnect ;

Penjelasan Perintah dan Fungsi
Berikut ini adalah penjelasan penggunaan fungsi pada skrip window
login.
Isnull()
Sintaks:
Isnull(exp)

Keterangan:
Exp adalah sebuah ekpresi dapat berupa variabel atau nilai.
176
Len()
Sintaks:
Len(exp)

Keterangan:
Exp adalah sebuah ekpresi string atau blob yang ingin Anda ketahui
panjangnya.

Match()
Sintaks:
Match(string1, string2)

Keterangan:
string1 adalah string yang akan diperiksa
string2 adalah string pembanding atau string1 sah bila merupakan
bagian dari string2.

MessageBox()
Sintaks:
MessageBox ( judul, teks {, icon {, button {, default } } } )

Keterangan:
judul adalah string judul (title) kotak pesan.
teks adalah string pesan yang akan ditampilkan.
icon adalah sebuah icon berupa nilai dengan tipe data enumerated
yang ingin Anda tampilankan di sisi kiri kotak pesan. Adapun nilai
yang dapat Anda isi yaitu:
Information! (default, tanda huruf i)
StopSign! (tanda silang X)
Exclamation! (tanda seru !)
Question! (Tanda tanya ?)
None! (tanpa tanda)
177
button adalah sebuah tombol (CommandButton) berupa nilai dengan
tipe data enumerated. Nilai yang dapat Anda isi yaitu:
OK! (Default): tombol OK
OKCancel!: tombol OK dan Cancel
YesNo!: tombol Yes dan No
YesNoCancel!: tombol Yes, No, dan Cancel
RetryCancel!: tombol Retry dan Cancel
AbortRetryIgnore!: tombol Abort, Retry, dan Ignore
default adalah nomor urut tombol yang ingin diset sebagai tombol
aktif. Nilai default dari PowerBuilder adalah 1. Sebagai contoh,
Anda ingin menampilkan pesan dengan tiga buah tombol ketika
pemakai menutup sheet di mana pemakai telah melakukan
perubahan data tetapi lupa meyimpannya, maka Anda dapat
menampilkan pesan Sudah terjadi perubahan data, simpan?, dengan
tiga buah pilihan, yaitu Yes, No, atau Cancel. Anda dapat
memberikan nilai default 1, 2, atau 3. Nilai satu adalah untuk Yes, 2
untuk No, dan 3 untuk Cancel.
Jika fungsi ini berhasil dilaksanakan maka fungsi ini akan
mengembalikan nilai integer (1, 2, atau 3) dari pemilihan tombol
dan 1 jika terjadi error. Jika ada argumen bernilai null,
MessageBox() akan mengembalikan NULL.
Contoh lain:
MessageBox("Close Window",
"Sudah terjadi perubahan data, simpan?",&
Question!,YesNoCancel!,3)

TriggerEvent
Sintaks:
objectname.TriggerEvent ( event {, word, long} )

Keterangan:
objectname adalah nama obyek atau kontrol yang mempunyai
kejadian (event).
event adalah nilai dari kejadian yang berupa data enumerated
misalnya Clicked!, Modified!, or DoubleClicked!, Close!, dan
sebagainya.
178
Anda dapat juga memberikan nama user event. Mengenai hal ini
akan dibahas pada bagian window sheet.
word dan long adalah tipe data yang ingin diambil dalam WordParm
dan LongParm obyek Message.

T I P
User Id dan Password yang disimpan dalam
tabel adalah data biasa yang bisa dibaca secara
langsung saat tabel ditampilkan dengan edit
data. Agar data ini tidak dapat dibaca oleh orang
yang tidak berkepentingan dan hanya bisa dibaca
oleh program, Anda dapat menggunakan teknik
enkripsi.
7.4 Window Utama
Tipe window yang digunakan untuk window utama adalah tipe
window MDI Frame atau MDI Frame with Microhelp. Pada tipe
window ini Anda dapat membuka sheet lebih dari satu sheet
sekaligus.
7.4.1 Pembuatan Window Utama
Pada prinsipnya cara pembuatan window utama sama dengan
pembuatan window login, hanya saja terdapat pebedaan tipe
window, yaitu pada window login menggunakan tipe Response dan
pada window utama menggunakan tipe MDI Frame with Microlhelp.
Cara pembuatan window utama adalah sebagai berikut:
1. Klik icon New pada PowerBar.
2. Klik tab PB Object.
3. Klik Window.
4. Klik tab General pada tab properties.
5. Ketikkan SIA-GL Versi 9.01 - Sistem Informasi Akuntansi -
General Ledger dalam kotak title.
179
6. Pilih mdihelp! dalam dropdown Window Type.
7. Ketikkan m_aplikasi pada MenuName atau klik tombol select ()
MenuName untuk mecari menu aplikasi di mana disimpan.
8. Klik dropdown WindowState dan pilih maximized!
9. Klik dropdown Icon dan pilih AppIcon!
10. Klik icon Save atau pilih menu File | Save As atau Save.
Klik nama file pustaka mylibrary.pbl dalam listbox
Aplication Libraries tempat penyimanan window utama.
Ketikkan nama window w_utama dalam kotak isian
Windows.
Klik OK.
11. Klik icon Close untuk menutup painter window.
7.4.2 Skrip Window Utama
Pada awal dijalankannya aplikasi, skrip window login memanggil
window utama. Sebelum window utama dibuka pemakai, aplikasi
mengharuskan pemakai untuk mengetikkan user id dan password
pada window login. Aplikasi tidak dapat dilanjutkan sebelum
pemakai memberikan respons dengan mengetikkan user id dan
password sesuai dengan user id dan password yang sah.
Untuk mengetikkan skrip ini, ikuti langkah-langkah di bawah ini:
1. Kilik icon Open.
2. Pilih Windows dalam dropdown Objects of Type.
3. Klik nama file pustaka mylibrary.pbl.
4. Klik w_utama, kemudian klik OK.
5. Klik tab Layout.
6. Klik kanan mouse pada area obyek window dan pilih Script .
7. Klik dropdown Select event dan pilih Closequery(), kemudian
ketikkan skrip di bawah ini:
if messageBox("Keluar",&
"Anda ingin keluar?",question!,yesno!,1) = 2 then
return 1 //kembali ke window utama
180
end if
return 0 //laksanakan event Close()

8. Kilik dropdown Select Event dan pilih Close().
9. Ketikkan satu baris skrip di bawah ini:
disconnect using sqlca ;

Sebelum window ditutup putuskan hubungan database terlebih
dahulu.
7.4.3 Skrip Aplikasi
Pada awal dijalankannya aplikasi, skrip aplikasi memanggil window
pembuka. Untuk mengetikkan skrip aplikasi, lakukan langkah-
langkah berikut:
1. Kilik icon Open.
2. Pilih Application dalam dropdown Objects of Type.
3. Klik nama file pustaka gl.pbl.
4. Klik gl kemudian klik OK.
5. Klik dropdown Select event dan pilih Open().
6. Ketikkan satu baris skrip di bawah ini:
open( w_aplikasi ) // buka window w_aplikasi
7.4.4 Menjalankan Aplikasi
Setelah Anda mengerjakan beberapa pekerjaan di atas, sekarang
Anda siap untuk menjalankan aplikasi tersebut dengan langkah-
langkah sebagai berikut:
1. Klik icon tombol Run pada PowerBar.
2. Klik Yes. Pertanyaan ini muncul bila ada perubahan yang belum
disimpan.
3. Ketikkan sa pada User Id dan tekan tombol Enter.
Ketika pemakai menekan tombol Enter, fokus beralih ke tombol
Login dan kejadian clicked dilaksanakan karena tombol Login
bernilai default. Jika pada database yang digunakan terdapat
181
password, Anda dapat mengklik kotak isian Password untuk
mengetikkan password, kemudian mengklik tombol Login.
7.5 Window Sheet
Window sheet adalah window yang bertipe main dan digunakan
sebagai lembaran kerja, baik untuk menampilkan data (view) atau
memasukkan data (edit). Pekerjaan yang sering dilakukan pada
window sheet adalah menambah data baru, mengubah data, atau
menghapus data yang sudah ada. Perkerjaan ini termasuk pekerjaan
manipulasi database. Sebagian pekerjaan ini akan dilakukan oleh
DataWindow yang akan dibahas pada Bab 8. Sebelum DataWindow
melakukan pekerjaan ini, harus ada persiapan-persiapan agar data
yang dimanipulasi tersebut tidak salah, misalnya melakukan
pengaturan menu-menu sheet, event, serta pembuatan skripnya.
7.5.1 Pembuatan Window
Secara garis besar, window sheet terdiri dari 3 (tiga) bagian seperti
ditujukan Gambar 6.9, yaitu bagian pertama (atas) adalah bar
tempat logo perusahaan dan kotak isian untuk mencari data; bagian
kedua (sebelah kiri) adalah menu tree yang berisi jenis-jenis
pekerjaan (input data) dalam sheet; dan bagian ketiga adalah
jendela untuk menampilkan (view) data.
Jendela dibagi menjadi dua bagian seperti yang ditunjukkan
Gambar 7.9. Bagian atas adalah jendela untuk menampilkan master
dan jendela bagian bawah berfungsi untuk menampilkan detail.
Untuk membuat window sheet, ikuti langkah-langkah di bawah ini.
1. Lakukan langkah-langkah seperti membuat window-window
sebelumnya.
2. Berikan tipe window Main.
3. Klik tombol select () MenuName untuk memilih menu Sheet.
Klik menu m_sheet.
Menu m_sheet adalah menu yang telah Anda buat
seblumnya. Jika menu ini tidak ditemukan pada file pustaka
182
yang dipilih, klik file pustaka yang lain di mana menu ini
disimpan.
Klik OK.
4. Klik tab Other, berikan ukuran width 1403 dan height 772.
5. Klik icon Save atau pilih menu File | Save atau Save As.
6. Ketikkan nama (obyek) window w_sheet.
7. Klik nama file pustaka tempat penyimpanan window ini, yaitu
mylibrary.pbl.
8. Klik OK.
Pembuatan Bar Sheet
Bar sheet digunakan sebagai bantalan untuk menempatkan kontrol
gambar (logo perusahaan), kontrol teks statis cari data, dan kontrol
DataWindow cari. Untuk membuat bar sheet, ikuti langkah-langkah
di bawah ini:
1. Klik icon Picture dalam PainterBar1 atau klik dropdown kontrol
untuk menampilkan icon kontrol, kemudian klik icon Create
Pircture control.
2. Klik area di atas bagian pojok kiri atas, maka akan terbentuk
kontrol gambar dengan nama p_1.
3. Klik kontrol gambar p_1:
Klik tab General.
Ganti nama kontrol gambar p_1 menjadi p_bar.
Klik tombol select () PictureName.
Pilih file gambar barputih.bmp.
4. Posisi dan ukuran bar:
Klik tab Other.
Ketikkan 0 (nol) pada kotak isian X dan Y.
Ketikkan 1362 pada kotak isian Width.
Ketikkan 156 pada kotak isian Height.
5. Kontrol gambar logo perusahaan:
183
Klik kontrol p_bar.
Klik icon Picture dalam PainterBar1 atau klik dropdown
kontrol untuk menampilkan icon kontrol, kemudian klik icon
Create Picture control.
Klik area di atas pojok kiri atas kontrol gambar p_bar
(bertumpuk dengan kontrol p_bar), maka akan terbentuk
kontrol p_1.
Ganti nama kontrol gambar p_1 menjadi p_logo.
Klik tombol select () PictureName, kemudian pilih file
gambar logo perusahaan. Sebagai contoh, penulis
menggunakan file gambar power-it.jpg.
Atur ukuran tampilan gambar logo.
6. Kontrol teks statis Cari data:
Klik tab kontrol p_bar.
Klik icon Static Text dalam PainterBar1 atau klik dropdown
kontrol untuk menampilkan icon kontrol, kemudian klik icon
Create Static Text control.
Klik area di sebelah kanan kontrol p_logo, maka akan
terbentuk kontrol st_1.
Ganti nama kontrol st_1 menjadi st_cari.
Ganti teks None dalam kotak isian Text menjadi &Cari
data:.
Atur posisi kontrol.
7. Kontrol DataWindow cari:
Klik tab kontrol p_bar.
Klik icon DataWindow dalam PainterBar1 atau klik
dropdown kontrol untuk menampilkan icon kontrol,
kemudian klik icon Create DataWindow control.
Klik area di sebelah kanan kontrol st_cari, maka akan
terbentuk kontrol dw_1.
Ganti nama kontrol dw_1 menjadi dw_cari.
Atur posisi kontrol.
184
Pembuatan Kontrol TreeView
Kontrol TreeView digunakan untuk menampilkan menu tree, yaitu
menu yang berisi jenis-jenis pekerjaan (input data) dalam sheet.
Langkah-langkah untuk membuat kontrol treeview adalah sebagai
berikut:
1. Klik icon TreeView dalam PainterBar1 atau klik dropdown
kontrol untuk menampilkan icon kontrol, kemudian klik icon
Create TreeView control.
2. Klik area di bawah kontrol p_bar, maka akan terbentuk kontrol
tv_1.
3. Ganti nama kontrol tv_1 menjadi t_sheet.
4. Klik tab Pictures, klik dropdown picture, dan pilih Tables!.
5. Atur ukuran dan posisi kontrol.
Pembuatan Kontrol DataWindow Master
Kontrol DataWindow master digunakan untuk menghubungkan sheet
(window) dengan obyek DataWindow master. Langkah-langkah untuk
membuat kontrol DataWindow master adalah sebagai berikut:
1. Klik icon DataWindow dalam PainterBar1 atau klik dropdown
kontrol untuk menampilkan icon kontrol yang ada, kemudian klik
icon Create DataWindow control.
2. Klik area di bawah kontrol p_logo dan sejajar dengan kontrol
tv_sheet, maka akan terbentuk kontrol dw_1.
3. Ganti nama kontrol dw_1 menjadi dw_master.
4. Berikan tanda centang pada kotak cek HScrollBar dan
VScrollBar.
5. Atur ukuran dan posisi kontrol.
Pembuatan Kontrol DataWindow Detail
Kontrol DataWindow detail digunakan untuk menghubungkan sheet
(window) dengan obyek DataWindow detail. Langkah-langkah untuk
membuat kontrol DataWindow master adalah sebagai berikut:
1. Klik icon DataWindow dalam PainterBar1 atau klik dropdown
kontrol untuk menampilkan icon kontrol, kemudian klik icon
Create DataWindow control.
185
2. Klik area di bawah kontrol dw_master, maka akan terbentuk
kontrol dw_1.
3. Ganti nama kontrol dw_1 menjadi dw_detail.
4. Berikan tanda centang pada kotak cek HScrollBar dan
VScrollBar.
5. Atur ukuran dan posisi kontrol.
Pembuatan Batas Pemisah
Batas pemisah adalah untuk pemisah antara jendela-jendela dalam
sheet. Batas pemisah ini ada dua buah, yang pertama (vertikal)
digunakan untuk melebarkan/mengecilkan jendela menu tree dan
jendela data ke kanan/ke kiri dan yang kedua digunakan untuk
melebarkan jendela master dan mengecilkan jendela detail atau
mengecilkan jendela master dan melebarkan jendela detail ke
atas/bawah. Anda dapat melihat contoh batas pemisah ini dalam
window w_tv_dw_link pada Examples PowerBuilder. Untuk membuat
batas pemisah, ikuti langkah-langkah di bawah ini:
1. Pembatas vertikal:
Klik icon Static Text.
Klik area antara kontrol tv_sheet dan dw_master, maka akan
terbentuk kontrol st_1.
Ganti nama kontrol st_1 menjadi st_vertical.
Klik dropdown Pointer dan pilih SizeNS!.
Klik kanan mouse pada kontrol st_vertical untuk
menampilkan menu pop-up.
Klik dropdown event, pilih event mousedown, kemudian
ketikkan satu baris skrip di bawah ini:
BackColor = 0

Skrip pada event mousedown ini akan dijalankan ketika
pointer mouse berada pada kontrol st_vertikal.
Klik dropdown event, pilih event mousemove, kemudian
ketikkan satu bari skrip di bawah ini:
//Check for move in progess
If KeyDown(keyLeftButton!) Then
This.x = Parent.Pointerx()
186
End If

2. Pembatas horisontal:
Klik icon Static Text.
Klik area antara kontrol dw_master dan dw_detail, maka
akan terbentuk kontrol st_1.
Ganti nama kontrol st_1 menjadi st_horizontal.
Klik dropdown Pointer dan pilih SizeNS!
Klik kanan mouse pada kontrol st_horizontal untuk
menampilkan menu pop-up.
Klik dropdown event, pilih event mousedown, kemudian
ketikkan satu baris skrip di bawah ini:
BackColor = 0

Skrip pada event mousedown ini akan dijalankan ketika
pointer mouse berada pada kontrol st_horizontal.
Klik dropdown event, pilih event mousemove, kemudian
ketikkan satu baris skrip di bawah ini:
//Check for move in progess
If KeyDown(keyLeftButton!) Then
BackColor = 0
y = Parent.PointerY()
End If

p_logo tv_menu st_cari dw_cari dw_master dw_detil

st_vertikal st_horizontal

Gambar 7.8 Layout window sheet
187
7.5.2 Pendeklarasian Variabel Instance
Ada beberapa variabel instance yang dibutuhkan window sheet
seperti diperlihatkan dalam Tabel 7.1.
Tabel 7.1 Variabel Instance Window Sheet
Nama Variabel Tipe Keterangan
idw_aktif datawindow dw_master atau dw_detail
ii_keymaster integer No kolom primary key master
ii_keyDetail integer No kolom primary key detail
is_kolMaster string Nama kolom primary key master
is_keyMaster string Isi kolom primary key detail
is_dw_master string Nama obyek DataWindow master
is_dw_detail string Nama obyek DataWindow detail
is_dwo_rpt string Nama obyek DataWindow preview
is_wEdit string Nama obyek window edit
is_judul string Teks title window sheet
ii_newWidth integer
Lebar kontrol DataWindow
terakhir
ii_newHeight integer
Tinggi kontrol DataWindow
terakhir
ii_TebalBar integer Tebal bar
ii_windowborde
r
integer Ukuran border
il_hiddencolor long Warna background sheet

Untuk menmdeklarasikan variabel instance di atas, klik tab Declare
InstanceVariable pada window sheet, kemudian ketikkan skrip di
bawah ini:
datawindow idw_aktif
integer ii_keymaster, ii_keyDetail

string is_kolMaster,is_keyMaster
string is_dw_master,is_dw_detail,is_dwo_rpt
188
string is_wEdit,is_judul

integer ii_newWidth,ii_newHeight
long il_hiddencolor = 0
integer ii_TebalBar = 11
integer ii_windowborder = 15
7.5.3 Pembuatan User Event
Jika pemakai melakukan sesuatu, misalnya mengklik icon Maju,
Mundur, Baru dan sebagainya pada window sheet, apa yang terjadi
pada program? Program akan merespons kejadian yang dilakukan
oleh pemakai. PowerBuilder sendiri tidak menyediakan event untuk
melakukan pekerjaan seperti menu sheet yang telah Anda buat di
atas. PowerBuilder memberi kesempatan kepada programmer
PowerBuilder untuk membuat user event.
Event-event yang harus dibuat sesuai dengan menu Sheet adalah
sebagai berikut:
Panggilkejadian untuk memanggil data.
Simpankejadian untuk menyimpan data.
Previewkejadian untuk menampilkan data dalam bentuk preview.
Barukejadian untuk menambah data.
Hapuskejadian untuk menghapus data.
Ubahkejadian untuk mengubah (edit) data.
Awalkejadian untuk memindahkan baris (record) ke awal baris.
Mundurkejadian untuk memindahkan baris ke baris sebelumnya.
Majukejadian untuk memindahkan baris ke baris berikutnya.
Akhirkejadian untuk memindah baris ke akhir baris.
Tutupkejadian untuk menutup sheet.
Untuk membuat user event ikuti langkah-langkah di bawah ini:
1. Klik kanan mouse pada area window dan pastikan Anda tidak
mengklik kontrol obyek, kemudian pilih Script.
Untuk memastikan bahwa Anda adalah mengklik area window
bukan kontrol obyek, lihat status line yang menampilkan
Nothing Selected.
189
2. Klik dropdown Event dan pilih New Event. Default event yang
tampil adalah event Open.
3. Ketikkan ue_panggil pada Event Name.
4. Ulangi langkah (2), lalu ketikkan ue_simpan pada Event Name.
5. Ulangi langkah (2), lalu ketikkan ue_preview pada Event Name.
6. Ulangi langkah (2), lalu ketikkan ue_baru pada Event Name.
7. Ulangi langkah (2), lalu ketikkan ue_hapus pada Event Name.
8. Ulangi langkah (2), lalu ketikkan ue_ubah pada Event Name.
9. Ulangi langkah (2), lalu ketikkan ue_awal pada Event Name.
10. Ulangi langkah (2), lalu ketikkan ue_mundur pada Event Name.
11. Ulangi langkah (2), lalu ketikkan ue_maju pada Event Name.
12. Ulangi langkah (2), lalu ketikkan ue_akhir pada Event Name.
13. Ulangi langkah (2), lalu ketikkan ue_tutup pada Event Name.

Gambar 7.9 Pendefinisian User Event
7.5.4 Pembuatan Fungsi Window
Fungsi window yang diperlukan di sini adalah fungsi window untuk
menggerakkan batas pemisah vertikal dan horisontal pada sheet
seperti yang telah disinggung pada bagian pembuatan batas pemisah
190
di atas, yaitu fungsi wf_refreshbars, wf_resizebars, dan
wf_resizepanels. Anda dapat melihat contoh ketiga fungsi ini dalam
window w_tv_dw_link pada Examples PowerBuilder. Skrip pada
fungsi ini telah penulis modifikasi dan disesuai dengan kebutuhan
window sheet. Untuk membuat ketiga fungsi ini, langkah-langkahnya
adalah sebagai berikut:
1. Klik obyek window w_sheet.
2. Klik tab Function List .
3. Fungsi wf_refreshbars:
Klik kanan mouse pada Function List, kemudian pilih Add.
Ketikkan nama fungsi wf_refreshbars pada Function Name.
Ketikkan skrip di bawah ini:
Integer li_Cnt

//Force appropriate order
st_vertical.SetPosition(ToTop!)
st_horizontal.SetPosition(ToTop!)

//Make sure the Width is not lost
st_vertical.Width = ii_TebalBar
st_horizontal.Height= ii_TebalBar

Return 1

4. Fungsi wf_resizebars:
Klik dropdown Function List dan pilih (New Function).
Ketikkan nama fungsi wf_ resizebars pada Function Name.
Ketikkan skrip di bawah ini:
//Resize Bars according to Bars themselves,WindowBorder,
//and BarThickness

st_vertical.Move(st_vertical.X, 148)
st_vertical.Resize(ii_TebalBar, 5 +
This.WorkSpaceHeight() - (2 * ii_WindowBorder))

integer li_HX, li_HW
li_HX = st_vertical.X + ii_TebalBar
li_HW = This.WorkSpaceWidth() - li_HX //- ii_WindowBorder

st_horizontal.Move(li_HX, st_horizontal.y )
st_horizontal.Resize(li_HW, ii_TebalBar)

wf_RefreshBars()
191

Return 1

5. Fungsi wf_ resizepanels:
Klik dropdown Function List dan pilih (New Function).
Ketikkan nama fungsi wf_ resizepanels pada Function Name.
Ketikkan skrip di bawah ini:
//Resize the panels according to the Lines,
//BarThickness, and WindowBorder.

Integer li_X, li_Y, li_HHeight, li_HWidth

// Left vertical object processing
tv_sheet.Resize (st_vertical.X - tv_sheet.X ,
ii_newHeight )

// Horizontal object processing
li_X = st_vertical.X + ii_windowborder
li_Y = (p_bar.y + p_bar.height)

dw_master.Move (li_X, li_Y )

dw_master.Resize ( ii_newWidth - tv_sheet.width ,
st_horizontal.y - li_Y )
li_Y = st_horizontal.y + 15
dw_detail.Move (li_X, li_Y )
dw_detail.Resize ( ii_newWidth - tv_sheet.width ,
tv_sheet.height - ( st_horizontal.Y +
st_horizontal.height ) )

Return 1

6. Klik icon Save untuk menyimpan fungsi.
7. Skrip event mouseup:
Klik kanan mouse pada kontrol st_vertikal, pilih menu
Script, klik dropdown event dan pilih event mouseup,
kemudian ketikkan skrip bawah ini:
//Hide the bar
This.BackColor = il_HiddenColor

//Resize Bars
wf_ResizeBars()

//Resize the panels
wf_ResizePanels()

192
Klik kanan mouse pada kontrol st_horizontal, pilih menu
Script, klik dropdown event dan pilih event mouseup,
kemudian ketikkan skrip bawah ini:
//Hide the bar
This.BackColor = il_HiddenColor

//Resize Bars
wf_ResizeBars()

//Resize the panels
wf_ResizePanels()

8. Klik icon Save untuk menyimpan perubahan skrip.
7.5.5 Tombol Default Sheet
Pada bagian menu sheet yang telah dibahas sebelumnya, terdapat
menu untuk menggerakkan baris data pada sheet seperti Awal
(Ctrl+H, bergerak ke baris pertama), Mundur (Ctrl+N, bergerak ke
baris sebelumnya), Maju (Ctrl+J, bergerak ke baris berikutnya), dan
Akhir (bergerak ke baris akhir).
Selain menu di atas, pada sheet (termasuk window preview laporan)
juga berlaku penekanan tombol (tombol default) untuk
menggerakkan baris data, yaitu anak panah atas/bawah
maju/mundur baris Ctrl+Homeke baris pertama, PageUpmundur
1 halaman, PgDnmaju 1 halaman dan Ctrl+Endke baris akhir.
7.5.6 Skrip Window
Banyak sekali kejadian-kejadian yang terjadi pada sheet, mulai dari
kejadian sheet dibuka (open) sampai dengan sheet ditutup (Close).
Semua kejadian ini dapat digunakan untuk melakukan sesuatu
terhadap window tersebut.
Membuka Sheet
Sebelum Anda dapat memasukkan data atau menampilkan data pada
sheet, Anda harus terlebih dahulu membuka sheet tersebut. Untuk
membuka sheet, gunakan fungsi Opensheet().
Sintaks:
OpenSheet(namasheet {, tipewindow }, mdiframe {, posisi {,
susunan } } )
193

Keterangan:
namasheet adalah nama sheet yang akan dibuka.
tipewindow adalah string obyek window yang harus sama dengan
nama sheet. Tipewindow ini boleh diisi atau boleh
dilewatkan.
mdiframe adalah nama window yang dapat menampung
beberapa window sekaligus (MDI-Multi Document
Interface) yang merupakan induk (parent) dari
window sheet. Anda boleh langsung mengetikkan
nama window MDI ini, yaitu w_utama, atau cukup
mengetikkan parentwindow.
Posisi adalah nomor item menu window input di mana
nama window ini dimasukkan ke menu tersebut.
Pada menu m_utama hanya disediakan 4 (empat)
item menu, yaitu File (1), Informasi (2), Window (3),
dan Tentang (4). Dengan demikian Anda hanya dapat
memberikan 0, 1, 2, 3, atau 4. Nomor item menu 0
(nol) sama dengan 4 (empat). Pada contoh di atas,
diberikan angka 0 yang artinya item menu pull-down
(Window) akan ditambah dengan nama-nama sheet
yang sedang dibuka. Anda dapat berpindah dari satu
sheet ke sheet yang lain dengan mengklik nama
sheet yang ada pada menu Window tersebut.
susunan adalah bentuk susunan tampilan window input
bilamana dibuka lebih dari satu window. Argumen ini
dapat diisi dengan nilai data bertipe enumerated,
yaitu:
Cascaded! (Default), yaitu window yang tidak
aktif relatif berada di belakang window aktif.
Layered!, yaitu tampilan window input yang
dibuka berlapis-lapis ke belakang window aktif.
Original!, yaitu tampilan window input sesuai
dengan tampilan aslinya dan juga Cascade.

Sheet dibuka melalui menu utama dengan memberikan skrip. Untuk
mengetikkan skrip ini, caranya adalah sebagai berikut:
194
1. Klik tanda + pada nama file mylibrary.pbl
2. Klik ganda m_utama.
3. Klik tanda + pada &File.
4. Klik Data.
PowerBuilder secara otomatis akan membuka layar editor untuk
mengetikkan skrip event clicked. Apabila event yang terbuka
bukan event clicked, Anda dapat mengklik dropdown event
kemudian memilih event clicked. Ketikkan skrip di bawah ini:
opensheet(w_sheet,parentwindow,0,Layered!)

Menutup Sheet
Setelah selesai bekerja, sebaiknya sheet harus ditutup kembali.
Untuk menutup sheet, gunakan fungsi Close() yang dilaksanakan
oleh fungsi triggerevent() melalui menu sheet.
Sintaks:
Close (namawindow)

Keterangan:
namawindow adalah nama window sebagai sheet yang dibuka
dengan fungsi Opensheet ().
TriggerEvent
Sintaks:
namaObyek.TriggerEvent ( event {, word, long } )

Keterangan:
namaObyek adalah nama obyek atau kontrol yang mempunyai
event dan terhubung dengan namaObyek ini.
event adalah nama event yang akan dilaksanakan serta
berupa data enumerated seperti Close!, Clicked!,
dan sebagainya. Event ini juga boleh berupa string
dari nama user event.
word adalah sebuah nilai yang disimpan dalam properti
WordParm obyek Message.
195
long adalah sebuah nilai yang disimpan dalam properti
LongParm obyek Message.
Sheet ditutup melalui menu sheet. Untuk mengetikkan skrip ini,
ikuti langkah-langkah di bawah ini:
1. Buka menu m_sheet.
2. Klik kanan mouse pada item menu Tutup untuk menampilkan
menu pop-up, pilih Script, kemudian ketikkan skrip berikut ini:
Close(parentwindow)

Event Resize
Sebelum window sheet ditampilkan, event ini pertama kali akan
dijalankan secara otomatis untuk mengubah tampilan window sheet
yang mengikuti resolusi monitor. Berikut ini penjelasan beberapa
pernyataan baru yang digunakan pada skrip event resize.
Saat event resize pertama kali dijalankan, Anda harus menyimpan
resolusi monitor ke variabel instance ii_newWidth dan ii_newHeight
untuk keperluan perubahan besar jendela-jendela dalam sheet.
Untuk mengetahui apakah event resize pertama kali dibuka atau
tidak, periksalah nilai variabel ii_newWidth atau ii_newHeight. Nilai
0 pada variabel ini menandakan event resize pertama kali
dijalankan.
Pekerjaan selanjutnya adalah menentukan lebar tampilan masing-
masing kontrol. Lebar tampilan window sheet adalah 100% sama
dengan nilai newWidth, yaitu lebar kontrol DataWindow dalam
satuan pixel yang telah disesuaikan secara otomatis dengan resolusi
tampilan monitor. Lebar ini dibagi tiga, yaitu untuk jendela menu
tree, batas pemisah jendela menu tree dengan jendela DataWindow
(vertikal), dan jendela DataWindow. Prosentase masing-masing
tampilan ini adalah 13% dari nilai newWidth untuk jendela menu
tree, 15 pixel untuk batas pemisah vertikal, dan ( 83% * newWidth )
- 15 pixel untuk jendela DataWindow. Lebar bar sheet adalah sama
dengan lebar window sheet.
Tinggi tampilan jendela menu tree adalah tinggi kontrol
DataWindow - (titik sumbu y kontrol p_bar + tinggi kontrol p_bar).
Titik koordinat kontrol dw_master adalah titik sumbu x berada pada
titik sumbu x menu tree ditambah dengan lebar menu tree dan
ditambah 15 pixel (lebar batas pemisah); sedangkan titik sumbu y
196
berada pada titik sumbu y kontrol p_bar ditambah dengan tinggi
kontrol p_bar.
Besar tampilan kontrol dw_master akan berubah jika obyek kontrol
dw_detail kosong (tanpa detail). Perubahan ini dapat dilakukan
dengan memeriksa obyek kontrol dw_detail. Jika kontrol dw_detail
berisi obyek DataWindow detail dan tinggi obyek DataWindow
master lebih dari 30% dari nilai newHeight, ubah tinggi kontrol
dw_master menjadi 30% dari nilai newHeight, 15 pixel untuk batas
pemisah horisontal, dan 70% dari nilai newHeight dikurangi 15 pixel
untuk tinggi kontrol dw_detail. Titik sumbu x kontrol dw_detail
berada pada titik sumbu y kontrol dw_master ditambah dengan
tinggi kontrol dw_master ditambah 15 pixel. Tinggi kontrol
dw_detail adalah sama dengan nilai newHeight dikurangi nilai titik
sumbu y kontrol ini. Sebaliknya, jika obyek DataWindow detail tidak
ada maka tinggi kontrol dw_master sama dengan tinggi menu tree
dan tinggi kontrol dw_detail sama dengan nol (jendela detail tidak
tampil).
Tampilan selanjutnya adalah tampilan kontrol st_cari dan dw_cari.
Kontrol st_cari ditampilkan sejajar dengan titik sumbu x menu tree
dan lebarnya juga sama dengan lebar menu tree, sedangkan kontrol
dw_cari ditampilkan sejajar dengan titik sumbu x kontrol dw_master
dan lebarnya juga sama dengan lebar kontrol dw_master.
Terakhir ubah tampilan batas pemisah, yaitu pertama dengan
memindahkan kontrol st_vertikal ke titik sumbu x pada titik sumbu x
menu tree ditambah dengan lebar menu tree dan titik sumbu y pada
titik 148. Kedua, dengan memindahkan kontrol st_horizontal ke titik
sumbu x pada titik sumbu x menu tree ditambah dengan lebar menu
tree dan titik sumbu y pada titik sumbu y kontrol dw_master
ditambah dengan tinggi kontrol dw_master. Ketiga, ubah ukuran
kontrol st_ horizontal dengan lebar sama dengan kontrol dw_master
dan tinggi sama dengan ii_TebalBar, yaitu 15 pixel.
Selengkapnya, skrip event resize adalah sebagai berikut:
string ls_dw_master_tinggi

//Default tampilan
if ii_newWidth = 0 then
ii_newWidth = newWidth
ii_newHeight= newHeight
end if

p_bar.width = ii_newWidth
197

tv_sheet.x = 0
tv_sheet.width = ii_newWidth * 0.17
tv_sheet.height = ii_newHeight - (p_bar.y + p_bar.height )

dw_master.x = tv_sheet.x + tv_sheet.width + 15
dw_master.y = (p_bar.y + p_bar.height)

dw_master.width = ( ii_newWidth * 0.83 ) - 15

ls_dw_master_tinggi= dw_master.Describe(&
"DataWindow.Detail.Height")

dw_detail.x = dw_master.x
dw_detail.width = dw_master.width

if is_dw_detail <> '' then

if integer(ls_dw_master_tinggi)>ii_newHeight * 0.30 or &
ls_dw_master_tinggi = '' then
dw_master.height = ii_newHeight * 0.30
end if

dw_detail.y = (dw_master.y + dw_master.height) + 15
dw_detail.height = ii_newHeight - dw_detail.y

else
dw_master.height = tv_sheet.height
dw_detail.y = (dw_master.y + dw_master.height) + 15
dw_detail.height = 0
end if

st_cari.x = tv_sheet.x
st_cari.width = tv_sheet.width

dw_cari.x = dw_master.x
dw_cari.width = dw_master.width

// Set the color of the bars to make them invisible
st_vertical.Move(tv_sheet.x + tv_sheet.width, 148 )

st_horizontal.Move(tv_sheet.x + tv_sheet.width , dw_master.y +
dw_master.Height )

st_horizontal.Resize(dw_master.width, ii_TebalBar)

Event Open
Event ini dijalankan secara otomatis setelah event resize. Banyak
yang dapat Anda lakukan saat event ini dijalankan, di antaranya
menampilkan menu tree dan mengubah tampilan batas pemisah.
Berikut ini penjelasan beberapa pernyataan baru yang digunakan
pada skrip event Open.
198
Menampilkan Menu Tree
Menu tree ditampilan dengan menambah item kontrol tv_sheet
dengan fungsi InsertItemFirst.
Sintaks:
kontrolTv.InsertItemFirst ( handleparent, label, indeksGambar)

Keterangan:
kontrolTv adalah nama kontrol treeview seperti tv_sheet.
InsertItemFirst adalah fungsi yang digunakan untuk menambah item
treeview.
handleparent adalah handle induk (parent) dari item tree. Nilai 0
(nol) adalah untuk level pertama.
label adalah label (teks) yang akan ditampilkan pada
treeview, yaitu Tabel Referensi dan Transaksi adalah
level pertama; Kelompok, Subkelompok dan
Perkiraan adalah level kedua dari Tabel Referensi,
serta Jurnal dan Tutup Buku adalah level kedua dari
Transaksi.
indeksGambar adalah nomor urut gambar yang telah diisi pada tab
Pictures.
Berikut ini adalah skrip untuk menampilkan menu tree yang
ditempatkan pada event open.
long ll_level1

ll_level1 = tv_sheet.InsertItemFirst(0,"Tabel Referensi",1)
tv_sheet.InsertItemFirst(ll_level1,"1.Kelompok",2)
tv_sheet.InsertItemFirst(ll_level1,"2.Subkelompok",2)
tv_sheet.InsertItemFirst(ll_level1,"3.Perkiraan",2)

ll_level1 = tv_sheet.InsertItemFirst(0,"Transaksi",1)
tv_sheet.InsertItemFirst(ll_level1,"Jurnal",2)
tv_sheet.InsertItemFirst(ll_level1,"Tutup Buku",2)

Mengubah Tampilan Batas Pemisah
Cara mengubah tampilan batas pemisah adalah dengan mengetikkan
skrip di bawah ini:
// Set warna batas pemisah sesuai dengan warna bacground
// window sheet agar tidak kelihatan (invisible)
il_HiddenColor = BackColor //warna bacground window sheet
st_Vertical.BackColor = il_HiddenColor
199
st_horizontal.BackColor = il_HiddenColor

//Ubah ukuran batas pemisah proporsional dgn tampilan sheet
wf_ResizeBars()

//Ubah ukuran jendela proporsional dengan tampilan sheet
wf_ResizePanels()

Kotak Isian Cari Data
Agar pemakai dapat mengetikkan data yang akan dicari, Anda harus
menyediakan 1 (satu) baris kosong sebagai kotak isian mengetikan
untuk menggetikkan skrip di bawah ini:
//Hubungkan kontrol dw_cari ke database dan baris kosong
dw_cari.setTransObject(SQLCA)
dw_cari.scrolltorow(dw_cari.insertrow(0))

Pemilihan Menu Tree
Pemilihan menu tree adalah untuk menampilkan data pada jendela
master dan detail. Pemilihan menu tree akan menjalankan event
selectionchanged pada kontrol tv_sheet. Ada beberapa pekerjaan
yang harus dilakukan pada event ini, yaitu mengisi variabel
instance, mengisi nama obyek DataWindow, menghubungkan kontrol
DataWindow dengan database, memanggil data, mengambil key
master (Primary Key), mengaktifkan kontrol DataWindow master,
mengubah tampilan ukuran sheet sesuai dengan resolusi monitor dan
mengeset tampilan menu sheet.
Mengisi Variabel Instance
Variabel instance ini diisi jika menu tree yang dipilih adalah
submenu tree (1. Kelompok, 2. Subkelompok, 3. Perkiraan, Jurnal
atau Tutup Buku) yang dipilih. Jika yang dipilih bukan submenu tree
seperti Tabel Referensi atau Transaksi maka isi variabel instance
adalah isi yang terakhir. Cara memeriksa menu mana yang dipilih
adalah dengan memeriksa isi parameter newhandle treeview pada
event selectionchanged seperti skrip di bawah ini:
is_dw_detail = ''
ii_keymaster= 1
ii_keyDetail = 0
is_wdEdit = ''
idw_aktif = dw_master

choose case newhandle
case 2
//Menu 1.Kelompok
is_judul = 'Tabel Referensi Kelompok'
200
is_wmEdit = 'w_trn_kelompok_edit'
is_dw_master = 'dwo_ref_kelompok_view'
is_dwo_rpt = 'dwo_ref_kelompok_rpt'

case 3
//Menu 2.Subkelompok
is_judul = 'Tabel Referensi Subkelompok'
is_wmEdit = 'w_trn_SubKelompok_edit'
is_dw_master = 'dwo_ref_Subkelompok_view'
is_dwo_rpt = 'dwo_ref_Subkelompok_rpt'

case 4
//Menu 3.Perkiraan
is_judul = 'Tabel Referensi Perkiraan'
is_wmEdit = 'w_trn_perkiraan_edit'
is_dw_master = 'dwo_ref_perkiraan_view'
is_dwo_rpt = 'dwo_ref_perkiraan_rpt'

case 6
is_judul = 'Transaksi Jurnal'
is_wmEdit = 'w_trn_jurnal_edit'
is_wdEdit = 'w_trn_jurnal_detail_edit'
is_dw_master= 'dwo_trn_jurnal_view'
is_dw_detail = 'dwo_trn_jurnal_detail_view'
is_dw_rpt = ''
case 7
//Menu Tutup Buku
open (w_trn_tutup_buku, parent)
end choose

Menu sheet
Pertama kali sheet dibuka, pemilihan menu secara default adalah
menu pertama, yaitu Tabel Referensi (newhandle bernilai 1), berarti
belum ada pilihan data untuk ditampilkan. Dengan demikian
pemakai hanya dapat melakukan pemilihan menu tree dan menutup
sheet, sedangkan menu edit sheet yang lainnya dalam keadaan tidak
aktif (disable). Cara mematikan menu sheet adalah dengan skrip
seperti di bawah ini:
m_sheet.m_edit.m_buka.enabled = false
m_sheet.m_edit.m_simpan.enabled = false

m_sheet.m_edit.m_preview.enabled = false

m_sheet.m_edit.m_baru.enabled = false
m_sheet.m_edit.m_ubah.enabled = false
m_sheet.m_edit.m_hapus.enabled = false

m_sheet.m_edit.m_awal.enabled = false
m_sheet.m_edit.m_mundur.enabled = false
m_sheet.m_edit.m_maju.enabled = false
m_sheet.m_edit.m_akhir.enabled = false

201
m_sheet.m_edit.m_tutup.enabled = true

Mengisi nama obyek DataWindow
Cara mengisi obyek DataWindow adalah dengan mengisi properti
DataObject dengan string nama obyek DataWindow. Properti
DataObject untuk kontrol dw_master diisi jika terjadi perubahan isi
variabel is_dw_master, sedangkan properti DataObject untuk
kontrol dw_detail tidak. Berikut ini adalah skrip untuk mengisi
properti DataObject.
if is_dw_master <> dw_master.dataobject then
dw_master.dataobject = is_dw_master
end if

dw_detail.dataobject = is_dw_detail

SetTransObject()
Fungsi ini digunakan untuk menghubungkan kontrol DataWindow
dengan database.
Sintaks:
kontroldw.SetTransObject ( transaksi )

Keterangan:
kontroldw adalah nama kontrol DataWindow seperti
dw_master, dw_detail.
transaksi adalah nama transaksi yang digunakan yaitu SQLCA.
Fungsi ini dapat dijalankan setelah aplikasi
terhubung dengan database, yaitu yang dilakukan
pada saat mengklik tombol Login pada window
w_login.
Retrieve()
Fungsi retrieve() adalah fungsi yang digunakan untuk memanggil
data dari database dan menempatkannya dalam buffer kontrol
DataWindow. Fungsi ini dijalankan dengan menjalankan user event
ue_buka.
Sintaks:
kontroldw.Retrieve ( {darftarArgumen } )

202
Keterangan:
kontroldw adalah nama kontrol DataWindow seperti
dw_master, dw_detail.
daftarargumen adalah argumen-argumen yang digunakan sebagai
persyaratan pemanggilan data, jika tidak
diikutsertakan maka semua data akan dipanggil
sesuai dengan query (SELECT).
Setelah data dipanggil, aktifkan kontrol DataWindow dw_master,
jalankan event rowfocuschanged dw_master, kosongkan kotak isian
cari data, set fokus pada kotak isian cari data, dan atur tampilan
menu edit. Skrip user event ue_panggil selengkapnya adalah seperti
di bawah ini:
dw_master.setTransObject(SQLCA)
dw_detail.setTransObject(SQLCA)

parent.triggerevent("ue_buka")

dw_master.triggerevent(clicked!)
dw_master.triggerevent(rowfocuschanged!)

dw_cari.setFocus()

if dw_master.rowcount() > 0 then
m_sheet.m_edit.m_ubah.enabled = true
m_sheet.m_edit.m_hapus.enabled = true
m_sheet.m_edit.m_preview.enabled = true

if dw_master.rowcount() > 1 then
m_sheet.m_edit.m_maju.enabled = true
m_sheet.m_edit.m_akhir.enabled= true
end if
else
m_sheet.m_edit.m_ubah.enabled = false
m_sheet.m_edit.m_hapus.enabled = false
m_sheet.m_edit.m_preview.enabled = false
end if

Mengambil KeyMaster
Keymaster adalah nama kolom master (primary key) yang diperlukan
untuk pemanggilan detail. Nama kolom ini dapat diambil dengan
fungsi describe().
Sintaks:
kontroldw. Describe (daftar properti )

203
Keterangan:
kontroldw adalah nama kontrol DataWindow seperti dw_master
dan dw_detail.
daftar properti adalah daftar properti kontrol DataWindow yang
diapit dengan tanda kutip dua ().
Cara untuk mengambil nama kolom master yang ditempatkan pada
urutan pertama (kolom 1) adalah sebagai berikut:
is_kolMaster = dw_master.Describe("#1.Name")

Kolom master tidak selalu berada pada urutan pertama, bergantung
pemilihan (select) yang dilakukan saat pembuatan DataWindow, bisa
saja pada urutan pertama, kedua, terakhir, dan sebagainya. Yang
perlu diketahui adalah urutan di mana kolom master (Primary Key)
tersebut ditempatkan. Dengan demikian, skrip untuk mengambil
kolom master menjadi seperti di bawah ini.
is_kolMaster = dw_master.Describe("#" + &
string( ii_keymaster ) + ".Name")

Keadaan tidak dapat diubah
Default data yang ditampilkan pada jendela data adalah pada
keadaan yang tidak dapat diubah (read only=true). Keadaan ini
dapat ditentukan dengan mengetikkan skrip di bawah ini:
dw_master.object.datawindow.readonly = true
if is_dw_detail <> '' then
dw_detail.object.datawindow.readonly = true
end if

Mengaktifkan kontrol DataWindow
Default kontrol DataWindow yang aktif adalah kontrol DataWindow
master. Kontrol DataWindow ini dapat diaktifkan secara otomatis
setelah pemilihan menu tree dengan menjalankan event clicked
(akan dibahas pada pembahasan selanjutnya) pada kontrol
dw_master seperti skrip di bawah ini.
dw_master.triggerevent(clicked!) //Default DW aktif

atau
idw_aktif = dw_master

204
Mengubah tampilan ukuran sheet
Ukuran tampilan sheet akan disesuaikan dengan ukuran tampilan
obyek DataWindow yang telah diisi pada properti DataObject. Untuk
mengubah tampilan sheet, jalankan event resize dengan
triggerevent seperti skrip di bawah ini:
parent.triggerevent(resize!)

Event CloseQuery
Event ini dijalankan setelah event Close dijalankan. Event ini
digunakan untuk menutup query yang teleh dibuka dengan fungsi
Retrieve(). Sebelum query ditutup, Anda dapat memeriksa apakah
telah terjadi perubahan data (data sudah disimpan atau belum).
Jika pemakai telah melakukan perubahan data, Anda dapat
menampilkan pertanyaan untuk memberi kesempatan kepada
pemakai. Berikut ini penjelasan beberapa pernyataan baru.
DeletedCount ()
Fungsi ini akan mengembalikan jumlah baris yang telah ditandai
untuk dihapus dalam database.
Sintaks:
kontroldw.DeletedCount ( )

ModifiedCount()
Fungsi ini akan mengembalikan jumlah baris yang telah diubah pada
buffer utama, yaitu tabel utama yang dipilih pada Upadate
Properties.
Sintaks:
kontroldw. ModifiedCount ()

Getitem()
Fungsi ini berguna untuk mengambil data (nilai) dari buffer kontrol
DataWindow atau DataStore. Nama fungsi getitem harus disesuaikan
dengan tipe data yang akan diambil. Fungsi untuk mengambil data
bertipe numeric adalah getitemnumber(), untuk mengambil data
bertipe desimal adalah dengan getitemdacimal(), untuk mengambil
data bertipe tanggal adalah dengan getitemdate(), untuk mengambil
data bertipe tanggal jam adalah dengan getitemdatetime(), untuk
205
mengambil data bertipe jam adalah dengan getitemtime() dan untuk
mengambil data bertipe string adalah dengan getitemstring()
Sintaks:
kontroldw.GetItem ( baris, kolom {, bufferDw, nilaiAsli} )

Keterangan:
kontroldw adalah nama kontrol DataWindow seperti
dw_master, dw_detail, dan dw_edit.
baris adalah nomor baris data yang akan diambil.
bufferDw adalah buffer DataWindow (opsional) yaitu Primary!,
Delete!, Filter!.
nilaiAsli adalah kondisi. Jika bernilai true maka
GetItemString mengembalikan data sesuai dengan
data yang dipanggil (retrieve), sebaliknya jika
bernilai false maka GetItemString mengembalikan
data sesuai dengan data yang tampil di layar.
Apabila Anda mengikutsertakan bufferDw maka
nilaiAsli juga harus diikutsertakan.
AcceptText()
Fungsi ini digunakan untuk menyimpan isi data baris aktif pada
kontrol DataWindow ke dalam buffer kontrol DataWindow. Sebelum
data pada baris aktif dalam kontrol DataWindow diambil, fungsi ini
harus dilaksanakan terlebih dahulu, jika tidak maka baris aktif
adalah baris aktif sebelumnya. Fungsi ini akan mengembalikan nilai
integer 1 bila berhasil dilaksanakan atau nilai integer -1 bila tidak
berhasil dilaksanakan.
Sintaks:
kontroldw.AcceptText()

Contoh:
//Ambil isi kolom yang telah diketikkan
ls_kode = dw_1.getitemstring(dw_1.getrow(),pk_kode)
//hasil null
if dw_master.AcceptText() = 1 Then
ls_kode = dw_1.getitemstring(&
dw_master.getrow(),kp_kode) //hasil misalnya 0001
end if

206
Cara untuk mengetikkan skrip event CloseQuery adalah seperti di
bawah ini:
1. Klik dropdown event dan pilih Closequery.
2. Ketikkan skrip di bawah ini:
dw_master.AcceptText()
dw_detail.AcceptText()

long ll_rubah

ll_rubah = dw_master.DeletedCount() + &
dw_master.ModifiedCount() + &
dw_detail.DeletedCount() + &
dw_detail.ModifiedCount()

IF ll_rubah > 0 then

CHOOSE CASE MessageBox(&
"Tutp Window", "Telah terjadi perubahan,&
Simpan data?",Question!,YesNoCancel!,3)

CASE 1
this.triggerevent("ue_simpan")
Close(this)

case 2
Close(this)

CASE 3
Return 1 //kembali ke widow aktif,
//jika tanpa return 1 sama dengan
//Close(this)
END CHOOSE
END IF

Memindahkan Baris
Saat Anda berada pada sheet data, Anda dapat memindahkan baris
(record) ke baris yang diinginkan, apakah itu hanya untuk
menampilkan data atau untuk keperluan perbaikan data. Pada
umumnya yang dilakukan adalah bergerak maju atau mundur satu
baris atau bergerak ke awal/akhir baris. Hal ini dapat Anda lakukan
dengan mengetikkan skrip pada user event yang telah Anda buat.
Berikut ini penjelasan mengenai fungsi yang digunakan.
ScrollToRow()
Fungsi ini digunakan untuk memindahkan baris ke baris tertentu.
207
Sintaks:
kontroldw.ScrollToRow ( baris )

Keterangan:
baris adalah nomor baris yang dituju.
RowCount()
Fungsi ini digunakan untuk mengambil nomor baris terakhir atau
jumlah data.
Sintaks:
kontroldw.RowCount ()

GetRow()
Fungsi ini digunakan untuk mengambil nomor baris aktif.
Sintaks:
kontroldw.GetRow ()

ScrollNextRow()
Fungsi ini digunakan untuk berpindah ke baris berikutnya atau maju
satu baris dari baris aktif.
Sintaks:
kontroldw.ScrollNextRow()

ScrollPriorRow()
Fungsi ini digunakan untuk berpindah ke baris sebelumnya atau
mundur satu baris dari baris aktif.
Sintaks:
kontroldw. ScrollPriorRow()

Cara mengetikkan skrip untuk memindahkan baris adalah sebagai
berikut:
1. Klik dropdown event dan pilih ue_awal, kemudian ketikkan skrip
di bawah ini:
if not isvalid( idw_aktif ) then return
idw_aktif.scrollToRow(1)

208
2. Klik dropdown event dan pilih ue_akhir, kemudian ketikkan
skrip di bawah ini:
if not isvalid( idw_aktif ) then return
idw_aktif.scrollToRow(idw_aktif.rowCount())

3. Klik dropdown event dan pilih ue_mundur, kemudian ketikkan
skrip di bawah ini:
if not isvalid( idw_aktif ) then return
idw_aktif.scrollPriorRow()

4. Klik dropdown event dan pilih ue_maju, kemudian ketikkan
skrip di bawah ini:
if not isvalid( idw_aktif ) then return
idw_aktif.scrollNextRow()

Menambah Data Baru
Langkah untuk menambah data baru akan dilakukan pada window
edit sheet yang dipanggil melalui user event ue_baru. Window edit
yang dipanggil sesuai dengan window edit masing-masing jendela
data, misalnya jika data yang ditampilkan adalah data tabel
referensi kelompok maka window editnya adalah window edit
kelompok, jika data yang ditampilkan adalah data tabel referensi
subkelompok maka window editnya adalah window edit
subkelompok dan seterusnya. Pemanggilan window edit yang
berbeda-beda pada user event ue_baru, dapat dilakukan dengan
fungsi OpenWithParm().
Sintaks:
OpenWithParm ( varWindow, parameter, tipeWindow{, induk } )

Keterangan:
varWindow adalah nama variabel bertipe window.
parameter adalah parameter yang akan dilewatkan dan bernilai
string , yaitu baru atau isi kolom master.
tipeWindow adalah nama window yang akan dibuka berupa string
seperti w_ref_kelompok_edit, w_ref_subkelompok-
_edit, w_trn_jurnal_edit, dan
w_trn_jurnal_detail_edit.
209
induk adalah window yang akan dijadikan induk dari
window yang akan dibuka, dalam hal ini adalah
window sheet sebagai induk yang ditulis dalam kata
cadangan this.
Sebelum window edit dipanggil, deklarasikan variabel bertipe
window. Periksa DataObject DataWindow aktif. Jika kosong,
tampilkan pesan Silakan pilih menu tree! dan pindah kembali ke
window sheet.
Jika DataObject tidak kosong, periksa DataWindow aktif. Jika
DataWindow aktif adalah master maka buka window edit master
yang disimpan dalam variabel is_wmEdit, sebaliknya jika
DataWindow aktif adalah detail maka buka window edit detail yang
disimpan dalam variabel is_wdEdit. Skrip user event ue_baru
selengkapnya adalah sebagai berikut:
window lw_edit

if idw_aktif.dataobject = '' then
messagebox('Informasi','Silakan pilih menu tree!')
return
else
if idw_aktif = dw_master then
OpenWithParm(lw_edit, "baru", is_wmEdit, this)
else
OpenWithParm(lw_edit, "baru", is_wdEdit, this)
end if
end if

Pembahasan tentang window edit akan dibahas khusus pada bagian
window edit.
Mengubah Data
Mengubah data dilakukan bila ada data yang ditampilkan di layar.
Data dapat diubah dengan memanggil window edit sheet yang
dipanggil melalui user event ue_ubah. Window edit yang dipanggil
sesuai dengan window edit masing-masing jendela data seperti yang
telah dijelaskan di atas. Window edit dibuka dengan fungsi
OpenWithParm dengan mengirimkan paramater isi kolom master.
Untuk mengetikkan skrip user event ue_ubah, ikuti langkah-langkah
di bawah ini:
1. Klik dropdown event dan pilih ue_ubah.
2. Ketikkan skrip di bawah ini:
210
window lw_edit

if not isvalid( idw_aktif ) then return

is_keyMaster = dw_master.getItemString(&
dw_master.getRow(),is_kolMaster)

if idw_aktif = dw_detail then
if dw_detail.rowCount()=0 OR dw_detail.getRow()=0 then
return
OpenWithParm(lw_edit, is_keyMaster + '!' + &
string( ii_keymaster) + '!' + string( ii_keyDetail),&
is_wdEdit, this)
else
m_sheet.m_edit.m_simpan.enabled = true
m_sheet.m_edit.m_hapus.enabled = true
OpenWithParm(lw_edit, is_keyMaster, is_wmEdit, this)
end if

Menghapus Data
Adakalanya data yang telah dimasukkan ke dalam tabel (database)
harus dihapus, mungkin data tersebut salah atau sudah tidak
digunakan lagi. Berikut ini penjelasan beberapa pernyataan baru
yang digunakan.
DeleteRow()
Digunakan untuk menghapus baris. Fungsi ini akan mengembalikan
nilai integer 1 bila berhasil dilakukan atau nilai integer -1 bila tidak
berhasil dilakukan.
Sintaks:
kontroldw.DeleteRow( baris )

Keterangan:
baris adalah nomor baris yang akan dihapus.
Update()
Fungsi ini digunakan untuk mengubah tabel. Fungsi ini akan
mengembalikan nilai integer 1 bila berhasil dilakukan atau nilai
integer -1 bila tidak berhasil dilakukan. Fungsi ini secara otomatis
akan melaksanakan fungsi AcceptText().
Sintaks:
kontroldw.Update ( { accept {, resetflag } } )

211
Keterangan:
accept adalah kondisi bernilai true atau false dari hasil
pelaksanaan fungsi AcceptText().
resetflag adalah kondisi bernilai true untuk me-reset flag
update kontrol DataWindow atau berfungsi
sebaliknya untuk nilai false.
Commit
Adalah pernyataan yang digunakan untuk menyimpan secara
permanen semua perubahan yang dilakukan terhadap data sejak
diluncurkan terakhir kali.
Sintaks:
COMMIT {USING ObyekTransaksi} ;

Keterangan:
ObyekTransaksi adalah nama obyek transaksi, default-nya adalah
SQLCA
RowsMove()
Fungsi ini digunakan untuk menghapus sejumlah baris dari buffer
delete dan menyisipkannya ke kontrol DataWindow (atau DataStore)
lain, dalam hal ini kontrol DataWindow yang diedit datanya
(dw_master atau dw_detail). Fungsi RowsMove() dijalankan
bilamana penghapusan data gagal sehingga data yang telah dihapus
(dalam buffer delete) harus dikembalikan ke kontrol DataWindow
asalnya.
Sintaks:
kontroldw.RowsMove(mulai, akhir, bufferAsal, dwTujuan, sebelum,
bufferTujuan)

Keterangan:
kontroldw adalah nama kontrol DataWindow seperti
dw_master, dw_detail dan dw_edit.
mulai adalah nomor baris awal penghapusan.
akhir adalah nomor baris akhir penghapusan.
212
bufferAsal adalah sebuah buffer DataWindow asal seperti
Primary!, Delete!, Filter!. Dalam kasus penghapusan,
data yang digunakan adalah buffer Delete!
dwTujuan kontrol DataWindow tujuan data yang disisipkan,
dalam hal ini adalah kontrol DataWindow sheet.
sebelum adalah nomor baris ke berapa data disisipkan. Agar
tidak terlihat perubahan pada sheet data, sebaiknya
data disisipkan ke baris asal data sebelum dihapus.
bufferTujuan adalah sebuah buffer DataWindow tujuan seperti
Primary!, Delete!, Filter!. Dalam kasus penghapusan,
data yang digunakan adalah buffer Primary!.
SelectRow()
Fungsi ini digunakan untuk memberi tanda baris yang diklik (dipilih).
Sintaks:
kontroldw.SelectRow ( baris, pilih )

Keterangan:
kontroldw adalah nama kontrol DataWindow (sebaiknya dengan
tipe presentasi tabular atau grid) seperti dw_master
dan dw_detail.
baris adalah nomor baris yang akan dipilih.
pilih adalah kondisi true untuk baris yang akan dipilih
dengan warna terang. Kondisi false akan
membebaskan pemilihan baris.
SetRow()
Fungsi ini digunakan untuk mengeset baris aktif (current row).
Sintaks:
kontroldw. SetRow ( baris )

Keterangan:
kontroldw adalah nama kontrol DataWindow (sebaiknya dengan
tipe presentasi tabular atau grid) seperti dw_master
dan dw_detail.
213
baris adalah nomor baris yang diinginkan sebagai baris
aktif.
Rollback
Pernyataan ini digunakan untuk membatalkan semua operasi
database sejak pernyataan commit terakhir dilaksanakan.
Sintaks:
ROLLBACK {USING ObyekTransaksi } ;

Untuk mengetikkan skrip untuk menghapus data, langkah-
langkahnya adalah sebagai berikut:
1. Klik dropdown event dan pilih ue_hapus.
2. Ketikkan skrip di bawah ini:
if not isvalid( idw_aktif ) or idw_aktif.getrow() = 0 then
return

long ll_baris
ll_baris = idw_aktif.getrow()

if messageBox("Hapus","Anda ingin menghapus data ini?",&
Question!,YesNoCancel!) = 1 then

if idw_aktif = dw_master then
is_keyMaster = dw_master.getItemString(&
dw_master.getRow(),is_kolMaster)
end if

idw_aktif.deleteRow(0)

if idw_aktif.update() = 1 then
commit using sqlca ;
else
idw_aktif.RowsMove(1, 1, Delete!, idw_aktif,&
ll_baris , Primary!)
rollback using sqlca;
end if

end if

if idw_aktif.rowcount() = 0 then
m_sheet.m_edit.m_hapus.enabled = false
m_sheet.m_edit.m_ubah.enabled = false

else
m_sheet.m_edit.m_hapus.enabled = true
m_sheet.m_edit.m_ubah.enabled = true

end if

214
idw_aktif.selectRow(idw_aktif.getrow(),true)
idw_aktif.setRow(idw_aktif.getrow())

if idw_aktif = dw_master then
idw_aktif.triggerevent(rowfocuschanged!)
end if

Menyimpan Data
Agar data yang telah diketikkan dapat dipanggil kembali, pemakai
harus menyimpannya terlebih dahulu sebelum keluar dari aplikasi.
Untuk mengetikkan skrip penyimpanan data, ikuti langkah-langkah
di bawah ini:
1. Klik dropdown event dan pilih ue_simpan.
2. Ketikkan skrip di bawah ini:
if not isvalid( idw_aktif ) then return
if idw_aktif.update() = 1 then
commit using sqlca ;
else
messageBox("Simpan","Penyimpanan data gagal!",StopSign!)
end if

Kontrol DataWindow
Skrip pada kontrol DataWindow diketikkan pada event clicked,
dberror, doubleclicked, rbuttondown, rowfocuschanged, dan
ue_tombol.
Event clicked
Ketika pemakai mengklik jendela data, kontrol DataWindow yang
aktif adalah kontrol DataWindow pada jendela data tersebut (this).
Tampilkan judul (title) window sesuai dengan judul jendela data,
kemudian set tampilan menu edit.
Untuk mengetikkan skrip event clicked kontrol DataWindow, ikuti
langkah-langkah di bawah ini:
1. Kontrol dw_master:
Klik tab Layout.
Klik kanan mouse pada kontrol DataWindow dw_master dan
pilih Script.
Klik dropdown event dan pilih event clicked.
Ketikkan skrip di bawah ini:
215
idw_aktif = this

parent.title = is_judul + ' (Master)'

if rowcount() > 0 then

m_sheet.m_edit.m_ubah.enabled = true
m_sheet.m_edit.m_hapus.enabled = true
m_sheet.m_edit.m_preview.enabled = true

if rowcount() > 1 then
if getrow() = 1 then
m_sheet.m_edit.m_mundur.enabled = false
m_sheet.m_edit.m_awal.enabled = false

m_sheet.m_edit.m_maju.enabled = true
m_sheet.m_edit.m_akhir.enabled = true

elseif getrow() < rowcount() then
m_sheet.m_edit.m_mundur.enabled = true
m_sheet.m_edit.m_awal.enabled = true
m_sheet.m_edit.m_maju.enabled = true
m_sheet.m_edit.m_akhir.enabled = true

elseif getrow() = rowcount() then
m_sheet.m_edit.m_mundur.enabled = true
m_sheet.m_edit.m_awal.enabled = true
m_sheet.m_edit.m_maju.enabled = false
m_sheet.m_edit.m_akhir.enabled = false

end if
else
m_sheet.m_edit.m_mundur.enabled = false
m_sheet.m_edit.m_awal.enabled = false
m_sheet.m_edit.m_maju.enabled = false
m_sheet.m_edit.m_akhir.enabled = false

end if

else
m_sheet.m_edit.m_mundur.enabled = false
m_sheet.m_edit.m_awal.enabled = false
m_sheet.m_edit.m_maju.enabled = false
m_sheet.m_edit.m_akhir.enabled = false

m_sheet.m_edit.m_ubah.enabled = false
m_sheet.m_edit.m_hapus.enabled = false
m_sheet.m_edit.m_preview.enabled = false

end if

2. Kontrol dw_detail:
Klik tab Layout.
216
Klik kanan mouse pada kontrol DataWindow dw_detail dan
pilih Script.
Klik dropdown event dan pilih event clicked.
Ketikkan skrip di bawah ini:
idw_aktif = this

parent.title = is_judul + ' (Detail)'

if rowcount() > 0 then

m_sheet.m_edit.m_ubah.enabled = true
m_sheet.m_edit.m_hapus.enabled = true
m_sheet.m_edit.m_preview.enabled = true

if rowcount() > 1 then
if getrow() = 1 then
m_sheet.m_edit.m_mundur.enabled = false
m_sheet.m_edit.m_awal.enabled = false

m_sheet.m_edit.m_maju.enabled = true
m_sheet.m_edit.m_akhir.enabled = true

elseif getrow() < rowcount() then
m_sheet.m_edit.m_mundur.enabled = true
m_sheet.m_edit.m_awal.enabled = true
m_sheet.m_edit.m_maju.enabled = true
m_sheet.m_edit.m_akhir.enabled = true

elseif getrow() = rowcount() then
m_sheet.m_edit.m_mundur.enabled = true
m_sheet.m_edit.m_awal.enabled = true
m_sheet.m_edit.m_maju.enabled = false
m_sheet.m_edit.m_akhir.enabled = false

end if
else
m_sheet.m_edit.m_mundur.enabled = false
m_sheet.m_edit.m_awal.enabled = false
m_sheet.m_edit.m_maju.enabled = false
m_sheet.m_edit.m_akhir.enabled = false

end if

else
m_sheet.m_edit.m_mundur.enabled = false
m_sheet.m_edit.m_awal.enabled = false
m_sheet.m_edit.m_maju.enabled = false
m_sheet.m_edit.m_akhir.enabled = false

m_sheet.m_edit.m_ubah.enabled = false
m_sheet.m_edit.m_hapus.enabled = false
m_sheet.m_edit.m_preview.enabled = false

217
end if

Event dberror
Event dberror digunakan untuk memanggil fungsi f_dberror yang
akan menampilkan pesan kesalahan yang terjadi saat operasi
database.
Untuk mengetikkan skrip event dberror kontrol DataWindow, ikuti
langkah-langkah di bawah ini:
1. Kontrol dw_master:
Klik tab Layout.
Klik kanan mouse pada kontrol DataWindow dw_master dan
pilih Script.
Klik dropdown event dan pilih event dberror.
Ketikkan skrip di bawah ini:
return f_dberror (sqldbcode,sqlerrtext,is_judul)

2. Kontrol dw_detail:
Klik tab Layout.
Klik kanan mouse pada kontrol DataWindow dw_detail dan
pilih Script.
Klik dropdown event dan pilih event dberror.
Ketikkan skrip di bawah ini:
return f_dberror (sqldbcode,sqlerrtext,is_judul)

Event doubleclicked
Event doubleclicked digunakan untuk mengeset kontrol DataWindow
aktif, menampilkan judul window sheet, dan mengubah data dengan
menjalankan user event ue_ubah.
Untuk mengetikkan skrip event doubleclicked kontrol DataWindow,
ikuti langkah-langkah di bawah ini:
1. Kontrol dw_master:
Klik tab Layout.
Klik kanan mouse pada kontrol DataWindow dw_master dan
pilih Script.
218
Klik dropdown event dan pilih event doubleclicked.
Ketikkan skrip di bawah ini:
idw_aktif = this
parent.title = is_judul + ' (Master)'

parent.triggerevent("ue_ubah")

2. Kontrol dw_detail:
Klik tab Layout.
Klik kanan mouse pada kontrol DataWindow dw_detail dan
pilih Script.
Klik dropdown event dan pilih event doubleclicked.
Ketikkan skrip di bawah ini:
idw_aktif = this
parent.title = is_judul + ' (Detail)'

parent.triggerevent("ue_ubah")

Event rowfocuschanged
Event rowfocuschanged pada kontrol dw_master digunakan untuk
memanggil data detail sesuai dengan kode master (pirmarykey),
menampilkan informasi baris pada microhelp (status line), dan
mengeset tampilan menu perpidahan baris. Event rowfocuschanged
pada kontrol dw_detail digunakan untuk menampilkan informasi
baris pada microhelp (status line) dan mengeset tampilan menu
perpidahan baris serta menampilkan pointer baris aktif (selection).
Untuk mengetikkan skrip event rowfocuschanged kontrol
DataWindow, ikuti langkah-langkah di bawah ini:
1. Kontrol dw_master:
Klik tab Layout.
Klik kanan mouse pada kontrol DataWindow dw_detail dan
pilih Script.
Klik dropdown event dan pilih event rowfocuschanged.
Ketikkan skrip di bawah ini:
if this.rowcount() = 0 or this.getrow()=0 then return

long ll_baris, ll_jml_baris
219

idw_aktif = this

if this.rowcount() > 0 then
is_kolMaster = this.describe("#" + &
string( ii_keymaster ) + ".name")
is_keyMaster= this.getitemstring(this.getrow(),&
is_kolMaster)
end if

dw_detail.retrieve(is_keyMaster)

ll_jml_baris = long(this.rowCount())

if ll_jml_baris < 1 then
parent.parentWindow().setMicroHelp(&
"Master->Data kosong")
else
ll_baris = long(this.getRow())
parent.parentWindow().setMicroHelp(&
"Master->Baris "+string(this.getRow())+ &
" dari "+string(this.rowCount()))
end if

if rowcount() > 1 then
if getrow() = 1 then
m_sheet.m_edit.m_mundur.enabled = false
m_sheet.m_edit.m_awal.enabled = false
m_sheet.m_edit.m_maju.enabled = true
m_sheet.m_edit.m_akhir.enabled = true

elseif getrow() < rowcount() then
m_sheet.m_edit.m_mundur.enabled = true
m_sheet.m_edit.m_awal.enabled = true
m_sheet.m_edit.m_maju.enabled = true
m_sheet.m_edit.m_akhir.enabled = true

elseif getrow() = rowcount() then
m_sheet.m_edit.m_mundur.enabled = true
m_sheet.m_edit.m_awal.enabled = true
m_sheet.m_edit.m_maju.enabled = false
m_sheet.m_edit.m_akhir.enabled = false
end if
else
m_sheet.m_edit.m_mundur.enabled = false
m_sheet.m_edit.m_awal.enabled = false
m_sheet.m_edit.m_maju.enabled = false
m_sheet.m_edit.m_akhir.enabled = false
end if

selectRow(0,false) //Deselect
selectRow(getRow(),true) //select baris aktif

2. Kontrol dw_detail:
Klik tab Layout.
220
Klik kanan mouse pada kontrol DataWindow dw_detail dan
pilih Script.
Klik dropdown event dan pilih event rowfocuschanged.
Ketikkan skrip di bawah ini:
if this.rowcount() = 0 or this.getrow()=0 then return

long ll_baris, ll_jml_baris

ll_jml_baris = long(this.rowCount())

if ll_jml_baris < 1 then
parent.parentWindow().setMicroHelp(&
"Master->Data kosong")
else
ll_baris = long(this.getRow())
parent.parentWindow().setMicroHelp(&
"Master->Baris "+string(this.getRow())+ &
" dari "+string(this.rowCount()))
end if

if rowcount() > 1 then
if getrow() = 1 then
m_sheet.m_edit.m_mundur.enabled = false
m_sheet.m_edit.m_awal.enabled = false
m_sheet.m_edit.m_maju.enabled = true
m_sheet.m_edit.m_akhir.enabled = true

elseif getrow() < rowcount() then
m_sheet.m_edit.m_mundur.enabled = true
m_sheet.m_edit.m_awal.enabled = true
m_sheet.m_edit.m_maju.enabled = true
m_sheet.m_edit.m_akhir.enabled = true

elseif getrow() = rowcount() then
m_sheet.m_edit.m_mundur.enabled = true
m_sheet.m_edit.m_awal.enabled = true
m_sheet.m_edit.m_maju.enabled = false
m_sheet.m_edit.m_akhir.enabled = false
end if
else
m_sheet.m_edit.m_mundur.enabled = false
m_sheet.m_edit.m_awal.enabled = false
m_sheet.m_edit.m_maju.enabled = false
m_sheet.m_edit.m_akhir.enabled = false
end if

selectRow(0,false) //Deselect
selectRow(getRow(),true) //select baris aktif

221
Event editchaged dw_cari
Event ini digunakan untuk memindahkan pointer baris ke baris yang
ditemukan. Pencarian data dilakukan dengan fungsi find() pada
kolom aktif. Jika pencarian berhasil, fungsi find akan
mengembalikan nilai sesuai dengan nomor baris (row) yang
ditemukan.
Sintaks:
kontroldw.Find ( ekspresi, mulai, akhir)

Keterangan:
kontroldw adalah nama kontrol DataWindow (sebaiknya dengan
tipe presentasi tabular atau grid) seperti dw_master
dan dw_detail.
ekspresi adalah string yang berisi nilai logika (boolean)
sebagai kriteria pencarian data.
mulai adalah nomor baris (record) awal dari data (record)
yang akan dicari, sebaiknya mulai diisi dengan 1
(baris pertama).
akhir adalah nomor baris akhir dari data yang akan dicari,
sebaiknya akhir diisi dengan jumlah baris
(rowcount).
Untuk mengetikkan skrip event modified dw_cari, ikuti langkah-
langkah di bawah ini:
1. Klik tab Layout.
2. Klik kanan mouse pada kontrol dw_cari dan pilih Script.
3. Klik dropdown event dan pilih event editchanged.
4. Ketikkan skrip di bawah ini:
long ll_baris
int li_panjang
string ls_data,ls_kolom,ls_ekspresi,ls_tipe

accepttext()

ls_data = getitemstring(1,'cari')
li_panjang = len( ls_data )

ls_kolom = idw_aktif.GetColumnName()

222
if ls_kolom = '' then return

ls_tipe =
trim(left(lower(idw_aktif.describe(ls_kolom+".coltype")),5))

if ls_tipe <> "char(" or ls_tipe <> 'varch' or ls_tipe <>
'text' then return

//Data yang dicari hanya data string
ls_kolom = "left(" + ls_kolom + ","
ls_kolom = ls_kolom + string(li_panjang) + ")"

//Expresi di bawah ini error jika ada data dengan tanda kutip
dua seperti "xx"
ls_ekspresi = ls_kolom + ' = "'+ ls_data +'"'

ll_baris = idw_aktif.find( ls_ekspresi , 1, &
idw_aktif.rowcount())
idw_aktif.scrolltorow( ll_baris )
7.6 Window Edit
Window edit adalah window yang bertipe response dan digunakan
untuk memasukkan atau mengubah data pada sheet.
Pada window edit terdapat 4 (empat) kontrol obyek, yaitu kontrol
groupbox (gb_1), kontrol DataWindow edit (dw_edit), kontrol
tombol Simpan (cb_simpan), dan tombol Batal (cb_batal).
7.6.1 Pembuatan Window
Untuk membuat window edit, ikuti langkah-langkah di bawah ini.
1. Lakukan langkah-langkah seperti membuat window-window
sebelumnya.
2. Klik tab General.
3. Ketikkan Menambah data dalam kotak isian Title.
4. Klik dropdpwn WindowType dan pilih response!.
5. Klik dropdpwn WindowState dan pilih normal!.
6. Klik dropdpwn BackColor dan pilih Destop (warna latar sesuai
dengan warna destop windows).
7. Klik icon Save atau pilih menu File | Save atau Save As.
8. Ketikkan nama (obyek) window w_edit.
223
9. Klik nama file pustaka tempat penyimpanan window ini, yaitu
mylibrary.pbl.
10. Klik OK.
Langkah selanjutnya adalah menempatkan kontrol DataWindow edit
(dw_edit), groupbox (gb_1) sebagai bingkai kontrol DataWindow,
kontrol tombol Simpan (cb_simpan), dan tombol Batal (cb_batal)
seperti Gambar 7.10. Cara untuk menempatkan keempat kontrol ini
adalah seperti langkah-langkah di bawah ini:












gb_1 dw_edit cb_simpan cb_batal

Gambar 7.10 Layout Window Edit
1. Klik tab Layout.
2. Kontrol DataWindow:
Klik dropdown kontrol, pilih Create DataWindow control.
Klik area di mana kontrol ditempatkan (perhatikan
Gambar 7.10), maka akan terbentuk kontrol dw_1.
Ganti dw_1 menjadi dw_edit dalam kotak isian Name.
3. Kontrol GroupBox:
Klik dropdown kontrol dan pilih Create GroupBox control.
Klik area di pojok kiri atas kontrol dw_edit, maka akan
terbentuk kontrol gb_1.
Klik mouse pada posisi kanan kontrol gb_1.
Tarik mouse ke kanan sampai tampilan groupbox beada di
sebelah kanan kontrol dw_edit.
224
Klik tab General dan hapus teks None pada kotak isian Text.
Klik dropdown BorderStyle dan pilih StyleRised!.
4. Kontrol tombol Simpan:
Klik dropdown kontrol dan pilih Create CommandButton
control.
Klik area di bawah kontrol gb_1, maka akan terbentuk
kontrol cb_1.
Ganti cb_1 menjadi cb_simpan dalam kotak isian Name.
Ketikkan &Simpan dalam kotak isian Text.
5. Kontrol tombol Batal:
Klik dropdown kontrol dan pilih Create CommandButton
control.
Klik area di sebelah kann kontrol cb_simpan, maka akan
terbentuk kontrol cb_1.
Ganti cb_1 menjadi cb_batal dalam kotak isian Name.
Ketikkan &Batal dalam kotak isian Text.
6. Rapikan tampilan kontrol seperti Gambar 7.10.
7.6.2 Pendeklarasian Variabel Instance
Ada dua buah variabel instance yang dibutuhkan window edit adalah
seperti diperlihatkan dalam tabel 7.2.
Tabel 7.2 Variabel Instance Window Edit
Nama Variabel Tipe Keterangan
il_baris long No baris data
is_parm string String parameter: Baru atau
keyMaster

Cara untuk mendeklarasikan variabel instance di atas adalah dengan
mengklik tab Declare InstanceVariable pada window w_edit,
kemudian mengetikkan skrip di bawah ini:
long il_baris
225
string is_parm
7.6.3 Skrip Window
Ada beberapa event pada window edit yang harus Anda beri skrip,
yaitu kejadian open, dberror, penekanan tombol, clicked pada
tombol Simpan dan Batal.
Sebelum Anda dapat memasukkan data atau mengubah data pada
window edit, Anda harus terlebih dahulu membuka window
tersebut. Saat window dibuka, ada beberapa hal yang harus
dilakukan seperti menempatkan window di tengah-tengah layar
dengan memangil fungsi f_center_w(), menghubungkan kontrol
DataWindow dengan database, mengeset secara otomatis keymaster
saat penambahan data baru, dan menampilkan data untuk diubah.
Berikut ini beberapa pernyataan baru yang digunakan dalam window
edit.
Message
Message adalah sebuah obyek yang digunakan untuk membaca
parameter yang dilewatkan pada window dibuka atau parameter
yang dilewatkan pada window ditutup.
Sintaks:
Message.<properti>

Keterangan:
properti adalah properti message dari parameter yang akan
dibaca. Tipe data parameter dapat berupa numeric,
string, atau obyek PowerBuilder.
Contoh:
//Buka window w_ref_perkiraan_edit dengan melewatkan parameter
baru
is_wmEdit = w_ref_perkiraan_edit
OpenWithParm(lw_edit, "baru", is_wmEdit, w_sheet)

//Pada event buka, baca parameter dari properti message yaitu
StringParm
is_parm = message.StringParm

InsertRow()
Fungsi ini digunakan unntuk melakukan penambahan data baru.
226
Sintaks:
kontroldw.InsertRow ( baris )

Keterangan:
baris adalah nomor baris di mana baris baru disisipkan.
Untuk penambahan data baru di akhir baris, berikan
nilai 0 (nol).
RowsCopy()
Fungsi ini untuk menyalin (copy) sejumlah baris dari obyek kontrol
DataWindow (atau DataStore) ke kontrol obyek kontrol DataWindow
(atau DataStore) lainnya.
Sintaks:
kontroldw.RowsCopy (mulai, akhir, bufferAsal, dwTujuan, sebelum,
bufferTujuan)

Keterangan:
kontroldw adalah nama kontrol DataWindow seperti
dw_master, dw_detail dan dw_edit.
mulai adalah nomor baris awal penyalinan.
akhir adalah nomor baris akhir penyalinan.
bufferAsal adalah sebuah buffer DataWindow asal seperti
Primary!, Delete!, Filter!. Untuk penyalinan data
dari window edit ke sheet, yang digunakan adalah
buffer Primary!
dwTujuan kontrol DataWindow tujuan data disisipkan, dalam
hal ini adalah kontrol DataWindow sheet.
sebelum adalah nomor baris ke berapa data disisipkan.
bufferTujuan adalah sebuah buffer DataWindow tujuan seperti
Primary!, Delete!, Filter!. Dalam kasus penyalinan,
data yang digunakan adalah buffer Primary!
SetItem()
Fungsi ini untuk memasukkan data (nilai) ke kotak isian (kolom)
dalam kontrol DataWindow atau DataStore.
227
Sintaks:
kontroldw.SetItem (baris, kolom, data )

Keterangan:
kontroldw adalah nama kontrol DataWindow seperti
dw_master, dw_detail, dan dw_edit.
baris adalah pada nomor baris berapa data dimasukkan.
kolom adalah pada nomor kolom ke berapa atau pada
kolom apa (string nama obyek kolom) data
dimasukkan.
data adalah data yang akan dimasukkan. Tipe data yang
akan dimasukkan harus sama dengan tipe kolom
penampung data.
Trim()
Fungsi ini digunakan untuk menghapus spasi kosong di sebelah kiri
dan kanan sebuah string.
Sintaks:
Trim ( string )

Keterangan:
string adalah string yang akan dihapus spasi kosongnya.
Left()
Fungsi ini berfungsi untuk mengambil sejumlah karakter dari sebuah
string.
Sintaks:
Trim ( string, n )

Keterangan:
string adalah string yang akan dihapus spasi kosongnya.
n adalah banyak karakter yang akan diambil.
Setredraw()
Fungsi ini untuk menata ulang tampilan obyek setelah terjadi
perubahan propertinya.
228
Sintaks:
kontroldw.SetItem (kondisi)

Keterangan:
kontroldw adalah nama kontrol DataWindow seperti
dw_master, dw_detail, dan dw_edit.
koidisi adalah kondisi berlogika true atau false.
Event Open Window
Untuk mengetikkan skrip event open, ikuti langkah-langkah di
bawah ini:
1. Klik tab Layout.
2. Klik kanan mouse pada area window untuk menampilkan menu
pop-up, kemudian pilih Script.
3. Klik dropdown Event List.
4. Pilih event Open, kemudian ketikkan skrip di bawah ini:
string ls_kolMaster,ls_keyMaster,ls_kolDetail,ls_keyDetail

f_center_w( this )

dw_edit.settransobject(sqlca)

is_parm = message.StringParm

if message.StringParm = "baru" then

dw_edit.insertRow(1)

if w_sheet.ii_keyDetail > 0 and &
w_sheet.idw_aktif = w_sheet.dw_detail then
ls_kolMaster = w_sheet.dw_master.describe(&
"#" + string( w_sheet.ii_keyMaster ) + ".name")
ls_keyMaster = w_sheet.dw_master.getitemstring( &
w_sheet.dw_master.getrow(),ls_kolMaster)
dw_edit.setItem(1,ls_kolMaster,ls_keyMaster)
end if

else
title = "Mengubah data"

if w_sheet.ii_keyDetail > 0 and &
w_sheet.idw_aktif = w_sheet.dw_detail then
ls_kolDetail = w_sheet.dw_detail.describe( "#" + &
string( w_sheet.ii_keyDetail ) + ".name")
ls_keyDetail = w_sheet.dw_detail.getitemstring( &
w_sheet.dw_detail.getrow(),ls_kolDetail)
229
end if
dw_edit.retrieve(is_parm,ls_keyDetail)
end if

Event Dberror
Untuk mengetikkan skrip event dberror, ikuti langkah-langkah di
bawah ini:
1. Klik tab Layout.
2. Klik kanan mouse pada area kontrol DataWindow dw_edit untuk
menampilkan menu pop-up, kemudian pilih Script.
3. Klik dropdown Event List.
4. Pilih event dberror, kemudian ketikkan skrip di bawah ini:
return f_dberror (sqldbcode,sqlerrtext,w_sheet.is_judul)

Event User Event ue_tombol
Untuk mengetikkan skrip event dberror, ikuti langkah-langkah di
bawah ini:
1. Klik tab Layout.
2. Klik kanan mouse pada kontrol DataWindow dw_edi dan pilih
script.
3. Klik dropdown event dan pilih (New Event).
4. Ketikkan ue_tombol pada Event Name.
5. Klik dropdown EventID dan pilih pbm_dwnkey.
6. Ketikkan skrip di bawah ini:
if w_sheet.idw_aktif = w_sheet.dw_master then
return f_tombolTekan(this,keyflags,w_sheet.ii_keyMaster)
else
return f_tombolTekan(this,keyflags,w_sheet.ii_keyDetail)
end if

Event clicked tombol Simpan
Untuk mengetikkan skrip event clicked tombol Simpan, ikuti
langkah-langkah di bawah ini:
1. Klik tab Layout.
2. Klik kanan mouse pada kontrol CommandButton cb_simpan dan
pilih Script.
230
3. Klik dropdown event dan pilih clicked.
4. Ketikkan skrip di bawah ini:
string ls_tipe_kolom,ls_nama_kolom
int li_jml_kolom, li_i
any la_data

dw_edit.acceptText()

if is_parm = "baru" then

if dw_edit.RowsCopy(1,1, Primary!, w_sheet.idw_aktif, &
w_sheet.idw_aktif.rowCount()+1, Primary!) = -1 then
messagebox('Baru','Tambah data gagal!')
return
end if

w_sheet.idw_aktif.scrollToRow(&
w_sheet.idw_aktif.rowCount()+1)
w_sheet.idw_aktif.setRow(w_sheet.idw_aktif.rowCount()+1)

else
il_baris = w_sheet.idw_aktif.getRow()
li_jml_kolom = integer(&
dw_edit.object.datawindow.column.count)

for li_i = 1 to li_jml_kolom
//Ambil data pada kolom ke-li_i dalam dw_edit
la_data = dw_edit.object.data[1,li_i]
//Set data pada kolom ke-li_i ke dw aktif sheet
w_sheet.idw_aktif.setITem(il_baris,li_i,la_data)
Next
end if


if w_sheet.idw_aktif.update() = 1 then

commit using SQLCA ;

w_sheet.idw_aktif.setredraw(true)

Close(parent)

else
rollback using SQLCA ;

if is_parm = "baru" then
w_sheet.idw_aktif.deleteRow(&
w_sheet.idw_aktif.rowCount())
end if

dw_edit.setFocus()

messagebox("Informasi","Gagal update data!")

231
return

end if

m_sheet.m_edit.m_simpan.enabled = false
m_sheet.m_edit.m_hapus.enabled = true

Event clicked tombol Batal
Untuk mengetikkan skrip event clicked event tombol Simpan, ikuti
langkah-langkah di bawah ini:
1. Klik tab Layout.
2. Klik kanan mouse pada kontrol CommandButton cb_batal dan
pilih Script.
3. Klik dropdown event dan pilih clicked.
4. Ketikkan skrip di bawah ini:
Close ( parent )
7.7 Window Tutup Buku
Proses tutup buku adalah untuk memindahkan saldo rekening
nominal (pendapat dan biaya) ke rekening laba ditahan (return
earning), rekening setoran dan prive/deviden ke rekening modal
serta menjumlahkan saldo mutasi ke saldo awal rekening.
7.7.1 Pembuatan Window
Untuk membuat window tutup buku, langkah-langkahnya adalah
sebagai berikut:
1. Buat window baru dengan title Tutup Buku.
2. Buat kontrol teks statis st_1 dengan teks Sebelum proses tutup
buku dilakukan.
3. Buat kontrol teks statis st_2 dengan teks pastikan Anda telah
mencetak laporan.
4. Buat kontrol teks statis st_3 dengan teks periode sebelumnya!
5. Buat 2 (dua) buah tombol untuk tombol Proses (cb_1) dan Batal
(cb_2).
232
6. Rapikan tampilan window.
7. Simpan window nama w_tutup_buku ke dalam file transaksi.bpl.

Gambar 7.11 Layout window Tutup Buku
7.7.2 Skrip Window
Window ini mempunyai 3 (tiga) skrip, yaitu skrip event open, skrip
tombol Proses, dan skrip tombol Cancel.
Event Open
f_center_w (this)

Tombol Keluar
Klik kanan mouse pada kontrol CommandButton Cancel (cb_2) dan
pilih Script, kemudian ketikan Close ( parent ).
Tombol Proses
Skrip tombol Proses berisi query untuk meng-update tabel
perkiraan. Query ini tidaklah kita ketikkan secara manual, tetapi
menggunakan fasilitas paste SQL. Langkah-langkah untuk membuat
skrip tombol proses adalah sebagai berikut:
1. Klik tab Layout.
2. Klik kanan mouse pada kontrol cb_1 (Proses) dan pilih Script.
233
3. Tampilkan pertanyaan dengan skrip di bawah ini:
if Messagebox("Tutup
tahun","Proses?",Exclamation!,YesNo!,2)=2 then
Close ( parent )
return
end if

4. Deklarasikan variabel yang diperlukan:
double ldb_income,ldb_expenses,ldb_rl,ldb_debet
double ldb_kredit,ldb_saldo
double ldb_sld_debet,ldb_sld_kredit,ldb_mut_debet
double ldb_mut_kredit
long ll_tutup,ll_i,ll_data
date ld_tanggal
string ls_pk_tmp,ls_pk_kode,ls_pk_kode_reld_tanggal = today()

5. Ikuti langkah-langkah di bawah ini untuk menjumlahkan
pendapatan:
Ketikkan //Jumlahkan pendapatan.
Klik icon Past SQL dan pilih Select.
Klik tabel subkelompok, perkiraan, dan kelompok.
Klik kolom pk_mutasi_kredit dan pk_mutasi_debet.
Klik kolom kelompok.tp_nama pada Column dan ketikkan
INCOME pada Value.
Klik icon Into, lalu ketikkan :ldb_income pada baris pertama
dan x (sembarangan) pada baris kedua, kemudian klik OK.
Klik icon Return.
Ketikkan fungsi sum() sehingga skrip untuk menjumlahkan
pendapatan adalah seperti di bawah ini:
SELECT sum( perkiraan.pk_mutasi_kredit -
perkiraan.pk_mutasi_debet )
into :ldb_income
FROM subkelompok,
perkiraan,
kelompok
WHERE ( perkiraan.sk_kode=subkelompok.sk_kode) and
( kelompok.tp_kode =subkelompok.tp_kode) and
( kelompok.tp_nama = 'INCOME' ) ;

234
6. Menjumlahkan biaya:
Salin skrip yang telah dibuat pada langkah 5 di atas ke bawah
skrip tersebut dan modifikasi skrip tersebut sehingga
selengkapnya skrip untuk menjumlahkan biaya adalah seperti di
bawah ini:
//Jumlahkan biaya
SELECT sum( &
perkiraan.pk_mutasi_debet - & perkiraan.pk_mutasi_kredit )
into :ldb_expenses
FROM subkelompok,
perkiraan,
kelompok
WHERE ( perkiraan.sk_kode = &
subkelompok.sk_kode ) and
( kelompok.tp_kode = &
subkelompok.tp_kode ) and
( kelompok.tp_nama = 'EXPENSES') ;

7. Ketikkan skrip di bawah ini untuk mencari Rugi Laba:
//Cari rugi/laba
ldb_rl = ldb_income - ldb_expenses

8. Ketikkan skrip di bawah ini untuk menghitung jumlah jurnal yang
belum tutup buku:
//Hitung jumlah transaksi yang belum tutup buku
SELECT count(jr_tutup)
INTO :ll_tutup
FROM jurnal
WHERE jr_tutup = '0' ;

9. Ketikkan skrip di bawah ini untuk menghitung modal:
//Buat kursor untuk prive/deviden
DECLARE c_modal CURSOR FOR
SELECT perkiraan.pk_kode,
perkiraan.pk_mutasi_debet,
perkiraan.pk_mutasi_kredit
FROM perkiraan,
subkelompok,
kelompok
WHERE (subkelompok.sk_kode=perkiraan.sk_kode) and
(kelompok.tp_kode=subkelompok.tp_kode ) and
( ( kelompok.tp_nama = 'CAPITAL' ) AND
( substring(perkiraan.pk_kode,3,1) = '2' ) ) ;

SELECT count(perkiraan.pk_kode)
INTO :ll_tutup
FROM subkelompok,
perkiraan,
kelompok
WHERE (subkelompok.sk_kode=perkiraan.sk_kode ) and
235
( kelompok.tp_kode=subkelompok.tp_kode ) and
( ( kelompok.tp_nama = 'CAPITAL' ) AND
( substring(perkiraan.pk_kode,3,1) = '2' ) ) ;

open c_modal ;

for ll_i = 1 to ll_tutup
fetch c_modal into :ls_pk_kode, :ldb_debet,
:ldb_kredit;
// perkiraan setoran modal
ls_pk_tmp = left(ls_pk_kode,2) + '1' +
right(ls_pk_kode,7)

//tambahkan modal dengan setoran dan kurangi modal dengan
prive/deviden
UPDATE perkiraan
SET pk_saldo_kredit = pk_saldo_kredit +
pk_mutasi_kredit -
( :ldb_debet - :ldb_kredit )
WHERE ( perkiraan.pk_kode = :ls_pk_tmp ) ;
Next
Close c_modal ;

10. Ketikkan skrip di bawah ini untuk mengambil kode perkiraan
laba ditahan:
//Ambil kode perkiraan Laba ditahan
SELECT perkiraan.pk_kode
INTO :ls_pk_kode_re
FROM subkelompok,
perkiraan,
kelompok
WHERE (perkiraan.sk_kode=subkelompok.sk_kode ) and
( kelompok.tp_kode = subkelompok.tp_kode ) and
( ( kelompok.tp_nama = 'RT-EARNING' ) ) ;

11. Ketikkan skrip di bawah ini untuk untuk menambahkan semua
mutasi ke salado awal asset:
//Tambahkan semua mutasi ke salado awal (asset)
DECLARE c_assets CURSOR FOR
SELECT perkiraan.pk_kode,
perkiraan.pk_saldo_debet,
perkiraan.pk_saldo_kredit,
perkiraan.pk_mutasi_debet,
perkiraan.pk_mutasi_kredit
FROM subkelompok,
perkiraan,
kelompok
WHERE (perkiraan.sk_kode=subkelompok.sk_kode) and
( kelompok.tp_kode = subkelompok.tp_kode ) and
( kelompok.tp_nama = 'ASSETS' ) ;

SELECT count( perkiraan.pk_kode )
INTO :ll_data
236
FROM subkelompok,
perkiraan,
kelompok
WHERE (perkiraan.sk_kode=subkelompok.sk_kode) and
(kelompok.tp_kode=subkelompok.tp_kode ) and
( kelompok.tp_nama = 'ASSETS' ) ;

open c_assets ;

for ll_i = 1 to ll_data
fetch c_assets into :ls_pk_kode,:ldb_sld_debet,&
:ldb_sld_kredit,:ldb_mut_debet,&
:ldb_mut_kredit ;
ldb_saldo = ldb_sld_debet - ldb_sld_kredit + &
ldb_mut_debet - ldb_mut_kredit
//Normal saldo adalah debet
if ldb_saldo > 0 then
ldb_sld_debet = ldb_saldo
ldb_sld_kredit= 0
else
ldb_sld_debet = 0
ldb_sld_kredit= abs( ldb_saldo )
end if

UPDATE perkiraan
SET pk_saldo_debet = :ldb_sld_debet,
pk_saldo_kredit = :ldb_sld_kredit
WHERE perkiraan.pk_kode = :ls_pk_kode ;

Next

Close c_assets ;

12. Ketikkan skrip di bawah ini untuk menambahkan semua mutasi
ke saldo awal utang:
//Tambahkan semua mutasi ke salado awal (utang)
DECLARE c_utang CURSOR FOR
SELECT perkiraan.pk_kode,
perkiraan.pk_saldo_debet,
perkiraan.pk_saldo_kredit,
perkiraan.pk_mutasi_debet,
perkiraan.pk_mutasi_kredit
FROM subkelompok,
perkiraan,
kelompok
WHERE(perkiraan.sk_kode=subkelompok.sk_kode) and
(kelompok.tp_kode =subkelompok.tp_kode) and
( kelompok.tp_nama = 'LIABILITIES' ) ;

SELECT count( perkiraan.pk_kode )
INTO :ll_data
FROM subkelompok,
perkiraan,
kelompok
WHERE (perkiraan.sk_kode=subkelompok.sk_kode) and
237
(kelompok.tp_kode =subkelompok.tp_kode) and
( kelompok.tp_nama = 'LIABILITIES' ) ;

open c_utang ;
for ll_i = 1 to ll_data
fetch c_utang into :ls_pk_kode,:ldb_sld_debet,&
:ldb_sld_kredit,:ldb_mut_debet,:ldb_mut_kredit ;
ldb_saldo = ldb_sld_kredit - ldb_sld_debet + &
ldb_mut_kredit - ldb_mut_debet
//Normal saldo adalah kredit
if ldb_saldo > 0 then
ldb_sld_debet = 0
ldb_sld_kredit= ldb_saldo
else
ldb_sld_debet = abs( ldb_saldo )
ldb_sld_kredit= 0
end if

UPDATE perkiraan
SET pk_saldo_debet = :ldb_sld_debet,
pk_saldo_kredit = :ldb_sld_kredit
WHERE perkiraan.pk_kode = :ls_pk_kode ;

Next

Close c_utang ;

13. Ketikkan skrip di bawah ini untuk menambahkan laba ditahan
dengan rugi/laba tahun berjalan:
//Laba ditahan + laba/rugi
UPDATE perkiraan
SET pk_saldo_kredit = pk_saldo_kredit + :ldb_rl ,
pk_tanggal= :ld_tanggal
WHERE pk_kode= :ls_pk_kode_re ;

Nolkan mutasi

//Nolkan mutasi
UPDATE perkiraan
SET pk_mutasi_debet = 0,
pk_mutasi_kredit = 0,
pk_tanggal = :ld_tanggal ;

14. Ketikkan skrip di bawah ini untuk untuk memeriksa berhasil atau
tidaknya proses tutup buku:
if sqlca.sqlnrows < 0 then
rollback using sqlca;
messagebox("Informasi","Tutup buku
gagal!",Information!,Ok!,1)
Close ( parent )
return
end if

238
messagebox("Information","Tutup buku
selesai!",Information!,Ok!,1)
Close ( parent )

15. Simpan window dengan nama w_trn_tutup_buku ke dalam file
transaksi.pbl.
7.7.3 Listing Skrip
Skrip tombol Proses selengkapnya adalah seperti listing berikut ini:
if Messagebox("Tutup tahun","Proses?",Exclamation!,YesNo!,2)=2
then
Close ( parent )
return
end if

double ldb_income,ldb_expenses,ldb_rl,ldb_debet,
ldb_kredit,ldb_saldo
double ldb_sld_debet,ldb_sld_kredit,ldb_mut_debet,
ldb_mut_kredit
long ll_tutup,ll_i,ll_data
date ld_tanggal
string ls_pk_tmp,ls_pk_kode,ls_pk_kode_re

ld_tanggal = today()

//Jumlahkan pendapatan
SELECT sum( perkiraan.pk_mutasi_kredit -
perkiraan.pk_mutasi_debet )
into :ldb_income
FROM subkelompok,
perkiraan,
kelompok
WHERE (perkiraan.sk_kode=subkelompok.sk_kode ) and
(kelompok.kp_kode =subkelompok.kp_kode ) and
( kelompok.kp_nama = 'INCOME' ) ;

//Jumlahkan biaya
SELECT sum( perkiraan.pk_mutasi_debet -
perkiraan.pk_mutasi_kredit )
into :ldb_expenses
FROM subkelompok,
perkiraan,
kelompok
WHERE (perkiraan.sk_kode=subkelompok.sk_kode ) and
(kelompok.kp_kode=subkelompok.kp_kode ) and
( kelompok.kp_nama = 'EXPENSES') ;


//Cari laba/rugi
ldb_rl = ldb_income - ldb_expenses

//Hitung jumlah transaksi yang belum ditutup
239
SELECT count(jr_tutup)
INTO :ll_tutup
FROM jurnal
WHERE jr_tutup = '0' ;

//Modal
DECLARE c_modal CURSOR FOR
SELECT perkiraan.pk_kode,
perkiraan.pk_mutasi_debet,
perkiraan.pk_mutasi_kredit
FROM perkiraan,
subkelompok,
kelompok
WHERE (subkelompok.sk_kode=perkiraan.sk_kode) and
(kelompok.kp_kode = subkelompok.kp_kode ) and
( ( kelompok.kp_nama = 'CAPITAL' ) AND
( substring(perkiraan.pk_kode,3,1) = '2' ) ) ;

SELECT count(perkiraan.pk_kode)
INTO :ll_tutup
FROM subkelompok,
perkiraan,
kelompok
WHERE (subkelompok.sk_kode=perkiraan.sk_kode ) and
( kelompok.kp_kode = subkelompok.kp_kode ) and
( ( kelompok.kp_nama = 'CAPITAL' ) AND
( substring(perkiraan.pk_kode,3,1) = '2' ) ) ;

open c_modal ;

for ll_i = 1 to ll_tutup
fetch c_modal into :ls_pk_kode, :ldb_debet,&
:ldb_kredit;
ls_pk_tmp = left(ls_pk_kode,2) + '1' + &
right(ls_pk_kode,7) //perkiraan setoran modal
//tambahkan modal dengan setoran dan
//kurangi modal dengan prive/deviden
UPDATE perkiraan
SET pk_saldo_kredit = pk_saldo_kredit + &
pk_mutasi_kredit - ( :ldb_debet - :ldb_kredit )
WHERE ( perkiraan.pk_kode = :ls_pk_tmp ) ;
Next

Close c_modal ;


//Ambil kode perkiraan Laba ditahan
SELECT perkiraan.pk_kode
INTO :ls_pk_kode_re
FROM subkelompok,
perkiraan,
kelompok
WHERE (perkiraan.sk_kode=subkelompok.sk_kode ) and
(kelompok.kp_kode = subkelompok.kp_kode ) and
( ( kelompok.kp_nama = 'RT-EARNING' ) ) ;

240
//Tambahkan semua mutasi ke salado awal (asset)
DECLARE c_assets CURSOR FOR
SELECT perkiraan.pk_kode,
perkiraan.pk_saldo_debet,
perkiraan.pk_saldo_kredit,
perkiraan.pk_mutasi_debet,
perkiraan.pk_mutasi_kredit
FROM subkelompok,
perkiraan,
kelompok
WHERE (perkiraan.sk_kode=subkelompok.sk_kode ) and
(kelompok.kp_kode=subkelompok.kp_kode ) and
( kelompok.kp_nama = 'ASSETS' ) ;

SELECT count( perkiraan.pk_kode )
INTO :ll_data
FROM subkelompok,
perkiraan,
kelompok
WHERE (perkiraan.sk_kode=subkelompok.sk_kode ) and
(kelompok.kp_kode=subkelompok.kp_kode ) and
(kelompok.kp_nama = 'ASSETS' ) ;

open c_assets ;

for ll_i = 1 to ll_data
fetch c_assets into :ls_pk_kode,:ldb_sld_debet,
:ldb_sld_kredit,:ldb_mut_debet,:ldb_mut_kredit ;
ldb_saldo = ldb_sld_debet - ldb_sld_kredit +
ldb_mut_debet - ldb_mut_kredit
//Normal saldo adalah debet
if ldb_saldo > 0 then
ldb_sld_debet = ldb_saldo
ldb_sld_kredit= 0
else
ldb_sld_debet = 0
ldb_sld_kredit= abs( ldb_saldo )
end if


UPDATE perkiraan
SET pk_saldo_debet = :ldb_sld_debet,
pk_saldo_kredit = :ldb_sld_kredit
WHERE perkiraan.pk_kode = :ls_pk_kode ;

Next

Close c_assets ;

//Tambahkan semua mutasi ke salado awal (utang)
DECLARE c_utang CURSOR FOR
SELECT perkiraan.pk_kode,
perkiraan.pk_saldo_debet,
perkiraan.pk_saldo_kredit,
perkiraan.pk_mutasi_debet,
perkiraan.pk_mutasi_kredit
241
FROM subkelompok,
perkiraan,
kelompok
WHERE (perkiraan.sk_kode=subkelompok.sk_kode ) and
(kelompok.kp_kode =subkelompok.kp_kode ) and
(kelompok.kp_nama = 'LIABILITIES' ) ;

SELECT count( perkiraan.pk_kode )
INTO :ll_data
FROM subkelompok,
perkiraan,
kelompok
WHERE (perkiraan.sk_kode=subkelompok.sk_kode ) and
(kelompok.kp_kode=subkelompok.kp_kode ) and
( kelompok.kp_nama = 'LIABILITIES' ) ;

open c_utang ;

for ll_i = 1 to ll_data
fetch c_utang into :ls_pk_kode,:ldb_sld_debet,&
:ldb_sld_kredit,:ldb_mut_debet,&
:ldb_mut_kredit ;
ldb_saldo = ldb_sld_kredit - ldb_sld_debet + &
ldb_mut_kredit - ldb_mut_debet
//Normal saldo adalah kredit
if ldb_saldo > 0 then
ldb_sld_debet = 0
ldb_sld_kredit= ldb_saldo
else
ldb_sld_debet = abs( ldb_saldo )
ldb_sld_kredit= 0
end if


UPDATE perkiraan
SET pk_saldo_debet = :ldb_sld_debet,
pk_saldo_kredit = :ldb_sld_kredit
WHERE perkiraan.pk_kode = :ls_pk_kode ;

Next

Close c_utang ;

//Laba ditahan + laba/rugi
UPDATE perkiraan
SET pk_saldo_kredit = pk_saldo_kredit + :ldb_rl ,
pk_tanggal= :ld_tanggal
WHERE pk_kode= :ls_pk_kode_re ;

//Nolkan mutasi
UPDATE perkiraan
SET pk_mutasi_debet = 0,
pk_mutasi_kredit = 0,
pk_tanggal = :ld_tanggal ;

if sqlca.sqlnrows < 0 then
242
rollback using sqlca;
messagebox("Informasi",&
"Tutup buku gagal!",Information!,Ok!,1)
Close ( parent )
return
end if

messagebox("Information",&
"Tutup buku selesai!",Information!,Ok!,1)

Close ( parent )
7.8 Window Preview
Window preview adalah window yang digunakan untuk menampilkan
data ke layar dalam mode print preview (print layout) dan dapat
dicetak ke printer. Pekerjaan yang sering dilakukan pada window ini
adalah setup printer, pindah halaman (maju/mundur), memperbesar
atau memperkecil tampilan (zoom) dan mencetak ke printer. Semua
pekerjaan ini akan dilakukan oleh DataWindow yang akan dibahas
pada Bab 8.
7.8.1 Pembuatan Window
Untuk membuat window preview laporan, ikuti langkah-langkah di
bawah ini:
1. Lakukan seperti membuat window-window sebelumnya.
2. Ketikkan Title window Priview Laporan.
3. Berikan tipe window Main.
4. Klik tombol select () MenuName untuk memilih menu sheet
laporan yang disimpan dalam file mylibrary.pbl.
5. Klik menu m_laporan.
6. Klik OK.
7. Klik icon Save.
8. Ketikkan nama window w_preview.
9. Klik file pustaka mylibrary.pbl.
10. Klik OK.
243
7.8.2 Pembuatan Bar Sheet
Bar sheet digunakan sebagai bantalan untuk menempatkan kontrol
gambar (logo perusahaan) dan kontrol DataWindow pemanggilan
data (retrieve). Untuk membuat bar sheet, ikuti langkah-langkah di
bawah ini:
1. Klik icon Picture dalam PainterBar1 atau klik dropdown kontrol
untuk menampilkan icon kontrol, kemudian klik icon Create
Pircture control.
2. Klik area di atas bagian pojok kiri atas, maka akan terbentuk
kontrol gambar dengan nama p_1.
3. Klik kontrol gambar p_1:
Klik tab General.
Ganti nama kontrol gambar p_1 menjadi p_bar.
Klik tombol select () PictureName.
Pilih file gambar barputih.bmp.
4. Posisi dan ukuran bar:
Klik tab Other.
Ketikkan 0 pada kotak isian X dan Y.
Ketikkan 1362 pada kotak isian Width.
Ketikkan 156 pada kotak isian Height.
5. Kontrol gambar logo perusahaan:
Klik kontrol p_bar.
Klik icon Picture dalam PainterBar1 atau klik dropdown
kontrol untuk menampilkan icon kontrol, kemudian klik icon
Create Picture control.
Klik area di atas pojok kiri atas kontrol gambar p_bar
(bertumpuk dengan kontrol p_bar), maka akan terbentuk
kontrol p_1.
Ganti nama kontrol gambar p_1 menjadi p_logo.
244
Klik tombol select () PictureName, kemudian pilih file
gambar logo perusahaan. Sebagai contoh, penulis
menggunakan file gambar power-it.jpg.
Atur ukuran tampilan gambar logo.
6. Kontrol DataWindow Panggil:
Klik tab kontrol p_bar.
Klik icon DataWindow dalam PainterBar1 atau klik
dropdown kontrol untuk menampilkan icon kontrol,
kemudian klik icon Create DataWindow control.
Klik area di sebelah kanan kontrol st_cari, maka akan
terbentuk kontrol dw_1.
Ganti nama kontrol dw_1 menjadi dw_panggil.
Atur posisi dan ukuran kontrol.
7.8.3 Pembuatan Kontrol DataWindow
Kontrol DataWindow preview (dw_preview) digunakan untuk
menghubungkan window preview dengan obyek DataWindow dan
menampilkan data dalam mode print preview. Langkah-langkah
untuk membuat kontrol DataWindow master adalah sebagai berikut:
1. Klik icon DataWindow dalam PainterBar1 atau klik dropdown
kontrol untuk menampilkan icon kontrol, kemudian klik icon
Create DataWindow control.
2. Klik area di sebelah kanan kontrol p_logo, maka akan terbentuk
kontrol dw_1.
3. Ganti nama kontrol dw_1 menjadi dw_preview.
4. Berikan tanda centang pada kotak cek HScrollBar dan
VScrollBar.
5. Atur ukuran dan posisi kontrol.
245










p_logo p_bar dw_panggil dw_preview

Gambar 7.12 Layout Window Preview
7.8.4 Skrip Window
Ada 4 (empat) event pada window preview yang harus Anda berikan
skrip, yaitu event open, resize, penekanan tombol pada kontrol
dw_panggil, dan rbuttondown pada kontrol dw_preview.
Event Resize
Pada event ini Anda dapat menyesuaikan ukuran tampilan kontrol
p_bar dan dw_preview. Skrip resize window w_preview
selengkapnya adalah sebagai berikut:
p_bar.width = newWidth

dw_preview.width = newWidth
dw_preview.y = (p_bar.y + p_bar.height)
dw_preview.height = newHeight - (p_bar.y + p_bar.height)

Event Open
Saat window dibuka, tempatkan kontrol dw_panggil di tengah-
tengah window dengan memanggil fungsi f_center_dw(), lalu baca
parameter yang dilewatkan untuk mengambil string obyek
DataWindow laporan, dan hubungkan kontrol dw_preview dengan
database.
Periksa apakah ada DataWindow pemanggil laporan? Jika ada maka
isi properti DataObject pada kontrol dw_panggil dengan is_dw_pgl,
hubungkan kontrol dw_panggil dengan database, buat baris kosong
246
untuk memberikan kesempatan kepada pemakai untuk memilih kode
perkiraan (khusus pada laporan buku besar), selanjutnya
panggil/tampilkan laporan sesuai dengan keymaster pada window
sheet. Sebaliknya jika tidak ada DataWindow pemanggil laporan
berarti laporan ditampilkan sesuai dengan data yang ditampilkan
pada window sheet, yaitu dengan menyalin isi kontrol DataWindow
dw_master ke kontrol DataWindow dw_preview.
Ubah tampilan laporan seperti hasil cetakan (preview) dengan
mengisi properti preview dengan string yes dan tampilkan tanda
mistar. Skrip event open selengkapnya adalah sebagai berikut:
string ls_parm, ls_dw_rpt,ls_dw_pgl

ls_parm = message.StringParm
ls_dw_rpt = left( ls_parm, pos( ls_parm, '!') -1 )
ls_dw_pgl = right( ls_parm, len( ls_parm ) - ( len( &
ls_dw_rpt ) + 1 ) )

dw_preview.dataobject = ls_dw_rpt

dw_preview.settransobject(sqlca)

if left( dw_preview.dataobject, 7 ) = 'dwo_rpt' then
if ls_dw_pgl <> '' then

dw_panggil.dataobject = ls_dw_pgl
dw_panggil.settransobject(sqlca)
dw_panggil.visible = true
dw_panggil.scrolltorow(dw_panggil.insertrow(0))

if left( dw_preview.dataobject, &
10 ) = 'dwo_rpt_rl' then
dw_panggil.setitem(1,"tahun",&
year(today()))
dw_panggil.setitem(1,"kd_step",'1')
end if

dw_panggil.setfocus()

else
dw_preview.retrieve()
end if

else
dw_panggil.visible = false
if isvalid( w_sheet ) then
dw_preview.object.data = w_sheet.dw_master.object.data
// dw_preview.object.p_logo.filename= gs_logo
dw_preview.object.perusahaan.text= gs_perusahaan
dw_preview.object.motto.text = gs_motto
end if
end if
247

dw_preview.object.datawindow.print.preview = 'yes'
dw_preview.Object.DataWindow.print.Preview.Rulers = 'yes'

f_center_dw ( dw_panggil )

User Event ue_tombol
User event ini berfungsi sebagai konfirmasi bahwa laporan yang akan
ditampilkan sesuai dengan pilihan yang telah dilakukan pemakai.
Untuk membuat dan mengetikkan skrip user event ue_tombol pada
kontrol DataWindow, ikuti langkah-langkah di bawah ini:
1. Klik tab Layout.
2. Klik kanan mouse pada kontrol DataWindow dw_panggil dan
pilih Script.
3. Klik dropdown event dan pilih (New Event).
4. Ketikkan ue_tombol pada Event Name.
5. Klik dropdown EventID dan pilih pbm_dwnkey.
6. Ketikkan skrip di bawah ini:
string ls_pk_kode
accepttext()

ls_pk_kode = getitemstring(1,'pk_kode')

dw_preview.retrieve(ls_pk_kode)

dw_preview.object.datawindow.print.preview = 'yes'
dw_preview.Object.DataWindow.print.Preview.Rulers = 'yes'

Pembahasan tentang obyek DataWindow pemanggil buku besar akan
dibahas pada Bab 8.
Event rbuttondown
Skrip pada event ini hanya berfungsi sebagai variasi tampilan menu
Tampilan dan bersifat opsional. Untuk mengetikkan skrip Event
rbuttondown, caranya adalah sebagai berikut:
1. Klik tab Layout.
2. Klik kanan mouse pada kontrol dw_preview dan pilih Script.
3. Klik dropdown event dan pilih event rbuttondown.
4. Ketikkan skrip di bawah ini:
248
m_laporan lm_menuid //deklarasikan variabel lm_menuid secara
local
lm_menuid = parent.menuid //isi variabel lm_menuid dengan
m_report

//Tempatkan posisi menu Display pada posisi mouse diklik
lm_menuid.m_tampilan.PopMenu (parent.PointerX(),
parent.PointerY())
7.9 Window Pilihan Cetak
Window pilihan cetak (print opntion) adalah window yang digunakan
untuk mengatur printer dan pemilihan halaman yang akan dicetak ke
printer. Dalam buku ini penulis menggunakan window
w_dw_print_options dari Examples PowerBuilder yang telah diubah
tampilan dan teksnya dan kemudian penulis simpan ulang dengan
nama w_pilihan_cetak.

Gambar 7.13 Layout Window Pilihan Cetak
7.10 Window Ukuran Kertas
Window ukuran kertas adalah window untuk menentukan ukuran
kerstas dan batas-batas (margin) kertas pada laporan.
249
7.10.1 Pembuatan Window
Untuk membuat window laporan, ikuti langkah-langkah di bawah ini:
1. Lakukan seperti membuat window-window sebelumnya.
2. Ketikkan Ukuran kertas dan Margin sebagai title.
3. Gunakan tipe window restponse.
4. Klik tab Other, ketikkan 1467 pada kotak isian Width dan 1004
pada kotak isian Height.
5. Klik icon Save.
6. Ketikkan nama window w_ukuran_kertas.
7. Klik file pustaka mylibrary.pbl.
8. Klik OK.

















p_bar st_judul tabpage_1 tab_1

Gambar 7.14 Layout Sementara Window Ukuran Kertas
7.10.2 Pembuatan Bar Sheet
Bar sheet digunakan sebagai bantalan untuk menempatkan kontrol
teks judul. Untuk membuat bar sheet, ikuti langkah-langkah di
bawah ini:
250
1. Klik icon Picture dalam PainterBar1 atau klik dropdown kontrol
untuk menampilkan icon kontrol, kemudian klik icon Create
Pircture control.
2. Klik area di atas bagian pojok kiri atas, maka akan terbentuk
kontrol gambar dengan nama p_1.
3. Klik kontrol gambar p_1:
Klik tab General.
Ganti nama kontrol gambar p_1 menjadi p_bar.
Klik tombol select () PictureName.
Pilih file gambar barputih.bmp.
4. Posisi dan ukuran bar:
Klik tab Other.
Ketikkan 0 pada kotak isian X dan Y.
Ketikkan 1463 pada kotak isian Width.
Ketikkan 112 pada kotak isian Height.
5. Kontrol teks judul:
Klik kontrol p_bar.
Klik icon Static Text dalam PainterBar1 atau klik dropdown
kontrol untuk menampilkan icon kontrol, kemudian klik icon
Create Static Text control.
Klik area di atas pojok kiri atas kontrol gambar p_bar
(bertumpuk dengan kontrol p_bar), maka akan terbentuk
kontrol st_1.
Ganti nama kontrol gambar st_1 menjadi st_judul.
Ketikkan UKURAN KERTAS DAN MARGIN pada kotak isian
Text.
Berikan warna putih pada background teks.
Atur ukuran tampilan kontrol.
251
7.10.3 Pembuatan Tab
Tab digunakan untuk pilihan ukuran kertas dan batas-batas (margin)
kertas. Untuk membuat tab ikuti langkah-langkah di bawah ini:
1. Klik icon Tab dalam PainterBar1 atau klik dropdown kontrol
untuk menampilkan icon kontrol, kemudian klik icon Create Tab
control.
2. Klik area di bawah sebelah kiri kontrol p_bar, maka akan
terbentuk kontrol tab_1 dan tabpage_1.
3. Klik arean tab_1, klik tab Other, ketikkan 1362 pada kotak isian
Width dan 636 pada kotak isian Height.
4. Kontrol tabpage_1:
Tabpage_1 digunakan untuk menentukan kertas seperti orientasi
kertas, ukuran kertas, dan sumber kertas. Berikut ini adalah
langkah-langkah untuk membuat tabpage_1.
Klik area kontrol tabpage_1, klik tab TabPage, lalu ganti
teks none dengan Kertas dalam kotak isian TabText.
Klik icon GroupBox dalam PainterBar1 atau klik dropdown
kontrol untuk menampilkan icon kontrol, kemudian klik icon
Create GroupBox control. Klik area di pojok kiri atas
kontrol tabpage_1, maka akan terbentuk kontrol gb_1. Ganti
nama kontrol gb_1 menjadi gb_kertas dan ganti teks none
menjadi Kertas dalam kotak isian Text.
Klik icon Text dalam PainterBar1 atau klik dropdown kontrol
untuk menampilkan icon kontrol, kemudian klik icon Create
Text control. Klik area di pojok kiri atas kontrol gb_kertas,
maka akan terbentuk kontrol st_1. Ganti ganti teks none
menjadi Orientasi: dalam kotak isian Text.
Klik icon Text dalam PainterBar1 atau klik dropdown kontrol
untuk menampilkan icon kontrol, kemudian klik icon Create
Text control. Klik area di bawah kontrol st_1, maka akan
terbentuk kontrol st_2. Ganti ganti teks none menjadi
Ukuran: dalam kotak isian Text.
Klik icon Text dalam PainterBar1 atau klik dropdown kontrol
untuk menampilkan icon kontrol, kemudian klik icon Create
Text control. Klik area di bawah kontrol st_2, maka akan
252
terbentuk kontrol st_3. Ganti ganti teks none menjadi
Sumber: dalam kotak isian Text.
Klik icon DropDownListBox dalam PainterBar1 atau klik
dropdown kontrol untuk menampilkan icon kontrol,
kemudian klik icon Create DropDownListBox control. Klik
area di sebelah kanan kontrol st_1, maka akan terbentuk
kontrol ddlb_1. Ganti menjadi ddlb_orientasi. Klik tab
Items, ketikkan Default pada kotak isian item dan tekan
tombol Enter, ketikkan Landscape pada kotak isian item dan
tekan tombol Enter dan ketikkan Portrait pada kotak isian
item.
Klik icon DropDownListBox dalam PainterBar1 atau klik
dropdown kontrol untuk menampilkan icon kontrol,
kemudian klik icon Create DropDownListBox control. Klik
area di sebelah kanan kontrol st_1, maka akan terbentuk
kontrol ddlb_1 dan ganti menjadi ddlb_ukuran. Klik tab
Items, kemudian ketikkan ukuran kertas di bawah ini secara
berurutan dan akhiri dengan menekan Enter setiap barisnya:
Default paper size for the printer1
Letter 8 1/2 x 11 in2
LetterSmall 8 1/2 x 11in3
Tabloid 17 x 11 inches4
Ledger 17 x 11 in5
Legal 8 1/2 x 14 in6
Statement 5 1/2 x 8 1/2 in7
Executive 7 1/4 x 10 1/2 in8
A3 297 x 420 mm9
A4 210 x 297 mm10
A4 Small 210 x 297 mm11
A5 148 x 210 mm12
B4 250 x 354 mm13
B5 182 x 257 mm14
Folio 8 1/2 x 13 in15
253
Quarto 215 x 275mm16
10x14 in17
11x17 in18
Note 8 1/2 x 11 in19
Envelope #9 3 7/8 x 8 7/820
Envelope #10 4 1/8 x 9 1/221
Envelope #11 4 1/2 x 10 3/822
Envelope #12 4 x 11 1/27623
Envelope #14 5 x 11 1/224
C size sheet25
D size sheet26
E size sheet27
Envelope DL 110 x 220mm28
Envelope C5 162 x 229 mm29
Envelope C3 324 x 458 mm30
Envelope C4 229 x 324 mm31
Envelope C6 114 x 162 mm32
Envelope C65 114 x 229 mm33
Envelope B4 250 x 353 mm34
Envelope B5 176 x 250 mm35
Envelope B6 176 x 125 mm36
Envelope 110 x 230 mm37
Envelope Monarch 3.875 x 7.5 in38
6 3/4 Envelope 3 5/8 x 6 1/2 in39
US Std Fanfold 14 7/8 x 11 in40
German Std Fanfold 8 1/2 x 12 in41
German Legal Fanfold 8 1/2 x 13 in
254
Klik icon DropDownListBox dalam PainterBar1 atau klik
dropdown kontrol untuk menampilkan icon kontrol,
kemudian klik icon Create DropDownListBox control. Klik
area di sebelah kanan kontrol st_1, maka akan terbentuk
kontrol ddlb_1. Ganti menjadi ddlb_sumber. Klik tab Items,
kemudian ketikkan sumber kertas (paper source) di bawah
ini secara berurutan dan akhiri dengan menekan Enter
setiap barisnya.
Default1
Upper2
Lower3
Middle4
Manual5
Envelope6
Envelope manual7
Auto8
Tractor9

Gambar 7.15 Layout sementara window ukuran
kertas dengan Tabpage_1
Smallfmt10
Largefmt11
255
Large capacity14
Cassette
5. Kontrol tabpage_2:
Tabpage_2 digunakan untuk menentukan batas-batas (margin)
kertas. Berikut ini adalah langkah-langkah untuk membuat
tabpage_2.
Klik kanan mouse kontrol tab_1, pilih menu Inser TabPage,
maka terbentuk kontrol tabpage_2.
Klik area kontrol tabpage_2, klik tab TabPage, ganti teks
none dengan Margin dalam kotak isian TabText.
Klik icon GroupBox dalam PainterBar1 atau klik dropdown
kontrol untuk menampilkan icon kontrol, kemudian klik icon
Create GroupBox control. Klik area di pojok kiri atas
kontrol tabpage_2, maka akan terbentuk kontrol gb_1. Ganti
nama kontrol gb_1 menjadi gb_margin dan ganti teks none
menjadi Margin dalam Centimeter dalam kotak isian Text.
Klik icon Text dalam PainterBar1 atau klik dropdown kontrol
untuk menampilkan icon kontrol, kemudian klik icon Create
Text control. Klik area di pojok kiri atas kontrol gb_margin,
maka akan terbentuk kontrol st_4. Ganti ganti teks none
menjadi Kiri: dalam kotak isian Text.
Klik icon EditMask dalam PainterBar1 atau klik dropdown
kontrol untuk menampilkan icon kontrol, kemudian klik icon
Create EditMask control. Klik area di sebelah kanan kontrol
st_4, maka akan terbentuk kontrol em_1. Ganti dengan
em_kiri. Klik tab Mask, klik dropdown MaskDataType dan
ketikkan ###.## dalam kotak isian Mask.
Klik icon Text dalam PainterBar1 atau klik dropdown kontrol
untuk menampilkan icon kontrol, kemudian klik icon Create
Text control. Klik area di sebelah kanan kontrol em_kiri,
maka akan terbentuk kontrol st_5. Ganti ganti teks none
menjadi Kanan: dalam kotak isian Text.
Klik icon EditMask dalam PainterBar1 atau klik dropdown
kontrol untuk menampilkan icon kontrol, kemudian klik icon
Create EditMask control. Klik area di sebelah kanan kontrol
st_5, maka akan terbentuk kontrol em_2 dan ganti dengan
256
em_kanan. Klik tab Mask, klik dropdown MaskDataType dan
ketikkan ###.## dalam kotak isian Mask.
Klik icon Text dalam PainterBar1 atau klik dropdown kontrol
untuk menampilkan icon kontrol, kemudian klik icon Create
Text control. Klik area di bawah kontrol st_4 dan sejajar
dengan kontrol em_kiri, maka akan terbentuk kontrol st_6.
Ganti ganti teks none menjadi Atas: dalam kotak isian Text.
Klik icon EditMask dalam PainterBar1 atau klik dropdown
kontrol untuk menampilkan icon kontrol, kemudian klik icon
Create EditMask control. Klik area di sebelah kanan kontrol
st_6, maka akan terbentuk kontrol em_3 dan ganti dengan
em_atas. Klik tab Mask, klik dropdown MaskDataType dan
ketikkan ###.## dalam kotak isian Mask.
Klik icon Text dalam PainterBar1 atau klik dropdown kontrol
untuk menampilkan icon kontrol, kemudian klik icon Create
Text control. Klik area di bawah kontrol st_5 dan sejajar
dengan kontrol em_kanan, maka akan terbentuk kontrol
st_7. Ganti ganti teks none menjadi Bawah : dalam kotak
isian Text.
Klik icon EditMask dalam PainterBar1 atau klik dropdown
kontrol untuk menampilkan icon kontrol, kemudian klik icon
Create EditMask control. Klik area di sebelah kanan kontrol
st_7, maka akan terbentuk kontrol em_4 dan ganti dengan
em_bawah. Klik tab Mask, klik dropdown MaskDataType dan
ketikkan ###.## dalam kotak isian Mask.
6. Kontrol CommandButton OK:
Klik icon CommandButtorn dalam PainterBar1 atau klik
dropdown kontrol untuk menampilkan icon kontrol, kemudian
klik icon Create CommandButtorn control. Klik area di bawah
atas kontrol tab_1, maka akan terbentuk kontrol cb_1. Ganti
nama kontrol cb_1 menjadi cb_ok dan ganti teks none menjadi
OK dalam kotak isian Text.
257

Gambar 7.16 Layout window ukuran kertas
7. Kontrol icon Save untuk menyimpan perubahan.
8. Struktur:
Struktur di sini digunakan menampung properti kertas. Langkah-
langkah untuk membuat struktur properti kertas adalah seperti
di bawah ini:
Klik icon New dalam PainterBar1.
Klik tab Pb Object.
Klik dropdown Type dan klik integer.
Ketikkan i_kiri dalam kotak isian Variable Name.
Tekan tombol Enter.
Ulangi langkah d dan e di atas untuk membuat variabel
i_kanan, i_atas, i_bawah, i_orientasi, i_ukuran dan
i_sumber.
Klik icon Save.
Klik file pustaka mylibrary.pbl tempat penyimpanan
struktur.
Ketikkan str_ukuran_kertas.
Klik tombol OK.
258
7.10.4 Skrip Window
Ada 2 (empat) event pada window ukuran kertas yang harus Anda
berikan skrip, yaitu event open, clicked pada kontrol cb_ok.
Event Open
Saat window dibuka, tempatkan posisi window di tengah-tengah
window dengan memanggil fungsi f_center_w(this). Deklarasikan
variabel bertipe struktur dengan obyek str_ukuran_kertas,
kemudian isi masing-masing properti pada tab kertas. Skrip event
open selengkapnya adalah sebagai berikut:
f_center_w( this )

str_ukuran_kertas str_kertas
str_kertas = message.powerobjectparm

tab_1.tabpage_margin.em_kiri.text = string(str_kertas.i_kiri)
tab_1.tabpage_margin.em_kanan.text = string(str_kertas.i_kanan)
tab_1.tabpage_margin.em_atas.text = string(str_kertas.i_atas)
tab_1.tabpage_margin.em_bawah.text = string(str_kertas.i_bawah)

tab_1.tabpage_kertas.ddlb_orientasi.selectitem(str_kertas.i_orie
ntasi)
tab_1.tabpage_kertas.ddlb_ukuran.selectitem(str_kertas.i_ukuran)
tab_1.tabpage_kertas.ddlb_sumber.selectitem(str_kertas.i_sumber)

Event Clicked kontrol cb_ok
Event ini digunakan untuk mengambil propeti kertas dan
dikembalikan dengan fungsi Closewithreturn(). Untuk mengetikkan
skrip event clicked kontrol cb_ok, ikuti langkah-langkah berikut ini:
1. Klik tab Layout.
2. Klik kanan mouse pada kontrol DataWindow cb_ok dan pilih
Script.
3. Ketikkan skrip di bawah ini:
str_ukuran_kertas str_kertas
string ls_orientasi, ls_ukuran, ls_sumber

ls_orientasi= tab_1.tabpage_kertas.ddlb_orientasi.text
ls_ukuran = tab_1.tabpage_kertas.ddlb_ukuran.text
ls_sumber = tab_1.tabpage_kertas.ddlb_sumber.text

str_kertas.i_kiri = double(&
tab_1.tabpage_margin.em_kiri.text) * 1000
str_kertas.i_kanan = double(&
tab_1.tabpage_margin.em_kanan.text) * 1000
259
str_kertas.i_atas = double(&
tab_1.tabpage_margin.em_atas.text) * 1000
str_kertas.i_bawah = double(&
tab_1.tabpage_margin.em_bawah.text) * 1000

str_kertas.i_orientasi = &
tab_1.tabpage_kertas.ddlb_orientasi.selectitem(&
ls_orientasi,0) - 1
str_kertas.i_ukuran = &
tab_1.tabpage_kertas.ddlb_ukuran.selectitem(&
ls_ukuran,0) - 1
str_kertas.i_sumber = &
tab_1.tabpage_kertas.ddlb_sumber.selectitem(&
ls_sumber,0) - 1

Closewithreturn(parent, str_kertas)

4. Klik icon Save untuk menyimpan perubahan.

Anda mungkin juga menyukai