سؤال

هناك تلميحات للإجابة على هذا السؤال هنا وهناك على هذا الموقع، لكنني أطرح سؤالاً مختلفًا قليلاً.

أين توثق تقارير Crystal أن بناء الجملة هذا لا يعمل؟

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

  • يقوم بتقييم الحقل المحدد في السجل الحالي وإرجاع TRUE إذا كان الحقل يحتوي على قيمة فارغة

و إذا يعطي

  • [يرجع] truePart إذا كان التعبير True وfalsePart إذا كان التعبير False.نوع القيمة التي تم إرجاعها هو نفس نوع truePart وfalsePart.

أفترض أنك إذا حدقت في هذا السطر حول "نوع قيمة الإرجاع" فيمكنك الحصول عليه، ولكن...

هل كانت مفيدة؟

المحلول

أعتقد أن CR يقوم بتقييم الأجزاء الصحيحة والكاذبة من IIF.نظرًا لوجود الجزء "Trim({PatientProfile.Middle})" هناك، والذي سيتم تقييمه مقابل قيمة فارغة، يبدو أن مقيم صيغة CR قد فشل تمامًا.

نصائح أخرى

أين توثق تقارير Crystal أن بناء الجملة هذا لا يعمل؟

أشك في وجود أي مكان كبير بما يكفي في الكون بأكمله لتوثيق كل ما لا يعمل في Crystal Reports...

أعلم أنني تأخرت سنوات في الإجابة على هذا السؤال، لكن خطر ببالي هذا السؤال أثناء محاولتي اكتشاف نفس الشيء.من المضحك أنني لم أتمكن حتى من العثور على الإجابة في وثائق Crystal Reports، ولكن بدلاً من ذلك في ملف رابط لشركة آي بي إم.

بشكل أساسي، إذا كنت تستخدم Crystal Reports 8.x أو 10.x، ISNULL و IIF لا تعملوا معًا.من الموقع:

سبب

يوجد خلل في Crystal Reports 8.x و10.x يمنع الصيغة المذكورة أعلاه من العمل بشكل صحيح.لا يمكن للأوامر 'IIF' و'IsNull' العمل معًا، ويتضمن ذلك محاولة استخدام "Not" لتعديل الأمر IsNull؛على سبيل المثال، IIF(Not IsNull ()).

حل المشكلة

الحل البديل هو استخدام عبارة "If-Then-Else".على سبيل المثال،

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

لذا، إذا كنت تستخدم CR 8.x أو 10.x (وهو ما نستخدمه)، فلن يحالفك الحظ.إنه يجعل الأمر ممتعًا حقًا عندما تقوم بتسلسل حقول متعددة معًا وقد يكون أحدها فارغًا.

جرب هذا:

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 ';
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top