📄 depotoutputunit.pas
字号:
unit depotOutputUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, ComCtrls, StdCtrls, ExtCtrls, DB, DBTables, ADODB;
type
TdepotOutputfrm = class(TForm)
P_back: TPanel;
P_main: TPanel;
Panel_down: TPanel;
Bevel_bass: TBevel;
L_count: TLabel;
Panel_button: TPanel;
PageScroller_input: TPageScroller;
Panel1: TPanel;
Label1: TLabel;
Label3: TLabel;
Label2: TLabel;
DTP_date: TDateTimePicker;
IMPSG_DATA: TStringGrid;
L_title: TLabel;
OKBtn: TButton;
CancelBtn: TButton;
ADOQuery_data: TADOQuery;
DataSource_data: TDataSource;
cb_depot: TComboBox;
cb_ywy: TComboBox;
function User_save: boolean;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure CancelBtnClick(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure IMPSG_DATADblClick(Sender: TObject);
procedure IMPSG_DATAKeyPress(Sender: TObject; var Key: Char);
procedure IMPSG_DATASelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure IMPSG_DATASetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: string);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure OKBtnClick(Sender: TObject);
private
I_lastcol, I_lastrow: integer;
{ Private declarations }
public
{ Public declarations }
end;
var
depotOutputfrm: TdepotOutputfrm;
implementation
uses MainUnit, GoodsSelectUnit, DMUnit,functionUnit, GoodsInfoUnit;
{$R *.dfm}
function TdepotOutputfrm.User_save: boolean;
var
I_errordb, I_temp, I_count, I_recordcount, I_number: integer;
S_depotid, S_tempid, S_id: string;
begin
I_errordb := 0;
I_count := 0;
S_depotid := '';
if CB_depot.Text = '' then
begin
messagedlg(Errormsg0002, mtwarning, [mbok], 0);
cb_depot.SetFocus;
result := false;
end
else
result := true;
/////////////////////////////////////////
if result then
begin
for I_temp := 1 to 99 do //逐行检测进货记录是否有效
begin
if IMPSG_DATA.Cells[1, I_temp] <> '' then //有效记录
begin
inc(I_count);
if (IMPSG_DATA.cells[4, I_temp] = '') or (IMPSG_DATA.cells[5, I_temp] = '') then
begin
messagedlg('第' + inttostr(I_temp) +'行记录的' + Errormsg0002, mtError, [mbok], 0);
IMPSG_DATA.Row := I_temp;
IMPSG_DATA.Col := 4;
IMPSG_DATA.SetFocus;
result := false;
exit;
end;
try
strtofloat(IMPSG_DATA.Cells[4, I_temp]);
strtofloat(IMPSG_DATA.Cells[5, I_temp]);
except
messagedlg('第' + inttostr(I_temp) +'行记录的' + Errormsg0002 , mtError, [mbok], 0);
IMPSG_DATA.Row := I_temp;
IMPSG_DATA.Col := 4;
IMPSG_DATA.SetFocus;
result := false;
exit;
end;
end;
end;
if I_count < 1 then
begin
result := false;
messagedlg(Errormsg0008, mtwarning, [mbok], 0);
end;
end;
//////////////////////
if result then
begin
////////////////////////////////////////////////////////////
try
with ADOQuery_data do
begin
close;
sql.Clear;
sql.Text := 'select id from depot where name=''' + cb_depot.Text + '''';
open;
S_depotid := fieldbyname('id').AsString;
close;
end;
//检查主仓库是否有库存,即主仓库退货数量是否合法
for I_temp := 1 to 99 do
begin
if IMPSG_DATA.Cells[1, I_temp] <> '' then //有效记录
begin
I_errordb := 1;
with ADOQuery_data do
begin
close;
close;
sql.Clear;
sql.text := 'select id,goodsnum from Storagerecord where depotid="'
+ S_depotid + '" and goodsid="' + IMPSG_DATA.Cells[1, I_temp] + '"';
open;
S_id := fieldbyname('id').asstring;
I_number := fieldbyname('goodsnum').AsInteger - strtoint(IMPSG_DATA.cells[4, I_temp]);
end;
if (I_recordcount <= 0) or (s_id = '') then //本行商品没有库存记录
begin
messagedlg('在【' + cb_depot.Text + '】内' + Errormsg0009, mtwarning, [mbok], 0);
impsg_data.Row := I_temp;
impsg_data.Col := 1;
result := false;
close;
exit;
end
else if I_number < 0 then //库存数量小于退货数量
begin
messagedlg('在【' + cb_depot.Text + '】内' + Errormsg0010, mtwarning, [mbok], 0);
impsg_data.Row := I_temp;
impsg_data.Col := 4;
result := false;
close;
exit;
end;
end;
end;
/////////////////////////////////////////////////
for I_temp := 1 to 99 do
begin
if IMPSG_DATA.Cells[1, I_temp] <> '' then //有效记录
begin
I_errordb := 1; //销售记录更新
with ADOQuery_data do
begin
close;
sql.Clear;
ADOquery_data.SQL.Text:='insert into threcord (depotid,goodsid,goodsnum,mydate,id,goodsmemo,price)'
+' '+' Values(:id,:goodsid,:goodsnum,:mydate,:id,:goodsmemo,:price)';
Parameters.Items[0].Value:=S_depotid;
Parameters.Items[1].Value:=IMPSG_DATA.Cells[1, I_temp];
Parameters.Items[2].Value:=IMPSG_DATA.cells[4, I_temp];
Parameters.Items[3].Value:=formatdatetime('yyyy-mm-dd', DTP_date.DateTime);
Parameters.Items[4].Value:=Nowindex + '-' + inttostr(I_temp);
Parameters.Items[5].Value:=IMPSG_DATA.cells[7, i_temp];
Parameters.Items[6].Value:=IMPSG_DATA.cells[5, i_temp];
ExecSQL;
close;
end;
/////////////////////////////////
I_errordb := 2; //库存记录表查询
with ADOQuery_data do
begin
close;
sql.clear;
sql.Text:= 'select id,goodsnum from Storagerecord where depotid=''' +
S_depotid + ''' and goodsid=''' + IMPSG_DATA.Cells[4, I_temp] + '''';
open;
//进货仓库统计
S_tempid := fieldbyname('id').asstring;
I_count := fieldbyname('goodsnum').AsInteger - strtoint(IMPSG_DATA.cells[4, I_temp]);
I_recordcount := recordcount;
close;
end;
////////////////////////////////////
I_errordb := 3;//库存记录更新
with ADOQuery_data do
begin
if (I_recordcount > 0) and (S_tempid <> '') then
begin
sql.Clear;
sql.Text := 'update Storagerecord set goodsnum=' + inttostr(I_count) + ',price=' + IMPSG_DATA.cells[5, I_temp]
+ ' where id=''' + s_tempid + '''';
ADOquery_data.ExecSQL;
ADOquery_data.Close;
end
else
begin
close;
sql.Clear;
ADOquery_data.SQL.Text:='insert into Storagerecord (depotid,goodsid,goodsnum,price,id,goodsmemo)'
+' '+' Values(:depotid,:goodsid,:goodsnum,:price,:id,:goodsmemo)';
Parameters.Items[0].Value:=S_depotid;
Parameters.Items[1].Value:=IMPSG_DATA.Cells[1, I_temp];
Parameters.Items[2].Value:=I_count;
//Parameters.Items[2].Value:=IMPSG_DATA.cells[4, I_temp];
Parameters.Items[3].Value:=IMPSG_DATA.cells[5, I_temp];
Parameters.Items[4].Value:=Nowindex + '-' + inttostr(I_temp);
Parameters.Items[5].Value:=IMPSG_DATA.cells[7, i_temp] ;
ExecSQL;
close;
end;
end;
end;
end;
except
result := false;
if I_errordb = 1 then
messagedlg(Errormsg0001, mtwarning, [mbok], 0)
else if I_errordb = 2 then
messagedlg(Errormsg0004 , mtwarning, [mbok], 0)
else if I_errordb = 3 then
messagedlg(Errormsg0004 , mtwarning, [mbok], 0)
else
messagedlg(Errormsg0001 , mtwarning, [mbok], 0);
close;
exit;
end;
end;
end;
procedure TdepotOutputfrm.FormCreate(Sender: TObject);
var
I_windows: integer;
i_temp: integer;
begin
with MainForm do
begin
for I_windows := 0 to Panel_main.DockClientCount - 1 do
begin
Panel_main.DockClients[I_windows].Hide;
end;
end;
I_lastcol := 1; //上一次编辑单元格位置指针
I_lastrow := 1;
dtp_date.DateTime := now;
Adoquery_data.Connection:=DM.ADOCon;
//初始化显示表格IMPSG_DATA
with IMPSG_DATA do
begin
ColCount := 10;
ColWidths[0] := 16;
ColWidths[1] := 80;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -