2009-02-10 27 views
5

इस साइट पर इस प्रश्न के उत्तर के संकेत हैं, लेकिन मैं थोड़ा अलग सवाल पूछ रहा हूं।क्रिस्टल रिपोर्ट फॉर्मूला: IsNull + Iif

क्रिस्टल रिपोर्ट्स कहां दस्तावेज करता है कि यह वाक्यविन्यास काम नहीं करता है?

Trim({PatientProfile.First}) + " " 
    + Trim(Iif(
     IsNull({PatientProfile.Middle}) 
     , Trim({PatientProfile.Middle}) + " " 
     , " " 
     ) 
    ) 
+ Trim({PatientProfile.Last}) 

मैं जानता हूँ कि समाधान

If IsNull({PatientProfile.Middle}) Then 
    Trim({PatientProfile.First}) 
     + " " + Trim({PatientProfile.Last}) 
Else 
    Trim({PatientProfile.First}) 
     + " " + Trim({PatientProfile.Middle}) 
     + " " + Trim({PatientProfile.Last}) 

है, लेकिन हम कैसे यह पता लगाने की हम पहले संस्करण का उपयोग नहीं कर सकते करने वाले हैं?

IsNull के लिए दस्तावेज़ कहते हैं

  • क्षेत्र मौजूदा रिकॉर्ड में निर्दिष्ट मूल्यांकन करता है और सही रिटर्न क्षेत्र एक शून्य मान

शामिल है और Iif

  • [रिटर्न देता है ] TruePart अगर अभिव्यक्ति सही है और गलत है अगर अभिव्यक्ति गलत है। लौटाए गए मान का प्रकार TruePart और falsePart के प्रकार जैसा ही है।

मुझे लगता है अगर आप "वापसी मान के प्रकार" के बारे में है कि लाइन पर टकटकी आप इसे प्राप्त कर सकते हैं, लेकिन ...

+0

मैं काम आज CRXI की जरूरत नहीं है, लेकिन क्या पहले एक के बारे में काम नहीं करता है? क्या यह केवल अंतर को गलत करता है (जो कोड में एक तर्क त्रुटि है - आपके पास एक अतिरिक्त ट्रिम() है) या यह किसी अन्य तरीके से विफल हो जाता है? – Stobor

+0

रिकॉर्ड्स के लिए जहां मिडल नल है, सीआर ट्रिम (मिडल) में स्ट्रिंग वैल्यू का मूल्यांकन नहीं कर सकता है, और आईआईएफ का मान न्यूल है, भले ही मेरे पास उस स्पष्ट परीक्षण है। – SarekOfVulcan

उत्तर

5

मुझे लगता है कि सीआर दोनों IIFs सच्चे और झूठे भागों मूल्यांकन करता है। क्योंकि आपके पास "ट्रिम ({PatientProfile.Middle})" भाग है, जिसका मूल्यांकन मूल्यांकन किया जाएगा, सीआर फॉर्मूला मूल्यांकनकर्ता बस असफल लगता है।

+1

हां, लेकिन मैं यह पता लगाने की कोशिश कर रहा हूं कि खूनी दस्तावेज़ीकरण में यह कहां है, इसे उत्तर देने वाले हर किसी को बनाने के बजाय Google। आखिरकार, हम में से एक या दो जानते हैं कि कैसे काम करने के लिए कोड _supposed_ है ... – SarekOfVulcan

+2

सीआर सहायता से: परिणाम वापस आने से पहले आईआईएफ फ़ंक्शन के प्रत्येक तर्क का मूल्यांकन किया जाता है। इस प्रकार, आपको आईआईएफ का उपयोग करते समय अवांछनीय दुष्प्रभावों के लिए देखना चाहिए। उदाहरण के लिए, यदि झूठापार्ट शून्य से विभाजन में परिणाम देता है, तो एक त्रुटि उत्पन्न होगी, भले ही अभिव्यक्ति सही है और सत्य भी वापस आ गया है। – Arvo

10

क्रिस्टल रिपोर्ट्स कहां दस्तावेज करता है कि यह वाक्यविन्यास काम नहीं करता है?

मुझे शक है कहीं सब कुछ है कि क्रिस्टल रिपोर्टें में काम नहीं करता दस्तावेज़ के लिए पूरे ब्रह्मांड में इतना बड़ा नहीं है ...

+0

लॉल, मुझे इस ठीक शुक्रवार को हंसने के लिए धन्यवाद;) – contactmatt

5

मैं जानता हूँ कि मैं देर से इस पर साल हूँ, लेकिन मैं आया एक ही चीज़ को समझने की कोशिश करते समय इस सवाल पर। काफी मजेदार है, मुझे क्रिस्टल रिपोर्ट दस्तावेज में भी जवाब नहीं मिला, बल्कि इसके बजाय link to IBM में।

बास्कली, यदि आप क्रिस्टल रिपोर्ट्स 8.x या 10.x, ISNULL और IIF का उपयोग कर रहे हैं तो एक साथ काम नहीं करते हैं। साइट से:

कारण

वहाँ क्रिस्टल रिपोर्टें 8.x और 10.x में एक दोष है कि सही ढंग से काम करने से उपरोक्त सूत्र को रोकता है। 'आईआईएफ' और 'IsNull' कमांड एक साथ काम नहीं कर सकते हैं, और इसमें IsNull कमांड को संशोधित करने के लिए "नहीं" का उपयोग करने का प्रयास शामिल है; उदाहरण के लिए, आईआईएफ (नहीं IsNull())।

समस्या

वैकल्पिक हल एक "अगर-तब-कुछ" कथन का उपयोग करने के लिए है समाधान करना।उदाहरण के लिए,

If IsNull({~CRPT_TMP0001_ttx.install_date}) Then "TBD" Else "In Progress" 

तो तुम सीआर 8.x या 10.x (जो हम कर रहे हैं) का उपयोग कर रहे हैं, तो आप भाग्य से बाहर रहे हैं। यह वास्तव में मजेदार बनाता है जब आप एक साथ कई क्षेत्रों को जोड़ रहे हैं और उनमें से एक नल हो सकता है।

+1

ध्यान दें कि यदि आप एक साथ कई क्षेत्रों को जोड़ रहे हैं, तो सिंटैक्स बहुत खराब नहीं है, क्योंकि क्रिस्टल इस तरह की चीजों का समर्थन करता है: (यदि IsNull ({Col1}) है तो 0 अन्य {Col1}) + (यदि IsNull ({Col12}) तो 0 और {Col2}) – JoshL

-3

कोशिश यह:

currencyvar tt; 
currencyvar dect; 
tt :={ship.comm_amount}; 
dect := tt - Truncate(tt); 
tt := truncate(tt); 
dect := dect * 100; 
if dect = 0 then 
UPPERCASE('$ ' + ToWords (tt,0)) + ' ONLY' 
else 
UPPERCASE('$ ' + ToWords (tt,0) + ' And ' + ToWords(dect,0)) + ' ONLY '; 
+4

इसका उत्तर देने का क्या सवाल है? – SarekOfVulcan

संबंधित मुद्दे