View Full Version : سوال: حذف سطرهای خالی در گزارشات
aliakbarmoosa
پنج شنبه 07 دی 1391, 09:55 صبح
با سلام خدمت اساتید
من گزارشی درست کردم ودر این گزارش شرط گذاشتم با دستور(iif(x=100,name,0)و این شرط اجرا میشود اما مشکل اینجاست وقتی گزارش میگیرم اگر مقدار ایکس 100 نباشد صفر منظور میکند می خواستم ببینم من چه کار کنم که مقادیر صفر که منجر به سطر یا ردیف صفر میباشد حذف شده و جزءردیف نباشدیا به جای مقدار صفر در شرط اگر دستوری شبیه skip بود پرش میکرد ....
ممنون از راهنمایتان.97346
amir.azimi2000
پنج شنبه 07 دی 1391, 17:46 عصر
با سلام خدمت اساتید
من گزارشی درست کردم ودر این گزارش شرط گذاشتم با دستور(iif(x=100,name,0)و این شرط اجرا میشود اما مشکل اینجاست وقتی گزارش میگیرم اگر مقدار ایکس 100 نباشد صفر منظور میکند می خواستم ببینم من چه کار کنم که مقادیر صفر که منجر به سطر یا ردیف صفر میباشد حذف شده و جزءردیف نباشدیا به جای مقدار صفر در شرط اگر دستوری شبیه skip بود پرش میکرد ....
ممنون از راهنمایتان.97346
با سلام .
شما میتوانید در شرطی که گذاشتید - (iif(x=100,name,0) - به جای صفر از مقدار بلانک (خالی) استفاده کنید . سپس در پراپرتیز آبجکت و در سربرگ Print When چک باکس Remove Line If Blank را تیک بزنید .
موفق باشید .
aliakbarmoosa
یک شنبه 10 دی 1391, 09:01 صبح
با سلام حضور amir.azimi2000
تشکر ازاینکه مرا راهنمایی کردید من بجای صفر از دو گیومه "" استفاده کردم و remove را هم تیک زدم ولی متاسفانه باز همان شکل قبلی همچنان هست نمیدانم شاید نبایستی گیومه میزدم ؟
rezamim
چهارشنبه 13 دی 1391, 07:36 صبح
اگه ميتونيد اين كار رو از بيرون گزارش انجام بديد. يعني
REPORT FORM "list.frx" ALL FOR x=100 NOEJECT NOCONSOLE TO PRINTER prompt
amir.azimi2000
چهارشنبه 13 دی 1391, 23:03 عصر
با سلام مجدد خدمت دوستان گلم .
البته همانطور که دوستمون جناب rezamim فرمودند اینکار از بیرون گزارش امکان پذیر است ولی به دلیل اینکه پارامتر FOR یک دستور بهینه نشده است برای جداول با تعداد رکورد زیاد ، زمان زیادی طول میکشه تا کار انجام شود . لذا پیشنهاد من اینست که در صورت امکان :
ابتدا رکوردهایی که شامل شرط x=100 هستند حذف منطقی شوند و بعد از قرار دادن وضعیت Set Deleted در حالت On گزارش اجرا شود .
بعد از اجرای گزارش هم میتوان رکوردها را Recall کرد ، و به این ترتیب از استفاده از دستور For فرار کرد .
ولی صحیح ترین و اصولی ترین و پرسرعت ترین کار اینست که با دستور Select - Sql Command رکوردهایی که میخواهید چاپ شوند را انتخاب و سپس گزارش را اجرا کنید .
موفق باشید .
rezamim
یک شنبه 17 دی 1391, 13:38 عصر
اگرچه من هم استفاده از SQL رو پيشنهاد ميدم ( البته به شرطي كه صحيح استفاده بشه ) ولي در مورد FOR در Help نوشته كه :
Using Rushmore with Tables
Use Rushmore to optimize data access according to the number of tables involved.
When you access single tables, you can take advantage of Rushmore anywhere that a FOR clause appears.
When you access multiple tables, SELECT - SQL queries supersede all Rushmore optimizations.
In an SQL command, Visual FoxPro decides what is needed to optimize a query and does the work for you.
You don't need to open tables or indexes. If SQL decides it needs indexes, it creates temporary indexes for its own use.
To use Rushmore
Choose one of the following options:
To access data from a single table, use a FOR clause in a command such as AVERAGE, BROWSE, or LOCATE,
or use SQL commands to update tables. For a complete list of commands that use the FOR clause, refer to the table below.
-or-
To access data from more than one table, use the SELECT - SQL DELETE - SQL, and UPDATE - SQL commands.
The following table lists commands that use FOR clauses.
Rushmore is designed so that its speed is proportional to the number of records retrieved.
Potentially Optimizable Commands with FOR Clauses
كه يكي از دستورات عنوان شده Report هست.
حالا نميدونم شايد هم من درست متوجه مطلب نشده ام.
farhad_shiri_ex
شنبه 14 بهمن 1391, 19:30 عصر
اولا که مطمئن باشید با Remove line if blank می توانید سطر ها را حذف نمائید ولی باز هم موفق نشدید بهترین روش همانطوری که دوستان گفتند query .
من هم با نظر دوستمون که استفاده از For زیاد جالب نیست موافقم چون برای رکورد های بالا مشکل سازه ولی جز دستورات که با تکنولوژی RushMore بهینه شده اند هم هست.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.