水晶報表中動態顯示小數字

2021-08-29 11:56:49 字數 1294 閱讀 2220

水晶報表中動態顯示小數字

from<>

大家都知道,在水晶報表裡,小數點的保留是個比較討厭的問題。因為在數字欄位的格式化中,小數點格式化的位數是固定的。也就是說要麼保留兩位,要麼保留三位……,要麼一位都不保留。其實在很多時候,客戶更希望的是伺服器端是幾位就保留幾位。曾經有n 個人問過我這個問題如何解決,今天又有人問了,乾脆寫了乙個函式解決這個問題,以後再有客戶有這樣的需求,直接套用這個函式就行了。

其實我以前也說過,解決這個問題有乙個方法就是在伺服器端直接把這個數字字段轉換成字元型,這樣在水晶報表這邊就不需要做任何處理了。但是這種辦法有個不好的地方就是要去改伺服器端檢視,這樣有可能會影響其他業務的操作。雖然可以建立乙個新的檢視來在它基礎上做此報表,但是為了乙個欄位而新建個檢視有時候也比較鬱悶。

另外乙個辦法就是在水晶報表中新增乙個公式字段,對那個數字字段進行處理。思路就是先把這個字段轉換成字元型,然後把小數點後面多餘的0去掉。水晶報表有個數字轉換字元的函式「totext」,這裡就有乙個問題,這個函式可惡之處就是它必須要指定小數字數,如果不指定,它就保留兩位小數。如果非要指定那就指定吧,但是它又說了,小數不能超過10位,「totext(123.456, 11)」是通不過的,真是昏死!

水晶報表中的函式**如下:

local stringvar strtemp := totext(, 10);

local numbervar i;

local stringvar str := "";

local numbervar strlen := length (strtemp);

for i := strlen to 1 step -1 do

(if strtemp[i] = "." then

( //integer,we should delete the point

str := left(strtemp, i-1);

exit for

)else if strtemp[i] <> "0" then

(str := left(strtemp, i);

exit for));

//leading zero

if str[1] = "." then

(str := "0"+str;

);str

在使用的時候,只要新建乙個公式,把上面**拷貝進去,然後修改一下要轉換的字段(藍色字)就可以了。這裡有個要注意的地方是:不能轉換超過10位小數的數字,這是水晶報表的限制,在水晶報表客戶端沒有辦法解決。我們到數字欄位的格式化裡去看,那裡也最多格式化10位。如果將來真要有家客戶需要保留10位以上小數,我們只好還是採用第一種方法 ―― 改伺服器端檢視。

水晶報表中動態新增字段

水晶報表中,因為資料來源的字段是不固定的,可否在執行時動態新增字段,就象在winform中動態新增控制項一樣?更新 2003 11 05 解決方案 用 公式字段 1 根據欄位的最大數量,定義若干個 公式字段 formulafeild1 formulafeild2 公式為空 2 把 公式字段 按順序放...

在水晶報表中顯示條形碼

在水晶報表中顯示條形碼應該不算太難的問題,但從未知到做出乙個樣品來還是花了我半天的時間google和檢視文件。在這裡記錄下來。水晶報表當中是通過特殊的字型來實現barcode的,這方面最著名的字型提供商當屬 azalea與 idautomation。我是使用idautomation的字型來實現的c3...

如何在水晶報表中動態新增字段

問題 水晶報表中,因為資料來源的字段是不固定的,可否在執行時動態新增字段,就象在winform中動態新增控制項一樣?更新 2003 11 05 解決方案 用 公式字段 1 根據欄位的最大數量,定義若干個 公式字段 formulafeild1 formulafeild2 公式為空 2 把 公式字段 按...