PDA

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



mialdf
دوشنبه 25 مرداد 1389, 13:31 عصر
سلام دوستان
من کاربر بسیار مبتدی هستم

یه دوتا مشکل دارم ممنون میشم کمکم کنید

1- میخوام وقتی فاکتور جدید ثبت میشه شماره فاکتور به صورت خودکار اضافه بشه

مثلاً در حال حاضر فاکتور شماره 10 همراه با 3 کالای مختلف ثبت شده
برای ثبت فاکتور بعدی چه کاری باید انجام بدم که شماره فاکتورم بشه 11؟


2- وقتی کالایی به فوروش رسید به صورت خودکار از موجودی کالا کم بشه!


برای این کار من از دیتا گرید ویو استفاده کردم که کاربر وقتی کد کالا رو وارد میکنه مشخصات کالا نماید داده میشه و اگر تعداد بیشتر از 1 بود با زدن کلید F3 یکی به اون اضافه میکنه

عکس گرید ویو
http://miladff.persiangig.com/image/Untitled-1.jpg

Mani_rf
دوشنبه 25 مرداد 1389, 14:43 عصر
دوست عزیز، اینها کارهایی هستند که باید در دیتابیس اتفاق انجام گیرند. هنگام فروش شما باید یک سطر به جدولی که برای فروش کالا در نظر گرفته ای اضافه کنید و به شماره آخرین فاکتور یک واحد اضافه کنید. بافرمان Max در دیتابیس شماره آخرین فاکتور را پیدا کنید.

برای قسمت دوم هم ساده ترین کار این است که مقدار کل وارد شما به انبار یک کالا را از تمامی فروش آن کم کنید تا مقدار مجودی را بیابید.
برای جمع تمامی مقادر در دیتابیس هم از Sum استفاده کنید.

با کمی جستجو و تلاش به راحتی می توانید الگوریتم آن را پیاده کنید.

nasim bahari
دوشنبه 25 مرداد 1389, 14:44 عصر
سلام........

در مورد سوال اولت....بستگی به این داره که از چه پایگاه داده ای استفاده می کنی.....چون بعضی از پایگاه داده ها دارای مقداری به نام AutoNumber برای فیلداشون هستن.....و با تنظیم Increement به عدد یک این کار رو انجام بدین . البته شما می تونین با تابع Max و ایجاد یه کوئری هر بار که می خواین Insert رو انجام بدین. بیشترین مقدار فیلد ID ( شماره کالا ) رو بدست بیارین و بعلاوه یک کنین.......

در مورد سوال دوم ......وقتی شما ID رو داشته باشین ....می تونین با نوشتن دستور Delete اون رکورد مورد نظر رو حذف نمایید

Mani_rf
دوشنبه 25 مرداد 1389, 14:49 عصر
در مورد سوال دوم ......وقتی شما ID رو داشته باشین ....می تونین با نوشتن دستور Delete اون رکورد مورد نظر رو حذف نمایید

دوست من این روش کاملا اشتباه است، موجودی چیزی که از انبار کثر میشه، از دیتابیس پاک نمیشه، به چند دلیل :
1- شما باید سوابق ورود و خروج خود را داشته باشید. برای همه گزارشات انبار یک چیز الزامی است
2- در این صورت شما باید یک جدول داشته باشید که همه موجودی ها را در آن داشته باشید و با هر ورود و خروج مقدار فیلد مربوط به آن را تغییر دهید. به نظر شما روش بهینه ای است؟
3- برای بدست آوردن سود و زیان و پیاده سازی الگوریتم هایی مانند FIFO و ... این روش شما کل اصول حسابداری را زیر سوال میبرد.

و...

nasim bahari
دوشنبه 25 مرداد 1389, 15:07 عصر
دوست من این روش کاملا اشتباه است، موجودی چیزی که از انبار کثر میشه، از دیتابیس پاک نمیشه، به چند دلیل :
1- شما باید سوابق ورود و خروج خود را داشته باشید. برای همه گزارشات انبار یک چیز الزامی است
2- در این صورت شما باید یک جدول داشته باشید که همه موجودی ها را در آن داشته باشید و با هر ورود و خروج مقدار فیلد مربوط به آن را تغییر دهید. به نظر شما روش بهینه ای است؟
3- برای بدست آوردن سود و زیان و پیاده سازی الگوریتم هایی مانند FIFO و ... این روش شما کل اصول حسابداری را زیر سوال میبرد.

و...

سلام.......

شما درست می فرمائید.......

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

البت اگه به ساعت پست خودم و خودتون نگاه کنین....می تونین ببینین که من از ایجاد پست توسط شما آگاهی نداشتم وگرنه پست Off ایجاد نمی کردم...

به هر حال هدف همه دوستان توی این سایت کمک به همدیگه هستش ...

موفق باشین

Mani_rf
دوشنبه 25 مرداد 1389, 16:07 عصر
بله هدف همه ما کمک کردن به یک دیگر است اما
حتی به افراد مبتدی هم نباید روش هایی پیشنهاد داد که بعدا برای اضافه کردن یک قسمت کوچک و یا یک گزارش به برنامه اش مجبور شود یک الگوریتم بزرگ همچنین دیتابیس را تغییر دهد. برنامه ای مثل برنامه خرید و فروش مطعنا در آینده این نزدیک توقعات و امکانات بیشتری برای نویسنده (اگر مشتری هم در میان باشد مشتری) آن در پی خواهد داشت که رفته رفته نیاز به آنها را احساس خواهد شد و برنامه نویس آن در پی اضافه کردن آنها بر خواهد آمد.
موفق باشید...

mialdf
دوشنبه 25 مرداد 1389, 16:19 عصر
با تشکر از همه ی شما دوستانی که کمکم کردید.

راستش من از دیتابیس SQL Server استفاده میکنم
جدول انبارم شامل فیلد های :
کد کالا
نام کالا
تعداد خریداری شده
قیمت خرید
قیمت فروش

جدول فروش هم :
کد کالا
نام کالا
قیمت فروش
تعداد
قیمت کل
.
.
.

حالا میخوام مثلاً وقتی از کد شماره 10 تعداد 3 عدد به فروش میرسه از موجودی در جدول انبارم کم بشه!

hero4000
سه شنبه 26 مرداد 1389, 08:42 صبح
سلام.......

شما درست می فرمائید.......

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

البت اگه به ساعت پست خودم و خودتون نگاه کنین....می تونین ببینین که من از ایجاد پست توسط شما آگاهی نداشتم وگرنه پست Off ایجاد نمی کردم...

به هر حال هدف همه دوستان توی این سایت کمک به همدیگه هستش ...

موفق باشین

سلام به دوست عزيز نسيم ...

ببخشيد که من اومدم وسط

بنده حسابدارم و وقتي پست شما رو ديدم شوکه شدم آخه راههايي که شما پيشنهاد دادين يک جورايي فاجعه است

مثلا فرض کنيد براي کالايي با Id به شماره 001025 يک خريد انجام شده و به موجودي اضافه شده و حالا قراره فروش بشه . خوب به روش شما که ميخواين اون شماره Id رو حذف کنين چه بلائي سر اون فاکتور خريدي که قبلا ثبت کرده بودين مياد :کف:

اميدوارم ناراحت نشده باشين دوست عزيز من فقط جهت افزايش اطلاعات دوستان و شما به اين نکته اشاره کردم :قلب:

nasim bahari
سه شنبه 26 مرداد 1389, 09:03 صبح
سلام به دوست عزيز نسيم ...

ببخشيد که من اومدم وسط

بنده حسابدارم و وقتي پست شما رو ديدم شوکه شدم آخه راههايي که شما پيشنهاد دادين يک جورايي فاجعه است

مثلا فرض کنيد براي کالايي با Id به شماره 001025 يک خريد انجام شده و به موجودي اضافه شده و حالا قراره فروش بشه . خوب به روش شما که ميخواين اون شماره Id رو حذف کنين چه بلائي سر اون فاکتور خريدي که قبلا ثبت کرده بودين مياد :کف:

اميدوارم ناراحت نشده باشين دوست عزيز من فقط جهت افزايش اطلاعات دوستان و شما به اين نکته اشاره کردم :قلب:

چرا باید ناراحت بشم ؟

من وقتی از دوستام ناراحت میشم که اشتباهاتم رو به من گوشزد نکنند......

من قبلاً سه چهارتا برنامه حسابداری کوچیک نوشتم..........راه حل رو که پیشنهاد دادم رو اصلاً برای برنامه حسابداری قابل قبول نیست..........قبلاً هم گفتم ، چون دوست خوبمون....در مورد Insert و Delete سوال کرده بودن......من هم فکر کردم باید این دستورات رو توضیح بدم...همین...

به هر حال از کلیه دوستان معذرت می خوام.........

فکر میکنم قصد همه ما ، کمک به دوستانمون و اضافه کردن اطلاعات خودمون باشه...

بازم معذرت می خوام....

mialdf
دوشنبه 01 شهریور 1389, 00:11 صبح
فکر کنم دوستان منظور منو اشتباه متوجه شدن. حتماً مشکل از نحوه ی توضیح دادن من بود

منظورم اینه :
ما در جدول کالا برای هر کالایی یه کد و نام و تعداد خرید داریم که:
مثلاً کالایی با نام TV SONY با کد 10011 به تعداد 200 عدد خریداری کردیم

حال در فروش وقتی کد 10011 با نام TV SONY به تعداد 2 عدد فاکتور میشه از موجودی واقعیم که 200 بود 2 تا ازش کم بشه و 198 بشه!

فکر کنم بهتر توضیح دادم
با تشکر از همه ی دوستان عزیز

hero4000
دوشنبه 01 شهریور 1389, 08:44 صبح
دوست عزيز دو روش براي اينکار وجود دارد ( البته بنده اين دو روش به ذهنم ميرسه )

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

روش دوم

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

بازم اگه سوالي بود در خدمتم

armin8651
سه شنبه 02 شهریور 1389, 11:20 صبح
اگه پایگاه داده ای که استفاده می کنی sql server باشه از تریگر میتونی استفاده کنی

mialdf
شنبه 06 شهریور 1389, 13:15 عصر
اگه پایگاه داده ای که استفاده می کنی sql server باشه از تریگر میتونی استفاده کنی

میشه بیشتر توضیح بدین؟

nasim bahari
شنبه 06 شهریور 1389, 14:18 عصر
میشه بیشتر توضیح بدین؟

سلام..............

تریگر یک پروسیجر هستش که می تونه قبل و یا بعد ( بستگی به تنظیمات شما داره ) دستورات DML به طور اتومات اجرا میشه........

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

موفق باشین

lastmory
شنبه 06 شهریور 1389, 20:30 عصر
بهترین راه:یه Store Procedure بنویسی که وقتی داری به جدول فروش محصول رکورد اضافه میکنی.یه Update تو جدول محصول انجام بده:بوس:

mialdf
شنبه 06 شهریور 1389, 22:43 عصر
بهترین راه:یه Store Procedure بنویسی که وقتی داری به جدول فروش محصول رکورد اضافه میکنی.یه Update تو جدول محصول انجام بده:بوس:

مرسی از لطفتون
ولی اگه میشه بیشتر توضیح بدین دوست عزیز

armin8651
یک شنبه 07 شهریور 1389, 17:14 عصر
بهترین راه:یه Store Procedure بنویسی که وقتی داری به جدول فروش محصول رکورد اضافه میکنی.یه Update تو جدول محصول انجام بده:بوس:

چرا Store Procedure !!!!
trigger واسه همین کاره و راحت تره
برای اطلاعات درباره تریگر از این لینک میتونی استفاده کنی:
http://www.lupforum.com/index.php/topic,864.0.html

mialdf
دوشنبه 15 شهریور 1389, 14:10 عصر
دوستان من برای ثبت و کم کردن موجودی از کد زیر استفاده کردم
فقط مشکلش اینجاست که بعد ثبت فاکتور موجودی انبار رو 0 میکنه
یعنی درست کم نمیکنه
میشه کمکم کنید که باید چی کار کنم؟



For Row = 0 To ForoshDataGridView.RowCount - 2
naka1 = Me.ForoshDataGridView.Rows(Row).Cells(1).Value
te1 = Me.ForoshDataGridView.Rows(Row).Cells(2).Value
coka1 = Me.ForoshDataGridView.Rows(Row).Cells(0).Value
fefo1 = Me.ForoshDataGridView.Rows(Row).Cells(3).Value
jako1 = Me.ForoshDataGridView.Rows(Row).Cells(4).Value
Me.ForoshTableAdapter.InsertQuery(naka1, coka1, te1, fefo1, jako1, txtta.Text, txtza.Text, 1, Shofa, lbljakopa.Text)
te = (Me.KalaTableAdapter.FillByTeCoKa2(Me.DDSI.Kala, coka1) - te1)
Me.KalaTableAdapter.UpdateQueryTeCoKa(te , coka1)
Next Row

mialdf
سه شنبه 16 شهریور 1389, 00:17 صبح
کسی نیست لطفی کنه؟

armin8651
سه شنبه 16 شهریور 1389, 17:32 عصر
دوست عزیز مثل این که شما اصلآ راضی نمی شی دنبال یه مطلب بری و یادش بگیری
یه نمونه تریگر مال برنامه خودم رو میزارم ، یه وقت بزاری روش واسه برنامه خودت هم میتونی بنویسی



CREATE TRIGGER trg1 ON [dbo].[T7Foroosh]
FOR INSERT
AS
begin
declare @co as int
declare @co2 as bigint
declare @co3 as bigint
Select @co=Cpooshak From inserted
Select @co2=count1 From inserted
Select @co3=count1 From T8JensForooshgah where Cpooshak=@co
update T8JensForooshgah set count1= @co3-@co2 where Cpooshak=@co
end

T7Foroosh = جدول ثبت فروش ها
T8JensForooshgah = جدولی که کد کالا و تعداد هر کالا رو داره
Cpooshak = کد کالا یا پوشاک
count1 = تعداد کالا- تو هر دو تا جدول با همین اسمه

alireza_s_84
سه شنبه 16 شهریور 1389, 18:27 عصر
سلام دوست عزیز:
بهترین روش برای نگهداری مقادیر ورودی و خروجی از انبار که همان خریدها و فروش های یک انبار است به ترتیب سناریوی زیر عمل میشه:
1- جدول Produces که شامل فیلدهای ProduceID ، Title و غیره است.
2- جدول IncomingStock که مقادیر ورودی به انبار(همان خرید های ما) را نگهداری میکند و شامل فیلدهای ProduceID ، IncomingID ،Fee و IncomingDate میباشد. که یک کلید خارجی به جدول Produces داره.
3- جدول Sales یا Factors که همان جدول فروش ماست و شامل فیلدهای SaleID , ProduceID , Date , Discount , ... است.
حالا با داشتن این سه جدول ما براحتی میتونیم با یه دستور ساده میزان خروجی از انبار رو از میزان ورودی کم کنیم و میزان موجودی رو بدست بیاریم.
بهترین روش طراحی همینه چون با تغییر قیمت یک کالا و ورود موجودی با قیمتی جدید دیگه مشکلات تعدیل قیمت رو نداریم
میزان ورودی بر اساس تاریخ مشخص و با قیمت مشخص ذخیره میشه
هر فاکتور وابسته به کالا بوده و با حذف فاکتور هیچ مشکلی برای موجودی انبار پیش نمیاد.
ضمنا عمل حذف فاکتور با توجه به نوع سیستم میتونه مجاز یا غیر مجاز باشه
موفق باشید

hero4000
چهارشنبه 17 شهریور 1389, 08:17 صبح
سلام دوست عزیز:
بهترین روش برای نگهداری مقادیر ورودی و خروجی از انبار که همان خریدها و فروش های یک انبار است به ترتیب سناریوی زیر عمل میشه:
1- جدول Produces که شامل فیلدهای ProduceID ، Title و غیره است.
2- جدول IncomingStock که مقادیر ورودی به انبار(همان خرید های ما) را نگهداری میکند و شامل فیلدهای ProduceID ، IncomingID ،Fee و IncomingDate میباشد. که یک کلید خارجی به جدول Produces داره.
3- جدول Sales یا Factors که همان جدول فروش ماست و شامل فیلدهای SaleID , ProduceID , Date , Discount , ... است.
حالا با داشتن این سه جدول ما براحتی میتونیم با یه دستور ساده میزان خروجی از انبار رو از میزان ورودی کم کنیم و میزان موجودی رو بدست بیاریم.
بهترین روش طراحی همینه چون با تغییر قیمت یک کالا و ورود موجودی با قیمتی جدید دیگه مشکلات تعدیل قیمت رو نداریم
میزان ورودی بر اساس تاریخ مشخص و با قیمت مشخص ذخیره میشه
هر فاکتور وابسته به کالا بوده و با حذف فاکتور هیچ مشکلی برای موجودی انبار پیش نمیاد.
ضمنا عمل حذف فاکتور با توجه به نوع سیستم میتونه مجاز یا غیر مجاز باشه
موفق باشید
دوست عزيز بنده قبلا اين راهها رو به ايشون پيشنهاد دادم ولي ايشون حتي نگاه هم به جوابها نمي کنند
http://barnamenevis.org/forum/showpost.php?p=1073944&postcount=11
لطفا خودتون رو خسته نکنيد . من که نميدونم ايشون دنبال چي هستند و چه توقعي از دوستان دارند :عصبانی: