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

كيفية عمل كارت صنف

بدأه atefkhalf2004 في 4 نوفمبر 2013 · 21 رد · 1,641 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السادة الافاضل

هذا الكود لايجاد  رصيد  الاصتاف

 SELECT adraseed.gname AS الشركة, adraseed.invsuc AS [كود الصنف], adraseed.invsun AS [اسم الصنف], Sum(adraseed.invqu) AS [الكمية المباعة], Sum(adraseed.purqu) AS [الكمية المشتراه], (Sum(purqu)-Sum(invqu)) AS [رصيد المخزن]
FROM adraseed
GROUP BY adraseed.gname, adraseed.invsuc, adraseed.invsun;
 

كيف  اعرض  كارت الصف  

#2

حضرتك انا عايز في الاستعلام الكمية المشتراه ثم التاريخ ثم الكمية المباعة ثم تاريخها ثم الرصيد اي الفرق بين المشتري والمباع
مثال
ت الشراء الكمية ت البيع الكمية الرصيد
1-1-2010 20 20
2-10-2010 17 3
3-10-2010 1 2

#3

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

#4

السيد الغاضل  شكرا  لاهتمامك

انا اضفت البيانات للتحربة

ممكن خضرتك  تضيف  اي بيانات شراء     او بيع  

 

وبعد ذلك  برجاء  عمل الكود الللازم

لاني محتاجه ضروري

#5

السلام عليكم ...

المشكلة انك لم تضع مرفقا و لم توضح الجداول المستخدمة ,  لكن بالعودة لمثال الأخ محمد فؤاد تركي :

كيف تبني برنامج مخازن ومبيعات بطريقة صحيحة ؟؟

حيث استخدم بنية صحيحة للجداول و العلاقات , يكون الاستعلام الذي يعطي الادخالات  (Q_IN) هو  : 

SELECT "input" AS OpType, Add_doc.Add_doc AS DocID, Add_doc.Zdate, Add_doc.Supplier AS Supp_Cust, Add_doc.[kind of Trans], Add_doc.Payment, [Transaction].[number], [Transaction].[name], [Transaction].unit, [Transaction].[unit price], [Transaction].Qty_in AS Qty
FROM Add_doc INNER JOIN [Transaction] ON Add_doc.Add_doc = [Transaction].Add_doc;

 و الاستعلام الذي يعطي الاخراجات هو (Q_OUT) : 

SELECT "output" AS OpType, issue_doc.Issue_doc AS DocID, issue_doc.Zdate, issue_doc.Customer AS Supp_Cust, issue_doc.[kind of Trans], issue_doc.Payment, [Transaction].[number], [Transaction].[name], [Transaction].unit, [Transaction].[unit price], [Transaction].Qty_out AS Qty
FROM issue_doc INNER JOIN [Transaction] ON issue_doc.Issue_doc = [Transaction].Issue_doc;

 أما الحصول على الرصيد فيتطلب عمل  Full Outer Join  و الاكسس لا يدعم هذه الميزة (هي بحاجة لعمل اثنين من الـــ Left Join  للجدولين في كل مرة يكون أحدهما هو الايسر)  و الاستعلام هو (Q_FinalBalance):  

SELECT T.TheDate, T.TheName, T.Q_IN.number, T.Q_OUT.number, 0 AS BALANCE
FROM 
(SELECT IIF(IsNull(Q_IN.Zdate) ,Q_OUT.Zdate ,Q_IN.Zdate ) AS TheDate, IIF(IsNull(Q_IN.name) ,Q_OUT.name ,Q_IN.name ) AS TheName, * FROM (
SELECT Q_IN.*, Q_OUT.* , 0 AS BALANCE FROM Q_IN LEFT JOIN Q_OUT ON Q_IN.Zdate = Q_OUT.Zdate  
UNION 
SELECT Q_IN.*, Q_OUT.* , 0 AS BALANCE FROM Q_OUT LEFT JOIN Q_IN ON Q_OUT.Zdate = Q_IN.Zdate  )  AS [XXX])  AS T
ORDER BY T.TheDate;

الآن لاحظ أنني فقط عملت حقل فارغ اسمه balance  فيه القيمة 0 و كل ما عليك عمله هو أن تقوم باستخدام ADO.NET  لتلب البيانات في DataTable  و تعمل حلقة For  على الاسطر لحساب الرصيد في كل سطر من الرصيد في السطر السابق وفق المعادلة : 

الرصيد في السطر الحالي = الرصيد في السطر السابق + الادخالات من السطر الحالي - الاخراجات من السطر الحالي .

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#6

السيد  الفاضل   اكمل جميلك

حضرتك  كل  البيانات  من  جدول واحد  وهوو  radraseed

وهو  في الموضوع  الاساسي   في المشاركة  1

 

  SELECT adraseed.gname AS الشركة, adraseed.invsuc AS [كود الصنف], adraseed.invsun AS [اسم الصنف], Sum(adraseed.invqu) AS [الكمية المباعة], Sum(adraseed.purqu) AS [الكمية المشتراه], (Sum(purqu)-Sum(invqu)) AS [رصيد المخزن]
FROM adraseed
GROUP BY adraseed.gname, adraseed.invsuc, adraseed.invsun;

#7

برجاء  الرد  مرفق  القاعدة

salse.rar

#8

السلام عليكم ..

Q_IN

SELECT purdate AS TheDate, adraseed.gname AS Company, adraseed.invsuc AS [كود الصنف], adraseed.invsun AS [اسم الصنف], adraseed.purqu AS [الكمية المشتراه]
FROM adraseed
WHERE purdate IS NOT NULL;

 و الــــ Q_OUT  يكون : 

SELECT invdate AS TheDate, adraseed.gname AS الشركة, adraseed.invsuc AS [كود الصنف], adraseed.invsun AS [اسم الصنف], adraseed.invqu AS [الكمية المباعة]
FROM adraseed
WHERE invdate IS NOT NULL;

 و الــ Q_Final

SELECT FinalDate, *
FROM (SELECT IIF(IsNull(Q_IN.TheDate) ,Q_OUT.TheDate ,Q_IN.TheDate ) AS FinalDate, * FROM (SELECT Q_IN.*, Q_OUT.* , 0 AS BALANCE FROM Q_IN LEFT JOIN Q_OUT ON Q_IN.TheDate = Q_OUT.TheDate   UNION  SELECT Q_IN.*, Q_OUT.* , 0 AS BALANCE FROM Q_OUT LEFT JOIN Q_IN ON Q_OUT.TheDate = Q_IN.TheDate  )  AS T)  AS TT
ORDER BY FinalDate;

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#9

الاستاذ  حسام

الكود  اعطي  نتائج  غير  صحيحة بالمرة   ويمكنك   التجربة

 

لاحظ   ان الجدول adraseed     به جميع  البيانات المطلوبة    مثل كمية وتاريخ المشتريات والمبيعات

 

اي  لا احتاج الجداول الاخري

 

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

شكرا

#10

السلام عليكم ..

معك حق ... النتائج غير صحيحة ...

لا يمكنني حل الاستعلام دفعة واحدة فأنا بحاجة لاستعلامات أخرى (ليست جداول و يمكن الوصول اليها من الدوت نت) ...

انا اريد وضع الادخالات و جانبها فراغ ثم اريد فراغ و جانيه الاخراجات .. و هذا يسمى بالربط Join  و لكن لكي أضمن أن كل سجل سيكون مقابله فراغ (Null)  يجب وضع شرط لن يتحقق ابدا في معامل الربط On  و هذا الشرط هو 

 ON  Q_IN.invsuc * 0 =  Q_OUT.invsuc * 0 + 1

لاحظ أن 0 لا يساوي 1 .. 

الاستعلام Q_IN  يكون : 

SELECT purdate AS TheDate, adraseed.gname AS Company, adraseed.invsuc, adraseed.invsun AS [اسم الصنف], adraseed.purqu AS [الكمية المشتراه]
FROM adraseed
WHERE purdate IS NOT NULL;

الاستعلام Q_OUT  يكون : 

SELECT invdate AS TheDate, adraseed.gname AS الشركة, adraseed.invsuc, adraseed.invsun AS [اسم الصنف], adraseed.invqu AS [الكمية المباعة]
FROM adraseed
WHERE invdate IS NOT NULL;

 و الاستعلام النهائي :

SELECT FinalDate, *
FROM (
SELECT IIF(IsNull(Q_IN.TheDate) ,Q_OUT.TheDate ,Q_IN.TheDate ) AS FinalDate, * 
FROM (
SELECT Q_IN.*, Q_OUT.* , 0 AS BALANCE 
FROM Q_IN LEFT JOIN Q_OUT   ON  Q_IN.invsuc * 0 =  Q_OUT.invsuc * 0 + 1
UNION ALL
SELECT Q_IN.*, Q_OUT.* , 0 AS BALANCE FROM Q_OUT LEFT JOIN Q_IN   ON  Q_OUT.invsuc * 0 = Q_IN.invsuc * 0 + 1 
)  AS T)  AS TT
WHERE (Q_IN.invsuc = 602) OR( Q_OUT.invsuc = 602)
ORDER BY FinalDate ;

 حقل الــ Balance  (الرصيد) لاحظ انه 0 و لا يمكنني حسابه ضمن إمكانيات الأكسس , كما ذكرت لك , بالــ ADO.NET  تقوم بملئ DataTable  و تعمل For  على الاسطر لحساب الرصيد بناء على الرصيد في السطر السابق .

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#11

تعبتك معاي

 

صدقني  انا  لم استطع عمل فورم  واين اضع  هذه الاستعلامات 

برجاء   عمل  فورم بسيط  بالفيجوال يوضح النتائج  

ربنا يخليك

الموضوع مهم  جدا لي

#12

تضع الاستعلامات في نفس القاعدة و بنفس الاسماء المذكورة ...

صديقي .. المنتدى تعليمي .. للمساعدة في حل المشاكل .. و ليس لانجاز المشاريع للأعضاء ..  ارجو مراجعة الدروس و المواضيع في المنتدى ..

طلبت مني في موضوع سابق (عمل فاتورة بالكود) إنشاء فورم للفواتير ... و قمت بذلك لك .. قم بإنشاء الفورم الحالي بنفس الطريقة و الأكواد .

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#13

كلام حضرتك صحيح    للتعليم وليس  لانجاز

 

لكن    انا مدرس  وليس  مبرمج محترف 

ولا اكذب عليك    هذذا موضوع طلب مني   واعجبتني  الفكرة     بالاضافة  انني  اتعلم منها

وينفصني   الفكر   وابتكار  الكود   

 

ولا ارغب  في  وضع الاسنهلام في  القاعدة

ولا اعرف كيف اسند   البيانات الي  جدول

كل اللي بعمله  اذد  كود واعدل فيه

معذرة مرة اخري

كيف  اسند  هذه  الاستعلامات الي  table  واحصل علي النتائج

 

وتحملني   ....  معلهش  

#14

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

برجاء  تحقيق  طلبي  ومنك  نتعلم        وللاسغ انا اقلد   ولا عتدي  اي  ابتكار

#15

لابد من وضع الاستعلام داخل القاعدة ...

الملف مرفق ....

ArabTeamMaterialBalance.rar

تم تعديل هذه المشاركة بواسطة حسام الشامي في 13 نوفمبر 2013 في 18:20 — السبب: تعديل محتوى المرفقات

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#16

الاستاذ  الفاضل  حسام 

لا اخفي  عليك      مدي  احترامي  لك   وشكري   لك

 

سبق وان قلت لك  انني  ارغب  دائما في التعليم      والطريقة   ممتازة  لكن  اعلي من مستواي  بكثيييييييير

 

الكود  السابق   يعرض  كارت صنف  ولكن  فيه  مشكلة  واحدة  وهو   ان  الرصيد   النهائي    يظهر  امام كل  عملية 

 

مثال  

لو  صنف      ا        كمية  الشراء   10      الرصيد            3

                           كمية  المبيعات    4     الرصيد           3

                           كمية المبيعات     2    الرصيد            3

                          كمية المبيعات       7   الرصيد             3

                         كمية الشراء          3   الرصيد           3

 

كيف   اعدله بحيث      بعرض  كارت صنف  معين     (  نختار  الاسم  مثلا من كمبو بوكس  )

SELECT a.invsun, a.invqu, a.purqu, (select sum(purqu-invqu) from adraseed as b where b.[invsun]=a.[invsun] ) AS aaa   FROM adraseed AS a   ORDER BY a.adraseed

 

هذا الكود  بحثت فوجدته في  احد  المواقع   وكنت احتفظ  به      عدلته وحفظته  كنص     وللعلم   حاولت اعدله لم استطع     ولم  اتذكر  اسم  الموقع

 

برجاء  اجاء  التعديل  البسيط   لكي يعرض  رصيد  صنف نختاره

#17

الحل الذي  طرحته حضرتك  ممتاز  لكن اعلي من مستواي بكثيييييييييير

هذا الكود   يعرض  الرصيد  لكارت الصنف ولكن  ليس بكفاءة كود  حضرتك   لكن اسهل علي  ان اتبعه  

انا وضعته حتي يستفيد منه  الاخرين  

 

SELECT a.invsun, a.invqu, a.purqu, (select sum(purqu-invqu) from adraseed as b where b.[invsun]=a.[invsun] ) AS aaa   FROM adraseed AS a   ORDER BY a.adraseed

 

مع  رجاء  تعديله ليمكن  عرض  رصيد  صنف  معين  مثلا       من كمبوبوكس

 

شكرا  لاهتمامك  وكرمك  الدائم   

#18

السلام عليكم ..

الكود الذي يعطي الرصيد يجب أن يكون الاستعلام على جدول الــ items  كالتالي :

SELECT a.itcod, a.itnam, (select sum(purqu-invqu) from adraseed as b where b.[invsuc]=a.[itcod] ) AS TheBalance
FROM items AS a;

و هو موجود بالقاعدة في المرفقات السابقة باسم Q_Balance  .

تم تعديل مرفقات المشاركة السابقة 

تم تعديل هذه المشاركة بواسطة حسام الشامي في 13 نوفمبر 2013 في 18:19

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#19

رصيد  اجمالي  اعطي هذه الرسالة

Conversion failed because the Decimal data value overflowed the type specified for the Decimal value part in the consumer's buffer.

 

وهلممكن تضيف لي كما طلبت سابقا  وعلي  نفس  اكود الذي ارسلته لك    كيفية اختيار صنف  في البحث  ؟؟؟؟؟

شكرا

تم تعديل هذه المشاركة بواسطة atefkhalf2004 في 13 نوفمبر 2013 في 20:06

#20

قم بتعديل الاستعلام للتالي : 

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim ConnSTR As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\sales.mdb;Persist Security Info=False;"
        Dim Connect As New OleDbConnection(ConnSTR)
        Dim command As New OleDbCommand
        command.CommandText = "SELECT  itcod ,itnam , IIF(IsNULL(TheBalance) , 0 , TheBalance) AS TheBalance FROM Q_Balance WHERE (itcod=@itemCode)"
        command.Parameters.AddWithValue("@itemCode", cmbItem.SelectedValue)
        command.Connection = Connect
        Dim Dt As New DataTable
        Dim sqlds As New OleDbDataAdapter(command)
        sqlds.Fill(Dt)
        DataGridView1.DataSource = Dt
        Connect.Close()
    End Sub

يمكن فتح موضوع جديد من أجل أي استفسارات أخرى أو طلبات أخرى ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#21

شكرا كثيرا جدا علي  اهتمامك  

وربنا يزييييييييييييييييييييييييييييييييييييييييييييييد في علمك

#22
atefkhalf2004 كتب:

شكرا كثيرا جدا علي  اهتمامك  

وربنا يزييييييييييييييييييييييييييييييييييييييييييييييد في علمك

عفوا .. عفوا ...

و يزيدك إن شاء الله ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

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