![]() |
|
كيف أرجع الكمية المحذوفة الى جدول المواد المخزنة عند الغاء التسجيل من فاتورة - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : كيف أرجع الكمية المحذوفة الى جدول المواد المخزنة عند الغاء التسجيل من فاتورة (/showthread.php?tid=8434) |
كيف أرجع الكمية المحذوفة الى جدول المواد المخزنة عند الغاء التسجيل من فاتورة - Bachirsoft - 04-03-2017 السلام عليكم اخواني، عند الغاء التسجيل من فاتورة ، أريد أن يرجع الكمية المحذوفة الى جدول المواد المخزنة؟؟؟؟؟ ما الخطأ في السورس لأنه يتوقف البرنامج عند الضغط على زر الحذف التسجيل من جدول الفاتورة كود : 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;RE: كيف أرجع الكمية المحذوفة الى جدول المواد المخزنة عند الغاء التسجيل من فاتورة - أبو معاذ - 05-03-2017 وعليكم السلام ورحمة الله وبركاته ، أظن أن حلقة التكرار تكون على مستوى جدول الفاتورة و ليس جدول المواد. كود : While Not
[code]TLigne_Comptoire.eof do
begin
....
.....
.....
TLigne_Comptoire.next
end;كود : لاحظ أيضا أن القيمة المرجعة تكون بالزائد و ليس ناقص :
Article.qte := Article.qte + TLigne_Comptoire.qte
ثم أنني لم أفهم وظيفة Break
و حبذا لو تعيطنا نوع قاعدة البيانات المستعملة.
بالتوفيق.RE: كيف أرجع الكمية المحذوفة الى جدول المواد المخزنة عند الغاء التسجيل من فاتورة - Bachirsoft - 06-03-2017 نوع قاعدة البيانات أكسس RE: كيف أرجع الكمية المحذوفة الى جدول المواد المخزنة عند الغاء التسجيل من فاتورة - sabre - 12-03-2017 بسم الله الرحمن الرحيم الصلاة والسلام على رسول الله جرب هذا المثال : ربما تجد الحل كان جوابي حسب الكود الذي وضعته ولكن تقوم ببعض تغيرات فقط كي تستطيع تطبيقيه على قاعدة البيانات التي تعمل عليها كود : 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.RE: كيف أرجع الكمية المحذوفة الى جدول المواد المخزنة عند الغاء التسجيل من فاتورة - sabre - 13-03-2017 خطأ في الكود السابق يضع خارج شرط في هذه الحالة لأنه شرط بسيط أي غير متعدد كود : ..
....
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; |