View Full Version : مشكل در ارسال اطلاعات به فرم گزارش كريستال ريپورت
rezankh
یک شنبه 13 مرداد 1392, 16:37 عصر
با سلام
يك فرم گزارش دارم كه مي بايست ركوردهاي تيبلم رو به فرم گزارش بفرسته ولي مشكل اينه كه بايد حداقل 300 شماره رو تو يك صفحه و اونم تو 10 ستون ايجاد كنم. حال 300 تا ليبل فرمول تو گزارشم گذاشتم و با كدنويسي شماره ها رو با توجه به شماره رديفش ميدم به شماره ليبل نظيرش در گزارش.
اما با يك مشكل مواجه شدم اونم تعريف شماره ليبل تو وبي هست.
فايل مثال رو پيوست كردم لطفا رو همين اصلاح فرماييد.
با تشكر.
m.4.r.m
یک شنبه 13 مرداد 1392, 16:52 عصر
یا ابر فرز :متعجب:
می خوای اطلاعات رو بفرستی به کرستال اون وقت 300 تا لیبل درست کردی ؟ میشه بگی واسه چی ؟ اگه فانع کننده توضیح بدی از دنیای برنامه نویسی خداحافظی می کنم
m.4.r.m
یک شنبه 13 مرداد 1392, 16:58 عصر
من سورس شما رو دیدم واقعا چیزی که تو برنامه نویسی تو عمرم ندیده بودم الان دیدم پسر واسه گزارش گیری به تعداد فیلد ها تکست باکس میزارن مثلا 4 تا بعد خود کريستال به تعداد رکورد های موجود در تیبل شما پر میشه و خودش صفحه بندی می کنه یعنی چی لطفا برای چاپ ابتدا شما صفحه را وارد کنید ؟
اصلا روش کار گزارش گیری رو بلدی ؟
تا حالا برنامه نویسی دیتابیس نوشتی ؟
نکنید این کار هارو از طریق اصول برنامه نویسی این کار رو بکنید اگه قرار بود شما به تعداد فیلد هاتون لیبل درست کنید چه احتیاجی به کد نویسی بود ؟ دستی می نوشتی تموم من جای تو باشم اول آموزش جامع ویژوال بیسیک و کريستال ریپورت رو یاد میگیرم بعد برنامه نویسی دیتابیس می کنم . می خواستم کمکت کنم در این زمینه کاش چیزی نمی نوشتی و درخواست کمک می کردی .... واقعا فاجعه است
rezankh
یک شنبه 13 مرداد 1392, 20:12 عصر
سلام
تصور مي كردم براتون سوال بشه چرا اينكارو كردم ولي نه اينقدر ديگه اينطور بهم حمله كنيد. بهر حال سعي ميكنم كامل براتون توضيح بدم كه چي ميخوام اگه تونستيد يك نمونه برام بزاريد. ببينيد من ميخوام تعداد زيادي شماره دام ( فيلد شماره دام در تيبل ) رو در يك صفحه چاپ بگيرم و نه در چند صفحه. بنابراين ميخوام زماني كه ستون 1 پر شد اطلاعات از ستون 2 شروع بشه و نيز اينكه چند نوع دام دارم. كه مثلا اگه 100 تاي اول از نوع 1 بودند بايد ستونهاي ابتدايي رو پر كنند و نوع 2 از ستون بعديش شروع بشه. خوب من در كريستال ريپورت نتونستم چيزي پيدا كنم كه وقتي ستون 1 پر شد بره ستون بعدي بلكه ميره صفحه بعد و من نميخوام اين اتفاق بيفته. حالا يا من روش اصولي اينكارو نمي دونم كه لطف كنيد راهنمايي كنيد و يا اگه ميشه مثالي بذاريد. و يا اينكه راهي وجود نداره (كه البته بايد بگه كه من گزارشهاي زيادي ديدم كه همچين چيزي نديدم) خوب تنها راهي كه به ذهنم رسيد همين بود كه اگه ميتونيد لطفا كمك كنيد. نه اينكه زود قضاوت كنيم و بجاي كمك كردن حمله كنيم. چراكه اگه بنده اينجا سوالي ميكنم حتما به كمك نياز دارم و به گفته شما بلد نيستم و اينجا هم جاي مطرح شدن مشكلات و سوالات هست.
باز هم با تشكر از نقدتان.
m.4.r.m
یک شنبه 13 مرداد 1392, 23:57 عصر
گزارش برای برنامه دامپروری هستش ؟
آخه چه لزومی هست این طوری گزارش گیری کنی آخه اینطوری نمیشه که مگر اینکه یک راه دیگه داری اونم اینکه از اکسل استفاده کنی اکسل رو فراخوانی کنی و داده ها رو تو اون ذخیره کنی گزارش گیر ها همچین کاری نمی تونن بکنن یعنی من تو عمرم همچین چیزی ندیدم میشه ها به علافیش نمی ارزه من یه آموزش در مورد کریستال ریپورت میدم ببین شاید تونستی کار کنی باهاش . بازم سعی می کنم تو کریستال ریپورت این قضیه رو برات حل کنم . اما اینی که شما می خوای بنویسی جوابگو نیست خیلی گیر میشه برات
m.4.r.m
دوشنبه 14 مرداد 1392, 00:02 صبح
در ضمن یه راه خیلی راحت تری هم داری استفاده از Vsflexgrid که کارتو راحت می کنه میای مثلا می خوای 300 اطلاعات رو در چهار ستون ذخیره کنی که ستون اول از 1 تا 50 رو ذخیره کن در ستون بعدی از 50 تا 100 و .... بعد Vsflexgrid رو درون یک تیبل temp ذخیره کن و این تیبل رو بفرست برای چاپ و سپس خالیش کن . این بهترین و معقول ترین راه هست نه گزارش گیری چون شما قبل از ارسال به گزارش باید کارهاتو انجام بدی و در اخر نتیجه رو از گزارش گیر خروجی بگیری .
Private Sub Command1_Click()
With VSFlexGrid1
.Rows = 1
For i = 1 To 50
.Rows = .Rows + 1
.TextMatrix(i, 1) = i
.TextMatrix(i, 2) = i + 50
Next i
End With
End Sub
m.4.r.m
دوشنبه 14 مرداد 1392, 00:12 صبح
اینم آموزش تصویری ارتباط ویژوال بیسیک به کریستال ریپورت
پارت اول : http://s3.picofile.com/file/7878196662/Crystal_part01.rar.html
پارت دوم : http://s1.picofile.com/file/7878579351/Crystal_part02.rar.html
پارت سوم : http://s2.picofile.com/file/7878599244/Crystal_part03.rar.html
rezankh
دوشنبه 14 مرداد 1392, 00:24 صبح
لزومش اينه كه فرمي كه بايد تحويل بديم همين طوري هست و صرفه جويي در مصرف كاغذ خيلي شرطه. از طرفي برنامه نويس قبلي براي مثال براي 300 عدد شماره، 10 برگ A4 رو گزارش ميكرد كه با توجه به هزينه بالاي كاغذ، براي من و كليه همكارام مطلوب نيست. ولي بهر حال تو روش خودم تو اين خط از كد مشكل دارم.
crRept.FormulaFields.GetItemByName("'" & Pi & "'").Text = Adodc6.Recordset.Fields("Plak")
نام فرمولهاي داخل گزارش P1 تا P300 هست. حال با توجه به شماره رديف هر ركورد ميخوام Pi مقدار گرفته و در كد بالا قرار بگيره ولي نميدونم كجاي كد مشكل داره كه نام فرمول رو خطا ميده. البته روش من مطمئنا استاندارد نيست ولي فعلا اين تنها روشي بود كه به ذهنم رسيد.
با تشكر از توجه شما.
rezankh
دوشنبه 14 مرداد 1392, 00:34 صبح
در ضمن یه راه خیلی راحت تری هم داری استفاده از Vsflexgrid که کارتو راحت می کنه میای مثلا می خوای 300 اطلاعات رو در چهار ستون ذخیره کنی که ستون اول از 1 تا 50 رو ذخیره کن در ستون بعدی از 50 تا 100 و .... بعد Vsflexgrid رو درون یک تیبل temp ذخیره کن و این تیبل رو بفرست برای چاپ و سپس خالیش کن . این بهترین و معقول ترین راه هست نه گزارش گیری چون شما قبل از ارسال به گزارش باید کارهاتو انجام بدی و در اخر نتیجه رو از گزارش گیر خروجی بگیری .
Private Sub Command1_Click()
With VSFlexGrid1
.Rows = 1
For i = 1 To 50
.Rows = .Rows + 1
.TextMatrix(i, 1) = i
.TextMatrix(i, 2) = i + 50
Next i
End With
End Sub
ميشه رو همين مثال خودم پيادش كني. البته شرمنده وقتت رو ميگيرم.
m.4.r.m
دوشنبه 14 مرداد 1392, 00:53 صبح
مثال شما معقول نیست عزیز همچین چیزی که شما می گی اخه جواب نمیده ببین حرف منو شما اصلا گوش نمی کنی گزارش گیر یک رابط خروجی است . شما اول میای خواسته هات رو تو برنامه نویسی پیاده می کنی بعد از اتمام می فرستی به چاپ . قبل از سطری که گذاشتی باید یه For بزاری از 1 تا Count اون pi ها سپس pi ها رو پر کنی pi شما آرایه ای است از شی Label یا هر چیز دیگه باید با for مقداری دهی کنی
rezankh
دوشنبه 14 مرداد 1392, 03:34 صبح
اون روشي كه با Vsflexgrid گفتيد رو روش كار ميكنم انشااله كه درست شه اين روش اگه بشه كه خيلي بهتره چون با يك دستور همه صفحات رو با هم به گزارشگر ميفرستم.
در مورد روش خودم هم درسته كه غير اصولي هست ولي Pi رو قبلش با حقه Do While not مقداردهي كردم. فقط كد آخري ("'" & Pi & "'") كه بايد Pi رو بعنوان يكي فرمولهاي گزارش شناسايي كنه يكمي مشكل داره كه اگه درست بشه، شمارهها رو تو گزارش ميگيره منتها صفحه به صفحه بايد دستور چاپ رو بدم.
ممنون.
rezankh
دوشنبه 14 مرداد 1392, 15:02 عصر
اینم آموزش تصویری ارتباط ویژوال بیسیک به کریستال ریپورت
پارت اول : http://s3.picofile.com/file/7878196662/Crystal_part01.rar.html
پارت دوم : http://s1.picofile.com/file/7878579351/Crystal_part02.rar.html
پارت سوم : http://s2.picofile.com/file/7878599244/Crystal_part03.rar.html
متاسفانه با بالاترين سرعت هم از 7 ك بالاتر نميره و آخرش دانلود نميشن.
m.4.r.m
دوشنبه 14 مرداد 1392, 15:54 عصر
این مشکل اینترنت اوضاعی شده به خدا پول مفت میدیم دایل آپ تحویل میگیریم . اشکال نداره شما pi ها رو به صورت عدد نوشتی ؟ یعنی نوع Plak در دیتابیس عدد تعریف شده یا رشته ؟ اگه عدد باشه ' ' ها رو در تعریف فرمول نویسی بردارید و تست کنید .
rezankh
دوشنبه 14 مرداد 1392, 20:16 عصر
خدا رو شكر بالاخره دانلود شدند كه دستتون درد نكنه. روش خودم هم درست شد. وليكن خيلي مشتاقم با روش شما و استفاده از Vsflexgrid كار كنم. منتها تو كار با هاش و كد شما مشكل دارم. اگه ميشه لطف كنيد و روي مثال خودم يك نمونه بذاريد ممنون ميشم.
vbhamed
پنج شنبه 17 مرداد 1392, 04:13 صبح
سلام
همونطور كه دوستمون گفتن استفاده از vsFlexGrid گزينه خوبي هست
يك راه ديگه هم داريد، يك جدول با چند تا فيلد به تعداد ستونهاي گزارش درست كنيد و ابتدا با توجه به تعداد سطري كه در A4 چاپ ميشه و قوانين خودتون اون جدول رو پر كنيد بعد بفرستيدش به كريستال
ضمنا اگر بتونيد از Fast Report استفاده كنيد گزارشات چند ستوني و بسياري امكانات ديگه رو پشتيباني ميكنه
من خودم با انواع گزارشگرها از جمله Access, Crystal Report, Active Report, Data Report و ... زياد كار كردم اما هيچكدومشون به گرد پاي Fast Report هم نميرسن
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.