Fungsi dari POSTING ini adalah untuk menambah data atau mengubah data saat konfirmasi data (saat kita menekan tombol G pada layar ksystem). Data yang sudah diposting tidak bisa diubah lagi, jadi sebelum kita posting suatu data, kita harus pastikan bahwa data itu benar - benar sudah tepat. Berikut adalah contoh POSTING untuk layar 271. Perintah POSTING untuk APP_TYPE ini tidak bisa digabungkan dengan layar QUERY_TYPE. Oleh karena itu kita harus membuka layar baru. Misalnya kita gunakan layar 272 untuk layar POSTING dari 271. Maka pada bagian atas layar 271 harus diberi perintah seperti berikut:
SCREEN 271 QUERY TYPE Program Kas Keluar SCREEN_FILE bkk SCREEN_NXT_POSTING 272 SCREEN_NXT_MAP mnext MAP(mnext) bkknum r_string12 REPLACE bkktgl r_date1 REPLACE bkkdvs g_jrndvs REPLACE
Setelah menuliskan perintah di atas maka barulah kita masuk ke layar 272. Di layar 272 tuliskan perintah - perintah sbg berikut.
SCREEN 272 APP_TYPE Posting Keluar Kas / Bank LOCAL PGM_FIELDS lstatus STRING 5 lmutawl STRING 15 lmutakh STRING 15 ltglawl DATE 4 ltglakh DATE 4 lD STRING 2 lK STRING 2 lKK STRING 3 lganti INT2 2 IMAGE(master) {BASE_ROW=1} {FRSFLD_BACKUP} {LSTFLD_ADVANCE} SCT272 @DATE +1Posting Pengeluaran Kas/Bank/Giro +1 {TOP} Status : ____ Nomor. Bukti : ______________ s/d ______________ Tanggal : ________ s/d ________ +2 +2 {TOP} No Bukti Kode Biaya Diskripsi Jumlah Biaya Status +3 +3 {TOP} FIELD(master) /* Symbol Name Input Attribute Output Attribute Input Order Special */ lstatus PROTECT NONE 1 /* Status OPEN,CLSD */ lmutawl ALLCAPS INPUTRI 2 /* No. Mutasi */ lmutakh ALLCAPS INPUTRI 3 /* No. Mutasi */ ltglawl NONE {DD-MM-YY} NONE 4 /* */ ltglakh NONE {DD-MM-YY} NONE 5 /* */ DEFAULTS(master) lD INIT D lK INIT K lKK INIT KK lstatus INIT OPEN
Setelah kita menuliskan field - field master langkah selanjutnya adalah membuat detail untuk file bkd dan pcm dengan menggunakan perintah SUBFILE.
/*** SUBFILE INFORMATION ***/ IMAGE(trans) {NO_CLS} {LSTFLD_ADVANCE} {FRSFLD_BACKUP} {BASE_ROW=9} ______________ __________ _______________________ ___________.__ ____ __ ____ _______ FIELD(trans) /* Symbol Name Input Attribute Output Attribute Input Order I/O Special */ bkdnum NOCHANGE INPUTRI 1 /* jumlah */ bkdnobbm NOCHANGE INPUTRI 2 /* Kode Rekening */ bbmket PROTECT INPUTRI 3 /* diskripsi */ bkdjml PROTECT INPUTRI 4 /* jumlah */ bkdsts PROTECT INPUTRI 5 /* Kode Rekening */ bkdpry PROTECT SCROLL INPUTRI 5 /* Kode Rekening */ bkdbgn PROTECT SCROLL INPUTRI 6 /* Kode Rekening */ bkkkode PROTECT SCROLL INPUTRI 6 /* Kode Rekening */ SUBFILE(trans) SFL_LINES(8) SFL_TARGET_GTE /* key symbol name fields for target prefix */ bkdstsnumidx lstatus lKK lmutawl {lstatus} {lKK} {lmutakh} IMAGE(trans2) {NO_CLS} {LSTFLD_ADVANCE} {FRSFLD_BACKUP} {BASE_ROW=15} _____________ ____________ __________ _____ __________.__ ____ FIELD(trans2) /* Symbol Name Input Attribute Output Attribute Input Order I/O Special */ pcmnoprc NOCHANGE INPUTRI 1 /* jumlah */ pcmnocek NOCHANGE INPUTRI 2 /* Kode Rekening */ pcmnobbm PROTECT INPUTRI 3 /* Kode Rekening */ pcmdvs PROTECT INPUTRI 4 /* diskripsi */ pcmtotal PROTECT INPUTRI 5 /* jumlah */ pcmsts PROTECT INPUTRI 6 /* Kode Rekening */ SUBFILE(trans2) SFL_LINES(6) SFL_COND cganti0 SFL_TARGET pcmnoprcidx bkdnum
Setelah kita membuat detail file bkd dan pcm maka langkah selanjutnya adalah membuat perintah POSTING seperti berikut:
/*------------------- dupdbkk --------------------*/ CALCS() cBT bkktype == "PU" && bkkstsexp == "BT" cCLSD "CLSD" MAP(mupdbkk) cCLSD bkksts DO_CALC cINPG bkksts DO_CALC_IF cBT g_tgltrn bkkpostgl REPLACE DBCALCS(dupdbkk) DBC_COMMAND UPDATE DBC_TARGET bkknumidx bkdnum DBC_MAP mupdbkk /*--------------------dupdbkd--------------------*/ MAP(mupdbkd) cCLSD bkdsts DO_CALC DBCALCS(dupdbkd) DBC_COMMAND UPDATE DBC_TARGET bkdprmidx bkdprm DBC_MAP mupdbkd /* ------------------ dupdpcm -------------------*/ CALCS() cTM pcmtype =="T" || pcmtype =="M" cSK pcmtype == "K" c1 1 MAP(mupdpcm) cCLSD pcmsts DO_CALC_IF cTM cINPG pcmsts DO_CALC_IF cSK DBCALCS(dupdpcm) DBC_COMMAND UPDATE DBC_TARGET pcmprmidx pcmprm DBC_MAP mupdpcm /*--------------------dmappcm--------------------*/ MAP(mmappcm) c1 lganti DO_CALC DBCALCS(dmappcm) DBC_COMMAND MAPMAP DBC_MAP mmappcm SPCALCS(spdetail) dupdbkk dupdbkd SPCALCS(spdetail2) dupdpcm dmappcm POSTING(trans) PST_COMMAND spdetail POSTING(trans2) PST_COMMAND spdetail2
Dari perintah dupdbkk dan dupdbkd yang terdapat di spdetail fungsinya adalah untuk mengubah bkdsts dan bkksts dari "OPEN" menjadi "CLSD". Karena pada bagian RESTRICT terdapat perintah RST_UPD_COND cnotOPEN di mana cnotOPEN isinya adalah bkksts != "OPEN", maka kita tidak bisa mengubah data di bkk. Oleh sebab itu kita harus benar - benar memastikan bahwa data yang akan kita POSTING sudah tepat.
Urut - urutan jalannya perintah di atas adalah sebagai berikut:
1. Program akan menjalankan POSTING trans terlebih dahulu. 2. Setiap program membaca 1 record trans akan dilanjutkan dengan membaca semua record trans2. 3. Setelah membaca record trans2 maka program akan kembali lagi ke trans untuk membaca record trans selanjutnya jika ada. 4. Setelah membaca record trans selanjutnya maka program akan kembali membaca semua record trans2 Note: oleh karena itu untuk menghindari program membaca record trans2 berkali - kali ( jika record trans lebih dari 1), maka di layar 272 ini di dalam perintah spdetail2 terdapat perintah dmappcm. Fungsi dari dmappcm ini adalah untuk mengcopykan c1 yang isinya 1 ke dalam lganti. Karena di SFL_COND untuk trans2 adalah cganti0 yang isinya lganti == 0. Maka ketika program membaca record trans selanjutnya tidak diteruskan masuk ke record trans2 karena lganti == 1.