PDA

View Full Version : کدنویسی برنامه انبار و حسابداری



sahar_ah
چهارشنبه 04 آبان 1384, 10:13 صبح
سلام به همه دوستان
من دارم یه برنامه مینویسم که یه قسمت انبار و یه قسمت فروش داره.در صفحه انبار کاربر اقلام جدید رو با تاریخ و مشخصات کامل اضافه می کنه و یه فیلد بنام باقیمانده انبار داره.
در صفحه فروش هم هر روز کاربر اجناسی رو که به فروش میره ثبت می کنه.حالا من میخوام که وقتی یه جنسی مثلا برنج رو به اندازه 10 کیلو میفروشه پس از ذخیره این مفدار فروش از مقدار باقیمانده انبار کم بشه و در فیلد باقیمانده ثبت بشه.اما مشکل من اینه که از یه جنس ممکنه در ماه 4 یا 5 بار خرید بشه و چون تاریخ خرید هم جزو مشخصات اون کالا هست لذا اطلاعات جدید نمیشه روی قبلی ذخیره بشه و باید در یه رکورد جدید ثبت بشه.
حالا نمیدونم چکار باید بکنم آیا روش من برای درج اجناس در برنامه های مثل این یعنی فروش و انبار درسته یا راه بهتری هست که کاربر بتونه برای 1 جنس چندین بار در تاریخ های متفاوت خرید کنه و اطلاعات اونا رو ثبت کنه و در قسمت فروش هم هر زمان یه جنس از اجناس انبار فروخت مقدار کنونی رو از باقیمانده کل انبار کم کنه و در فیلد باقیمانده بریزه.
از دوستان خواهشمندم منو راهنمایی کنید و اگه امکانش هست یه نمونه کوچولو به من بدید
یه دنیا ممنونم

m-khorsandi
چهارشنبه 04 آبان 1384, 12:13 عصر
درود
شما میبایست 2 تا جدول داشته باشید، یکی برای موجودی انبار و یکی هم برای فروش.
زمانی که کاربر یک کالایی رو به مقدار معینی میفروشه، شما یک رکورد به جدول فروش اضافه
میکنید و بعد از اضافه کردن این رکورد، جدول موجودی رو Update میکنید.
یعنی مقدار کالای فروخته شده رو از مقدار فعلی اون کالا در انبار کم میکنید.

تا اینجای کار درسته؟

mzjahromi
چهارشنبه 04 آبان 1384, 12:20 عصر
می تونی هم موجودی انبار رو هر وقت نیاز داشتی محاسبه کنی

mzjahromi
چهارشنبه 04 آبان 1384, 12:24 عصر
اونوقت احتمال Anomaly (عدم همخوانی اطلاعات) هم پائین میاد.

ghgh-moghadam
چهارشنبه 04 آبان 1384, 14:35 عصر
سلام، شما باید یک جدول برای ورود و خروج کالا در نظر بگیرد که یک فیلد برای نوع سند داشته باشد مثلا فیلدی به نام TYPE که از نوع char باشد و با این فیلد مشخص میشود که تعداد کالای وارد شده در جدول از نوع ورودی است یا خروجی. ورودی ها (فاکتور خرید . مرجوعی کالا) و خروجی ها (فاکتور یا حواله فروش) در این جدول شماره سند یا فاکتور کد کالای مورد نظر و تعداد کالای وارد یا خارج شده را ثبت می‌کینید و به اعضای هر درج در جدول موجودی ابتدای دوره کالا را که در جدول موجوی کالا ثبت کرده‌اید کم یا زیاد می‌کنید که همان موجودی باقی‌مانده شما خواهد بود.

ghgh-moghadam
چهارشنبه 04 آبان 1384, 14:37 عصر
سلام، شما باید یک جدول برای ورود و خروج کالا در نظر بگیرد که یک فیلد برای نوع سند داشته باشد مثلا فیلدی به نام TYPE که از نوع char باشد و با این فیلد مشخص میشود که تعداد کالای وارد شده در جدول از نوع ورودی است یا خروجی. ورودی ها (فاکتور خرید . مرجوعی کالا) و خروجی ها (فاکتور یا حواله فروش) در این جدول شماره سند یا فاکتور کد کالای مورد نظر و تعداد کالای وارد یا خارج شده را ثبت می‌کینید و به اعضای هر درج در جدول، موجودی ابتدای دوره کالا را که در جدول موجوی کالا ثبت کرده‌اید کم یا زیاد می‌کنید که همان موجودی باقی‌مانده شما خواهد بود.

sahar_ah
چهارشنبه 04 آبان 1384, 18:58 عصر
با سلام
ممنون از جواب همه دوستان.
جناب خرسندی شما درست میفرمایید منم 2 تا جدول دارم که یکی فروشه و یکی خرید.
جناب ذولقدر من باید همزمان موجودی انبار رو محاسبه کنم و این که هر وقت نیاز داشته باشم بخوام موجودی رو حساب کنم برای من مقدور نیست.
اما مشکل من اینه که یک جنس فقط یکبار در جدول ثبت نمیشه و این کار منو سخت کرده چون اگه هر کالایی فقط 1 رکورد بود با یه کوئری میشد اونو پیدا کرد و مقدار فروش رو از انبار کم کرد اما برای هر کالا چندین رکورد ایجاد میشه چون در تاریخ های مختلف یه کالا چند بار خریداری میشه و من نمیدونم چکار باید بکنم که مقدار باقیمانده بطور صحیح محاسبه بشه.به نظر شما راه استاندارد برنامه های انبار و کالا چطوریه؟ لطفا منو راهنمایی کنید
سپاسگزارم

Naficy
پنج شنبه 05 آبان 1384, 05:19 صبح
یک راه اساسی و استاندارد استفاده از Transaction هاست. با اینها می تونید معین کنید یک دسته از دستورات SQL، یا همگی اجرا شوند یا هیچکدام اثر نکنند. یعنی تغییرات را به صورت دسته ای اعمال کنید.
اینکار مشکلاتی از قبیل Abnormaly را از بین می بره.

ghgh-moghadam
پنج شنبه 05 آبان 1384, 08:25 صبح
سلام، شما باید یک جدول برای ورود و خروج کالا در نظر بگیرد که یک فیلد برای نوع سند داشته باشد مثلا فیلدی به نام TYPE که از نوع char باشد و با این فیلد مشخص میشود که تعداد کالای وارد شده در جدول از نوع ورودی است یا خروجی. ورودی ها (فاکتور خرید . مرجوعی کالا) و خروجی ها (فاکتور یا حواله فروش) در این جدول شماره سند یا فاکتور کد کالای مورد نظر و تعداد کالای وارد یا خارج شده، تاریخ و ... را ثبت می‌کنید و به اعضای هر درج در جدول، موجودی ابتدای دوره کالا را که در جدول موجوی کالا ثبت کرده‌اید کم یا زیاد می‌کنید که همان موجودی باقی‌مانده شما خواهد بود. در جدول موجودی کالا، کد کالا و تعداد موجودی در ابتدای دوره و ... را ثبت می‌کنید برای هر کالا فقط یک سطر بدون تاریخ در نظر گرفته می‌شود.
با استفاده از transction ها هم می توانید اگر ثبت در یکی از جدولها ایراد داشت عملیات ثبت قبلی موازی با ان را نیز دوباره به حالت اول برگردانده و لغو کنید.

oghab
پنج شنبه 05 آبان 1384, 09:23 صبح
سلام به نظر من دوستان به اندازه کافی توضیح دادند و من هم دارم همونا را تکرار می کنو منتها با توضیح بیشتر.
به نظر من شما احتیاج به دو جدول دارید: table1 برای کالا و table2 برای خرید و فروش.
اگه از قبل از شروع برنامه ERD می کشیدید. حالا به اینجور مشکلات بر نمی خوردید.
table1 را که من اسمشو کالا می زارم شامل فیلدهای کد کالا - اسم کالا - واحد - باقیمانده است.
و هر کالایی که قرار خریده بشه و به موجودی انبار اضافه بشه و یا فروخته بشه و از موجودی انبار کم بشه باید در این جدول قبلا وارد شده باشه.
و table2 که من اسمشو خریدوفروش می زارم که شامل فیلدهای 1-کد کالا (که کلید خارجی از جدول کالا است) - 2-تاریخ - 3-تعداد واحد - 4-(خرید یا فروش) - 5-هزینه است.
که هر بار کالایی خریده میشه یه رکورد به این جدول اضافه میشه و فیلد (خرید یا فروش) برابره خریدقرار می گیره و بقیه فیلدها هم که مشخصه . همون موقع فیلد باقیمانده در رکورد مربوط به این کد کالا در جدول کالا update میشه و فیلد باقیمانده اش با تعداد واحد خریداری شده جدید جمع میشه و update میشه
و اگه جنسی فروخته شد باز در این table2 ثبت میشه . فیلد (خرید یا فروش) برابر فورش قرار میگره و این رکورد در table2 ثبت میشه و رکورد مربوط به این کد کالا در جدول کالا update میشه و تعداد واحد فروخته شده از باقیمانده کم میشه و اونجا update میشه.
حالا می تونه هر وقت خواستی لیست خرید و فروشت را داشته باشی و یا با یه query سراغ جدول کالا بری و فقط مقدار باقیمانده را ببینی.
حل شد؟

Dolphin
پنج شنبه 05 آبان 1384, 12:39 عصر
چقدر پیشنهادات جالب !!؟؟

sahar_ah
پنج شنبه 05 آبان 1384, 13:14 عصر
با سلام
من واقعا از همه ممنونم بخاطر توجهتون اما متاسفانه هنوز مشکل من حل نشده.
من برای وارد کردن کالای جدید نمیتونم برای یک کالا فقط یک رکورد در نظر بگیرم چون هر کالا بر اساس تاریخ خرید ثبت میشه و ممکنه که مثلا امروز 100 کیلو برنج خریداری بشه و آخر هفته هم 50 کیلو و این اقلام میباییت بر اساس تاریخ خرید ثبت بشند.اگه هر کالا فقط در یک رکورد ثبت میشد کار خیلی راحت بود و با یه کوئری حل میشد اما مشکل اینه که مثلا در قسمت خرید ما در تاریخ01/01/1384 10 کیلو برنج خریدیم و در تاریخ 01/02/1384 هم 5 کیلو فروختیم
پس تا اینجا کل موجودی انبار 5 کیلو است.فرض کنیم در تاریخ 01/05/1384 مجددا 10 کیلو برنج خریدیم و موجودی کل 15 کیلو میشود حالا چطور میشه که اگه ما بخواهیم فرضا 2 کیلو برنج بفروشیم این مقدار از انبار کم بشه و مقادیر بصورت صحیح در فیلد باقیمانده هر رکورد ثبت بشه؟
از دوستان خواهش میکنم اگه نمونه برنامه دارند به من بدند چون واقعا کارم گیره و محتاج کمک دوستان هستم
بازم ممنونم.متشکرم

anubis_ir
پنج شنبه 05 آبان 1384, 14:09 عصر
سلام

رکوردهای خرید و فروش رو به صورت معمولی در جداول مربوطه ثبت کن.
سپس یک جدول "کمکی" به نام "خلاصه موجودی فروش" درست کن (برای سرعت کار بیشتر)
روی جداول اصلی برای خاصیت insert یا update ، یک trigger تعریف کن. هر وقت چیزی اضافه شد، این trigger جدول کمکی رو به صورت خودکار آپدیت میکنه (اگر هیچ رکوردی هم برای یک جنس موجود نبود بدیهی است که ابتدا رکورد رو باید ایجاد کنه).
اکنون گزارش گرفتن از این جدول کمکی (همیشه به روز) بسیار ساده و فوق العاده سریع است.

موفق باشی

oghab
پنج شنبه 05 آبان 1384, 14:33 عصر
به نظر من راه حلی که من دادم واقعا عملی است.
شما در جدول یک مشخصات اولیه را ثبت میکنید و در جدول 2 اطلاعات مربوط به خرید و فروش را همراه با ذکر تاریخ هاشون و مقدار هاشون . فقط واسه جدول 2 یه کلید مصنوعی هم در نظر بگیرید. به اسم ردیف!
و هر بار اطلاعات جدید خرید و فروش را در جدول 2 ثبت می کنی. فیلد باقیمانده از جدول 1 را update کنی.

sahar_ah
جمعه 06 آبان 1384, 00:23 صبح
چقدر پیشنهادات جالب !!؟؟
ببخشید منظورتون چیه؟

sahar_ah
جمعه 06 آبان 1384, 00:37 صبح
سلام
جناب عقاب راهی رو که شما پیشنهاد دادید خیلی جالب بود و به نظر من کار درست همینه.بازم ممنونم اما امکان داره که یه نمونه برام بفرستی چون من Update یا Trigger رو بلد نیستم.
جناب anubis_ir میشه راجع به روشتون کمی بیشتر توضیح بدید چون مطلبتون یه کم تخصصیه و من سر در نیاوردم!!
اگه شما هم محبت کنید و یه نمونه برنامه برام بفرستید ممنون میشم.
با تشکر

oghab
جمعه 06 آبان 1384, 15:48 عصر
اینم نمونه

sahar_ah
شنبه 07 آبان 1384, 19:51 عصر
سلام
جناب عقاب عزیز
از راهنمایی و کمکتون یه دنیا ممنونم.امیدوارم که همیشه موفق باشید
با تشکر

oghab
شنبه 07 آبان 1384, 20:13 عصر
خواهش می کنم
----------------------------
التماس دعا

sahar_ah
یک شنبه 08 آبان 1384, 01:02 صبح
سلام
ببخشید که دوباره مزاحمتون میشم
جناب عقاب ار بابت برنامه دستتون درد نکنه اما هر کاری میکنم دیتابیس شما نصب میشه اما هیچ جدولی اضافه نمیشه اگه ممکنه فایل اصلی جدول با پسوند MDF رو هم محبت کنید چون من نتونستم برنامه رو اجرا کنم
ببخشید.متشکرم

oghab
یک شنبه 08 آبان 1384, 10:54 صبح
dataBase را همونطور که تو فایل ReadMe براتو نوشتم باید restore کنید و attach نمیدونم چرا نمیشه!
همونطور که فایل readme نوشتم. اول یه dataBaseh به اسم test3_anbar بسازید و بعد backup را روی اون restore کنید.

sahar_ah
یک شنبه 08 آبان 1384, 14:10 عصر
سلام
من دقیقا تمام کارهایی رو که شما فرمودید انجام دادم و دیتابیس با همون اسم ساختم اما پس از بک آپ گرفتن هیچ جدولی به لیست اضافه نمیشه و هنگام اجرای برنامه هم میگه که این جدول ها رو پیدا نمیکنم.اما دیتابیس رو میشناسه و از کانکشن ایراد نمیگیره اما جدول ها نیستند در خود SQL Server هم هیچ جدولی اضافه نمیشه .
اگه میشه کمک کنید.ممنون میشم

oghab
یک شنبه 08 آبان 1384, 16:11 عصر
.شما باید backup موجود را restore کنیدو تا جدولها اضافه بشن. نه اینکه از پایگاه داده ای که ساختین backup بگیرید.
من همیشه همین کارو می کردم.

شما برای Restore کردن باید ابتدا روی یکی از database ها کلیک راست کنین از منوی باز شده در منوی All tasks گزینه Restore database رو انتخاب کنین در بالای پنجره باز شده اسمی که میخواین database تون به اون نام ساخته بشه رو وارد کنین و بعد گرینه From Device رو انتخاب کنین و بعد select device رو بزنین و بعد از باز شدن پنجره جدید دکمه Add رو بزنین و بعد از باز شدن پنجره جدید دکمه ایی که ... است رو بزنین و مسیر فایل backup تونو بهش بدین

اگه backh up که من فرستادم با همونی که شما خودتون گرفتین repalce شده. فایلی را فرستادم دوباره دریافت کنید. و برای restore یه روش بالا عمل کنید.
اگه بازم نشد. من نمی دونم چطور فقط خود جدلو بفرستم.
شما بگید من چطور فقط خود جدولا را براتون بفرستم تا بفرستم. چون من فقط همون راهو بلدم که back گیرم و بعد restore کنم.
موفق باشی
التمای دعا

sahar_ah
سه شنبه 10 آبان 1384, 16:07 عصر
سلام
عقاب عزیز دستت درد نکنه
من موفق شدم که اون دیتابیس رو ریستور کنم من اشتباها اونو Attach میکردم.ممنونم روش کد نویسیت برام خیلی جالب و آموزنده بود اما بازم توی برنامه شما اگه از یه جنس دو بار در دو تاریخ متفاوت خرید کنی بازم همون مشکلی که گفتم پیش میاد و نمیشه موجودی کل انبار رو محاسبه کرد ولی به هر حال ممنونم از توجهت که منو کمک کردی.اگه راه حل جدیدی برای این کار پیدا کردی منو خبر کن.موفق باشی

oghab
سه شنبه 10 آبان 1384, 22:10 عصر
امیدوارم موفق باشی
و باید برم برنامه را ببینم و تا متوجه بشم چه مشکلی را میگی! سر فرصت!
چون تو ذهنم که فکر می کنم باید درست جواب بده!
----------------------------------
التماس دعا

oghab
سه شنبه 10 آبان 1384, 22:45 عصر
سلام
من رفتم برنامه را چک کردم. به نظرم مشکلی نداشت! و در دو تاریخ مختلف یه جنس را خرید کردم! در یه تاریخ یه جنس را دو بار خرید کردم! فروش را هم امتحان کردم. اگه تو فیدها مقدار درست را وارد کنیم. خطاییی نمیده! و فیلد واحد باقیمانده در جدول کالا درست update میشه. و نیازی به محاسبه موجودی انبار نیست. فقط باید یه query گرفت و فیلد واحد باقیمانده را از کد اون کالا بازیابی کرد! و نیازی به عمل محاسباتی نداره! که نشه محاسبه کرد!
موجودی کل انبار رو در جدول 1 (کالا) در فیلد واحد باقیمانده وجود داره!
برنامه بی نقص نیست و من فقط کلی وساده درستش کردم و جزئیات را در نظر نگرفتم! ولی مشکلی که شما میگید به نظرم نداره! چون اصلا نیازی به محاسبه نیست که نشه محاسبه کرد! چون با هر بار خرید و فروش موجودی انبار همون موقع update میشه!
به هر حال لمیدوارم موفق باشی!
شایدم من متوجه مشکلت نشدم!
---------------------------------------------
به هر حال التماس دعا

samancom81
پنج شنبه 10 آذر 1384, 22:41 عصر
سلام آقای عقاب .از بحثاتون با sarah فهمیدم که برنامه رو واسش فرستادی. می شه واسه منم این کارو کنی

oghab
جمعه 11 آذر 1384, 11:29 صبح
اینم از برنامه، ولی فقط یه مثال ساده است!

eniak.master
جمعه 11 آذر 1384, 16:06 عصر
با سلام
این طور که من متوجه شدم شما باید برای هر جنس یک مقدار در انبار قرار داده باشید .
که اگر این مقدار صفر شد ،(در فروش ) دیگر آن جنس از لیست اجناس انبار خط بخورد و حذف شود.و اگر خریداری شد به مقدار اضافه شود .
تاریخ هر جنس رو میتونی برحسب روز و حتی ساعت خرید رو هم قرار بدی تا مشکلی پیش نیاد .