PDA

View Full Version : نظر شما در مورد ایجاد فاکتور



rezamim
یک شنبه 20 خرداد 1386, 10:25 صبح
سلام به همه دوستان
من تابحال تعداد زیادی برنامه نوشتم که در اونها چاپ فاکتور هم وجود داشته . ولی هیچکدوم اون چیزی که میخواستم نبوده و در واقع یه جور ماست مالیشون کردم. ولی حالا لازم دارم که یه چیز خوب طراحی کنم.
مشکلات رو میگم اگر دوستان میتونن راهنمایی کنن.





قسمت هدر و فوتر که مشکلی نیست. مشکل در ردیفها و آخرین ردیف ( یعنی ردیف جمع ) مخصوصا نحوه قرارگیری دقیق اون در چاپگرهای مختلف هست.
1 - فاکتور ما باید تا آخر خط کشی شده باشه.
2 - عنوان کالا که در ستون شرح درج میشه باید کامل باشه. یعنی اگر عنوان بزرگتر از ستون هست باید Stretch with overflow بشه.

حالا اگر ما بیایم یه کرسر درست کنیم و بگیم دو تا ردیف ( مبلمان و میز ) رو داریم ، بیا 10 رکورد خالی دیگه ایجاد کن، از کجا معلوم که یکی از عنوان های ما بزرگ نباشه و هر عنوان دو تا خط رو به خودش اختصاص نده ؟ اگر اینجوری بشه ==> واویلا واویلا !:اشتباه:
فاکتور دو صفحه ای میشه و بد و بیراه ها ارسال میشه.
نمیشه هم بگیم طول عنوان ها رو حساب کنیم اگر از یه حدی بزرگتر بود مثلا دو تا خط در نظر بگیریم. چون فونت ما فارسی هستو دوباره واویلا واویلا !

حتی اگر اندازه ردیفها رو ثابت بگیریم و مقدار اضافه عنوانها رو ببریم ( کوتاه کنیم ) من دیدم که مثلا اگر گزارشتونو با تعریف چاپگر سوزنی درست کنید ، از لحاظ بلندی ردیفها ، و مثلا فاکتور رو روی چاپگر لیزری چاپ کنید در حد چند میلیمتر خرابی به بار میاد.

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

mehran_337
یک شنبه 20 خرداد 1386, 17:30 عصر
من در ابتدای برنامه یک پیش فرضی در نظر می گیرم مثلا 12 خط .
حالا 12 رکورد رو به طور کامل پر می کنم . یعنی اگه شرح کالا 30 کارکتر باشه هر رکوردی رو با 30 کارکتر پر می کنم و در گزارش تنظیم می کنم . چون حداکثر را در نظر گرفتیم مشکلی نیست.

kia1349
دوشنبه 21 خرداد 1386, 07:25 صبح
من هنوز نفهمیدم که شما چی میخواهید
اگر برنامه برای ایجاد فاکتور و چاپ میخواهید میشه نمونه اش رو درست کرد و اینجا گذاشت

rezamim
دوشنبه 21 خرداد 1386, 08:54 صبح
من هنوز نفهمیدم که شما چی میخواهید
اگر برنامه برای ایجاد فاکتور و چاپ میخواهید میشه نمونه اش رو درست کرد و اینجا گذاشت

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

rezamim
دوشنبه 21 خرداد 1386, 08:57 صبح
من در ابتدای برنامه یک پیش فرضی در نظر می گیرم مثلا 12 خط .
حالا 12 رکورد رو به طور کامل پر می کنم . یعنی اگه شرح کالا 30 کارکتر باشه هر رکوردی رو با 30 کارکتر پر می کنم و در گزارش تنظیم می کنم . چون حداکثر را در نظر گرفتیم مشکلی نیست.

:گیج:
نفهمیدم چی شد! میشه واضحتر بگید.

ali51prog
دوشنبه 21 خرداد 1386, 09:55 صبح
ماشا الل.. عنوان کالاتون توی فاکتور خیلی طولانیه ( برای پرینترهای فروشگاهی تغذیه رول)

من معمولا تا 30-40 کارکتر برای عنوان کالا جا میزارم و لزومی نمیبینم که عنوان کالا رو کامل بیارم البته به کاربر میگم که تو تعاریف کدینگ کالا برای عنوان کالا از کلیدی ترین و منحصربه فرد ترین واژه بعد از عنوان اصلی استفاده کنه تا تو با مشاهده فاکتور بتوان به کالای مورد نظر اشاره کرد

kia1349
دوشنبه 21 خرداد 1386, 10:13 صبح
جناب معمار منظور شما اینه که :
اگر یه سطری به واسطه طولانی بودن overflow شد ادامه ریپورت به صفحه بعد منتقل بشود و در صورت خالی بودن ردیف های بعدی یک سطر از آخر حذف کنه
بطور مثال اگر فقط فیلد سوم overflow شد و تنها مثلا 10 سطر پر هم داشته باشیم باید بواسطه دو ردیفه شدن سطر سوم گزارش شما از 22 سطر به 21 سطر و 21 ردیف کاهش پیدا کند؟

rezamim
دوشنبه 21 خرداد 1386, 17:21 عصر
جناب معمار منظور شما اینه که :
اگر یه سطری به واسطه طولانی بودن overflow شد ادامه ریپورت به صفحه بعد منتقل بشود و در صورت خالی بودن ردیف های بعدی یک سطر از آخر حذف کنه
بطور مثال اگر فقط فیلد سوم overflow شد و تنها مثلا 10 سطر پر هم داشته باشیم باید بواسطه دو ردیفه شدن سطر سوم گزارش شما از 22 سطر به 21 سطر و 21 ردیف کاهش پیدا کند؟

دقیقا"
همونطور که گفتم من که نمیتونم بفهمم چند تا از ردیفها overflow میشه. بنابراین نمیتونم هم بگم چند تا رکورد خالی اضافه کنم تا یک صفحه تکمیل بشه.


در پاسخ به دوست عزیز ali51 هم بگم که این یک مثال بود. با قابلیتی که در برنامه ام گذاشتم ، کاربر میتونه کالاهاشو در یک تا چهار سطح تعریف کنه. بله برای یک سوپری بهتره که در یک یا حداکثر دو سطح تعریف کنه ولی من مشتریهایی دارم که مجبورا ( خودشون ترجیح میدن ) که در سه یا چهار سطح کالاهاشونو تعریف کنن.

kia1349
سه شنبه 22 خرداد 1386, 10:22 صبح
فکر کنم راهش این باشه که از روی دیتابیس اصلی با دستور select یک کرسر درست بشه با یک فیلد اضافه مثلا بنام radif
این فیلد باید با یک فانکشن که شرح کالا رو به عنوان پارامتر دریافت میکنه و تعداد کارکترهای اونو میشمره پر بشه
یعنی اگر تعداد کارکتر شرح کالا بین 1 تا 20 بود عدد 1 و اگر بین 21 تا 40 بود عدد 2 و اگر بین 41 تا 60 بود عدد 3 و .... رو به فیلد radif بفرسته
حالا باید در گزارشمون یه محاسبه روی این فیلد radif بکنیم و اعداد داخل اون رو جمع بزنیم و اگر این عدد مثلا از 22 بزرگتر شد ادامه ریپورت به صفحه بعد بره
امیدوارم تونسته باشم منظورم رو بفهمونم
البته این یه نظر بود که فی البداهه به ذهنم رسید و صد البته با نظر سایر دوستان و اساتید محترم میشه بهترش کرد

binyaz2003
سه شنبه 22 خرداد 1386, 14:04 عصر
به نظر من بدست آوردن طول رشته راحت تره میتونید فونتی رو که در چاپ استفاده میکنید به _screen بدهید و بعد با استفاده از _screen.textwidth("yourtext") اندازه طول دقیق اون رو بدست بیاورید حالا یکی ، دو پیکسل هم رزرو کنید و بعد بر اساس تعداد ردیفهای بدست اومده رکوردهای زیادی را وارد کنید.

rezamim
چهارشنبه 23 خرداد 1386, 07:05 صبح
ممنون از نظرات دوستان جناب کیا و بینیاز
من هم در مورد اندازه گیری طول رشته فکر کرده بودم. ولی نمیدونم این روش بخصوص در مورد فونتهای فارسی چقدر جواب میده. چون کمی که تست کردم دیدم خیلی دقیق نیست متاسفانه. فقط در مورد فونتهای انگلیسی خوب جواب میده. ولی به نظر میرسه راه دیگه ای نیست.
باز هم ممنون از راهنمایی دوستان
باز هم تلاشی میکنم ببینم میشه کاری کرد.

rezamim
چهارشنبه 23 خرداد 1386, 07:43 صبح
اگر راهنمای فاکس رو نگاه کنید ، در مورد تابع TxtWidth نوشته:
TXTWIDTH( ) returns the number of characters a character expression cExpression occupies, based on the average character width of a specified font (the average character width of a font is called a foxel). Use FONTMETRIC(6) to determine the average character width of a font.
فکر کنم یعنی اینکه اندازه رشته رو بر اساس میانگین اندازه کراکترهای فونت انتخاب شده برمیگردونه. و گفته که میانگین عرض کراکترها رو میشه با تابع FontMetric(6) بدست آورد. ولی من که متوجه نمیشم این اعداد بر چه اساسی هستند و خلاصه چه جوریه که اینجوریه.
این دو تا دستور رو امتحان کنید:


?FONTMETRIC(6,'Courier ',24)
?TXTWIDTH('Hello!','Courier ',24)

rezamim
چهارشنبه 23 خرداد 1386, 08:21 صبح
به نظر من بدست آوردن طول رشته راحت تره میتونید فونتی رو که در چاپ استفاده میکنید به _screen بدهید و بعد با استفاده از _screen.textwidth("yourtext") اندازه طول دقیق اون رو بدست بیاورید حالا یکی ، دو پیکسل هم رزرو کنید و بعد بر اساس تعداد ردیفهای بدست اومده رکوردهای زیادی را وارد کنید.

جناب حسینی
یه نگاه به نتیجه فایل زیر بیاندازید. آدم شاخ در میاره. با اینکه من یه کاراکتر به آخر اضافه کردم ولی 2 پیکسل کمتر شده !:گیج: :متفکر: :عصبانی++: :افسرده: :گریه:
و در آخر دیونه که شدم = :لبخند:

binyaz2003
چهارشنبه 23 خرداد 1386, 23:22 عصر
این کاملا طبیعی است.چرا؟
شما یک الف اضافه کردید به آخر جمله و آخرین حرفتون ن هست که میشه نا و این طولش کمتراز ن هست میتونید با یکبار چاپ کردن این دورشته زیر هم متوجه این موضوع بشید.

rezamim
پنج شنبه 24 خرداد 1386, 07:00 صبح
متوجه هستم عزیز.
این توی فارسی شاید طبیعی هست! مثل اینکه بگید به آخر رشته یک حرف اضافه شده ولی طول رشته دو تا کم شده !!!!!!
بنابراین شاید این روش هم خیلی درست جواب نده. درسته ؟

rezaTavak
پنج شنبه 24 خرداد 1386, 07:50 صبح
یکسری فونتها هستند که مانند داس طراحی شده اند و طول و عرض ثابت دارند. فکر کنم IranSystem یکی از اونها باشه. یا یه فونت اسمش نوید بود. البته من اینها را ندارم


یا اینکه خودتون یکی بسازید که طول و عرضش یکی باشه

binyaz2003
پنج شنبه 24 خرداد 1386, 11:31 صبح
اگر راه حل مطمئن تری پیدا کردید ما روهم بیخبر نزارید

rezamim
پنج شنبه 24 خرداد 1386, 14:38 عصر
یکسری فونتها هستند که مانند داس طراحی شده اند و طول و عرض ثابت دارند. فکر کنم IranSystem یکی از اونها باشه. یا یه فونت اسمش نوید بود. البته من اینها را ندارم


یا اینکه خودتون یکی بسازید که طول و عرضش یکی باشه

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

rezaTavak
شنبه 26 خرداد 1386, 08:34 صبح
دلیلش اینه که فونت نقطه ای است نه برداری.

rezamim
یک شنبه 27 خرداد 1386, 09:27 صبح
یه سئوال دیگه میکنم بعد نتیجه رو میگم.
طبق چیزی که قبلا دیدم :
ما فاکتورمون رو مثلا با چاپگر سوزنی LQ-300 طراحی میکنیم ( کاری که من میکنم )
فرضا برای 14 ردیف اونو تنظیم میکنیم. حالا ردیف آخر قراره جـمـع بحروف و جمع عددی باشه. ردیفهای بعدی هم تخفیف ، عوارض و ...
حالا اگه این چند ردیف آخر رو توی Page Footer بزاریم ، و همه چیزو تنظیم کنیم که ردیفهای آخر درست به آخرین ردیف فاکتور وصل بشه ، وقتی اونو با چاپگر لیزری چاپ کنیم میبینید که حدود 1 میلیمتر یا بیشتر یا کمتر بین قسمت Detail و PageFooter فاصله میافته . که این بدلیل حاشیه چاپ در این دو چاپگر هست.
حالا چکار کنیم ؟ با Group footer هم بنظر نمیشه . چون این قسمت فقط در آخرین برگ چاپ میشه.

میترسم آخر مجبور بشم کاری کنم که اصلا خوشم نمیاد!