الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

متابعة المخزون

بدأه zawali في 26 مارس 2012 · 16 رد · 1,909 مشاهدة · في قواعد بيانات Visual FoxPro
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحبا

أنا بصدد انجاز برنامج صغير لمخزون مكتبة، ولدي عدة صعوبات هناك 3 جداول:

جدول الشراء لتسجيل المشتريات

جدول البيع لتسجيل المبيعات

جدول المخزون لمراقبة المخزون (مخزون أولي + مشتريات – مبيعات = مخزون نهائي)

والمطلوب مايلي:

1- نقل مخزون آخر تاريخ لكل مادة إلى جدول المبيعات أو جدول المشتريات عند القيام بذلك

2- جمع كل مشتريات كل مادة في المادة المقابلة لها في جدول المخزون.(المرور سجل سجل)

3- جمع كل مبيعات كل مادة في المادة المقابلة لها في جدول المخزون. .(المرور سجل سجل)

4- إنجاز تقرير للمخزون حسب كل شهر أو بحساب بين تاريخين. (التقرير يشمل مخزون الشهر الماضي و مجموع المبيعات و مجموع المشتريات لنفس الشهر أو لما بين التاريخين وباقي المخزون للشهر)

5- حساب المخزون بصورة آلية في جدول المخزون على ما أظن في خاصية (afterrowcolchange)

أنا مش عارف أعمل scan endscan أو for endfor أو do enddo أو case endcase أو فيه طريقة أخرى

أرجوه منكم مع شرح الأكواد

ولكم مني الدعاء الصالح

my project.rar

#2
zawali كتب:

مرحبا

أنا بصدد انجاز برنامج صغير لمخزون مكتبة، ولدي عدة صعوبات هناك 3 جداول:

جدول الشراء لتسجيل المشتريات

جدول البيع لتسجيل المبيعات

جدول المخزون لمراقبة المخزون (مخزون أولي + مشتريات – مبيعات = مخزون نهائي)

والمطلوب مايلي:

1- نقل مخزون آخر تاريخ لكل مادة إلى جدول المبيعات أو جدول المشتريات عند القيام بذلك

2- جمع كل مشتريات كل مادة في المادة المقابلة لها في جدول المخزون.(المرور سجل سجل)

3- جمع كل مبيعات كل مادة في المادة المقابلة لها في جدول المخزون. .(المرور سجل سجل)

4- إنجاز تقرير للمخزون حسب كل شهر أو بحساب بين تاريخين. (التقرير يشمل مخزون الشهر الماضي و مجموع المبيعات و مجموع المشتريات لنفس الشهر أو لما بين التاريخين وباقي المخزون للشهر)

5- حساب المخزون بصورة آلية في جدول المخزون على ما أظن في خاصية (afterrowcolchange)

أنا مش عارف أعمل scan endscan أو for endfor أو do enddo أو case endcase أو فيه طريقة أخرى

أرجوه منكم مع شرح الأكواد

ولكم مني الدعاء الصالح

اخي العزيز قم بعمل المطلوب اي قم بالمحاولة واين ماتوجد مشكلة انا والاخوة معك ان شاء الله

لغرض الفائدة لك

عند محاولتك وكل ما تواجة مشاكل فهي سوف تسقل برمجتك مع الخبرة

تحياتي لك

#3

مشكور اخي العزيز 'lion iraq' على الرد السريع

في الحقيقة أنا حاولت بعدها طرحت المشاكل التي تواجهني على سيادتكم

المهم راح أحاول من جديد رغم أنني عارف بأن ذلك سيأخذ وقت طويل من الخلط في الأكواد دون سابق معرفة

وعلى هذا توجهت إليكم حتى أفهم الأمور بشكل سليم

مشكورين مرة أخرى

#4

السلام عليكم

اخي الكريم

انا على اتم استعداد لابداء المساعدة لك ولكل الموجودين ولكن كي نكون ناجحين في عملنا يفترض ان نعمل سويه

#5

شكرا أخي albaghdady75 على التعاون

أعتقد أنني قدمت مشروع برنامجي في الصفحة أعلاه

و هو كل ماستطعت أن أصل إليه بعد محاولات كثيرة

شكرا مرة أخرى

#6

السلام عليكم

اخوتي الاعزاء كيف حالكم \

لكاتب الموضوع : انا قصدت ارفاق او رفع العمل الذي تريد انجازة وعند وجود خطا سوف نتناقش عنه

لوصول فكرة التحليل البفورم او المشروع بصورة اسرع لغرض حل الاشكال الموجود وفي مشروع اعلاة لايوجد ماتريد عمله وانما ذكرته فقط

وللاخ البغدادي اهلا وسهلا بك وان شاء الله نستفاد منك ونفيدك ان وفقنا الله في نشر العلم

تحياتي للجميع

#7

السلام عليكم

اخوتي الاعزاء

أنا أجد صعوبة في كود يمر على السجلات سجل سجل لحساب المخزون وفق فترة محددة لعمل تقارير كل المواد

وأأسف إن لم أستطع إيصال المعلومة

وشكرا

#8

السلام عليكم

لاعادة احتساب الكمية بشكل فوري عند عملية الشراء، جرب التالي في نموذج المشتريات فقط

- أزل الكود الموجود في thisform.grdStock.AfterRowColChange

- ضع هذا الكود في اجراء الــ thisform.GrdPurchase.Column4.text1.Valid فهو كفيل بتغيير قيمة المخزون بعد كل تغيير في كمية المشتريات

REPLACE qte_enter WITH NVL(qte_enter,0)
SELECT purchase
m.lnCode=NVL(purchase.Code_a,0)
IF m.lnCode > 0
	SELECT SUM(purchase.qte_enter) AS nQty FROM purchase WHERE purchase.Code_a=m.lnCode AND NOT DELETED() INTO CURSOR crsTest
	GO TOP IN crsTest
	m.AllPurchasedQty=NVL(crsTest.nQty,0)
	UPDATE Stock SET Qte_Enters=m.AllPurchasedQty,;
		Stock.stock_final = NVL(Stock.stock_first,0) + m.AllPurchasedQty - NVL(Stock.qte_sales,0);
		WHERE Stock.CODE = m.lnCode
	THISFORM.GrdStock.REFRESH()
	SELECT purchase
ENDIF

مع ملاحظة أنه تم تجاوز الوضع الطبيعي وهو احتساب الكمية الحالية بناء على التغيير الحاصل في نفس السجل فقط ( وليس اعادة احتساب الكميات الواردة من كافة عمليات الشراء ) لابقاء الأمور بسيطة ودون تغيير

1

أستغفر الله العظيم و أتوب إليه

#9

أما لاحتساب الرصيد لكامل الأصناف مرة واحدة ( وبدون استخدام Scan أو For )

جرب وضع الكود التالي في برنامج صغير وجرب

UPDATE Stock SET;
	Stock.Qte_Enters=NVL(crsStock.QtyIn,0),;
	Stock.Qte_Sales=NVL(crsStock.QtyOut,0),;
	Stock.Stock_Final=Stock_First + NVL(crsStock.QtyIn,0) - NVL(crsStock.QtyOut,0);
	FROM ;
	( SELECT Stock.CODE, Pu.QtyIn, SL.QtyOut;
	FROM Stock;
	LEFT OUTER JOIN;
	( SELECT Code_a, SUM(qte_enter) AS QtyIn FROM Purchase GROUP BY Code_a ) AS Pu ;
	ON Stock.CODE = Pu.Code_a;
	LEFT OUTER JOIN;
	( SELECT Code_a, SUM(qte_sale) AS QtyOut FROM Sale GROUP BY Code_a ) AS SL ;
	ON Stock.CODE = SL.Code_a ) AS crsStock;
	WHERE Stock.CODE =crsStock.CODE

أو يمكنك تقسيم الكود أعلاه الى عدة مراحل على النحو التالي

SELECT Stock.CODE, Pu.QtyIn, SL.QtyOut;
	FROM Stock;
	LEFT OUTER JOIN;
	( SELECT Code_a, SUM(qte_enter) AS QtyIn FROM Purchase GROUP BY Code_a ) AS Pu ;
	ON Stock.CODE = Pu.Code_a;
	LEFT OUTER JOIN;
	( SELECT Code_a, SUM(qte_sale) AS QtyOut FROM Sale GROUP BY Code_a ) AS SL ;
	ON Stock.CODE = SL.Code_a INTO CURSOR crsStock READWRITE

REPLACE QtyIn WITH NVL(QtyIn,0), QtyOut WITH NVL(QtyOut,0) ALL

UPDATE Stock SET;
	Stock.Qte_Enters=crsStock.QtyIn,;
	Stock.Qte_Sales=crsStock.QtyOut,;
	Stock.Stock_Final=Stock_First + crsStock.QtyIn - crsStock.QtyOut;
	FROM crsStock;
	WHERE Stock.CODE =crsStock.CODE
1

أستغفر الله العظيم و أتوب إليه

#10

مشكور اخي العزيز عبدالله

على الرد الجميل ووالواضح

وكنت اتمنى من الاخ كاتب الموضوع ان يحاول لغرض فائدة وعندما يواجة المشكلة في مرحله ما نتعاون معه

ولكن لم يقصر الاخ عبدالله

تحياتي للجميع

#11

يسلمو ايديك shadowz عملتها two in one تحياتي للجميع

الحمد لله الذي هدانا

#12

مشكور جدا أخي shadowz أنت رفعت معنوياتي

وأنا راح أجرب الكود

مشكور جدا جدا

#14

العفو يا فراس وعصفور و zawali

zawali كتب:

مشكور جدا أخي shadowz أنت رفعت معنوياتي

وأنا راح أجرب الكود

مشكور جدا جدا

وركز على فكرة اعادة تنظيم الجداول

أستغفر الله العظيم و أتوب إليه

#16

أرجو من الأخوة شرح السطور المشار إليها

UPDATE Stock SET;

Stock.Qte_Enters=NVL(crsStock.QtyIn,0),; شرح هذا السطر

Stock.Qte_Sales=NVL(crsStock.QtyOut,0),;

Stock.Stock_Final=Stock_First + NVL(crsStock.QtyIn,0) - NVL(crsStock.QtyOut,0);

FROM ;

( SELECT Stock.CODE, Pu.QtyIn, SL.QtyOut; شرح هذا السطر

FROM Stock;

LEFT OUTER JOIN; شرح هذا السطر

( SELECT Code_a, SUM(qte_enter) AS QtyIn FROM Purchase GROUP BY Code_a ) AS Pu ;

ON Stock.CODE = Pu.Code_a;

LEFT OUTER JOIN;

( SELECT Code_a, SUM(qte_sale) AS QtyOut FROM Sale GROUP BY Code_a ) AS SL ;

ON Stock.CODE = SL.Code_a ) AS crsStock; شرح هذا السطر

WHERE Stock.CODE =crsStock.CODE

و شكرا

#17

اخي العزيز الكود هي لغة استعلام لاحظ الكود القياسي لها

UPDATE Target
   SET Column_Name1 = eExpression1 [, Column_Name2 = eExpression2 ...]
   [FROM [FORCE] Table_List_Item [[, ...] | [JOIN [ Table_List_Item]]]
   WHERE FilterCondition1 [AND | OR FilterCondition2 ...]

واليك المثال البسيط عنها وهي جعل الحقل معين يساوي قيمة معينة بدون شرط

CREATE CURSOR lion (cval n(2))
FOR i=1 TO 10
APPEND BLANK 
UPDATE lion SET cval = 15
NEXT  
BROWSE

اما بخصوص كود الاخ شادو عمل تحديث للقيم لجدول من خلال جدول موقت (كروس) وذلك بشرط معين لاحظ الشرط بعد where

اتمنى وصلك التوضيح

تحياتي للجميع

مواضيع مشابهة