نمایش نتایج 1 تا 5 از 5

نام تاپیک: (کمک فوری ) نمایش تاریخ شمسی در خروجی کریستال ریپورت

  1. #1

    (کمک فوری ) نمایش تاریخ شمسی در خروجی کریستال ریپورت

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

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

  2. #2

    نقل قول: (کمک فوری ) نمایش تاریخ شمسی در خروجی کریستال ریپورت

    سلام ،

    یکی از راههاش اینه خوده تاریخ رو در بانک به صورت شمسی ذخیره کنین ، یعنی فیلد تاریخ در بانک دارای نوع Text باشه و داخل برنامه از طریق PersianCalender تاریخ رو در بانک به صورت شمسی ذخیره کنی و در گزارش ها ازش استفاده کنی.

  3. #3

    نقل قول: (کمک فوری ) نمایش تاریخ شمسی در خروجی کریستال ریپورت

    یک فیلد فرمول Formula Field در کریستال ریپورت بساز بعد کد زیر رو توش Paste کن .
    بجای CurrentDate که تاریخ کنونی سیستم را شمسی میکند فیلد تاریخ میلادی جدول مورد نظر رو قرار بده.
    موفق باشی.


    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;

  4. #4

    نقل قول: (کمک فوری ) نمایش تاریخ شمسی در خروجی کریستال ریپورت

    ضمنا یادت باشه حالت کد روی crystal syntax باشه.

  5. #5
    کاربر جدید
    تاریخ عضویت
    اردیبهشت 1391
    محل زندگی
    زیر سقف آسمون
    پست
    13

    نقل قول: (کمک فوری ) نمایش تاریخ شمسی در خروجی کریستال ریپورت

    خود C#‎‎‎ کلاسی برای تبدیل تاریخ میلادی به شمسی و برعکس داره
    شما میتونی تاریخ شمسی رو به میلادی تبدیل کنید و در دیتا بیس ذخیره کنید و هنگام خوندن از دیتابیس دوباره اونرو به شمسی تبدیل کنید و نمایش دهید
    اسم کلاس الان یادم نیست و دسترسی به ویژوال استادیو ندارم ولی فکر کنم PersianDate باشه میتونی یه جستجو توی Help ویژوال بکنی
    و اما برای تبدیل تمام فیلدهای تاریخ میتونی خروجی گرفته شده از دستور Sql را در یک Datatable - dt1 ریخته و حالا یک Datatable - dt2 جدید ایجاد کرده و توسط یک حلقه تمامی سطرهای dt1 را در dt2 ریخته فقط زمانی که میخواهید فیلدهای ستون تاریخ را در dt2 کپی کنید آن را تبدیل به شمسی بکنید
    حالا dt2 را به کریستال ریپورت پاس بدید
    نکته دیگر اینکه اگر جدول شما بسیار سنگین است و رکوردهای خروجی بسیار زیاد به جای این کار میتونید برای تاریخ توی دیتابیس دوتا فیلد یکی میلادی و دیگری شمسی که از نوع Nvarchar است ، تعریف کنید
    موفق باشی
    آخرین ویرایش به وسیله mahdi.ahmadian2010 : چهارشنبه 03 خرداد 1391 در 09:54 صبح

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

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