PDA

View Full Version : سوال: چاپ ردیف های فاقد رکورد



Profesorjd
جمعه 26 مهر 1392, 22:10 عصر
با سلام و تشکر
چطوری میتوان در یک گزارش تعداد مشخصی مثلاً 15 ردیف چاپ بشه حتی اگر محتوا نداشته باشد ؟
( جستجو کردم چیزی پیدا نکردم )
توضیح اینکه در گزارش مربوط دو سابریپورت وجود دارد که هر دو باید در یک صفحه باشند و حداقل باید 15 ردیف داشته باشند چه رکورد داشته باشند چه نداشته باشند یه عبارتی اگر 4 رکورد داشت جدول 15 سطری چاپ بشود

Profesorjd
سه شنبه 30 مهر 1392, 00:21 صبح
سلام مجدد
استادان محترم !‌سئوال سخت بود یا نامفهوم .
لطف بفرمایید راهنمایی کنید

Abbas Amiri
سه شنبه 30 مهر 1392, 01:25 صبح
با سلام و تشکر
چطوری میتوان در یک گزارش تعداد مشخصی مثلاً 15 ردیف چاپ بشه حتی اگر محتوا نداشته باشد ؟
( جستجو کردم چیزی پیدا نکردم )
توضیح اینکه در گزارش مربوط دو سابریپورت وجود دارد که هر دو باید در یک صفحه باشند و حداقل باید 15 ردیف داشته باشند چه رکورد داشته باشند چه نداشته باشند یه عبارتی اگر 4 رکورد داشت جدول 15 سطری چاپ بشود

سوالتان کمی سخت است بنابراین جواب دادن به آن با توضیح کمی مشکل است ولی آنچه در بادی امر به نظر می رسد می توان باقیمانده تقسیم بر 15تعداد رکوردهای منبع داده هر ساب ریپورت را بدست آورده و در کوئری دیگری (به همان تعداد فیلد و نام فیلد) به همان تعداد رکورد خالی ایجاد کرد و بعد این دو را با هم UNION کرد و به منبع داده ساب ریپورت منتسب کرد.

Profesorjd
سه شنبه 30 مهر 1392, 20:57 عصر
با سلام و تشکر
استاد گرامی را حل شما در زمان ثابت بودن تعداد ردیف قابل عمل خواهد بود ولی من عرض کردم حداقل 15 ردیف و ممکن است بشود 16 یا بیشتر سطر . اونوقت این فرمول کار نمیکند!! به نظر میرسد بشود در دیتیل ریپورت (یا سابریپورت) به صورت پیش‌فرض خطوط سطرها ترسیم شود و اگر اطلاعات داشت که پر میشود و اگر نداشت خالی بماند

Abbas Amiri
سه شنبه 30 مهر 1392, 23:29 عصر
با سلام و تشکر
استاد گرامی را حل شما در زمان ثابت بودن تعداد ردیف قابل عمل خواهد بود ولی من عرض کردم حداقل 15 ردیف و ممکن است بشود 16 یا بیشتر سطر . اونوقت این فرمول کار نمیکند!! به نظر میرسد بشود در دیتیل ریپورت (یا سابریپورت) به صورت پیش‌فرض خطوط سطرها ترسیم شود و اگر اطلاعات داشت که پر میشود و اگر نداشت خالی بماند

درسته ، منظورم تفاضل 15 و باقیمانده تعداد رکوردها تقسیم بر 15 بود . 15 - (RecCount Mod 15)

در مورد روش شما فکر نکنم چنین چیزی عملی باشد . بهتره نمونه بذارید .

Profesorjd
پنج شنبه 02 آبان 1392, 00:35 صبح
با سلام و تشکر
عزیز اگر راه حل داشتم ( نمونه برنامه) که مشکل نبود
به تضویر دقت بفرمایید
112156
http://barnamenevis.org/images/misc/pencil.png

انگوران
پنج شنبه 02 آبان 1392, 16:00 عصر
با سلام، البته اين روشي كه ميگم خيلي منطقي و اصولي نيست ولي فك كنم كارت رو راه بندازه و اون اينه كه:
از جدول مورد نظر يه عكس تهيه كني و اونو پس زمينه گزارشت قرار بدي بعدش فيلدهات رو در قسمت detail بر اساس رديف جدول بچيني.

alirezabahrami
جمعه 03 آبان 1392, 08:05 صبح
با سلام و تشکر
چطوری میتوان در یک گزارش تعداد مشخصی مثلاً 15 ردیف چاپ بشه حتی اگر محتوا نداشته باشد ؟
( جستجو کردم چیزی پیدا نکردم )
توضیح اینکه در گزارش مربوط دو سابریپورت وجود دارد که هر دو باید در یک صفحه باشند و حداقل باید 15 ردیف داشته باشند چه رکورد داشته باشند چه نداشته باشند یه عبارتی اگر 4 رکورد داشت جدول 15 سطری چاپ بشود
سلام
نمونه ضمیمه دقیقاً مطابق خواسته شما تهیه گردیده
موفق باشید

Profesorjd
جمعه 03 آبان 1392, 12:13 عصر
با سلام، البته اين روشي كه ميگم خيلي منطقي و اصولي نيست ولي فك كنم كارت رو راه بندازه و اون اينه كه:
از جدول مورد نظر يه عكس تهيه كني و اونو پس زمينه گزارشت قرار بدي بعدش فيلدهات رو در قسمت detail بر اساس رديف جدول بچيني.
با سلام و تشکر
با توجه به اینکه حداقل سطر داریم و ممکن است بیشتر شود این راه حل منطقی نیست . ولی بازهم تشکر

Profesorjd
جمعه 03 آبان 1392, 12:17 عصر
سلام
نمونه ضمیمه دقیقاً مطابق خواسته شما تهیه گردیده
موفق باشید
با تشکر از لطف شما .
دو سئوال پیش آمد البته با سرک کشیدن به کدها به جواب نرسیدم .
1- باید کاربر تعداد سطر را وارد کند . در صورتیکه بخواهیم این تعداد را در برنامه وارد کنیم برای تعداد بیشتر از آنکه وارد کردیم چکار باید کرد؟
2- اگر بخواهیم ، تمام صفحه ، این سطور قرار گیرند کدام بخش از کدها باید تغییر کند ؟ توضیح اینکه مثل فاکتور فروش یک صفحه A4 سطرها طراحی شدند و فقط چند سطر پر میشوند

alirezabahrami
جمعه 03 آبان 1392, 12:33 عصر
با سلام و تشکر
با توجه به اینکه حداقل سطر داریم و ممکن است بیشتر شود این راه حل منطقی نیست . ولی بازهم تشکر

با تشکر از لطف شما .
دو سئوال پیش آمد البته با سرک کشیدن به کدها به جواب نرسیدم .
1- باید کاربر تعداد سطر را وارد کند . در صورتیکه بخواهیم این تعداد را در برنامه وارد کنیم برای تعداد بیشتر از آنکه وارد کردیم چکار باید کرد؟
2- اگر بخواهیم ، تمام صفحه ، این سطور قرار گیرند کدام بخش از کدها باید تغییر کند ؟ توضیح اینکه مثل فاکتور فروش یک صفحه A4 سطرها طراحی شدند و فقط چند سطر پر میشوند
سلام
پارامترهای که در تکست باکس های فرم وارد شده برای همین تعیین شده که تعداد سطرهای هر دوقسمت را خودت تعیین کنید . من در حالت پیشفرض بر اساس خواسته خودت و تصویر قرار داده شده حداقل تعداد سطرهای جدول حاضرین را 10 و جدول غائبین را 7 تعیین کردم و این تعداد قابل تغییر است ، به عبارتی اندازه های فوق در فرم را میتوانید تغییر دهید .
پاسخ سوال دوم هم عملی است هم با الگو گرفتن از نمونه ارائه شده و هم بااستفاده از ایجاد فانکشن ایجادخطوط که نیاز به ایجادجدول جدید ندارد.

یاعلی

Profesorjd
جمعه 03 آبان 1392, 23:22 عصر
با تشکر مجدد
1- استاد گرامی بله این تعداد قابل تغییر است یا به صورت ورود کاربر یا به صورت درج در کد . ببینید مثلاً‌ اگر من در کد (‌مثلاً‌ همان txt1 ) را ثابت قرار دهم در زمان آپدیت جدول temp به همان تعداد سطر اضافه میکند و طبعاً در صورت بیشتر بودن dcountid جواب منفی بوده و Mod عمل نمیکند! برای این مشکل چه راه حلی پیشنهاد می‌فرمایید .
2- آدرس فانکشن ایجاد خطوط را میفرمایید !

alirezabahrami
شنبه 04 آبان 1392, 13:17 عصر
با تشکر مجدد
1- استاد گرامی بله این تعداد قابل تغییر است یا به صورت ورود کاربر یا به صورت درج در کد . ببینید مثلاً‌ اگر من در کد (‌مثلاً‌ همان txt1 ) را ثابت قرار دهم در زمان آپدیت جدول temp به همان تعداد سطر اضافه میکند و طبعاً در صورت بیشتر بودن dcountid جواب منفی بوده و Mod عمل نمیکند! برای این مشکل چه راه حلی پیشنهاد می‌فرمایید .
2- آدرس فانکشن ایجاد خطوط را میفرمایید !

سلام


راستش بنده در نمونه فوق متوجه ایراد عمده ائی که باعث عدم نتیجه در رسیدن به خواسته مورد نظرتان شود نشدم.



همانطور که در کدها مشهود است متغیرهای mod1و mod2نمایانگر اختلاف مقادیر وارده در txt1و txt2و تعداد رکوردهای واقعی در جدول اصلی می باشد و کاربرد حلقه for....next با توجه به مقادیر mod1و mod2صرفاً جهت ایجاد رکوردهای خالی ( به اندازه مقادیر باقیمانده) میباشد ؛ ووقتی مقادیر این دو متغیر منفی شود ( در حالت بیشتر بود ن رکوردهای جدول اصلی از مقادیر وارده در txt1و txt2) حلقه كاربرد ندارد .در واقع حلقه در حالت منفی بودن مقادیر متغیرهای mod1و mod2هیچ کاری را انجام نمیدهد و باید هم همینطور باشد . به عبارتی دیگر مادامی که تعداد رکوردهای مربوط به افراد حاضر و غایب جدول اصلی کمتر از مقادیر txt1و txt2 باشد حلقه معادل مقدار اختلاف(باقیمانده) رکورد خالی در جدول ایجاد می نماید و اگر این تعداد بیشتر شود هیچ رکورد خالي ای ایجاد نمیشود و در گزارش هم تعداد رکورد های واقعی افراد حاضر و غایب نمایش داده ميشود.



البته لازم است در نمونه فوق در رويداد AfterUpdate تكست 1 و تكست 2 يك كنترل خطا مبني بر اينكه مقدار اين دو تكست نبايد خالي باشد بكار رود.
و يا اينكه در رويداد Form_Load كد زير را اضافه نمود:


If Txt1 < DCountId1 Then
Txt1 = DCountId1
End If
If Txt2 < DCountId2 Then
Txt2 = DCountId2
End If
در رابطه با مورد دوم هم چشم ،شب در منزل يك نمونه آماده مي كنم
موفق باشيد

alirezabahrami
شنبه 04 آبان 1392, 17:57 عصر
با تشکر از لطف شما .
2- اگر بخواهیم ، تمام صفحه ، این سطور قرار گیرند کدام بخش از کدها باید تغییر کند ؟ توضیح اینکه مثل فاکتور فروش یک صفحه A4 سطرها طراحی شدند و فقط چند سطر پر میشوند
سلام
در خصوص این مورد نمونه ضمیمه را تهیه کردم ؛ انشاءالله مورد پسند واقع شود.
یاعلی

Profesorjd
شنبه 04 آبان 1392, 21:31 عصر
با سلام و تشکر مجدد :

راستش بنده در نمونه فوق متوجه ایراد عمده ائی که باعث عدم نتیجه در رسیدن به خواسته مورد نظرتان شود نشدم.

ببینید مثلاً‌ اگر من در کد (‌مثلاً‌ همان txt1 ) را ثابت قرار دهم در زمان آپدیت جدول temp به همان تعداد سطر اضافه میکند و طبعاً در صورت بیشتر بودن dcountid جواب منفی بوده و Mod عمل نمیکند!
بله نمونه شما هیچ ایرادی ندارد ولی من نمیخواهم که کاربر تعداد سطرها را وارد کند !! بنابراین باید یک عدد ثابت در کدنویسی قرار دهم تا همان تعداد سطر ایجاد شود . تا اینجا مشکلی نیست ولی اگر تعداد رکوردها بیشتر از عدد ثابت باشد کد اجرا نمیشود ( برنامه ارور میدهد) . خواسته بنده همین قسمت است که در حالتی که رکوردها کمتر از 15 بود ، 15 سطر ترسیم شود و اگر بیشتر از 15 بود براساس تعداد رکوردها ترسیم شود نمونه شما برای ترسیم سطور عالی بود ولی قسمت دوم سئوال اول بنده را پاسخ نداد

alirezabahrami
شنبه 04 آبان 1392, 22:08 عصر
:

ولی اگر تعداد رکوردها بیشتر از عدد ثابت باشد کد اجرا نمیشود ( برنامه ارور میدهد) .
سلام
فکر کنم با نمونه پیش بریم زودتر و بهتر به نتیجه میرسیم
نمونه ضمیمه همان نمونه قبلی است با این تفاوت که من تکست باکس ها را از فرم حذف کردم و بجای آنها مقدار 15 و 7 را در کد ها جایگزین کردم .
این در حالی است که تعداد رکوردها در جدول اصلی برای حاضرین 16 و برای افراد غایب 8 است ( تعداد رکوردها در هردو مورد بیشتر از اعداد ثابت میباشند)
می بینید که در جدول گزارش عیناً همین تعداد 16و 8 رکورد به نمایش در میآید.
حالا در حالت دیگر تعداد رکوردهای جدول برای حاضرین کم و زیاد کن و ببین چه نتیجه ای می گیری!
لطفاً اگر اروری رخ میدهد بفرمائید متن ارور چیست و کجای کد رخ میدهد.

یا علی