PDA

View Full Version : ورود اطلاعات جدید جهت ثبت مقدارها در داروخانه که تاریخ ها با هم همخوانی ندارد



RIG000
چهارشنبه 04 آبان 1390, 10:07 صبح
با سلام .
راستش من یه جدول دارم که مقدار های رو در و ثبت میکنم و کد کالا دارم و اطلاعات رو توش ثبت میکنم و مثلا فیلد هام کد کالا . نام و تاریخ ورود . حالا یک ماه گدشته دوباره همون کالا رو دوباره خریدیم میخایم ثبت کنیم همون کد رو بهش میدم که واسه همین دارو ثبت کرده بودیم . حالا 10 از اون دارو ها مونده بود تو جدولمون 100 تا هم خریدیم میخایم اضافه کنیم. حالا 10 تای قبلی واسه تاریخ 1 ماه قبل هست اما این 100 تا واسه الانه ما اگه ویرایش کنیم تاریخ رو 10 تا به تاریخ الان ثبت میشه یعنی 110 تا در این تاریخ داریم.؟!!! من نمیدونم باید ثبت کنم یا ویرایش . ویرایش که این مشکل رو داره ثبت هم که یه دارو با دو تا کد باید باشه !!!! کدمون pk هست . ممنون میشم راهنمایی کنید

wolf_majid
چهارشنبه 04 آبان 1390, 10:25 صبح
من هم همین مشکل رو دارم

asif1358
چهارشنبه 04 آبان 1390, 10:47 صبح
سلام
طبیعی است که طراحی جدول ایراد دارد؛ کد کالا را که نمی توان PK جدول گذاشت (مخصوصا اگر Identity باشد). باید یک فیلد دیگر برای کد کالا در نظر بگیرید

RIG000
چهارشنبه 04 آبان 1390, 10:53 صبح
میشه بیشتر توضیح بدی دوست عزیز ؟

RIG000
چهارشنبه 04 آبان 1390, 11:30 صبح
شما منظورت اینهکه ما یک سطر id داشته باشیم که pk باشه حالا autonumber باشه یا نباشه مهم نیست . اینجوری ما 10 تا ردیف داریم که 3 تاش کد کالایی به شمار 1850 نام دارو استامیفون و تاریخ ورود کالا و تاریخ انقضا ثبت شده .
مثلا؟
id codekala name datenew dateengheza
20/2/90 14/2/90 استا 1850 1
17/3/90 23/2/90 استا 1850 2
20/5/90 1/4/90 استا 1850 3
و .....
حالا ما بخایم اینجوری ثبت کنیم id ما pk میشه و کد کالا pk نیست .!!
اینجوری میتونیم چندین تا ثبت کنیم. ایا بهینه هست اینکاری که میکنیم تو بانک ؟ اصلا روش درستی هست؟

asif1358
چهارشنبه 04 آبان 1390, 12:15 عصر
سلام
خیر، این کار طبق قاعده سوم قواعد نرمال سازی بهینه نیست. به نظرم بهتر است عناوین (نام) داروها در یک جدول باشد و آیتم هایی که بعدا به فروشگاه اضافه میشند در یک جدول دیگر و ارتباط یک به چند میانشان ایجاد بشه. در این صورت البته میشه همان PK را کد کالا در نظر گرفت

wolf_majid
چهارشنبه 04 آبان 1390, 14:37 عصر
بازم فرقی نمی کنه
فرض کن ما توی یک جدول دیگه 10 تا آموکسی سیلین داریم که تاریخ انقضاش یک ماهه دیگست
امروز 100 تا دیگه وارد انبار می کنیم که تاریخ انقضاشون یکسال دیگست ( این ها را چه کار میشه کرد ؟ )

cherchil_hra
چهارشنبه 04 آبان 1390, 18:46 عصر
شما منظورت اینهکه ما یک سطر id داشته باشیم که pk باشه حالا autonumber باشه یا نباشه مهم نیست . اینجوری ما 10 تا ردیف داریم که 3 تاش کد کالایی به شمار 1850 نام دارو استامیفون و تاریخ ورود کالا و تاریخ انقضا ثبت شده .
مثلا؟
id codekala name datenew dateengheza
20/2/90 14/2/90 استا 1850 1
17/3/90 23/2/90 استا 1850 2
20/5/90 1/4/90 استا 1850 3
و .....
حالا ما بخایم اینجوری ثبت کنیم id ما pk میشه و کد کالا pk نیست .!!
اینجوری میتونیم چندین تا ثبت کنیم. ایا بهینه هست اینکاری که میکنیم تو بانک ؟ اصلا روش درستی هست؟

روش درستش همینه که نوشتی. باید بتونی n تا ثبت کنی.
اینجوری شما یه گزارش درست حسابی می تونی از انبارت داشته باشی که کدوم داروهات کی وارد شدند، با چه قیمتی، از کدوم شرکت ....
موجودی هم بخوای بگیری یه جمع رو ستونت می زنی

یک جدول مشخصات دارو داشته باش، یه جدول انبار، یه جدول فروش ...
کلا وقتی می خوای جدول درست کنی هرچیزی رو سرجای خودش بذار!:لبخند:

cherchil_hra
چهارشنبه 04 آبان 1390, 18:52 عصر
بازم فرقی نمی کنه
فرض کن ما توی یک جدول دیگه 10 تا آموکسی سیلین داریم که تاریخ انقضاش یک ماهه دیگست
امروز 100 تا دیگه وارد انبار می کنیم که تاریخ انقضاشون یکسال دیگست ( این ها را چه کار میشه کرد ؟ )

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

asif1358
چهارشنبه 04 آبان 1390, 19:00 عصر
بازم فرقی نمی کنه
فرض کن ما توی یک جدول دیگه 10 تا آموکسی سیلین داریم که تاریخ انقضاش یک ماهه دیگست
امروز 100 تا دیگه وارد انبار می کنیم که تاریخ انقضاشون یکسال دیگست ( این ها را چه کار میشه کرد ؟ )

خوب معلومه دیگه؛ اینا رو تو جدول دوم ثبت می کنی. جدول اول فقط نام (نوع) کالا را نگه می دارد. اما هر بار که اجناس جدید می رسد باید جدا گانه وارد برنامه بشه

wolf_majid
چهارشنبه 04 آبان 1390, 19:02 عصر
سیستم می تونه یه اخطار بده که تعداد n تا از این دارو تاریخ گذشته است (وقتی سیستم لود میشه، وقتی که دارو فروش میره ....)
ما بقیش با نسخه پیچ که تاریخ انقضا رو نگاه کنه

متوجه منظور من نشدید
ببینید ما توی انبار 10 تا آسپرین با تاریخ انقضای سال دیگه , 100 تا دیگه با تاریخ انقضای 2 سال دیگه داریم
موضوع اخطار نیست
موضوع اینه که ما نمی دونیم داروی با کدوم تاریخ انقضا داره فروش می ره
اگر کالا ها یک کد داشته باشند موقع ورود داروی جدید تاریخ انقضای قبلی از بین میره
و ... که حالا یادم نیست


خوب معلومه دیگه؛ اینا رو تو جدول دوم ثبت می کنی. جدول اول فقط نام (نوع) کالا را نگه می دارد. اما هر بار که اجناس جدید می رسد باید جدا گانه وارد برنامه بشه
نام کالا را توی یک جدول دیگه ثبت کنیم تاریخ انقضا را چکار کنیم ؟

RIG000
چهارشنبه 04 آبان 1390, 23:20 عصر
دوست عزیز wolf هم میدونه الان چقدر من گیج این موضوع شدم. دقیقا" چیزی رو میگه که منم باهاش هم عقیدم. کلا مشکلاتمون یکیه . اگه بشه از دوستان یه نمونه بذاره واسه این بخش از سوالاته ما که بدونیم کار درست چیه.
الان ما باید چه جوری ریلشن ها شو در بیاریم؟ من گیر ریلیشن هامونه. یعنی نمی تونم که چه جوری این دو جدولی که نقل قول ردین که درسته . همونی که مثال زده بودم . باه هم ریلشن بشن. میشه این دو جدول هارو با جدول فروش و یا هر جدول جدیدی که مربوط به این دو جدول هست رو نمونه بدید با ریلشن هاش . اگه میشه از کمکتون خوداری نکید که شدیدا" درگیرشم. ممنونم

RIG000
پنج شنبه 05 آبان 1390, 00:49 صبح
جدول اسم دارو شامل نام و کد داردو است که ری لیشن میخوره به جدول دوم ما که بعدن اطلاعاتی چون تاریخ ورود . تار یخ انقضا و قیمت و ... رو وارد کردیم . در جدول اولی کد کالا pk هست کلید اصلی و در جدول دوم هم ما fildi همچون کد کالا داریم که pk نیست . اما باز ما رو ثبت قیمت و تاریخ انقضا مشکل داریم .؟!!!! شما میگین ثبت جدید در جدول دوم صورت بگیره یعنی این fild ها در جدول دوم به کار بره اما باز ما چه شکلی بدونیم موقع فروش مثلا استامینفون رو انتخاب کنیم از کجا بدونیم کدوم دارو رو و باه چه قیمتی میفروشیم چون استامینفون با قیمت های مختلف در بازه های زمانی مختلف ثبت شده!! حالا چیکار کنیم. اقای wolf هم اینو اشاره کردن.

cherchil_hra
پنج شنبه 05 آبان 1390, 13:42 عصر
برای حفظ یکپارچگی داده ها، هرچیزی رو میذاریم سرجاش!

جدول دارو : کد دارو، نام دارو، قیمت پایه
جدول انبار: کد انبار، کد دارو، تاریخ ورود، شماره فاکتور، تعداد، قیمت خرید، تاریخ انقضا، کد شرکت
جدول شرکت: کد شرکت، نام شرکت
جدول فروش: کد کاربر، کد دارو، تعداد، قیمت فروش رفته
جدول کاربر: کد کاربر، نام کاربری، کلمه عبور، نام، نام خانوادگی ...

اگه یک جدول استفاده کنی:
اسم یه دارو رو اشتباه زده باشی باید توی کل جدولت بگردی n تا رو تغییر بدی
ممکن موقع ورود، اسم یه دارو رو دو جور مختلف بزنی
موقع نمایش داروهات باید کل جدولت رو با حذف نام های تکراری انتخاب کنی و ...

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

اینجوری شما هم قیمت خریدت رو داری و هم قیمت فروشت رو.
شما میگی استامینوفن رو 1000 خریدی 6 ماه بعد خریدی 1200 حالا توی انبارت هم قدیم داری هم جدید. شما استامینوفنت رو باید به قیمت روز بفروشی یعنی قیمت پیش فرضت رو می کنی مثلا 1400 ، نه اینکه اونی که قدیم خریدی ارزونتر بدی و اونی که گرونتر خریدی رو بیشتر بفروشی. تورم دیگه.

موفق باشی

sobaisobai
پنج شنبه 05 آبان 1390, 13:49 عصر
سلام
بحث سر قیمت نیست دوست عزیز
سره تاریخ داروهاست

RIG000
پنج شنبه 05 آبان 1390, 16:20 عصر
جدول انبار: کد انبار، کد دارو، تاریخ ورود، شماره فاکتور، تعداد، قیمت خرید، تاریخ انقضا، کد شرکت
در مورد تاریخ باید چیکار کنم ؟ سوالات ؟ 1 - اگه داروی جدید بیاد و بخایم ثبتش کنیم یک رکود جدبد ثبت میشه یا رو قبلی ویرایش میشه؟ اگه ویرایش بشه باید تاریخ ها هم عوض شه که این باعث میشه تاریخ ورود خروج قبلی ازبین بره . عملا ویرایش اشتباه هست . اگه ثبت مجدد بشه یعنی یه رکود دیگه بزنیم از یک داروی یکسان ما واسه یک دارو دو تاریخ ورود و تاریخ انقضا جداگانه داریم . حالا موقعی که میفروشیم از کجا بدونیم چی میفروشیم؟ و یا کدوم هارو میفروشیم؟
در اینجا شما مشکل قیمت رو حل کردی جدول دارو : کد دارو، نام دارو، قیمت پایه
اما تاریخ رو نمیشه اینجا حل کرد . ایا دیگه از دست بانک ما خارج میشه انجام این عملیات ؟ یعنی باید با برنامه نویسی پوشش داده بشه ؟ هر چند که من راه حل مناسبی هم با برنامه نویسی براش پیدا نکردم!!!!!!! باید چیکار کنیم؟

sobaisobai
پنج شنبه 05 آبان 1390, 16:34 عصر
سلام دوستان
ببینید زمانی که میخواهیم کالا بفروشیم باید Select کنیم از دیتابیس.ما میتونیم دوتا PK داشته باشیم یکی کدکالا و دیگری تاریخ انقضا.
وقتی به عنوان مثال میخواهیم اسپرین بفروشیم دوتا رکورد واسه ما برمیگردونه یکی با تاریخ انقضا جدید یکی هم باتاریخ انقضا قدیم.
بعدش انتخاب میکنیم که از کدوم اسپرین میخواهیم بفروشیم(جدید یا قدیم)
درمورد وارد کردن کالا به انبار هم مشکلی به وجود نمیاد. اول یه Select میزنیم به دیتابیس اگه رکوردی وجود داشت که اونو Update میکنه واسه Update هم در قسمت where دوتا شرط میزاریم یکی کدکالا یکی هم تاریخ انقضا
تا مشکلی دیگه به وجود نیاد.اگر هم وجود نداشت insert میکنه

RIG000
پنج شنبه 05 آبان 1390, 17:07 عصر
سلام دوستان
ببینید زمانی که میخواهیم کالا بفروشیم باید Select کنیم از دیتابیس.ما میتونیم دوتا PK داشته باشیم یکی کدکالا و دیگری تاریخ انقضا.
وقتی به عنوان مثال میخواهیم اسپرین بفروشیم دوتا رکورد واسه ما برمیگردونه یکی با تاریخ انقضا جدید یکی هم باتاریخ انقضا قدیم.
بعدش انتخاب میکنیم که از کدوم اسپرین میخواهیم بفروشیم(جدید یا قدیم)
درمورد وارد کردن کالا به انبار هم مشکلی به وجود نمیاد. اول یه Select میزنیم به دیتابیس اگه رکوردی وجود داشت که اونو Update میکنه واسه Update هم در قسمت where دوتا شرط میزاریم یکی کدکالا یکی هم تاریخ انقضا
تا مشکلی دیگه به وجود نیاد.اگر هم وجود نداشت insert میکنه
حالا ما اینکار میکنم . یکسری سوالات واسه نوشتن برنامه این تحلیل . اگه مابخایم از 100 تا اسپرینی که داریم 10 تا بفروشیم ؟! باید تو جدول انبار ما بمونه 90 . تعداد فروخته شده رو از موجودی کم میکنیم . اینجا بین دو جدول ها ریلشن میخوره . فبین کد دارو ها . حالا ما اگه 10 تا فروختم باید تو جدولمون 90 تا موجودی بمونه چه شکلی اینکارو کنیم؟ نحوه ریلیشن زدن بین دو جدول چه جوری میشه ؟ منظورم اینکه updating , deleting که تو موقع ریلیشن زدن هم باید فعال کنیم و بعدش با چه کدی بین این دوتا جدول این عملیات رو انجام بدیم ؟ یعنی کوئری ما چه شکلی میشه ؟ حالا کلا یه سوال دیگه اگه جنسی رو فروخته باشیم و بعدش شخص مورد نظر بیاد پس بده دارو رو تو فاکتور فروش باید بریم حذف کنیم افون رکورد ثبت شده رو ؟ بعدش موجودی که کم شده چه جوری بر گردونده میشه اونم باید دستی بریم دو باره اپدیت کنم و مقدار تعداد رو تغییر بدیم؟

RIG000
پنج شنبه 05 آبان 1390, 18:39 عصر
از کلیه دوستانی که میتونن کمک کنن تقاضا میشه که راهنمایی های لازم رو لطف کنن . ممنون

cherchil_hra
پنج شنبه 05 آبان 1390, 18:49 عصر
جدول انبار: کد انبار، کد دارو، تاریخ ورود، شماره فاکتور، تعداد، قیمت خرید، تاریخ انقضا، کد شرکت
در مورد تاریخ باید چیکار کنم ؟ سوالات ؟ 1 - اگه داروی جدید بیاد و بخایم ثبتش کنیم یک رکود جدبد ثبت میشه یا رو قبلی ویرایش میشه؟ اگه ویرایش بشه باید تاریخ ها هم عوض شه که این باعث میشه تاریخ ورود خروج قبلی ازبین بره . عملا ویرایش اشتباه هست . اگه ثبت مجدد بشه یعنی یه رکود دیگه بزنیم از یک داروی یکسان ما واسه یک دارو دو تاریخ ورود و تاریخ انقضا جداگانه داریم . حالا موقعی که میفروشیم از کجا بدونیم چی میفروشیم؟ و یا کدوم هارو میفروشیم؟
در اینجا شما مشکل قیمت رو حل کردی جدول دارو : کد دارو، نام دارو، قیمت پایه
اما تاریخ رو نمیشه اینجا حل کرد . ایا دیگه از دست بانک ما خارج میشه انجام این عملیات ؟ یعنی باید با برنامه نویسی پوشش داده بشه ؟ هر چند که من راه حل مناسبی هم با برنامه نویسی براش پیدا نکردم!!!!!!! باید چیکار کنیم؟

ببین عزیز دل اینجا شما یه چیز رو داری فراموش می کنی! اونم اینه که شما باید بتونی حداقل یه گزارش از ورود و خروج داروهات داشته باشی. بنابراین جواب سوال اولت اینه که توی جدول انبار یه رکورد جدید ثبت میشه! به همون دلایل مفیدی که توی پست 14 گذاشتم. هر تعداد دارو توی روز وارد بشه باید توی انبارت ثبت بشه. حالا 1 باشه یا 1000. ممکنه یک نوع دارو از 3 شرکت مختلف آورده بشه . به خاطر اینه که گزارش ورود داروت لازمه. پس ویرایش کردنت اشتباهه محضه

بعدش ببین همه چیز رو نمیشه توی برنامه ات حل کنی. شما توی برنامه تا جایی که بتونی میخوای از خطا کردن کاربر جلوگیری کنی. حالا فرض کن مشکل تاریخ رو نرم افزاری حل کنی. نسخه رو کی می پیچه؟ برنامه یا نسخه پیچ؟ نسخه پیچ اگه بخواد می تونه یه چیز خلاف منطق ما و برنامه پیش ببره. شما میگی این دارو تاریخش گذشته ولی اون حال می کنه اون رو میده مریض.
این کاری که شما می گی به داروخانه هم بستگی داره
طرف باید داروها یک نوع رو با هم قاطی نکنه! اونایی که مال یک تاریخ هست کنار هم باشه. با برنامه که نمی تونی داروها رو انهدام کنی. پس با توجه به امکاناتت برنامه ات رو پیش ببر.

می تونی یه پیغام بدی که فلان داروها تاریخ انقضاشون گذشته. حالا اینجا دیگه مسئول داروخانه باید بره اون داروها رو جدا کنه. نه برنامه شما

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


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

پس جدول داروت رو اینجوری تغییر بده:
جدول دارو : کد دارو، نام دارو، قیمت پایه، تعداد کل

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

wolf_majid
پنج شنبه 05 آبان 1390, 19:53 عصر
ببین عزیز دل اینجا شما یه چیز رو داری فراموش می کنی! اونم اینه که شما باید بتونی حداقل یه گزارش از ورود و خروج داروهات داشته باشی. بنابراین جواب سوال اولت اینه که توی جدول انبار یه رکورد جدید ثبت میشه! به همون دلایل مفیدی که توی پست 14 گذاشتم. هر تعداد دارو توی روز وارد بشه باید توی انبارت ثبت بشه. حالا 1 باشه یا 1000. ممکنه یک نوع دارو از 3 شرکت مختلف آورده بشه . به خاطر اینه که گزارش ورود داروت لازمه. پس ویرایش کردنت اشتباهه محضه
فعلا" که برنامه من دم دست نیست که تست کنم
اما اینطور که من فهمیدم باید دو جدول داشته باشیم که یکی شامل فیلدهای اساسی دارو ( مثل کد , نام و ... به جز تاریخ انقضا و قیمت خرید ) است
و دیگری شامل کد و قیمت خرید و تاریخ انقضاست و تعداد در انبار ( فکر می کنم نیازی هم به کلید نداشته باشه توی این جدول )
هر بار که دارویی وارد انبار میشه به جز فاکتور خرید و موجودی انبار جدول دوم نام دارو هم سطر جدیدی بهش اضافه می شه


بعدش ببین همه چیز رو نمیشه توی برنامه ات حل کنی. شما توی برنامه تا جایی که بتونی میخوای از خطا کردن کاربر جلوگیری کنی. حالا فرض کن مشکل تاریخ رو نرم افزاری حل کنی. نسخه رو کی می پیچه؟ برنامه یا نسخه پیچ؟ نسخه پیچ اگه بخواد می تونه یه چیز خلاف منطق ما و برنامه پیش ببره. شما میگی این دارو تاریخش گذشته ولی اون حال می کنه اون رو میده مریض.
این کاری که شما می گی به داروخانه هم بستگی داره
طرف باید داروها یک نوع رو با هم قاطی نکنه! اونایی که مال یک تاریخ هست کنار هم باشه. با برنامه که نمی تونی داروها رو انهدام کنی. پس با توجه به امکاناتت برنامه ات رو پیش ببر.
قبلا" در این مورد از استاد حسابداری دانشگاهمون پرسیده بودم
طبق گفته ایشون : (پروژه من در مورد حسابداری است و شامل انبار داروخانه و انبار فروشگاه مواد غذایی و ... میشه) " مواد تاریخ انقضا گذشته یا از جدول حذف شده و به کاربر سیستم اطلاع داده میشود و یا طبق نظر کاربر برگشت از خرید میشوند " ایشون می گفتند " باید ببینی کاربر چگونه عمل می کنه در مورد این مواد "


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


جناب RIGOOO این موارد را تست کنید اگر به نتیجه رسیدید لطفا" بهم اطلاع بدید تا من هم پروژم رو پیدا کنم و تغییرات رو اعمال کنم

sobaisobai
پنج شنبه 05 آبان 1390, 20:16 عصر
حالا ما اینکار میکنم . یکسری سوالات واسه نوشتن برنامه این تحلیل . اگه مابخایم از 100 تا اسپرینی که داریم 10 تا بفروشیم ؟! باید تو جدول انبار ما بمونه 90 . تعداد فروخته شده رو از موجودی کم میکنیم . اینجا بین دو جدول ها ریلشن میخوره . فبین کد دارو ها . حالا ما اگه 10 تا فروختم باید تو جدولمون 90 تا موجودی بمونه چه شکلی اینکارو کنیم؟ نحوه ریلیشن زدن بین دو جدول چه جوری میشه ؟ منظورم اینکه updating , deleting که تو موقع ریلیشن زدن هم باید فعال کنیم و بعدش با چه کدی بین این دوتا جدول این عملیات رو انجام بدیم ؟ یعنی کوئری ما چه شکلی میشه ؟ حالا کلا یه سوال دیگه اگه جنسی رو فروخته باشیم و بعدش شخص مورد نظر بیاد پس بده دارو رو تو فاکتور فروش باید بریم حذف کنیم افون رکورد ثبت شده رو ؟ بعدش موجودی که کم شده چه جوری بر گردونده میشه اونم باید دستی بریم دو باره اپدیت کنم و مقدار تعداد رو تغییر بدیم؟
سلام مجدد
اینجا بحث نرمال سازی دیتابیس میاد وسط که مشکل حل میشه
فکر نکنم دیگه مشکلی باشه
دوستمون wolf_majid توضیحات لازم رو داد.

RIG000
پنج شنبه 05 آبان 1390, 21:50 عصر
سلام دوباره. دوست عزیز wolf راسش من دارم تحلیل مهندسی رو انجام میدم هنوز به برنامه دستی نزدم یعنی استارت نخورده میخام پایگاه رو به مد 3nf برسونم بعد شروع به برنامه نویسیش کنم. من همیشه اول برنامه رو کار میکردم اما الان بانک رو کار میکنم بعد برنامه رو . من نمونه ای از کاری که باید انجام شه زدم و ضمیمه میکنم . لطفا" دوستان بیان تصحیحش کنن. ممنون میشم. در ضمن من relational رو بهش زدم . ببینید مشکلات relation کجاست. ممنون

wolf_majid
پنج شنبه 05 آبان 1390, 22:10 عصر
متاسفانه با دیتابیس اکسس کار نکردم
اون موارد بالا رو هم تست می کنم بهتون اطلاع می دم
ولی یک مقدار طول می کشه ها

cherchil_hra
جمعه 06 آبان 1390, 00:21 صبح
فعلا" که برنامه من دم دست نیست که تست کنم
اما اینطور که من فهمیدم باید دو جدول داشته باشیم که یکی شامل فیلدهای اساسی دارو ( مثل کد , نام و ... به جز تاریخ انقضا و قیمت خرید ) است
و دیگری شامل کد و قیمت خرید و تاریخ انقضاست و تعداد در انبار ( فکر می کنم نیازی هم به کلید نداشته باشه توی این جدول )
هر بار که دارویی وارد انبار میشه به جز فاکتور خرید و موجودی انبار جدول دوم نام دارو هم سطر جدیدی بهش اضافه می شه


قبلا" در این مورد از استاد حسابداری دانشگاهمون پرسیده بودم
طبق گفته ایشون : (پروژه من در مورد حسابداری است و شامل انبار داروخانه و انبار فروشگاه مواد غذایی و ... میشه) " مواد تاریخ انقضا گذشته یا از جدول حذف شده و به کاربر سیستم اطلاع داده میشود و یا طبق نظر کاربر برگشت از خرید میشوند " ایشون می گفتند " باید ببینی کاربر چگونه عمل می کنه در مورد این مواد "


چرا مهمه
اما به نظر من شاید بشه کاربر موقع انتخاب کد کالا (دارو) تمامی داروهایی که در جدول دوم موجودی آنها صفر نیست را نشون بده که بین اونها فروشش رو انتخاب کنه





برای جدول انبار شما نیاز به کلید داری به خاطر اینکه راحت بتونی یه سطر رو پیدا کنی (ویرایش، حذف)

توی جدول دارو فقط یکبار اسم دارو ثبت میشه

موجودی دارو توی جدول دارو نگه داشته میشه که دیگه نخوایم محاسبه رو با جدول انبار و فروش انجام بدیم. تغییری توی جدول انبار و جدول فروش در فیلد تعداد نداریم. واسه همین بازم میگم مهم نیست. هنوز دلیلی براش ندیدم. دلیلی داری واسه اینکار؟

جدول دارو : کد دارو، نام دارو، قیمت پایه، تعداد کل

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

cherchil_hra
جمعه 06 آبان 1390, 00:39 صبح
سلام دوباره. دوست عزیز wolf راسش من دارم تحلیل مهندسی رو انجام میدم هنوز به برنامه دستی نزدم یعنی استارت نخورده میخام پایگاه رو به مد 3nf برسونم بعد شروع به برنامه نویسیش کنم. من همیشه اول برنامه رو کار میکردم اما الان بانک رو کار میکنم بعد برنامه رو . من نمونه ای از کاری که باید انجام شه زدم و ضمیمه میکنم . لطفا" دوستان بیان تصحیحش کنن. ممنون میشم. در ضمن من relational رو بهش زدم . ببینید مشکلات relation کجاست. ممنون

به جدول داروت یه فیلد تعداد هم اضافه کن!
نیازی نیست شماره فاکتور کلید باشه.

توی جدول فروشت که ارتباطش با انبار یک به چند هست، فقط می تونی یک نوع دارو ثبت کنی که اشتباه میشه. پس باید یک کد فروش بذاری و اون کلید بشه نه کد دارو. ارتباط رو بین کد دارو :جدول دارو با کد دارو:جدول فروش بزن

کد دارو، کد فروش، کد کاربر، کد انبار، کد شرکت رو هم اتونامبر بذار که خود سیستم تعیین کنه.

RIG000
جمعه 06 آبان 1390, 00:40 صبح
برای جدول انبار شما نیاز به کلید داری به خاطر اینکه راحت بتونی یه سطر رو پیدا کنی (ویرایش، حذف)

توی جدول دارو فقط یکبار اسم دارو ثبت میشه

موجودی دارو توی جدول دارو نگه داشته میشه که دیگه نخوایم محاسبه رو با جدول انبار و فروش انجام بدیم. تغییری توی جدول انبار و جدول فروش در فیلد تعداد نداریم. واسه همین بازم میگم مهم نیست. هنوز دلیلی براش ندیدم. دلیلی داری واسه اینکار؟

جدول دارو : کد دارو، نام دارو، قیمت پایه، تعداد کل

وقتی چیزی وارد انبارت شد، این فیلد رو به اضافه ورودی کن
موقعی که فروختی این فیلد رو از خروجیت کسر کن
دوست عزیز میشه بانکی که گذاشتم رو ویرایش کنید ؟ ضمیمه کردم. اگه یه ویرایش کنید به همراه ریلیشن شیب ازتون ممنون میشم.

wolf_majid
جمعه 06 آبان 1390, 00:43 صبح
برای جدول انبار شما نیاز به کلید داری به خاطر اینکه راحت بتونی یه سطر رو پیدا کنی (ویرایش، حذف)
جدولی به معنای واقعی انبار وجود نداره
توی جدول دارو فقط یکبار اسم دارو ثبت میشه
این هم کاملا" واضحه

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


تغییری توی جدول انبار و جدول فروش در فیلد تعداد نداریم. واسه همین بازم میگم مهم نیست. هنوز دلیلی براش ندیدم. دلیلی داری واسه اینکار؟
منظورتون رو نگرفتم


وقتی چیزی وارد انبارت شد، این فیلد رو به اضافه ورودی کن
موقعی که فروختی این فیلد رو از خروجیت کسر کن
همونطور که گفتم انبار یک حالت مجازیه و من جدولی به نام انبار طراحی نکردم

cherchil_hra
جمعه 06 آبان 1390, 01:02 صبح
دوست عزیز میشه بانکی که گذاشتم رو ویرایش کنید ؟ ضمیمه کردم. اگه یه ویرایش کنید به همراه ریلیشن شیب ازتون ممنون میشم.

موفق باشی:تشویق:

haniyehghassami
جمعه 06 آبان 1390, 01:13 صبح
سلام
من این جوری یه طرحی از جدول زدم فکر کنم بدک نباشه
.........................جدول دارو..............................
1- code daro
2-daro_name
3- daro_comment
................................................. رودی انبار.............................
1=code daro
2=date_come_in(تاریخ ورود داده را ثبت کن و در کد نویسی هم مراقب تفاوت میان تاریخ ورود داده با تاریخ انقضا باش حتما)
3=exp_date
4=date_go_out(اگه این فیلد null باشه یعنی کالا هنوز تو انباره)
.................................................. ............................................
نیازی نیست که تعداد دارو ها را ثبت کنین تنها در زمان خروج از انبار یه تابع count صدا بزنین به این شکل

public int count(int id_daro)
{
int num = (from tbl_vorodi in dataContext_daro.TBL_VOROD_ANBAR
where tbl_vorodi.ID_daro == id_daro && tbl_vorodi.date_go_out == null
select tbl_vorodi).Count();
return num;
}


توی لینکیو این جوره فک کنم تقریبا

cherchil_hra
جمعه 06 آبان 1390, 09:50 صبح
نیازی نیست که تعداد دارو ها را ثبت کنین تنها در زمان خروج از انبار یه تابع count صدا بزنین

وقتی تعداد داده های انبار بالا بره سرعت حساب کتاب پایین میاد واسه همین فیلد تعداد کل گذاشتم که وقتی دارو میاد بهش اضافه میشه وقتی فروش میره ازش کم میشه.

پست 20 (http://barnamenevis.org/showthread.php?310720-%D9%88%D8%B1%D9%88%D8%AF-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%AC%D8%AF%DB%8C%D8%AF-%D8%AC%D9%87%D8%AA-%D8%AB%D8%A8%D8%AA-%D9%85%D9%82%D8%AF%D8%A7%D8%B1-%D9%87%D8%A7-%D8%AF%D8%B1-%D8%AF%D8%A7%D8%B1%D9%88%D8%AE%D8%A7%D9%86%D9%87-%DA%A9%D9%87-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D9%87%D8%A7-%D8%A8%D8%A7-%D9%87%D9%85-%D9%87%D9%85%D8%AE%D8%A7%D9%86%DB%8C-%D9%86%D8%AF%D8%A7%D8%B1%D8%AF&p=1365096&viewfull=1#post1365096)

RIG000
جمعه 06 آبان 1390, 12:13 عصر
الان باید جدول انبار اول پر بشه یا جدول دارو ؟ اگه دارو باشه تعداد کل از کجا میاد؟ بعدش ما هر سری باید بیایم اینجا تعداد کل رو ویرایش کنیم.؟!!!!!! در صورتی که نام و .... ثابت هست و قیمت هم دیر به دیر تغییر میکنه. تو جدول انبار ما باید به جدول دارو دسترسی داشته باشیم از جمله نام و (کد) .. ما برای محاسبه تعداد کل نیاز به داریم. خب این تعداد از کوئری که از جدول انبار نمیاد مگه .؟ یعنی تعداد رو بر اساس کد دارو حساب میکنیم اینجا نمایش میدیم.الان با تعداد کل مشکل دارم من؟!!!!! چیکار کنم؟

haniyehghassami
جمعه 06 آبان 1390, 17:42 عصر
سلام

الان باید جدول انبار اول پر بشه یا جدول دارو
با ورود دارو اگه اسم دارو توی جدول نام دارو ثبت نشده باشه پس اول باید اون پر شه


اگه دارو باشه تعداد کل از کجا میاد بعدش ما هر سری باید بیایم اینجا تعداد کل رو ویرایش کنیم.؟!!!!!!
بله ،با هربار ثبت یک دارو تعداد آن دارو را از طریق کلید اصلیش به روزرسانی کن توی جدولی که تعداد هر دارو را ثبت کردین.(به نظرم یه جدول تنها برای موجودی های انبار بگذارین)


یعنی تعداد رو بر اساس کد دارو حساب میکنیم اینجا نمایش میدیم.الان با تعداد کل مشکل دارم من؟
طبق گفته ی دوستان اگه تعداد رو قراره که ثبت کنیم پس تنها اگه کد و تعداد هر دارو را در یک جدول بنام موجودی انبار نگه داری کنین خب خوبه

cherchil_hra
شنبه 07 آبان 1390, 10:25 صبح
الان باید جدول انبار اول پر بشه یا جدول دارو ؟ اگه دارو باشه تعداد کل از کجا میاد؟ بعدش ما هر سری باید بیایم اینجا تعداد کل رو ویرایش کنیم.؟!!!!!! در صورتی که نام و .... ثابت هست و قیمت هم دیر به دیر تغییر میکنه. تو جدول انبار ما باید به جدول دارو دسترسی داشته باشیم از جمله نام و (کد) .. ما برای محاسبه تعداد کل نیاز به داریم. خب این تعداد از کوئری که از جدول انبار نمیاد مگه .؟ یعنی تعداد رو بر اساس کد دارو حساب میکنیم اینجا نمایش میدیم.الان با تعداد کل مشکل دارم من؟!!!!! چیکار کنم؟

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

شما مقادیر ورودی داروها رو داری، درسته ؟ یک تعدادی هم می فروشی که توی جدول فروشت درج میشه. جمع کل داروهای وارده (از یک نوع) منهای جمع کل داروها فروخته شده (از یک نوع) میشه تعداد کل موجودی شما! وقتی شما تعداد رکوردهات توی این دوتا جدول بالا بره ممکنه (ممکنه ممکنه) حساب کتابش طی سالهای آینده یکم زمان بر بشه. واسه همین یه فیلد تعداد کل اضافه می کنیم که نخوایم این جمع و تفریق رو انجام بدیم.

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

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

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

RIG000
شنبه 07 آبان 1390, 13:24 عصر
اینو یه نگاه میندازین ؟

cherchil_hra
یک شنبه 08 آبان 1390, 12:24 عصر
total price توی جدول sale لازم نیست باشه. توی جدول sale هم تعداد رو داری هم قیمت!

wolf_majid
جمعه 13 آبان 1390, 09:30 صبح
دوباره سلام
دو جدول را به صورت زیر نوشتم
create table tblStuffs(GroupCode float not null,StuffCode float primary key,StuffName
nvarchar(50) not null,UnitName nvarchar(50),MinOrder float,MaxOrder float,FirstStore float
,FirstFee float,LastFee float,NowStore float)

create table tblStore(StuffCode float,ExpiredDate date,Fee float,Store float,primary key(StuffCode,ExpiredDate))
فقط به نظر شما برای جدول انبار این دو کلید کافیه یا یک کلید مجزا به عنوان مثال کلید انبار درنظر بگیرم و اون دو را از حالت کلید در بیارم

wolf_majid
شنبه 14 آبان 1390, 14:17 عصر
دوباره سلام
اول معذرت می خوام که مطلبم مربوط به بخش Sql میشه ولی اینجا می گذارم
create proc upTblStuffs
@code float,@stuffCode float,@stuffName nvarchar(50),@unitName nvarchar(50)
,@expiredDate date,@minOrder float,@maxOrder float,@firstFee float
,@lastFee float,@firstStore float,@nowStore float,@store float
--prvExpiredDate Is Preview Date
,@prvExpiredDate date
as
--prvStore Is For Save preview firstStore
declare @prvStore float

set @prvStore =(select tblStuffs.FirstStore from tblStuffs where StuffCode like @stuffCode)

update tblStuffs set GroupCode=@code,StuffName=@stuffName,UnitName=@uni tName
,MinOrder=@minOrder,MaxOrder=@maxOrder,FirstFee=@f irstFee,LastFee=@lastFee
,FirstStore=@firstStore,NowStore=@nowStore where StuffCode like @stuffCode

update tblStore set Store =(Store+@firstStore) where StuffCode=@stuffCode and
ExpiredDate like @expiredDate and @prvExpiredDate <> @expiredDate

delete from tblStore where StuffCode=@stuffCode and ExpiredDate like @expiredDate
and @prvExpiredDate <> @expiredDate

update tblStore set Store=(Store+(@firstStore - @prvStore)),ExpiredDate=@expiredDate where
StuffCode = @stuffCode and ExpiredDate like @prvExpiredDate


این کد برای آپدیت کردن یک کالا می باشد

ورودی ها که کاملا" مشخص اند به جز 2 تا
@pvrStore : این متغیر مقدار موجودی اولیه انبار را قبل از ویرایش بدست می آورد (موجودی اولیه انبار قابلیت ویرایش دارد برخلاف موجودی فعلی که طی عملیات ها تغییر می کند)
@pvrExpiredDate : این متغیر به عنوان ورودی به تابع داده می شود تا مشخص شود تاریخ قبلی چه تاریخی بوده است (تعداد تاریخ ها نامشخص است پس تاریخ کالای در حال ویرایش ارسال می شود)


آیا اشکالی در اون می بینید (یا به عبارتی ممکنه باگ پیدا کنه ) ؟
کد یک کم گیج کننده شد (راستش خودم کم آوردم می خوام ببینیم از دید شما اشکالی برش وارده ؟)

wolf_majid
یک شنبه 15 آبان 1390, 20:31 عصر
دوستان خواهشا" اگر کسی sql بلده کمک کنه
توی بخش sql نگذاشتم بخاطر اینکه کدم مربوط به این تاپیکه و شما بهتر می فهمید منظورم چیه

کد بالا اشکال داشت و به صورت زیر ویرایش کردم
خواهشا" ببینید اشکالی درش می بینید یا ایده بهتری برای نوشتن کدهای این جدول دارید

create proc upTblStuffs
@code float,@stuffCode float,@stuffName nvarchar(50),@unitName nvarchar(50)
,@expiredDate date,@minOrder float,@maxOrder float,@firstFee float
,@lastFee float,@firstStore float,@nowStore float
--نگهداری تاریخ انقضای کالای در حال ویرایش
,@prvExpiredDate date
as
--نگهداری تعداد اولیه کالا قبل از ویرایش
declare @prvStore float

set @prvStore =(select tblStuffs.FirstStore from tblStuffs where StuffCode like @stuffCode)

--به روز رسانی جدول کالا ها
update tblStuffs set GroupCode=@code,StuffName=@stuffName,UnitName=@uni tName
,MinOrder=@minOrder,MaxOrder=@maxOrder,FirstFee=@f irstFee,LastFee=@lastFee
,FirstStore=@firstStore,NowStore=@nowStore where StuffCode like @stuffCode

--به روز رسانی جدول انبار در صورتیکه تاریخ انقضای ورودی یا
--به عبارتی جدید قبلا" در انبار باشد
--در این حالت میزان کالای در حال ویرایش را به تاریخ انقضای جدد در انبار اختصاص میدهد
--و تاریخ انقضای در حال ویرایش را از جدول حذف می کند
update tblStore set Store =(Store+@firstStore) where StuffCode=@stuffCode and
ExpiredDate like @ExpiredDate and @prvExpiredDate<>@expiredDate

--به روز رسانی در صورتیکه تاریخ انقضای ویرایش شده در جدول نباشد
update tblStore set Store=(Store+(@firstStore - @prvStore)),ExpiredDate=@expiredDate
where StuffCode = @stuffCode and ExpiredDate like @prvExpiredDate

-- عملیات حذف تاریخ انقضای در حال ویرایش را انجام میدهد
delete from tblStore where StuffCode=@stuffCode and ExpiredDate like @prvExpiredDate
and @prvExpiredDate<>@expiredDate and @expiredDate in
(select ExpiredDate from tblStore where StuffCode=@stuffCode)