PDA

View Full Version : سوال: ثبت فیلدهای مربوط به فاکتور فروش دریک Table اسکیوال



ENG_COM1979
دوشنبه 10 تیر 1387, 09:51 صبح
ثبت فیلدهای مربوط به فاکتور فروش دریک Table اسکیوال.
من یه فاکتور دارم که چندین فیلد داره از جمله نام مشتری و شماره فاکتورو ردیف و نام کالا و تعداد و قیمت فی و قیمت کل که در هر بار ثبت نام مشتری و شماره فاکتوز ثابت است اما ممکن است چندین ردیف با نام کالا و تعداد و قیمت و... داشته باشم. با دلفی 7 برنامه رو نوشتم . برای ثبت فیلدها هم اغلب از دی بی ادیت استفاده کردم . راهی که به ذهن خودم میر سه اینه که هربار که کاربر دکمه ایجاد فاکتور رو می زنه factquery.insert انجام میشه با ثبت هر ردیف از فاکتور دکمه ای قرار بدم که بپرسه آیا می خواید ردیف جدیدی اضافه کنید؟ اگه کاربر جواب مثبت داد رکورد قبلی post بشه و مجدد insert بشه و محتوای قبلی dbedit نام مشتری و شماره فاکتور در edit قرار بگیره و در زمان insert در dbedit بشینه که کاربر نیاز به تایپ اطلاعات تکرای نباشه. اگه کاربر به سوال پیغام منفی داد. فاکتور post بشه . اما به نظرم احتمال داره راه بهتری وجود داشه باشه.به نظر شما از چه ابزاری و از چه کدی استفاده کنم؟

delphiprog3000
دوشنبه 10 تیر 1387, 10:24 صبح
با سلام.

دوست عزیزم شما از نظر طراحی دیتابیس مشکلی که ندارید؟

فقط در نحوه اجرا و پیاده سازی کدها مشکل دارید؟

فیلدها و رکوردهای جدولتان را طراحی و پیاده سازی کرده اید؟

ENG_COM1979
دوشنبه 10 تیر 1387, 10:34 صبح
سلام
بله تمام جداول و فیلدها رو معرفی کردم و تمام فیلدهای فاکتور از جمله شماره فاکتور و نام مشتری و بقیه آیتم ها رو دری جدول معرفی کردم.

delphiprog3000
دوشنبه 10 تیر 1387, 10:55 صبح
خب در کجا مشکل دارید تا راهنمایی کنم عزیز؟

ENG_COM1979
دوشنبه 10 تیر 1387, 12:33 عصر
یه فرم دارم که توی اون شماره فاکتور و نام مشتری و نوع فعالیت درخواستی قیمت فی قیمت کل نوع فعالیت و نوع مشتری با dbedit , dbcombobox به جدول tbl_fact متصل میشه. یه دکمه ایجاد و یه دکمه ثبت داریم. با فشردن دکمه ایجاد کاربر اطلاعات رو در دی بی ها تایپ می کنه و با فشردن دکمه ثبت اطلاعات به بانک اضافه می شو د. حال اگه یک مشتری چندین درخواست داشت. کاربر مجبور است به ازای ثبت هر درخواست نام مشتری و شماره فاکتور قبلی را وارد کنه که این کار به نظرم جالب نمیاد و مورد پسند کاربر نیست. می خواستم بدونم شما راهی به ذهنتون می رسه که از این دوباره کاری جلوگیری بشه؟یعنی کاربر یکبار نام مشتری و شماره فاکتور رو وارد کنه و چندین فعالیت نیز وارد بشه و در نهایت تمام فعالیت های وارد شده با همان نام مشتری و شماره فاکتور به ثبت برسن.تونستم منظورم رو برسونم؟

ENG_COM1979
دوشنبه 10 تیر 1387, 12:37 عصر
یه راهی الا ن خودم به ذهنم رسید. یه دکمه می ذارم به عنوان درخواست جدید یه دکمه می زارم بعنوان فاکتور جدید
برای هر فعالیت دکمه ثبت فعالیت و برای ثبت فاکتور دکمه ثبت فاکتور.:گیج:

ENG_COM1979
دوشنبه 10 تیر 1387, 12:43 عصر
جناب Delghpiprog3000 از توجه شما سپاسگزارم و از اینکه وقت گذاشتید واسه سوال من. ممنونم. اما اگه شما راه بهتری به ذهنتون میرسه ممنون می شم راهنمایی بفرمایید.

Hsimple11
دوشنبه 10 تیر 1387, 14:02 عصر
با سلام.

اگر میخواهید تنها قسمت خاصی از فرمتان را تغییر دهید در هر بار ثبت اطلاعات فیلدهای خود را Clear نکنید. و فقط مثلا همان نام کالا و ... را پاک کنید و قسمت نام مشتری و شماره فاکتور را باقی بگذارید و در صورت نیاز میتوانید آنها را با یک دکمه انتخابی پاک کنید. امیدوارم منظورتان همین باشد.

موفق باشید...

delphiprog3000
دوشنبه 10 تیر 1387, 18:23 عصر
با سلام.
اینجور که برداشت کردم فکر میکنم منظور شما اینه که میخواهید چند فعالیت رو به یک مشتری اختصاص بدید؟

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

و یا اینکه شما مقداری که چندین بار انتخاب میشود را در آرایه ها و یا متغییرها بریزید و سپس در دیتابیس ذخیره نمایید.و شماره فاکتور و شماره مشتری تغییری نکند.

امیدوارم منظور شما رو درست فهمیده باشم.

موفق باشید..............

babak_delphi
دوشنبه 10 تیر 1387, 18:50 عصر
این طور کا از گفته هاتون برداشت کردم شما تمام اطلاعات فاکتور رو در یک جدول ذخیره میکنید که اگر اینطور باشه صحیح نیست
ضمنا اگر برای ورود اقلام کالا در فاکتور ، از DBEdit استفاده کرده اید باید بگم که این هم صحیح نیست
اطلاعات دقیق در مورد نحوه طراحی جداول و نحوهء ورود اطلاعاتتون بدین تا بگم که باید چکاری انجام بدید.
موفق باشید.

AFTABGARDAN2006
سه شنبه 11 تیر 1387, 15:09 عصر
برای ثبت اطلاعات سربرگ فاکتور بهتره یک بانک و برای اقلام موجود در فاکتور یک بانک دیگر طراحی نمایید که با یک فیلد به هم ارتباط داشته باشند

ENG_COM1979
چهارشنبه 12 تیر 1387, 09:04 صبح
ممنون ازشماhsimple11 اما قصدم اینه که درصورت امکان از دکمه های کمتری زمان ثبت استفاده کنم که کاربر راحت بتونه استفاده کنه.
Delphiprog3000 با سپاس از شما . اگه بخوام از Dbgrid استفاده کنم به ازای هر فعالیت می بایست شماره فاکتور و نام مشتری وارد بشه که ممکنه از حوصله کاربر خارج باشه
اما فکر کنم از آرایه ها و متغیرها استفاده کنم بهتره اما تا الان از آرایه ها استفاده نکرده ام.
Babakdelphi ممنونم. خودم هم همین احساس رو دارم که نباید تمام اطلاعات رو در یک جدول ذخیره می کردم اما نتونستم تفکیکشون کنم و کلید خارجی رو انتخاب کنم. اطلاعات رو براتون می فرستم.

ENG_COM1979
چهارشنبه 12 تیر 1387, 09:08 صبح
aftabgardan2006 حق باشماست فکر کنم بهترین راه این باشه. ممنوننم

delphiprog3000
چهارشنبه 12 تیر 1387, 09:15 صبح
با سلام.
دوست من از راههای که ذکر شد میتوانی شروع به کار کنی. در صورت بروز مشکل بازهم دوستان رو در جریان بزاری .

موفق باشید....................

babak_delphi
چهارشنبه 12 تیر 1387, 19:25 عصر
AFTABGARDAN2006 ، فکر کنم منظور شما از بانک ، همون جدول باشه
راه اصولی برای طراحی جداول مربوط به فاکتور اینه که برای فاکتور از 2 جدول استفاده کنید (بصورت Master / Detail)
به این صورت که در یک جدول اطلاعات کلّی یا سربرگ فاکتور را ذخیره کنید مانند کد شماره فاکتور ، مشتری ، تاریخ ، جمع مبلغ قابل پرداخت ، جمع تخفیف و ...
در جدول دیگه هم جزئیات فاکتور یا همان کالاهای فاکتور را ذخیره کنید مانند شماره ردیف ، کد کالا ، تعداد ، فی و ... و شماره فاکتور که این دو جدول از طریق فیلد شماره فاکتور به هم وصل می شوند (Relationship)
برای ورود اطلاعات هم یا از Stringgrid استفاده کنید که قبلا در یک تاپیک مزایای این کار رو توضیح داده بودم (میتونید جستجو کنید) و یا اینکه از DBGrid استفاده کنید و برای اینکه اون مشکل Post شدن در هربار رفتن به رکورد بعدی پیش نیاد ، خصوصیت Lock type مربوط به ADOQuery را روی ltBatchOptimistic تنظیم کنید.

delphiprog3000
چهارشنبه 12 تیر 1387, 19:48 عصر
با سلام . با نظر شما موافقم بابک عزیز.

ولی اگه از خاصیت lock type کوری استفاده کنیم. نیازی به جدا کردن جداول از هم نباشه.

میشه با هم وارد کرد. به این صورت که هر بار هنگام ورود به دیبیگرید مقادیر ثبت شود و سپس به دیتابیس ارسال شود.

یعنی هر بار به سطر دیبیگرید اضافه شود و سپس به دیتابیس .

SYNDROME
چهارشنبه 12 تیر 1387, 20:41 عصر
به نظر من باید برای قسمتهای خرید ، فروش و . . . دو تا جدول Head و Detail طراحی کنید و به وسیله یک فیلد Kind نوع آن را مشخص کنید تا در زمان گرفتن موجودی مشکل پایین آمدن سرعت را نداشته باشید.
موفق باشید