Monday, August 18, 2008

Updating chart series's source

The following VB script code is a simple example on how to modify the data source of a series using array. Let's say you have already created a chart in a sheet which its name is "Sheet1".

Dim srs As Series
Dim yval() As String
Dim xval() As Integer

Set srs = Sheets("Sheet1").ChartObjects(1).Chart.SeriesCollection(1)
Dim v As Integer

v = 6
ReDim yval(0 To v - 1)
ReDim xval(0 To v - 1)
yval(0) = "MINE"
yval(1) = "LOG"
yval(2) = "EXR"
yval(3) = "SES"
yval(4) = "PP"
yval(5) = "UT"

xval(0) = 2
xval(1) = 1
xval(2) = 1
xval(3) = 2
xval(4) = 1
xval(5) = 1

srs.XValues = yval
srs.Values = xval

Friday, June 06, 2008

Heboh FPI

Akhirnya ada waktu juga buat ngeblog :)

Insiden Monas menjadi berita paling 'nyus' yang mengalahkan kenaikan BBM. Sekali lagi, FPI (Front Pembela Islam) jadi superstar, setelah beberapa waktu yang lalu merazia tempat-tempat hiburan. Saya nggak akan ngomong soal kejadiannya, karena toh sudah pada tahu.

Insiden Monas sebenarnya akumulasi dari ketidaktegasan pemerintah dalam memutuskan status Ahmadiyah di Indonesia. Ketidakjelasan ini ternyata makin mengekstrimkan keberpihakan antara yang pro Ahmadiyah, dengan mengatasnamakan kebebasan beragama dan berkeyakinan (contohnya AKKBB), dan yang kontra (MUI, dan organisasi-organisasi islam lainnya, termasuk yang radikal, FPI). Satu bukti lagi bahwa pemerintah tidak peka dengan situasi dalam negeri. Lalu, apa gunanya Badan Intelijen Negara ya? Makan gaji buta? don't know bro..

Yang bikin saya trenyuh selanjutnya adalah, kok bisa-bisanya Ahmadiyah dibela dengan dasar kebebasan beragama dan berkeyakinan? Saya bukannya pro FPI, tapi saya ingin mendudukkan masalah sesuai porsinya.

Agama, khususnya agama Islam, adalah sebuah 'way of life', berisi tentang aturan, pedoman, dan yang paling penting Ketuhanan, yang disusun sendiri oleh Allah, dan diturunkan kepada nabi/rasul terakhir Islam, Muhammad SAW. Disisi lain, Ahmadiyah dibawa oleh Mirza Ghulam Ahmad, orang India, yang mengaku sebagai rasul, sebagai nabi, bahkan sebagai Al-Mahdi, mengakui kitab suci lain selain Al-Qur'an (yaitu Tadzkirah), dan mengkafirkan semua orang (termasuk orang Islam) diluar Ahmadiyah.

Allah berfirman dalam Qur'an, surah Al-Maaidah ayat 3:
"Diharamkan bagimu (memakan) bangkai, darah, daging babi, (daging hewan) yang disembelih atas nama selain Allah, yang tercekik, yang terpukul, yang jatuh, yang ditanduk, dan diterkam binatang buas, kecuali yang sempat kamu menyembelihnya, dan (diharamkan bagimu) yang disembelih untuk berhala. Dan (diharamkan juga) mengundi nasib dengan anak panah, (mengundi nasib dengan anak panah itu) adalah kefasikan. Pada hari ini orang-orang kafir telah putus asa untuk (mengalahkan) agamamu, sebab itu janganlah kamu takut kepada mereka dan takutlah kepada-Ku. Pada hari ini telah Kusempurnakan untuk kamu agamamu, dan telah Ku-cukupkan kepadamu ni'mat-Ku, dan telah Ku-ridhai Islam itu jadi agama bagimu. Maka barang siapa terpaksa karena kelaparan tanpa sengaja berbuat dosa, sesungguhnya Allah Maha Pengampun lagi Maha Penyayang."

Coba lihat, Allah sendirilah yang sudah menyempurnakan Islam dibawah kepemimpinan Nabi Muhammad SAW! Setelah beberapa ratus tahun kemudian, datang si Mirza Ghulam Ahmad, mengaku sebagai nabi ke 26 dan mengacak-acak pilar-pilar Islam, dan yang lebih keterlaluan lagi, dengan sangat tidak jantannya menganggap dirinya masih Islam. Bagaimana mungkin Islam yang isinya telah diubah-ubah adalah tetap Islam? Bagaimana mungkin jika seorang manusia kemudian kepalanya diganti dengan kepala keledai tetap bisa dibilang sebagai manusia?

Inilah yang saya lihat sebagai pengawuran terbesar dalam peradaban manusia. Orang membajak hak cipta orang lain, langsung kena pidana. Tapi orang membajak hak cipta Tuhan (yaitu agama dan kitab sucinya), tetap dibiarkan. Saya yakin, orang Islam tidak akan meributkan ahmadiyah seperti sekarang ini, jika mereka secara jantan keluar dari Islam, dan membentuk agama sendiri, sehingga tidak ada sangkut pautnya lagi dengan Islam.

Jelaslah, membela ahmadiyah dengan alasan kebebasan beragama dan berkeyakinan adalah alasan bodoh yang sok liberal. Agama adalah sebuah identitas dari sebuah jalan hidup dalam mencapai tujuan hakiki. Penyelewengan-penyelewengan hanya akan membuat jalan mencapai tujuan menjadi kabur, yang pada akhirnya, jika kita tidak hati-hati, akan membuat kita tersesat.

Jangan sampai Islam bernasib sama dengan agama-agama besar lainnya, yang para pemeluknya mengaku tetap memeluk agama induknya, padahal sebenarnya diantara mereka sendiripun disekat-sekat oleh golongan-golongan dan sekte-sekte. Islam adalah satu. Satu Tuhan, satu rasul, satu keyakinan, dan satu persaudaraan. Tidak ada tempat bagi penyeleweng tauhid.

Saturday, April 26, 2008

Re-engineering Ellipse report: MSR179

Bagi Anda pengguna salah satu aplikasi ERP, yaitu Ellipse (bikinan Mincom), mungkin tahu report MSR179.RDL (Monthly Supply Management Reports). Ini adalah salah satu report Ellipse yang paling ruwet (disamping bahasanya yang sudah generasi jadul) juga karena intens menggunakan rutin dari Cobol.

Karena suatu hal, saya harus melakukan re-engineering report tersebut ke dalam bahasa lain yang lebih applicable. Dalam hal ini saya mengkonversi ke PLSQL Oracle. Berikut querynya:


SELECT FULL_PERIOD,INVT_STAT_CODE,STOCK_CODE,TRAN_TYPE,TRAN_CATEGORY,
PO_REQ_NO,
PO_REQ_ITEM_NO,
ACCOUNT_CODE,
EQUIP_CODE,
WORK_ORDER_NO,
PROJECT_NO,
(CASE WHEN INV_MOV_VAL<0 THEN ABS(QUANTITY)*(-1) ELSE QUANTITY END) QTY,
TRANS_PRICE,
INV_MOV_VAL FROM (
SELECT A.FULL_PERIOD,
(SELECT f170.INVT_STAT_CODE
FROM ELLIPSE.MSF170 f170
WHERE f170.STOCK_CODE=B.STOCK_CODE
AND f170.DSTRCT_CODE=B.DSTRCT_CODE) INVT_STAT_CODE,
B.STOCK_CODE,
A.TRAN_TYPE,
(CASE WHEN A.TRAN_TYPE IN ('SRD','SRO','SCR') THEN 'RECEIPT'
WHEN A.TRAN_TYPE IN ('FAO','ISS','RSI') THEN 'ISSUE'
WHEN A.TRAN_TYPE IN ('ADJ','ADM','ORD','ORF','STO') THEN 'ADJUSTMENT'
ELSE 'UNKNOWN' END) TRAN_CATEGORY,
(CASE WHEN A.TRAN_TYPE IN ('SRD','SRO','SCR')
THEN (SELECT R9.PO_NO_R FROM ELLIPSE.MSF900_R R9
WHERE R9.TRANSACTION_NO=B.TRANSACTION_NO
AND R9.PROCESS_DATE=A.PROCESS_DATE
AND R9.STOCK_CODE_R=B.STOCK_CODE
AND R9.DSTRCT_CODE=B.DSTRCT_CODE)
WHEN A.TRAN_TYPE IN ('ORD','ORF')
THEN (SELECT B9.PO_NO_B FROM ELLIPSE.MSF900_B B9
WHERE B9.TRANSACTION_NO=B.TRANSACTION_NO
AND B9.PROCESS_DATE=A.PROCESS_DATE
AND B9.STOCK_CODE_B=B.STOCK_CODE
AND B9.DSTRCT_CODE=B.DSTRCT_CODE)
WHEN A.TRAN_TYPE IN ('ISS','ISI','COS','ICO','IST','RSI')
THEN (SELECT S9.ISSUE_REQ_NO_S FROM ELLIPSE.MSF900_S S9
WHERE S9.TRANSACTION_NO=B.TRANSACTION_NO
AND S9.PROCESS_DATE=A.PROCESS_DATE
AND S9.STOCK_CODE_S=B.STOCK_CODE
AND S9.DSTRCT_CODE=B.DSTRCT_CODE)
ELSE NULL END) PO_REQ_NO,
(CASE WHEN A.TRAN_TYPE IN ('SRD','SRO','SCR')
THEN (SELECT R9.PO_ITEM_R FROM ELLIPSE.MSF900_R R9
WHERE R9.TRANSACTION_NO=B.TRANSACTION_NO
AND R9.PROCESS_DATE=A.PROCESS_DATE
AND R9.STOCK_CODE_R=B.STOCK_CODE
AND R9.DSTRCT_CODE=B.DSTRCT_CODE)
WHEN A.TRAN_TYPE IN ('ORD','ORF')
THEN (SELECT B9.PO_ITEM_B FROM ELLIPSE.MSF900_B B9
WHERE B9.TRANSACTION_NO=B.TRANSACTION_NO
AND B9.PROCESS_DATE=A.PROCESS_DATE
AND B9.STOCK_CODE_B=B.STOCK_CODE
AND B9.DSTRCT_CODE=B.DSTRCT_CODE)
WHEN A.TRAN_TYPE IN ('ISS','ISI','COS','ICO','IST','RSI')
THEN (SELECT S9.IREQ_ITEM_NO_S FROM ELLIPSE.MSF900_S S9
WHERE S9.TRANSACTION_NO=B.TRANSACTION_NO
AND S9.PROCESS_DATE=A.PROCESS_DATE
AND S9.STOCK_CODE_S=B.STOCK_CODE
AND S9.DSTRCT_CODE=B.DSTRCT_CODE)
ELSE NULL END) PO_REQ_ITEM_NO,
A.ACCOUNT_CODE,
(CASE WHEN A.TRAN_TYPE IN ('ISS','ISI','COS','ICO','IST','RSI')
THEN (SELECT S9.EQUIP_NO_S FROM ELLIPSE.MSF900_S S9
WHERE S9.TRANSACTION_NO=B.TRANSACTION_NO
AND S9.PROCESS_DATE=A.PROCESS_DATE
AND S9.STOCK_CODE_S=B.STOCK_CODE
AND S9.DSTRCT_CODE=B.DSTRCT_CODE)
WHEN A.TRAN_TYPE='FAO'
THEN (SELECT F9.EQUIP_NO_F FROM ELLIPSE.MSF900_F F9
WHERE F9.TRANSACTION_NO=B.TRANSACTION_NO
AND F9.PROCESS_DATE=A.PROCESS_DATE
AND F9.STOCK_CODE_F=B.STOCK_CODE
AND F9.DSTRCT_CODE=B.DSTRCT_CODE)
ELSE NULL END) EQUIP_CODE,
(CASE WHEN A.TRAN_TYPE IN ('ISS','ISI','COS','ICO','IST','RSI')
THEN (SELECT S9.WORK_ORDER_S FROM ELLIPSE.MSF900_S S9
WHERE S9.TRANSACTION_NO=B.TRANSACTION_NO
AND S9.PROCESS_DATE=A.PROCESS_DATE
AND S9.STOCK_CODE_S=B.STOCK_CODE
AND S9.DSTRCT_CODE=B.DSTRCT_CODE)
ELSE NULL END) WORK_ORDER_NO,
(CASE WHEN A.TRAN_TYPE IN ('ISS','ISI','COS','ICO','IST','RSI')
THEN (SELECT S9.PROJECT_NO_S FROM ELLIPSE.MSF900_S S9
WHERE S9.TRANSACTION_NO=B.TRANSACTION_NO
AND S9.PROCESS_DATE=A.PROCESS_DATE
AND S9.STOCK_CODE_S=B.STOCK_CODE
AND S9.DSTRCT_CODE=B.DSTRCT_CODE)
ELSE NULL END) PROJECT_NO,
(CASE WHEN A.TRAN_TYPE IN ('SRD','SRO','SCR')
THEN (SELECT R9.QTY_RCV_UOI_R FROM ELLIPSE.MSF900_R R9
WHERE R9.TRANSACTION_NO=B.TRANSACTION_NO
AND R9.PROCESS_DATE=A.PROCESS_DATE
AND R9.STOCK_CODE_R=B.STOCK_CODE
AND R9.DSTRCT_CODE=B.DSTRCT_CODE)
WHEN A.TRAN_TYPE IN ('ORD','ORF')
THEN (SELECT B9.QTY_ADJ_UOI_B FROM ELLIPSE.MSF900_B B9
WHERE B9.TRANSACTION_NO=B.TRANSACTION_NO
AND B9.PROCESS_DATE=A.PROCESS_DATE
AND B9.STOCK_CODE_B=B.STOCK_CODE
AND B9.DSTRCT_CODE=B.DSTRCT_CODE)
WHEN A.TRAN_TYPE IN ('STO','ADJ','ADM')
THEN (SELECT A9.QTY_ADJ_UOI_A FROM ELLIPSE.MSF900_A A9
WHERE A9.TRANSACTION_NO=B.TRANSACTION_NO
AND A9.PROCESS_DATE=A.PROCESS_DATE
AND A9.STOCK_CODE_A=B.STOCK_CODE
AND A9.DSTRCT_CODE=B.DSTRCT_CODE)
WHEN A.TRAN_TYPE='FAO'
THEN (SELECT F9.LITRES_ISS_F FROM ELLIPSE.MSF900_F F9
WHERE F9.TRANSACTION_NO=B.TRANSACTION_NO
AND F9.PROCESS_DATE=A.PROCESS_DATE
AND F9.STOCK_CODE_F=B.STOCK_CODE
AND F9.DSTRCT_CODE=B.DSTRCT_CODE)
WHEN A.TRAN_TYPE IN ('ISS','ISI','COS','ICO','IST','RSI')
THEN (SELECT S9.QUANTITY_ISS_S FROM ELLIPSE.MSF900_S S9
WHERE S9.TRANSACTION_NO=B.TRANSACTION_NO
AND S9.PROCESS_DATE=A.PROCESS_DATE
AND S9.STOCK_CODE_S=B.STOCK_CODE
AND S9.DSTRCT_CODE=B.DSTRCT_CODE)
ELSE NULL END) QUANTITY,
(CASE WHEN A.TRAN_TYPE IN ('SRD','SRO','SCR')
THEN (SELECT R9.NET_PR_UOI_R FROM ELLIPSE.MSF900_R R9
WHERE R9.TRANSACTION_NO=B.TRANSACTION_NO
AND R9.PROCESS_DATE=A.PROCESS_DATE
AND R9.STOCK_CODE_R=B.STOCK_CODE
AND R9.DSTRCT_CODE=B.DSTRCT_CODE)
WHEN A.TRAN_TYPE IN ('ORD','ORF')
THEN (SELECT B9.NET_PR_ADJ_I_B FROM ELLIPSE.MSF900_B B9
WHERE B9.TRANSACTION_NO=B.TRANSACTION_NO
AND B9.PROCESS_DATE=A.PROCESS_DATE
AND B9.STOCK_CODE_B=B.STOCK_CODE
AND B9.DSTRCT_CODE=B.DSTRCT_CODE)
WHEN A.TRAN_TYPE IN ('STO','ADJ','ADM')
THEN (SELECT A9.PRICE_CHANGE_A FROM ELLIPSE.MSF900_A A9
WHERE A9.TRANSACTION_NO=B.TRANSACTION_NO
AND A9.PROCESS_DATE=A.PROCESS_DATE
AND A9.STOCK_CODE_A=B.STOCK_CODE
AND A9.DSTRCT_CODE=B.DSTRCT_CODE)
WHEN A.TRAN_TYPE='FAO'
THEN (SELECT F9.RATE_AMOUNT_F FROM ELLIPSE.MSF900_F F9
WHERE F9.TRANSACTION_NO=B.TRANSACTION_NO
AND F9.PROCESS_DATE=A.PROCESS_DATE
AND F9.STOCK_CODE_F=B.STOCK_CODE
AND F9.DSTRCT_CODE=B.DSTRCT_CODE)
WHEN A.TRAN_TYPE IN ('ISS','ISI','COS','ICO','IST','RSI')
THEN (SELECT S9.AVERAGE_PR_S FROM ELLIPSE.MSF900_S S9
WHERE S9.TRANSACTION_NO=B.TRANSACTION_NO
AND S9.PROCESS_DATE=A.PROCESS_DATE
AND S9.STOCK_CODE_S=B.STOCK_CODE
AND S9.DSTRCT_CODE=B.DSTRCT_CODE)
ELSE NULL END) TRANS_PRICE,
(CASE WHEN A.TRAN_TYPE IN ('ISS','ISI','COS','ICO','IST','RSI','ISC','ICI','COC','ICC','ISD')
THEN (SELECT (CASE WHEN (NVL((SELECT SUBSTR(a.ASSOC_REC,1,1) FROM ELLIPSE.MSF010 a
WHERE a.TABLE_TYPE='TC'
AND a.TABLE_CODE = s.TAX_CODE_S),'0') IN ('4','5','6'))
OR (s.TAX_PERCENT_S=0)
THEN (A.TRAN_AMOUNT-(s.ON_COST_AMT_S+s.WH_ONCOST_AMT_S+s.FREIGHT_AMT_S))
WHEN s.TAX_PERCENT_S>0
THEN (A.TRAN_AMOUNT-(s.ON_COST_AMT_S+s.WH_ONCOST_AMT_S+s.FREIGHT_AMT_S))/
((100+s.TAX_PERCENT_S)/100)
ELSE ((A.TRAN_AMOUNT-(s.ON_COST_AMT_S+s.WH_ONCOST_AMT_S+s.FREIGHT_AMT_S))-
(s.TAX_PERCENT_S*(A.TRAN_AMOUNT-(s.ON_COST_AMT_S+s.WH_ONCOST_AMT_S+
s.FREIGHT_AMT_S))/100))
END)
FROM ELLIPSE.MSF900_S s
WHERE S.TRANSACTION_NO=B.TRANSACTION_NO
AND s.PROCESS_DATE=A.PROCESS_DATE
AND s.STOCK_CODE_S=B.STOCK_CODE
AND s.DSTRCT_CODE=B.DSTRCT_CODE)
WHEN A.TRAN_TYPE IN ('FAO','FAC' )
THEN (SELECT (CASE WHEN (NVL((SELECT SUBSTR(a.ASSOC_REC,1,1) FROM ELLIPSE.MSF010 a
WHERE a.TABLE_TYPE='TC'
AND a.TABLE_CODE = f.TAX_CODE_F),'0') IN ('4','5','6'))
OR (f.TAX_PERCENT_F=0)
THEN (A.TRAN_AMOUNT-(f.ON_COST_AMT_F+f.FREIGHT_AMT_F))
WHEN f.TAX_PERCENT_F>0
THEN (A.TRAN_AMOUNT-(f.ON_COST_AMT_F+f.FREIGHT_AMT_F))/((100+f.TAX_PERCENT_F)/100)
ELSE ((A.TRAN_AMOUNT-(f.ON_COST_AMT_F+f.FREIGHT_AMT_F))-
(f.TAX_PERCENT_F*(A.TRAN_AMOUNT-(f.ON_COST_AMT_F+f.FREIGHT_AMT_F))/100))
END)
FROM ELLIPSE.MSF900_F f
WHERE F.TRANSACTION_NO=B.TRANSACTION_NO
AND f.PROCESS_DATE=A.PROCESS_DATE
AND f.STOCK_CODE_F=B.STOCK_CODE
AND f.DSTRCT_CODE=B.DSTRCT_CODE)
ELSE A.TRAN_AMOUNT END) INV_MOV_VAL
FROM ELLIPSE.MSF900 A,
ELLIPSE.MSFX96 B
WHERE B.DSTRCT_CODE=A.DSTRCT_CODE
AND B.PROCESS_DATE=A.PROCESS_DATE
AND B.TRANSACTION_NO=A.TRANSACTION_NO
AND B.USERNO = A.USERNO
AND A.TRAN_TYPE IN ('ADJ','ADM','ORD','ORF','STO','FAO','ISS','RSI','SCR','SRD','SRO')
) WHERE FULL_PERIOD=:ACC_PERIOD

ACC_PERIOD adalah variabel string, yang mengidentifikasi periode mana yang akan diambil. Format yang digunakan adalah YYYYMM (misal: ‘200804’) .

Anda bisa juga menggunakan query diatas untuk kepentingan lainnya, karena outputnya tersaji dalam bentuk detilnya (per-transaction type).

Selamat mencoba!

Wednesday, October 18, 2006


This the first message of my blog.