ورود

View Full Version : چاپ رکوردهای محدود



amir zahed
پنج شنبه 20 اسفند 1388, 10:52 صبح
سلام دوستان
من باید یک گزارش بگیرم که تو هر صفحه ردیفش از 1 تا 32 باشه. یعنی اگه 10 تا صفحه هم داشته باشم ردیفاش از 1 شروع بشه و تا 32 تموم بشه.
الان یک recordnumber گذاشتم.حالا چطوری محدودش کنم وقتی به عدد 32 رسید بیاد از شماره 1 شروع کنه.
راه دیگه ای داره؟ بعد میخوام هرصفحه به صفحه ستون مبلغم رو ته هر صفحه جمع بزنه.(مثلا صفحه اول جمع 32 تا مبلغش میشه 850000 ریال و صفحه بعد جمع 32 تامبلغش میشه 250000ریال).
ممنون میشم راهنمایی کنید

mn_zandy63
چهارشنبه 26 اسفند 1388, 03:24 صبح
سلام دوست من
اینکار رو میتونی با استفاده از متغیر ها و running total ها احتمالا انجام بدی
اگه فایل گزارشت رو بذاری اینجا روی همون بهت توضیح میدم
موفق باشی

amir zahed
یک شنبه 01 فروردین 1389, 12:28 عصر
سلام دوست عزیز
سال نو مبارک
اگه برات زحمتی نیست میتونی خودت یه نمونه برام بذاری
چون من هر کاری کردم نتونستم. فکر کنم حجم فایلم زیاد بود.
ممنون

mn_zandy63
یک شنبه 01 فروردین 1389, 18:01 عصر
سلام دوست من،
سال نو شما هم مبارک
با توجه به اینکه در پست دیگه ای گفته بودی کریستال 8 استفاده میکنی، اگه من برات نمونه بزارم قاعدتا نمیتونی باز کنی.
برات توضیح می دم، ببین متوجه میشی یا نه
کاری که میکنیم، با فرمول هاست.
یه دونه فرمول اضافه کن، مثلا اسمش رو بذار fCouterReset.
کدش رو بنویس:

WhilePrintingRecords;
NumberVar PageRecordNumber := 0;
NumberVar PageRecordSum := 0;


این فرمول رو بذار داخل PageHeader، و Suppress کن.
اگه می دونی چه شکلی اینکار رو انجام بدی، که هیچی، اگه نه، برای مخفی کردنش، روش کلیک راست کن، در قسمت Format Field، در قسمت Common تیک کنار Suppress رو علامت بزن.

در این فرمول، ما دو تا متغیر سراسری تعریف کردیم و در بالای هر صفحه صفرشون می کنیم.

حالا یه فرمول دیگه بساز، اسمش رو مثلا بذار، fRecordNumber.
داخلش کد زیر رو بنویس:

WhilePrintingRecords;

NumberVar PageRecordNumber := PageRecordNumber + 1;
این فرمول رو به عنوان شماره ردیف استفاده کن. بذارش داخل قسمت detail.
با توجه به اینکه به طور پیشفرض بصورت 1.00 و 2.00 و 3.00 نشون میده، کافیه روش کلیک راست کنی و در Format Field قسمت اعشار رو بگی نذاره.

خب اینجا ما از همون متغیر که بالای صفحه صفرش کردیم، استفاده می کنیم، در هر رکورد، یکی اضافه میشه، بعد نشونش میدیم.

تا اینجا شماره ردیف رو اضافه کردیم.
حالا میمونه یه فرمول دیگه برای محاسبه جمع فیلدی که خواسته بودی.

یه فرمول دیگه اضافه کن، مثلا اسمش رو بذار fRecordSum.
حالا کد داخلش رو بنویس:

WhilePrintingRecords;

Numbervar PageRecordSum := PageRecordSum + {YOURFIELD};
به جای {YOURFIELD} فیلد مورد نظرت رو که میخوای جمعش رو پایین صفحه نمایش بدی بنویس.

این فرمول رو هم هرجا که خواستی داخل detail بذار.
و مثل فرمول اول suppress ش کن.

در این فرمول، در هر رکورد، فیلد مورد نظرت رو با رکورد های قبلی جمع می کنیم.

و یه دونه فرمول دیگه هم اضافه کن مثل fRecordSumShow.
داخلش رو فقط بنویس:

WhilePrintingRecords;

Numbervar PageRecordSum;
این فرمول رو بذار داخل PageFooter،
در این فرمول تنها کاری که میکنیم اینه که متغیری که جمع فیلد مورد نظرت رو نگه داشته رو نمایش میدیم.
میذاریمش پایین صفحه که در پایان جمع رو نشون بده.

امیدوارم کارت راه افتاده باشه.
اگه جاییش رو متوجه نشدی یا نیاز به توضیح داشت بپرس تا بهت توضیح بدم.

موفق باشی

amir zahed
دوشنبه 02 فروردین 1389, 12:13 عصر
سلام دوست عزیز
دستت درد نکنه قسمت اول کدی که نوشته بودی درست بود و تو هر صفحه از شماره 1 شروع میکرد
ولی قسمت دوم فرمولت رو تو برنامه گذاشتم error داد


WhilePrintingRecords;

Numbervar PageRecordSum := PageRecordSum + {YOURFIELD};


من به جای yourfiled نام فیلدم رو که mablagh بود رو به 2 این صورت گذاشتم:
{mablagh}
{factor.mablagh}
ولی کار نکرد
باید این نکته رو هم بگم نوع فیلد مبلغم به صورت currency میباشد
factor هم نام پایگاه داده منه
این پیغام رو میده:
a number is required here

mn_zandy63
دوشنبه 02 فروردین 1389, 16:58 عصر
سلام دوست من
برای اینکه فیلد رو قرار بدی، داخل ویرایشگر وقتی کد زیر رو نوشتی:
http://barnamenevis.biz/forum/attachment.php?attachmentid=45885&stc=1&d=1269262522

روی فیلدی که مورد نظرت هست، از قسمت FieldTree دابل کلیک کن تا خودش به صورت کامل برات بنویسه.
این شکلی دیگه اشتباه تایپی بوجود نمیاد.

http://barnamenevis.biz/forum/attachment.php?attachmentid=45884&stc=1&d=1269261784

اما اگه بازم به فرمولت گیر داد، معنیش اینه که فیلدت باید تبدیل شه به Number.
هر چند فکر نمیکنم Currency بودن فیلدت ایرادی بوجود بیاره، چون اونم عدده. اما به هر حال الآن تو ذهنم نیست و مطمئن نیستم.

موفق باشی

amir zahed
دوشنبه 02 فروردین 1389, 18:49 عصر
اما اگه بازم به فرمولت گیر داد، معنیش اینه که فیلدت باید تبدیل شه به Number.
هر چند فکر نمیکنم Currency بودن فیلدت ایرادی بوجود بیاره، چون اونم عدده. اما به هر حال الآن تو ذهنم نیست و مطمئن نیستم.

موفق باشی[/quote]

دوست عزیز شما خودت با currency امتحان کردی؟
من یه بار دیگه امتحان کردم ولی نشد
ممنون از لطفت

mn_zandy63
دوشنبه 02 فروردین 1389, 20:16 عصر
سلام دوست من،
نه دیگه بهت توضیح دادم که تست نکردم با currency، متاسفانه الان هم فرصت تست ندارم.
فرمول درسته. تنها بحثی که میمونه اینه که اگه ایراد از currency بودن فیلدت باشه، باید با توابع convert تبدیلش کنی.
یه جستجو کن، همون Help کریستال، یا Google.

اگه هم بتونی فایل rpt رو بذاری اینجا احتمالا بهتر بتونم کمکت کنم.
موفق باشی.

sara.f
سه شنبه 03 فروردین 1389, 16:30 عصر
ممنون میشم راهنمایی کنید


ممنون


دستت درد نکنه


ممنون از لطفت

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

amir zahed
سه شنبه 03 فروردین 1389, 20:59 عصر
درست شد
به گفته دوست عزیز هم گوش میدیم

msozan
سه شنبه 10 فروردین 1389, 11:15 صبح
سلام دوست من،
سال نو شما هم مبارک
با توجه به اینکه در پست دیگه ای گفته بودی کریستال 8 استفاده میکنی، اگه من برات نمونه بزارم قاعدتا نمیتونی باز کنی.
برات توضیح می دم، ببین متوجه میشی یا نه
کاری که میکنیم، با فرمول هاست.
یه دونه فرمول اضافه کن، مثلا اسمش رو بذار fCouterReset.
کدش رو بنویس:

WhilePrintingRecords;
NumberVar PageRecordNumber := 0;
NumberVar PageRecordSum := 0;


این فرمول رو بذار داخل PageHeader، و Suppress کن.
اگه می دونی چه شکلی اینکار رو انجام بدی، که هیچی، اگه نه، برای مخفی کردنش، روش کلیک راست کن، در قسمت Format Field، در قسمت Common تیک کنار Suppress رو علامت بزن.

در این فرمول، ما دو تا متغیر سراسری تعریف کردیم و در بالای هر صفحه صفرشون می کنیم.

حالا یه فرمول دیگه بساز، اسمش رو مثلا بذار، fRecordNumber.
داخلش کد زیر رو بنویس:

WhilePrintingRecords;

NumberVar PageRecordNumber := PageRecordNumber + 1;
این فرمول رو به عنوان شماره ردیف استفاده کن. بذارش داخل قسمت detail.
با توجه به اینکه به طور پیشفرض بصورت 1.00 و 2.00 و 3.00 نشون میده، کافیه روش کلیک راست کنی و در Format Field قسمت اعشار رو بگی نذاره.

خب اینجا ما از همون متغیر که بالای صفحه صفرش کردیم، استفاده می کنیم، در هر رکورد، یکی اضافه میشه، بعد نشونش میدیم.

تا اینجا شماره ردیف رو اضافه کردیم.
حالا میمونه یه فرمول دیگه برای محاسبه جمع فیلدی که خواسته بودی.

یه فرمول دیگه اضافه کن، مثلا اسمش رو بذار fRecordSum.
حالا کد داخلش رو بنویس:

WhilePrintingRecords;

Numbervar PageRecordSum := PageRecordSum + {YOURFIELD};
به جای {YOURFIELD} فیلد مورد نظرت رو که میخوای جمعش رو پایین صفحه نمایش بدی بنویس.

این فرمول رو هم هرجا که خواستی داخل detail بذار.
و مثل فرمول اول suppress ش کن.

در این فرمول، در هر رکورد، فیلد مورد نظرت رو با رکورد های قبلی جمع می کنیم.

و یه دونه فرمول دیگه هم اضافه کن مثل fRecordSumShow.
داخلش رو فقط بنویس:

WhilePrintingRecords;

Numbervar PageRecordSum;
این فرمول رو بذار داخل PageFooter،
در این فرمول تنها کاری که میکنیم اینه که متغیری که جمع فیلد مورد نظرت رو نگه داشته رو نمایش میدیم.
میذاریمش پایین صفحه که در پایان جمع رو نشون بده.

امیدوارم کارت راه افتاده باشه.
اگه جاییش رو متوجه نشدی یا نیاز به توضیح داشت بپرس تا بهت توضیح بدم.

موفق باشی

مشکل من تا حدی ربط به این موضوع داره
من جمع هر صفحه رو داخل pagefooter نشون میدم ولی جمع کلی این فیلد رو هم میخوام مثلا در صفحه آخر جمع کلیه صفحات رو علاوه بر جمع هر صفحه نشون بده خودم این کار رو انجام دادم:
در قسمت ReportFooter فرم sum رو برای فیلدم استفاده کردم و اون رو نشون میدم
ولی میدونید که قسمت reportFooter قبل از pagefooter نشون داده میشه که این زیاد جالب نیست مثلا صفحه آخر سه رکورد داره و خط بعد، جمع کلیه صفحات رو نشون میده و در پایین صفحه هم جمع اون صفحه رو و بین این دو رکورد خیلی فضای خالی می افته
خیلی درگیرشم ممنون میشم هر چه زودتر راهنماییم کنید

msozan
سه شنبه 10 فروردین 1389, 11:39 صبح
اصلا چطوری میتونیم کدنویسی کنیمکه مثلا در صفحه آخر یا هر صفحه دیگه pagefooter نمایش داده نشه آیا میشه این کار رو کرد؟

msozan
سه شنبه 10 فروردین 1389, 11:40 صبح
اصلا چطوری میتونیم کدنویسی کنیم که مثلا در صفحه آخر یا هر صفحه دیگه pagefooter نمایش داده نشه آیا میشه این کار رو کرد؟

mn_zandy63
چهارشنبه 11 فروردین 1389, 00:26 صبح
اصلا چطوری میتونیم کدنویسی کنیمکه مثلا در صفحه آخر یا هر صفحه دیگه pagefooter نمایش داده نشه آیا میشه این کار رو کرد؟

سلام، اینجا بهت توضیح دادم:
http://barnamenevis.org/forum/showthread.php?p=941913&posted=1#post941913

mn_zandy63
چهارشنبه 11 فروردین 1389, 00:42 صبح
مثلا صفحه آخر سه رکورد داره و خط بعد، جمع کلیه صفحات رو نشون میده و در پایین صفحه هم جمع اون صفحه رو و بین این دو رکورد خیلی فضای خالی می افته
خیلی درگیرشم ممنون میشم هر چه زودتر راهنماییم کنید

البته مشکلت با اون که بالا نوشتم احتمالا حل میشه، اما در کل، برای چسبوندن PageFooter به Detail برای اینکه فضای اضافی بینشون نمونه، در قسمت Section Expert، میتونی از Clamp Page Footer استفاده کنی.
روی Page Footer کلیک کن، و تیک Clamp Page Footer رو بزن.
http://barnamenevis.org/forum/attachment.php?attachmentid=46287&stc=1&d=1269981704

msozan
چهارشنبه 11 فروردین 1389, 07:50 صبح
این گزینه Clamp Page Footer کجا هست؟ در قسمت Section Expert که کلیک می کنم اصلا کل منوی من با مال شما فرق داره و گزینه Clamp Page Footer نداره.

msozan
چهارشنبه 11 فروردین 1389, 08:02 صبح
رو pagefooter که Section Expert رو می گیرم اصلا گزینهClamp Page Footer وجود نداره عکس منو رو ضمیمه کردم

mn_zandy63
چهارشنبه 11 فروردین 1389, 13:01 عصر
سلام دوست من،
مهم نیست، معنیش اینه که احتمالا در ورژنی که شما استفاده میکنی، این امکان وجود نداره.
من این امکان رو در ورژن های قبل از 2008 ندیده بودم.
در عین حال میتونی search کنی، شاید بتونی برای ورژن های قبلی پیدا کنی این امکان رو.

موفق باشی

msozan
چهارشنبه 11 فروردین 1389, 13:27 عصر
مال منم 2008 هست ولی این گزینه رو نداره

mn_zandy63
چهارشنبه 11 فروردین 1389, 15:29 عصر
سلام دوست من، منظورم Crystal Reports 2008 بود، احتمالا شما کریستال همراه Visual Studio رو دارید. اگه اشتباه نکنم، ورژنی که با Visual Studio هست، Crystal Report 10.5 Basic هست.

ryonis
دوشنبه 16 فروردین 1389, 17:35 عصر
سلام دوست عزیز.
باور کن زدن دکمه تشکر خیلی راحت تر از اینه که این همه جمله تشکر بنویسی.
اصلا دکمه تشکر را گذاشتن واسه این.
برای تشکر از آقای زندی که توی تعطیلات داره اینقدر کامل جواب شما را میده، بهتره از دکمه تشکر استفاده کنید.
پیروز باشی.
منم موافقم. بهتره همه عادت كنيم از كليد تشكر استفاده كنيم :تشویق:

NAkbari
دوشنبه 05 خرداد 1393, 23:04 عصر
سلام دوستان .من در گزارشم چند تا Formula field دارم که با شرطهای خاصی کار می کنند.برای هر ستونم مجبورم از همین نوع فیلدها با دستور Sum در Group فیلدی داشته باشم.در جمع ستونها مشکلی نیست . اما یک ستون دیگری دارم که بر اساس جمع و تفریق ستونهای دیگر بدست می آید.نمی تونم از جمع جمع این نوع فیلده استفاده کنم .میشه فوری کمکم کنید.