كيف أرجع الكمية المحذوفة الى جدول المواد المخزنة عند الغاء التسجيل من فاتورة
#1
Question 
السلام عليكم اخواني، 
عند الغاء التسجيل من فاتورة ، أريد أن يرجع الكمية المحذوفة الى جدول المواد المخزنة؟؟؟؟؟
ما الخطأ في السورس لأنه يتوقف البرنامج عند الضغط على زر الحذف التسجيل من جدول الفاتورة
كود :
   if spSkinMessage.messagedlg('Recuperer les quantité du stock?',mtconfirmation,[mbyes,mbno],0)=mryes then     begin      TArticleX4.First;         while not TArticleX4.eof do           begin             if (TArticleX4.fieldbyname('Désignation_Art').asstring=TLigne_Comptoire.FieldByName('Designation_LC').asstring) then               begin                TArticleX4.Edit;                TArticleX4.FieldByName('Quantité_Art').asinteger:=TArticleX4.FieldByName('Quantité_Art').asinteger-                TLigne_Comptoire.FieldByName('Qte_LC').asinteger;                TArticleX4.Post;                TArticle.Refresh;                Break;               end;              end;              TArticleX4.Next;           end;
الرد
#2
وعليكم السلام ورحمة الله وبركاته ،
أظن أن حلقة التكرار تكون على مستوى جدول الفاتورة و ليس جدول المواد.


كود :
While Not  [code]TLigne_Comptoire.eof do begin .... ..... ..... TLigne_Comptoire.next end;
[/code]
كود :
لاحظ أيضا أن القيمة المرجعة تكون بالزائد و ليس ناقص : Article.qte := Article.qte + TLigne_Comptoire.qte ثم أنني لم أفهم وظيفة Break و حبذا لو تعيطنا نوع قاعدة البيانات المستعملة. بالتوفيق.
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
الرد
#3
نوع قاعدة البيانات أكسس
الرد
#4
بسم الله الرحمن الرحيم
الصلاة والسلام على رسول الله

جرب هذا المثال : ربما تجد الحل

كان جوابي  حسب الكود الذي وضعته



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

كود :
unit Bachirsoft; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics,   Controls, Forms,   Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids; type   TForm1 = class(TForm)     Button1: TButton;     TArticleX4: TTable;     TLigne_Comptoire: TTable;     TArticle: TDBGrid;     Query1: TQuery;     DataSource1: TDataSource;     DBGrid1: TDBGrid;     DataSource2: TDataSource;     Table1: TTable;     procedure Button1Click(Sender: TObject);     procedure FormCreate(Sender: TObject);    end; var   Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin //spSkinMessage.  if messagedlg('Recuperer les quantité du stock?',mtconfirmation,[mbyes,mbno],0)=mryes then      begin    TArticleX4.DisableControls; // من أجل تسريع    TLigne_Comptoire.DisableControls;    try      TLigne_Comptoire.First;         while not TLigne_Comptoire.eof do         begin          TArticleX4.First;          while not TArticleX4.eof do           begin             if TArticleX4.fieldbyname('Designation_Art').asstring=              TLigne_Comptoire.FieldByName('Designation_LC').asstring             then               begin                TArticleX4.Edit;                TArticleX4.FieldByName('Quantite_Art').asinteger:=                TArticleX4.FieldByName('Quantite_Art').asinteger-                TLigne_Comptoire.FieldByName('Qte_LC').asinteger;                TArticleX4.Post;                TArticle.Refresh;                Break;  //الخروج من الحلقة عند أول تساوي للكميتين                // اذا كنت تريد مقارنة عدة قيم أقف عمل                // Break;               TArticleX4.Next; // يضع داخل شرط وخارج شرط               end;                TArticleX4.Next; // يضع داخل شرط وخارج شرط              end; // وداخل الحلقة;              TLigne_Comptoire.Next; // وداخل الحلقة           end;    finally     TArticleX4.EnableControls;     TLigne_Comptoire.EnableControls;   end;   end; end; procedure TForm1.FormCreate(Sender: TObject); begin     if not fileExists('fat_LC.db') then     begin      Query1.Close;      Query1.SQL.Clear;      Query1.SQL.Add('CREATE TABLE "fat_LC.db"(Designation_LC CHAR(20),Qte_LC CHAR(20))');      Query1.ExecSQL;     end;     if not fileExists('fat_Art.db') then     begin      Query1.Close;      Query1.SQL.Clear;      Query1.SQL.Add('CREATE TABLE "fat_Art.db"(Designation_Art CHAR(20),Quantite_Art CHAR(20))');      Query1.ExecSQL;     end;     Query1.Close;     if (fileExists('fat_Art.db'))and(fileExists('fat_LC.db')) then     begin       TArticleX4.TableName := 'fat_Art.db';       TLigne_Comptoire.TableName := 'fat_LC.db';       DataSource1.DataSet := TArticleX4;       DataSource2.DataSet := TLigne_Comptoire;       TArticle.DataSource := DataSource1;       dbgrid1.DataSource := DataSource2;       TArticleX4.Open;       TLigne_Comptoire.Open;     end; end; end.


الملفات المرفقة
.rar   Bachirsoft.rar (الحجم : 2.25 ك ب / التحميلات : 34)
الرد
#5
خطأ في الكود السابق
يضع خارج شرط في هذه الحالة
لأنه شرط بسيط أي غير متعدد

كود :
.. .... TArticleX4.DisableControls; // من أجل تسريع TLigne_Comptoire.DisableControls; try TLigne_Comptoire.First; while not TLigne_Comptoire.eof d begin TArticleX4.First; while not TArticleX4.eof do begin if TArticleX4.fieldbyname('Designation_Art').asstring= TLigne_Comptoire.FieldByName('Designation_LC').asstring then begin TArticleX4.Edit; TArticleX4.FieldByName('Quantite_Art').asinteger:= TArticleX4.FieldByName('Quantite_Art').asinteger- TLigne_Comptoire.FieldByName('Qte_LC').asinteger; TArticleX4.Post; TArticle.Refresh; //Break; //الخروج من الحلقة عند أول تساوي للكميتين // اذا كنت تريد مقارنة عدة قيم أقف عمل // Break; //TArticleX4.Next; //أوقف هذا لأنه خاطئ end; TArticleX4.Next; // يضع خارج شرط في هذه الحالة end; // وداخل الحلقة; TLigne_Comptoire.Next; // وداخل الحلقة end; finally TArticleX4.EnableControls; TLigne_Comptoire.EnableControls; end; .. .


ثاني خطأ هو
كود :
if Query1.Active then Query1.Close;
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم