顯示具有 公式 標籤的文章。 顯示所有文章
顯示具有 公式 標籤的文章。 顯示所有文章

2009年3月10日 星期二

Crystal Report 的民國100年問題

Crystal Report (8、9、11) 的日期物件,若選用「中華民國曆」格式的話,「年」只會出現兩位
使得民國 100 年變成了「00」
可以使用以下的公式來處理 (Crystal 語法)
Trim(CStr(Year(日期) - 1911, '#00')) + '/' + CStr(Month(日期), '00') + '/' + CStr(Day(日期), '00')

2012/03/06 更新:原先的版本沒有考慮到 null 的問題,改成以下這樣
if (aDate >= CDate('1899/12/31')) then
  Trim(CStr(Year(aDate) - 1911, '#00')) + '/' + CStr(Month(aDate), '00') + '/' +  CStr(Day(aDate), '00')
else
  ''

2008年9月8日 星期一

數字轉中式大寫的 Crystal Report 公式

//=========================================
// 數字轉中文大寫
//=========================================

// 要轉換的數字
NumberVar VNT := (你要轉換的數字欄位); 
StringVar VSU := '零壹貳參肆伍陸柒捌玖'; 
StringVar VST := '仟佰拾兆仟佰拾億仟佰拾萬仟佰拾元'; 
StringVar VNS := ToText(VNT, '0000000000000000'); 
NumberVar VSL := 17 - Length(TrimLeft(ToText(VNT, '################'))); 
StringVar VSS := ''; 
BooleanVar VSF; 
BooleanVar VS0; 
BooleanVar VS1; 
BooleanVar VS2; 
NumberVar VNI; 

VSF := False; 
for VNI := VSL to 16 do 
( 
  VS1 := Mid(VNS, VNI, 1) <> '0'; 
  VS2 := VS1 or (((VNI mod 4) = 0) and ((Mid(VNS, VNI - 3, 4) <> '0000') or (VNI = 16))); 
  VS0 := VSF and VS1; 
  VSF := not (VS0 or VS1 or VS2); 
  if VS0 then 
    VSS := VSS + '零'; 
  if VS1 then 
    VSS := VSS + Mid(VSU, ToNumber(Mid(VNS, VNI, 1)) + 1, 1); 
  if VS2 then 
    VSS := VSS + Mid(VST, VNI, 1); 
); 
// 這是回傳值
VSS;