2015-01-13 21 views
0

我試圖在CR中創建一個公式來顯示一個複選框並顯示選擇了哪些值。公式返回多個值水晶報告

DB存儲值如下:1&2&3…&10&11...如果選擇了多個值。

只要可能值的數量少於10,這就不成問題。如果所選值爲10或更高,則公式選擇正確的值,但也會選擇包含任一數字的任何其他值。 (即,如果所選擇的值是12,該公式爲「12」被檢查也爲「1」的公式和「2」也成爲檢查

下面是複選框下式:

if isnull ({form.table})then CHR (168)else 
if instr({form.table},"1") > 0 
    then CHR(254) else CHR(168) 

什麼只是保證如果該值爲10以上無需同時選擇其他較低數值所選擇的值進行檢查的最佳方法是什麼?

我需要環通的價值觀,拆分對'&'和比較到選定的值?不太瞭解CR語法,需要知道最好的方法來做到這一點。

回答

0

你雖然是正確的......你需要分割,然後運行循環來獲得所需要的輸出

Local NumberVar i; 

for i:=1 to UBound(Split ({form.table}, "&")) Do 
(
if Split ({form.table}, "&")[i]>0 
then CHR(254) else CHR(168) 
) 

這應該是語法。其實我現在沒有工具來測試語法,但這應該起作用。

如果您遇到任何問題,發表評論將測試和更新的語法明天櫃面錯誤

0

由於各種用於值的可能性,我需要確保沒有空值,檢查單的數值檢查由&分隔的值,然後檢查是否只選擇了一個值,而不是其他值是選定值的一部分。 它花了一些試驗和錯誤,但我能夠修改上面的循環示例,並執行所有我需要的檢查。這裏是我想出的公式:

Local StringVar box:= CHR(168); 
Local StringVar fld:= {table.field}; 
Local NumberVar sel:= 11; 
Local StringVar ssel:= "11"; 

if fld <> "" then 
(
    if instr (fld, "&") <= 0 then 
    (
     if instr(fld, CStr(ssel)) > 0 then 
     if CDbl(fld) = sel 
     then 
      box := CHR(254) 
    ); 
    if instr (fld, "&") > 0 then 
     (

     Local NumberVar i; 

     for i:=1 to UBound(Split (fld, "&")) Do 
     (
      if instr(Split (fld, "&")[i], CStr(ssel)) > 0 then 
      if CDbl(Split (fld, "&")[i]) = sel 
      then 
       box := CHR(254) 
     ) 
    ); 

); 

box 

似乎到目前爲止的工作。如有任何問題,將會更新。