منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[VB.NET] معالجة مشكل طباعة الفاتورة دون حفضها - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم قواعد البيانات (http://vb4arb.com/vb/forumdisplay.php?fid=40)
+--- قسم : قسم اسئلة التقارير والطباعة تحت بيئة الـ.NET (http://vb4arb.com/vb/forumdisplay.php?fid=71)
+--- الموضوع : [VB.NET] معالجة مشكل طباعة الفاتورة دون حفضها (/showthread.php?tid=31668)



معالجة مشكل طباعة الفاتورة دون حفضها - sniperjawadino - 06-10-19

السلام عليكم

في برنامج  فاتورة مطعم أقوم بتتابع

1- طبع الفاتورة في ورقة من خلال داتاغريد
2- نقص كمية المنتوجات من قاعدة البيانات
3- حفض رأس الفاتورة
4- حفض منتوجات الفاتورة
5- إفراغ الداتاغريد


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

جزاكم الله خيرا

لا أريد طباعة الورقة إذا لم يتم حفضها في القاعدة


RE: معالجة مشكل طباعة الفاتورة دون حفضها - حريف برمجة - 06-10-19

قبل الطباعة اعمل استعلام برقم الفاتورة إذا الرقم موجود قم بالطباعة او الغي امر الطباعة .


RE: معالجة مشكل طباعة الفاتورة دون حفضها - sniperjawadino - 06-10-19

شكرا أخي

لكني من باب سرعة البرنامج
أقوم بالطباعة قبل حفض الفاتورة 
كما وضحت في التسلسل

كما أنه كيف أعرف رقم الفاتورة و هي لم تحفض في القاعدة 
فهناك عدة عملاء يحفضون في القاعدة في نفس الوقت و أخاف أن يقع أي تعارض

----------------

لو تكرمت أخي و تضع لي كود TRANSACTION هنا 
سأكن شاااكرا لك



كود :
   
       Using cmd As New OleDbCommand("UPDATE ", cn)
           cmd.ExecuteNonQuery()
       End Using

       Using cmd As New OleDbCommand("INSERT ", cn)
           cmd.ExecuteNonQuery()
       End Using

       Using cmd As New OleDbCommand("Delete ", cn)
           cmd.ExecuteNonQuery()
       End Using



RE: معالجة مشكل طباعة الفاتورة دون حفضها - kiki - 06-10-19

كل الامر انك بحاجة لعمل كود تحقق وليكن كاستعلام لجلب قيمة واحدة مثلاً كالتالى لو بتستخدم Sql

كود :
sql select top 1 id from aaa

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


RE: معالجة مشكل طباعة الفاتورة دون حفضها - حريف برمجة - 06-10-19

انت بتقول "لا أريد طباعة الورقة إذا لم يتم حفضها في القاعدة "

بعد الحفظ يتم جلب رقم الفاتورة مباشرة ،،

ثم طباعة الفاتورة في حال جلب رقم الفاتورة .

هذا مثال لحفظ سجل في قاعدة بيانات اكسس وجلب ID للسجل نفسه ،، يمكنك التحقق من القيمة وتنفيذ امر بعد التحقق .

كود :
Dim connect As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
   "Data Source=|DataDirectory|\Database1.accdb;Persist Security Info=True;"

متغير يحمل قيمة الترقيم التلقائي    Dim ID As Integer

Using conn As New OleDbConnection(connect)
 Using cmd As New SqlCommand("insert Into Categories (CategoryName) Values (@CategoryName)", conn)
   cmd.Parameters.AddWithValue("@CategoryName", Category.Text)
   conn.Open()
   cmd.ExecuteNonquery()
   cmd.Commandtext="select @@Identity"
   ID = cmd.ExecuteScalar()

MsgBox(ID)

If ID <> "" or ID <> Nothing then
ضع كود الطباعة هنا سواء بإستعلام برقم الآيدي أو من الداتاقريدفيو كما عملت انت
End If

   conn.close()
 End Using
End Using



RE: معالجة مشكل طباعة الفاتورة دون حفضها - sniperjawadino - 07-10-19

(06-10-19, 06:52 PM)kiki كتب :
كود :
sql select top 1 id from aaa


شكرا لك أخي KIKI  سأحاول إستخدام الفكرة
جزاك الله كل خير

(06-10-19, 09:13 PM)حريف برمجة كتب : حريف برمجة
كود :
Dim connect As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
   "Data Source=|DataDirectory|\Database1.accdb;Persist Security Info=True;"

متغير يحمل قيمة الترقيم التلقائي    Dim ID As Integer

Using conn As New OleDbConnection(connect)
 Using cmd As New SqlCommand("insert Into Categories (CategoryName) Values (@CategoryName)", conn)
   cmd.Parameters.AddWithValue("@CategoryName", Category.Text)
   conn.Open()
   cmd.ExecuteNonquery()
   cmd.Commandtext="select @@Identity"
   ID = cmd.ExecuteScalar()

MsgBox(ID)

If ID <> "" or ID <> Nothing then
ضع كود الطباعة هنا سواء بإستعلام برقم الآيدي أو من الداتاقريدفيو كما عملت انت
End If

   conn.close()
 End Using
End Using


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