📄 wzck.pas
字号:
unit WZCK;
interface
uses
Windows, SysUtils, Variants, Classes, Controls, Forms, ADODB, Dialogs,
StdCtrls, ExtCtrls, WZGLCommon, DB, Grids, DBGrids, CKD;
type
TWZCKForm = class(TForm)
pnlToolBar: TPanel;
dbWZCK: TDBGrid;
dsWZCK: TDataSource;
adoqWZCK: TADOQuery;
btAdd: TButton;
btDel: TButton;
procedure btAddClick(Sender: TObject);
procedure btDelClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure dsWZCKDataChange(Sender: TObject; Field: TField);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
procedure SaveCKRK(ACKID: Integer; ABm: string; ACksl: Double);
public
{ Public declarations }
constructor Create(AOwner: TComponent); reintroduce;
end;
var
WzckForm: TWzckForm;
implementation
{$R *.dfm}
constructor TWZCKForm.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
with adoqWZCK do
begin
Connection := AdoWzgl;
SQL.Text := 'select b.CKID, b.Ckrq, b.Bm, a.MC, a.GG, a.DW, a.DJ, b.CKSL, ' +
'a.DJ * b.CKSL as HJ from WZZD a, CKXX b where a.Bm = b.Bm Order by Ckrq';
Open;
end;
end;
procedure TWZCKForm.btAddClick(Sender: TObject);
begin
with TCKDForm.Create(Self) do
try
ShowModal;
if ModalResult = mrOK then
with adoqWzck, FWZRec do
begin
Append;
FieldByName('BM').AsString := BM;
FieldByName('CKSL').AsFloat := CKSL;
FieldByName('CKRQ').AsDateTime := Date;
Post;
ReQuery;
Last;
// 保存出库关联入库信息
SaveCKRK(FieldByName('CKID').AsInteger, BM, CKSL);
end;
finally
free;
end;
end;
procedure TWZCKForm.btDelClick(Sender: TObject);
begin
if Application.MessageBox('是否删除?', '确认', 1) = 1 then
with TAdoQuery.Create(nil) do
try
Connection := AdoWzgl;
Sql.Text := 'Delete from CKRK where CKID = ' +
IntToStr(adoqWzck.FieldByName('CKID').asInteger);
ExecSQL;
Close;
Sql.Text := 'Delete From CKXX where CKID = ' +
IntToStr(adoqWzck.FieldByName('CKID').AsInteger);
ExecSql;
adoqWzck.Requery;
finally
Free;
end;
end;
procedure TWZCKForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
WzckForm := nil;
end;
procedure TWZCKForm.dsWZCKDataChange(Sender: TObject; Field: TField);
begin
btDel.Enabled := not (adoqWzck.Eof and adoqWzck.Bof);
end;
procedure TWZCKForm.FormDestroy(Sender: TObject);
begin
if adoqWzck.Active then adoqWzck.Close;
end;
procedure TWZCKForm.SaveCKRK(ACKID: Integer; ABm: string; ACksl: Double);
var
l_RKID: Integer;
l_KCSL, l_CKSL: Double;
l_Adoq: TAdoQuery;
begin
l_Adoq := TAdoQuery.Create(nil);
l_Adoq.Connection := AdoWzgl;
l_CKSL := ACksl;
with TAdoQuery.Create(nil) do
try
//根据物资编码找到入库信息中库存量大于0的记录,然后再根据出库数量进行匹配,
//将对应的每条入库信息的出库量保存到出库关联入库信息表中
Connection := AdoWzgl;
Sql.Text := 'select c.RKID, c.RKSL, c.KCSL from (select a.RKID, RKSL, RKSL - b.CKSL as KCSL ' +
'from RKXX a left join (select RKID, sum(SL) as CKSL from CKRK ' +
'Group by RKID) b on a.RKID = b.RKID where Bm = ' + QuotedStr(ABm) +
') c where c.KCSL > 0 or c.KCSL is Null';
Open;
while not Eof do
begin
l_RKID := FieldByName('RKID').AsInteger;
if FieldByName('KCSL').AsFloat = 0 then
l_KCSL := FieldByName('RKSL').AsFloat
else
l_KCSL := FieldByName('KCSL').AsFloat;
if l_KCSL - l_CKSL >= 0 then
begin
l_Adoq.SQL.Text := 'Insert Into CKRK (RKID, CKID, SL) Values (' +
IntToStr(l_RKID) + ', ' + IntToStr(ACKID) + ', ' + FloatToStr(l_CKSL) + ')';
l_Adoq.ExecSQL;
Break;
end
else begin
l_CKSL := l_CKSL - l_KCSL;
l_Adoq.SQL.Text := 'Insert Into CKRK (RKID, CKID, SL) Values (' +
IntToStr(l_RKID) + ', ' + IntToStr(ACKID) + ', ' + FloatToStr(l_KCSL) + ')';
l_Adoq.ExecSQL;
Next;
end;
end;
finally
Free;
end;
l_adoq.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -