صفحه 1 از 2 12 آخرآخر
نمایش نتایج 1 تا 40 از 56

نام تاپیک: فرمول نویسی در کریستال ریپورت

  1. #1
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Cool فرمول نویسی در کریستال ریپورت

    با عرض سلام خدمت دوستان:

    نکته: در این قسمت فقط اسکریپت های کریستال ریپورت ( فرمولها) به همراه توضیح قرار گرفته است.

    اخطار : از مطرح کردن سوال جدا خوداری کنید!


    مطالب :

    . اما چرا ما فرمول نویسی یا اسکریپت نویسی می کنیم

    .نحوه تعریف متغیر عددی و رشته ای

    . اعمال ریاضی

    . تبدیل فیلد عددی به فیلد رشته ای متناظر با ان با مثال

    . عملگر های مقایسه

    . تعریف ارایه و دسترسی به عناصر آن

    . برخی از توابع ریاضی مورد استفاده

    . برخی از توابع موجود در کریستال کار روی رشته

    . ادامه برخی از توابع موجود در کریستال کار روی رشته

    . ادامه برخی از توابع موجود در کریستال کار روی رشته و اعداد

    . کد های اسکریپت نویسی سریع و کوتاه در کریستال

    . بدست اوردن روز ماه و سال تاریخ فعلی سیستم

    . بدست اوردن ساعت دقیقه و ثانیه فعلی سیستم

    . اختلاف بین دو تاریخ

    . تبدیل تاریخ میلادی را به شمسی در کریستال ریپورت

    . به جای عدد هر سطر حروف معادل آن

    . گروه بندی بر اساس حرف اول

    . حلقه for و نکات مربوط به آن

    . شکستن حلقه for یا خارج شدن بر اساس شرطی

    . دستور شرطی if و else

    . دستور select همراه با این که عدد روز هفته را گرفته و مشخص می کند چه روزی از هفته است

    . برخی از دستورات sql و معادل آن در کریستال ریپورت

    . ترفند دستور like روی مقادیر عددی

    . جمع مبلغ یک فیلد از رکورد های یک صفحه و چاپ در انتهای صفحه

    . دستور like و دستور startswith تفاوت و شباهت ها

    . عدم نمایش نام ستون در صورت نداشتن مقادیر

    . رنگ کردن یکی در میان رکورد ها

    . syntax ها در کریستال برای دستورات با بیش از یک خط کد

    توابع در کریستال function in crystal

    . نحوه ایجاد تابع

    . نحوه نوشتن توابع یک خطی

    . نحوه نوشتن توابع چند خطی

    . ارگومان یا ورودی تابع

    . نحوه صدازدن تابع و خروجی ان

    . دستیابی به رکورد قبلی و بعدی

    آخرین ویرایش به وسیله hasan_esfahan : پنج شنبه 27 فروردین 1388 در 22:27 عصر

  2. #2
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Smile اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    اختلاف بین دو تاریخ


    ابتدا یک فرمول فیلد ایجاد کنید و ان را در قسمت دیتیل قرار بدهید سپس کد زیر را داخل ان درج کنید

    dateVar st1 :=Date ({tb1.datebrith} ) ;
    dateVar st2 :=CurrentDate;
    numberVar h1;
    h1:=(st2-st1);
    آخرین ویرایش به وسیله hasan_esfahan : یک شنبه 04 اسفند 1387 در 23:42 عصر

  3. #3
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Smile اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    به جای عدد هر سطر حروف معادل آن

    https://barnamenevis.org/showthread.php?t=148819
    آخرین ویرایش به وسیله hasan_esfahan : یک شنبه 04 اسفند 1387 در 23:42 عصر

  4. #4
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Smile اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    گروه بندی بر اساس حرف اول

    مثلا
    سطر های
    اصغر اکبر امید ارسلان
    و سطر های
    محمد محمود میلاد

    که شما دو فرمول فیلد ایجاد کرده و اولی را در ریپورت هدر قرار می دهید و کد زیر را داخل آن بنویسید

    Global stringVar str1;
    str1:=left({table11.field1},1)+": گروه";


    و سپس دومی را در دیتیل قرار دهیدو کد زیر را در ان درج کنید


    Global stringVar str1;
    whileprintingrecords;
    if left({table11.field1},1)+": گروه"<>str1 then
    str1:=left({table11.field1},1)+": گروه";
    آخرین ویرایش به وسیله hasan_esfahan : یک شنبه 04 اسفند 1387 در 23:42 عصر

  5. #5
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Lightbulb اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    بدست اوردن روز ماه و سال تاریخ فعلی




    numbervar iMiladiDay:= Day (CurrentDate);
    numbervar iMiladiMonth:=Month (CurrentDate);
    numbervar iMiladiYear:=Year (CurrentDate);

  6. #6
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Smile اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    تعریف ارایه و دسترسی به عناصر آن


    numbervar array array1:=[0,31,60,91,121,152,182,213,244,274,305,335];
    numbervar num1 := array1[3] ;
    آخرین ویرایش به وسیله hasan_esfahan : یک شنبه 04 اسفند 1387 در 23:43 عصر

  7. #7
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Lightbulb اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    تبدیل فیلد عددی به فیلد رشته ای متناظر با ان با مثال

    stringvar str1:=totext({tb1.filde1})+" :عدد ";


    تبدیل فیلد رشته ای(ازنوع عدد) به فیلد عددی مثلا برای جمع مقادیر


    numbervar num1:=ToNumber ({tb1.filed1})+ToNumber ({tb1.filed1});

  8. #8
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Smile اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    اگه یه ستون خاص دیتا نداشت اسمش رو هم نشون نده؟


    ابتدا در پنجره field explorer در قسمت frmoul filds راست کلیک کنید سپس new و نامی برای فرمول خود انتخاب کنید سپس use editor کلیک کنید و کد زیر را درج کنید

    stringvar ch1="";
    if {tb1.field1} like "*" then
    ch1:="نام مورد نظر";

    که tb1 نام جدول است و فیلد 1 نام فیلد مورد نظر و در اخر فرمول را به جای فیلد ستون قرار بده

  9. #9
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Lightbulb نقل قول: فرمول نویسی در کریستال ریپورت

    نحوه تعریف برخی از متغیر ها

    عددی

    Numbervar one;
    one:=12;
    Numbervar one:=12;


    رشته ای


    stringVar one ;
    one:="salam";
    stringVar one :="salam";


    منطقی


    booleanVar bool :=true ;
    booleanVar bool;
    bool :=true ;

  10. #10
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Lightbulb اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    اعمال ریاضی

    متغیر های مورد استفاده

    Numbervar x:=16;
    Numbervar y:=7;

    جمع

    Numbervar my_sum:=x+y;
    //my_sum=23

    تقسیم اعشاری

    Numbervar my_div:=x/y;
    //my_div=2.29

    توان

    Numbervar my_exp:=x^y;
    //my_exp=268435456

    تقسیم صحیح

    Numbervar my_divint:=x\y;
    //my_divint=2

    باقیمانده تقسیم x بر y

    Numbervar my_mod:= x mod y;
    //my_mod= 2

    ضرب

    Numbervar my_mul:=x* y;
    //my_mul=112

    مکمل

    Numbervar my_negate:=-x;
    //my_mul=-16

    تفریق


    Numbervar my_sub:=x-y;
    //my_sub=9

    درصد


    Numbervar my_persent:=y%x;
    //my_persent=43.75

  11. #11
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Lightbulb اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    مقایسه

    مقادیر
      
    Numbervar x:=16;
    Numbervar y:=7;


    مساوی


    Booleanvar bool:=x=y;
    //false


    بزگتر مساوی

    Booleanvar bool:=x>=y;
    //true


    بزرگتر

    Booleanvar bool:=x>y;
    //true


    کوچکتر مساوی

    Booleanvar bool:=x<=y;
    //false

    کوچکتر


    Booleanvar bool:=x<y;
    //false


    مخالف

    Booleanvar bool:=x<>y;
    //true

  12. #12
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Lightbulb اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    دستور شرطی if و else
    یک خطی

    if x>=y then
    x:=false
    else
    y:=true;

    و چند سطری


    if x<>y then (
    x:=false;
    y:=true
    )
    else
    (
    x:=true;
    y:=false;
    )


    نکته :
    در صورتی که بعد از if شما else داشتید در سطر قبل از else نیازی به سمی کالن(;) نیست

  13. #13
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Lightbulb اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    دستور select همراه با:
    این که عدد روز هفته را گرفته و مشخص می کند چه روزی از هفته است

    numbervar x:=DayOfWeek (CurrentDate);
    select x
    case 1:
    "یک شنبه"
    case 2:
    "دو شنبه"
    case 3:
    "سه شنبه"
    case 4:
    "چهار شنبه"
    case 5:
    "پنج شنبه"
    case 6:
    "جمعه"
    case 7:
    "شنبه"
    default:
    "اشتباه ورودی";

  14. #14
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Lightbulb نقل قول: فرمول نویسی در کریستال ریپورت

    برخی از دستورات sql و معادل آن در کریستال ریپورت


    select * from tb1 where filed1<10
    {tb1.filed1}<10



    select * from tb1 where filed1 like '% کلید جستجو%'
    {tb1.filed1} like '* کلید جستجو*'



    select * from tb1 where filed1>=10 and filed1<=20
    {tb1.filed1}>=10 and {tb1.filed1}=20



    select * from tb1 where filed1>=10 or filed1<=20
    {tb1.filed1}>=10 or {tb1.filed1}=20

  15. #15
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Cool اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    نمایش افرادی که مثلا دو رقم اخر کد انها 95 است و کد آنها بین 1000 تا 2000 است فیلد هم از نوع عددی است این روش برای این است که دستور like روی مقادیر عددی انجام نمی شود

    totext({tb1.code}) like '*95*' and {tb1.code}>1000 and {tb1.code}<2000

  16. #16
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Cool اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    کد های اسکریپت نویسی سریع و کوتاه در کریستال


    IIF (شرط,true ,false );
    IIf(x>y,'سلام','خداحافظ');



    Choose (عدد,'اگر یک باشد این قسمت ','اگر دو باشد این قسمت','اگر سه باشد این قسمت',... )
    Choose (DayOfWeek (CurrentDate),'یک شنبه','دو شنبه','سه شنبه','چهارشنبه','پنج شنبه','جمعه','شنبه');


  17. #17
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Cool اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    برخی از توابع موجود در کریستال

    حذف فضا های خالی ابتدای فیلد

    TrimLeft ({tb1.firstname});

    حذف فضا های خالی انتهای فیلد

    TrimRight ({tb1.firstname});

    حذف فضا های خالی ابتدای و انتهای فیلد

    Trim ({tb1.firstname});

    انتخاب قسمتی از اخر فیلد مثلا ali را li

    Right ({tb1.firstname},2 );

    انتخاب قسمتی از اول فیلد مثلا ali را al

    Left ({tb1.firstname},2 );

    انتخاب قسمتی از فیلد که سه پارامتر دارد اولی فیلد دومی مکان شروع از سمت چپ و سومی تعداد برگشتی

    Mid ({tb1.firstname},2 ,4 );

    بدست اوردن طول یک فیلد که خروجی آن مقدارعددی است

    Length ({tb1.firstname});

  18. #18
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Cool اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    ادامه:
    فقط اولین کاراکتر فیلد حروف بزرگ و مابقی با حروف کوچک

    ProperCase ({tb1.firstname});


    کلیه کاراکتر های فیلد حروف بزرگ

    UpperCase ({tb1.firstname});

    کلیه کاراکتر های فیلد حروف کوچک


    LowerCase ({tb1.firstname});


    تبدیل فیلد رشته ای که عدد درون ان ذخیره شده به فیلد عددی

    ToNumber ({tb1.code});

    تبدیل فیلد عددی به رشته معادل ان

    ToText ({tb1.num});


    مقایسه دو فیلد


    StrCmp ({tb1.nummeli},{tb1.numshenasname} );

  19. #19
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Cool اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    ادامه:
    معدل گیری از یک فیلد

    Average ({tb1.num});

    پیدا کردن فبلدی که بیشتر تکرار شده

    Mode ({tb1.code});


    تعداد فیلد موجود در بانک

    Count ({tb1.firstname});


    جمع فیلد مورد نظر

    Sum ({tb1.code});

  20. #20
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Cool اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    دستور like و دستور startswith تفاوت و شباهت ها

    startswith در این دستور افرادی را نمایش می دهد که اول نام انها با a شروع شود

    if {tb1.firstname} startswith 'a' then
    {tb1.firstname};


    در این دستور افرادی را نمایش می دهد که اول نام انها با a پایان پذیرد

    if {tb1.firstname} like '*a' then
    {tb1.firstname};


    در این دستور افرادی را نمایش می دهد که اول نام انها با a شروع شود که اینجا like همانند startswith عمل می کند


    if {tb1.firstname} like 'a*' then
    {tb1.firstname};


    در این دستور افرادی را نمایش می دهد که در نام انها حرف a وجود داشته باشد اول اخر یا حتی وسط


    if {tb1.firstname} like '*a*' then
    {tb1.firstname};


    اما like دارای دو پارامتر * و ؟ که ستاره به معنی این است که خواه به جای ان کاراکتری نباشد خواه 1 یا .... ولی ؟ به معنی ان است که به جای آن حتما یک کاراکتر باشد مثلا


    if {tb1.firstname} like 'a??' then
    {tb1.firstname};


    افرادی را نمایش می دهد که نام انها با a شروع می شود و نام انها دارای 3 کاراکتر است مثل ali , asd , amd, ask,......

  21. #21
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Cool اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    نحوه استفاده از حلقه for

    i این متغیر فقط نیاز به تعریف کردن دارد.
    a مقدار اولیه حلقه را مشخص می کند.
    b مقدار نهایی حلقه را مشخص می کند .
    step عددی یا متغیر عددی که جلوی ان قرار می گیرد گام افزایشی حلقه را مشخص می کند.
    کد زیر نحوه استفاده از حلقه یک خطی را مشخص می کند .

    numbervar i;
    numbervar a:=5;
    numbervar b:=10;
    numbervar q:=0;

    for i:=a to b step 1 do
    q:=q+{tb1.code};


    چند نکته
    1- به جای i فقط متغیر عددی می تواند بنشیند و نمی توان محاسبات انجام داد.
    2- به جای a می توان محاسبات نیز انجام داد.
    3- به جای b می توان محاسبات نیز انجام داد.
    4-گام حلقه می تواند محاسبات مثلا a+2 باشد.
    5- برای حلقه چند خطی باید از پرانتز استفاده کرد.

    نحوه استفاده از حلقه چند خطی


    numbervar i;
    numbervar a:=5;
    numbervar b:=10;
    numbervar q:=0;
    for i:=a to b step 1 do(
    q:=q+{tb1.code};
    q:=q \10;
    );


    نکته : در اخر پرانتز نیاز به سمی کالن است .

  22. #22
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Cool اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    exit for: شکستن حلقه for یا خارج شدن بر اساس مثلا شرطی



    for i:=a to b step 1 do(
    q:=q+{tb1.code};
    if q>400636 then
    exit for;
    );

  23. #23
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    این تابع تاریخ میلادی را به شمسی تبدیل می کنه در کریستال

    numbervar iMiladiMonth:=month(CurrentDate);
    numbervar iMiladiDay:=day(CurrentDate);
    numbervar iMiladiYear:=year(CurrentDate);
    numbervar shamsiDay;
    numbervar shamsiMonth;
    numbervar shamsiYear;
    numbervar dayCount;
    numbervar farvardinDayDiff;
    numbervar deyDayDiff;
    numberVar array sumDayMiladiMonth :=[0,31,59,90,120,151,181,212,243,273,304,334];
    numberVar array sumDayMiladiMonthLeap := [0,31,60,91,121,152,182,213,244,274,305,335];
    numberVar farvardinDayDiff:=79;
    numbervar miladiYear1:=int(imiladiYear mod 100);
    numbervar miladiYear2:=int(imiladiYear mod 4);
    numbervar miladiYear3:=int(imiladiYear mod 100);
    numbervar miladiYear4:=int(imiladiYear mod 400);
    if (((miladiYear1 <> 0 )and (miladiYear2 =0))or((miladiYear3=0)and (miladiYear4=0))) then
    dayCount := sumDayMiladiMonthLeap[iMiladiMonth] + iMiladiDay
    else
    dayCount := sumDayMiladiMonth[iMiladiMonth] + iMiladiDay;

    miladiYear1:=int((imiladiYear-1) mod 100);
    miladiYear2:=int((imiladiYear-1) mod 4);
    miladiYear3:=int((imiladiYear-1) mod 100);
    miladiYear4:=int((imiladiYear-1) mod 400);
    if (((miladiYear1 <> 0 )and (miladiYear2 =0))or((miladiYear3=0)and (miladiYear4=0))) then
    deyDayDiff := 11
    else
    deyDayDiff := 10;
    if (dayCount > farvardinDayDiff) then
    (
    dayCount := dayCount - farvardinDayDiff;
    if (dayCount <= 186) then
    (
    select int(dayCount mod 31)
    case 0:(
    shamsiMonth :=int( dayCount / 31);
    shamsiDay := 31;
    )
    default:(
    shamsiMonth := int(dayCount / 31) + 1;
    shamsiDay :=int(dayCount mod 31);
    );
    shamsiYear := iMiladiYear - 621;
    )
    else
    (
    dayCount := dayCount - 186;
    select dayCount mod 30
    case 0:(
    shamsiMonth := int(dayCount / 30) + 6;
    shamsiDay := 30;
    )
    default:(
    shamsiMonth := int(dayCount / 30) + 7;
    shamsiDay := int(dayCount mod 30);
    );
    shamsiYear := iMiladiYear - 621;
    )
    )
    else
    (
    dayCount := dayCount + deyDayDiff;
    select int(dayCount mod 30)
    case 0 :(
    shamsiMonth := int(dayCount / 30) + 9;
    shamsiDay := 30;
    )
    default:(
    shamsiMonth := int(dayCount / 30) + 10;
    shamsiDay := int(dayCount mod 30);
    );
    shamsiYear := iMiladiYear - 622;
    );
    stringvar exitmy:=totext(shamsiYear)+' / '+totext(shamsiMonth)+' / '+totext(shamsiDay);
    exitmy;



    منبع: این تابع همان تابعی بود که در C#‎ و من ان را به کریستال تبدیل کردم.
    و کلیه قسمت های آن در پست های قبلی توضیح داده شده است.

  24. #24
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    Cool اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    بدست اوردن ساعت دقیقه و ثانیه فعلی سیستم


    numbervar iHour:=Hour (CurrentTime);
    numbervar iMinute :=Minute (CurrentTime);
    numbervar iSecond :=Second (CurrentTime);

  25. #25
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    نقل قول: فرمول نویسی در کریستال ریپورت

    برخی از توابع ریاضی مورد استفاده

    تابع abs(x) این تابع قدر مطلق عدد را بر می گرداند

    numbervar x:=-3.15;
    numbervar y:=3.15;
    abs(x);
    // 3.15
    abs(y);
    //3.15


    تابع int(x) این تابع صحیح عدد را بر می گرداند اما اما در منفی رو به پایین


    numbervar x:=-3.15;
    numbervar y:=3.15;
    int(x);
    //-4
    int(y);
    //3


    بازگشت عدد pi

    crpi;
    //3.14


    عدد تصادفی rnd

    Rnd;


    گرد کردن عدد

    numbervar x:=3.15;
    numbervar y:=3.55;
    Round (x);
    //3
    Round (y);
    //4

  26. #26
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    جمع مبلغ یک فیلد از رکورد های یک صفحه و چاپ در انتهای صفحه
    شما برای این کار سه فرمول ایجاد می کنید از پنجره filed explorer

    فرمول اولی را در در قسمت page header قرار داده و کد زیر را در ان درج کنید

    Shared numberVar sum1;
    WhilePrintingRecords;
    sum1:=0;

    فرمول دومی را در details قرار داده و کد زیر را در آن درج نماید

    Shared numberVar sum1;
    WhilePrintingRecords;
    sum1:={Table11.id}+sum1;


    فرمول سومی را در pagefooter قرار داده و کد زیر را در ان درج کنید

    Shared numberVar sum1;
    WhilePrintingRecords;
    sum1;


    برای این که فرمول اولی و دومی هنگام اجرا نمایش داده نشوند در پنجره propertis خاصیت Suppress هر کدام را برابر با true کنید

  27. #27
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    رنگ کردن یکی در میان رکورد ها
    بر روی Detail کلیک راست سپس section export کلیک کنید در سمت راست بر روی تب color کلیک کنید و سپس چک باکس را علامت گذاری کرده و در زیر ان بر روی باتون فرمول کلیک کنید و سپس کد زیر را درج کنید

    whileprintingrecords;
    numbervar i:=RecordNumber;
    booleanvar bt:=(i mod 2)=0;
    if bt then crGreen else crRed
    آخرین ویرایش به وسیله hasan_esfahan : شنبه 01 فروردین 1388 در 20:48 عصر

  28. #28
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    اما چرا ما فرمول نویسی یا اسکریپت نویسی می کنیم
    به نظر بنده بیشتر اسکریپت های نوشته شده برای زیباتر و جالب تر شدن و همچنین اضافه کردن امکانات به کریستال می باشد مثلا رنگی کردن یک در میان رکوردها یا تغیر رنگ فیلد ها و یا ایجاد تاریخ فارسی تبدیل روز میلادی به شمسی یا جمع فیلد ها در انتهای صفحه یا تبدیل حروف کوچک به بزرگی برعکس این یا هزارن چیز دیگر به کار می رود همانطور که در بیشتر قسمت های فرم کریستال با باز شدن هر پنجره شکل یک باتوم خاص را میبینید یعنی این که برای هر قسمت می توان فرمول مربوطه را نوشت از تغیر رنگ گرفته تا بینهایت

  29. #29
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    نحوه ایجاد تابع در کریستال
    ابتدا برای ایجاد تابع باید یک فرمول ایجاد کرده یا اصلا وارد محیط اسکریپت نویسی یا فرمول نویسی شوید .برای ایجاد تابع در قسمت کریستال report coustem function کلیک راست کرده و بر روی new کلیک کرده در پنجره ظاهر شده نامی برای تابع انتخاب کرده و وارد اسکریپت نویسی شوید (دکمه دومی) من مثلا رضا انتخاب کردم تصویر زیر که پس از ایجاد به صورت زیر ظاهر می شود

    Function ()

    عکس های ضمیمه عکس های ضمیمه

  30. #30
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    نحوه نوشتن توابع که دارای یک خط کد می باشند کافی است پس از نام تابع یک خط کد بیشتر نشود


    Function ()
    numbervar a:=1;


  31. #31
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    نحوه نوشتن توابع چند خطی
    همانطور که می دانید در بیشتر زبا نهای برانامه نویسی برای نوشتن چند خط کد که مربوط به یک دستور باشد مثلا در زبان سی { } یا در پاسکال بگین و اند بود در اینجا از پرانتز با سمی کالن اخر استفاده می شود

    Function ()
    (
    numbervar a:=1;
    a:=a+1;
    );

  32. #32
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    نقل قول: فرمول نویسی در کریستال ریپورت

    انواع ارگومان (ورودی) تابع
    یک ارگومان

    Function (numbervar i)
    (
    numbervar a:=1;
    a:=a+1;
    );
    بیش از یک ارگومان

    Function (numbervar i,stringvar j)
    (
    numbervar a:=1;
    a:=a+1;
    );

  33. #33
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    نقل قول: فرمول نویسی در کریستال ریپورت

    خروجی تابع و صدا زدن ان
    خروجی تابع بستگی به اخرین خط اجرا شده دارد

    Function (numbervar i)
    (
    if i> 0 then
    'mosbat'
    else if i=0 then
    'zero'
    else
    'negative'
    );
    که اگر من عدد 2 را به صورت زیر ارسال کنم

    reza(2);
    خروجی به صورت زیر است

    mosbat
    نکته میتوان خروجی را در متغیر هم نوع قرار داد

    stringvar d:=reza(2);

  34. #34
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    syntax ها در کریستال برای دستورات با بیش از یک خط کد
    نکته 1: همانطور که می دانید در کریستال برای نوشتن چند خط کد که مربوط به یک تابع یا دستور مثلا for, if یا غیره است باید انها راداخل پرانتز نوشت همانطور که در c یا C#‎ از { } استفاده می کنیم اما در این جند خط اگر در اخرین خط کد نیازی به سمی کالن ; ندارد اگر هم با شد مشکلی نیست مثلا هر دو زیر صحیح است.

    numbervar i:=2;
    numbervar j:=2;
    if i>1 then
    (
    i:=i+1;
    i:=i+1 //<==========
    );
    ///////////
    numbervar i:=2;
    numbervar j:=2;
    if i>1 then
    (
    i:=i+1;
    j:=j+1; //<=========
    );



    نکته دوم در اخر پرانتز برای else و موارد شبیه به ان نیازی به سمی کالن نیست
    مثلا دستور زیر صحیح است.

    numbervar i:=2;
    numbervar j:=4;
    if i>1 then
    (
    i:=i+1;
    j:=j+1;
    ); //<========
    for i:=2 to j step 1 do
    (
    i:=i+1;
    j:=j+1;
    );

    اما دستور زیر چون قبل از else سمی کالن هست خطا دارد.

    numbervar i:=2;
    numbervar j:=4;
    if i>1 then
    (
    i:=i+1;
    j:=j+1;
    ); //<========
    else
    (
    i:=i+1;
    j:=j+1;
    );

  35. #35
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419

    نقل قول: فرمول نویسی در کریستال ریپورت

    دستیابی به رکورد قبلی

    Previous ({book1.id});

    دستیابی به رکورد بعدی

    Next ({book1.id});

  36. #36
    کاربر دائمی آواتار majidsoft
    تاریخ عضویت
    مهر 1387
    محل زندگی
    اهواز
    سن
    43
    پست
    329

    نقل قول: فرمول نویسی در کریستال ریپورت

    با سلام وخسته نباشید من یک سوال داشتم من یک table در sql دارم که بر اساس یک فیلد جستجو کرده و نتایج را نمایش می دهد حالا می می خواستم بدانم چگونه می شود با یک حلقه از محتویات یک فیلد یک میانگین گرفت به طوریکه اگر عدد صفر بود عدد را در میانگین نیاورد و همینطور در یک فیلد دیگر از محتویات کل فیلد در table میانگین بگیرد امیدورام که منظورم را رسانده باشم یعنی من یکبار می خواهم از محتویات فیلدهای نمایش داده شده در کریستال میانگین بگیرم و یکبار از محتویات کل دیتابیس
    با تشکر

  37. #37

    نقل قول: فرمول نویسی در کریستال ریپورت

    نقل قول نوشته شده توسط majidsoft مشاهده تاپیک
    با سلام وخسته نباشید من یک سوال داشتم من یک table در sql دارم که بر اساس یک فیلد جستجو کرده و نتایج را نمایش می دهد حالا می می خواستم بدانم چگونه می شود با یک حلقه از محتویات یک فیلد یک میانگین گرفت به طوریکه اگر عدد صفر بود عدد را در میانگین نیاورد و همینطور در یک فیلد دیگر از محتویات کل فیلد در table میانگین بگیرد امیدورام که منظورم را رسانده باشم یعنی من یکبار می خواهم از محتویات فیلدهای نمایش داده شده در کریستال میانگین بگیرم و یکبار از محتویات کل دیتابیس
    با تشکر
    https://barnamenevis.org/showpo...24&postcount=4

  38. #38
    کاربر دائمی
    تاریخ عضویت
    آبان 1387
    محل زندگی
    خراسان رضوی
    پست
    677

    نقل قول: اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    نقل قول نوشته شده توسط hasan_esfahan مشاهده تاپیک
    رنگ کردن یکی در میان رکورد ها
    من که امتحان کردم اکثر رنگ هارو قبول نمی کنه . اونایی که قبول می کنه خیلی بد رنگ هستن
    مجموعه رنگاش کدوم ها هستند

  39. #39

    نقل قول: اسکریپت نویسی (به قول دوستان فرمول نویسی) در کریستال ریپورت

    نقل قول نوشته شده توسط shocraneh مشاهده تاپیک
    من که امتحان کردم اکثر رنگ هارو قبول نمی کنه . اونایی که قبول می کنه خیلی بد رنگ هستن
    مجموعه رنگاش کدوم ها هستند
    در قسمت Section Expert قسمت detail رو انتخاب کن، در زبانه ی Color، تیک Background color رو بزن.

    بعد رو این دکمه کلیک کن :

    یک کد توی این مایه ها بنویس برای اینکه یک رکورد در میون رنگ رکورد عوض شه.
    if RecordNumber mod 2 = 0 then
    crNoColor
    else
    crSilver


    اگه رنگهایی که به صورت پیش فرض داره رو خوشت نیومد میتونی به جای مثلا crSilver بنویسی
     Color(50,100,200)
    ، عدد 50 مقدار رنگ قرمز و 100 مقدار رنگ سبز و 200 مقدار رنگ آبی هست.
    با این تابع میتونی هر ترکیب رنگی رو بسازی.

    موفق باشی.
    عکس های ضمیمه عکس های ضمیمه

  40. #40
    کاربر تازه وارد
    تاریخ عضویت
    آذر 1386
    محل زندگی
    مشهد
    پست
    47

    Angry حذف اعشار

    سلام دوست عزیز
    کریستال ریپورت برنامه من با دیتا ست پر میشه
    چه جوری متونم یه فیلد که قیمت درش هست رو بدون صفر اعشار نشون بدم؟می خوام فیلدهای اعدادم بدون اعشار باشه.
    از یک کد استفاده کردم ولی خطا میده.لطفا راهنماییم کنین چه کار باید بکنم.

    عکس های ضمیمه عکس های ضمیمه

صفحه 1 از 2 12 آخرآخر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •