📄 pfm_fdthdok.pas
字号:
unit pfm_fdthdok;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, ComCtrls, Grids, DBGrids, ExtCtrls, DBCtrls, StdCtrls, Mask,
Buttons, pvar_lib;
type
Tfm_fdthdok = class(TForm)
DataSource1: TDataSource;
Query1: TQuery;
GroupBox1: TGroupBox;
TV1: TTreeView;
DBGrid1: TDBGrid;
GroupBox2: TGroupBox;
Label1: TLabel;
DBEdit1: TDBEdit;
BBtnRevise: TBitBtn;
Label2: TLabel;
BBtnThd: TBitBtn;
DBEdit2: TDBEdit;
Splitter1: TSplitter;
Label3: TLabel;
SProc1: TStoredProc;
Label4: TLabel;
Edit1: TEdit;
Label5: TLabel;
Edit2: TEdit;
DateTimePicker1: TDateTimePicker;
Label6: TLabel;
Label7: TLabel;
TabfdThd: TTable;
BatMove1: TBatchMove;
Query2: TQuery;
Table1: TTable;
DataSource2: TDataSource;
CbBox1: TComboBox;
Query2id: TIntegerField;
Query2fdmc: TStringField;
Query2spbm: TStringField;
Query2sptxm: TStringField;
Query2spnum: TFloatField;
Query2spmc: TStringField;
Query2stocknum: TIntegerField;
Query2oldspnum: TFloatField;
procedure FormCreate(Sender: TObject);
procedure BBtnReviseClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BBtnThdClick(Sender: TObject);
procedure TV1Click(Sender: TObject);
procedure DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
procedure Query2AfterOpen(DataSet: TDataSet);
procedure Table1AfterPost(DataSet: TDataSet);
procedure BBtnSelCkClick(Sender: TObject);
procedure CbBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fm_fdthdok: Tfm_fdthdok;
implementation
uses pfm_fdthdselck;
{$R *.DFM}
var
CompFdmc:TstringList;
GridColName:Tstringlist;
thdLsh:integer;
procedure Tfm_fdthdok.FormCreate(Sender: TObject);
var
tvnoderoot:TTreeNode;
//i:integer;
begin
CompFdmc:=TStringlist.create;
GridColName:=TStringlist.create;
GridColName.add('fdmc=分店名称');
GridColName.add('spbm=商品编码');
GridColName.add('sptxm=商品条形码');
GridColName.add('spnum=确认提货数量');
GridColName.add('oldspnum=申请提货数量');
GridColName.add('spmc=商品名称');
GridColName.add('stocknum=库存数量');
query1.SQL.add('select fdmc,fdset from t_fendianxx');
query1.open;
tvnoderoot:=TV1.Items.add(nil,'全部分店');
compFdmc.add('全部分店=all');
while not query1.Eof do
begin
TV1.Items.Addchild(tvnoderoot,query1.fieldbyname('fdmc').asstring);
compFdmc.add(query1.fieldbyname('fdmc').asstring + '='+query1.fieldbyname('fdset').asstring);
query1.Next;
end;
query1.active:=false;
query1.sql.clear;
query1.SQL.add('select ckmc from t_ckxx');
query1.open;
while not query1.Eof do
begin
cbbox1.items.add(query1.fieldbyname('ckmc').asstring);
query1.next;
end;
//利用存储过程取得提货单的最大流水号
sproc1.Prepare;
SProc1.Params[1].value:='tb_thd';
Sproc1.ExecProc;
thdLsh:=sproc1.Params[2].value+1;
sproc1.UnPrepare;
edit1.text:=inttostr(thdlsh);
end;
procedure Tfm_fdthdok.BBtnReviseClick(Sender: TObject);
begin
if table1.State=dsEdit then
begin
table1.post;
end;
end;
procedure Tfm_fdthdok.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CompFdmc.free;
GridColName.free;
Action:=CaFree;
end;
procedure Tfm_fdthdok.BBtnThdClick(Sender: TObject);
var
cnt:integer;
thnum:integer;
sptxm:string;
spbm:string;
fdset:string;
dbfile:string;
i:integer;
begin
if length(edit2.text)=0 then
begin
showmessage('请选择分店');
exit;
end;
if length(cbbox1.text)=0 then
begin
showmessage('请选择发货仓库');
exit;
end;
cnt:=0;
query2.First;
while not query2.Eof do
begin
if query2.FieldByName('spnum').asinteger>query2.FieldByName('stocknum').asinteger then
begin
showmessage('申请提货商品['+query2.FieldByName('spmc').asstring
+']不能大于库存数量');
exit;
end;
cnt:=cnt+1;
query2.Next;
end;
label3.caption:='提货商品种类共'+inttostr(cnt)+'种';
if cnt=0 then exit;
//生成提货单和提货单明细
query1.sql.clear;
query1.SQL.add('insert into tb_thd(lsh,fhck,thfd) values('+
inttostr(thdlsh)+','''+cbbox1.text+''','''+edit2.text+''')');
query1.ExecSQL;
query1.close;
query2.First;
while not query2.Eof do
begin
sptxm:=query2.FieldByName('sptxm').asstring;
spbm:=query2.FieldByName('spbm').asstring;
thnum:=query2.FieldByName('spnum').asinteger;
if thnum=0 then continue;
query1.SQL.clear;
query1.sql.Add('insert into tb_thdmx(lsh,spbm,sptxm,thnum) values('+inttostr(thdlsh)+','''+spbm+''','''+sptxm+''','+inttostr(thnum)+')');
query1.ExecSQL;
query1.close;
query2.Next;
end;
fdset:=CompFdmc.Values[edit2.Text];
dbfile:='comdata\retfddata\retfdthd'+fdset+'.db';
batmove1.mode:=batCopy;
if fileExists(dbfile) then
begin
if application.messagebox(pchar(tv1.Selected.Text+'的提货单还没传送出去,是追加新纪录按YES,覆盖按NO'),
pchar('生成提货单'),MB_YESNO)=IDYES then
begin
batmove1.Mode:=batAppend;
end;
end;
tabFdthd.tablename:=dbfile;
//保存提货内容到dbf文件中
batmove1.Source:=query2;
Batmove1.Execute;
query2.active:=false;
query1.sql.Clear;
query1.sql.add('delete from tab_fdthd where fdmc='''+edit2.text+'''');
query1.ExecSQL;
query1.close;
query2.active:=true;
dbgrid1.Refresh;
for i:=0 to dbgrid1.columns.count-1 do
begin
dbgrid1.columns[i].FieldName:=GridColName.values[dbgrid1.columns[i].FieldName];
end;
AddOptRecord('生成分店提货确认单:流水号('+inttostr(thdlsh)+'),仓库代码('+cbbox1.text+'),分店代码('+edit2.text+')');
end;
procedure Tfm_fdthdok.TV1Click(Sender: TObject);
begin
if tv1.selected.Level=1 then
begin
query2.Filter:='fdmc='''+tv1.selected.Text+'''';
query2.Filtered:=true;
edit2.text:=tv1.selected.text;
end
else
begin
edit2.text:='';
end;
end;
procedure Tfm_fdthdok.DBGrid1DrawDataCell(Sender: TObject;
const Rect: TRect; Field: TField; State: TGridDrawState);
begin
{ if lowercase(field.fieldName)='spnum' then
begin
if field.AsInteger<=query2.Fieldbyname('stocknum').asinteger then
(sender as tdbgrid).Canvas.Font.Color:=clGreen
else
(sender as tdbgrid).Canvas.Font.Color:=clRed;
end;
(sender as tdbgrid).DefaultDrawDataCell(Rect, Field, State); }
//如果确认数量大于库存数量
if (query2.fieldbyname('spnum').asfloat>query2.fieldbyname('stocknum').asfloat) and (not(gdselected in state)) then
begin
(sender as tdbgrid).Canvas.Brush.Color:=RGB(219,253,253);
(sender as tdbgrid).Canvas.font.Color:=clred;
end
else if (query2.fieldbyname('spnum').asfloat<>query2.fieldbyname('oldspnum').asfloat) and (not(gdselected in state)) then
begin
//申请数量不等于确认数量
(sender as tdbgrid).Canvas.font.Color:=clblue;
end;
(sender as tdbgrid).DefaultDrawDataCell(Rect, Field, State);
end;
procedure Tfm_fdthdok.Query2AfterOpen(DataSet: TDataSet);
var
i:integer;
begin
for i:=0 to dbgrid1.columns.count-1 do
begin
dbgrid1.columns[i].title.caption:=GridColName.values[dbgrid1.columns[i].FieldName];
end;
end;
procedure Tfm_fdthdok.Table1AfterPost(DataSet: TDataSet);
var
i:integer;
begin
query2.close;
query2.open;
for i:=0 to dbgrid1.columns.count-1 do
begin
dbgrid1.columns[i].title.caption:=GridColName.values[dbgrid1.columns[i].FieldName];
end;
//dbgrid1.Refresh;
end;
procedure Tfm_fdthdok.BBtnSelCkClick(Sender: TObject);
begin
{fm_fdthdselck:=Tfm_fdthdselck.create(self);
if fm_fdthdselck.showmodal<>IdOK then
begin
fm_fdthdselck.free;
close;
end;
edit3.text:=fm_fdthdselck.ckmc;
query2.close;
query2.ParamByName('ckmc').asstring:=edit3.text;
query2.Open;
table1.Open;}
end;
procedure Tfm_fdthdok.CbBox1Change(Sender: TObject);
var
i:integer;
begin
table1.Close;
query2.close;
query2.ParamByName('ckmc').asstring:=cbbox1.text;
query2.Open;
table1.Open;
{ for i:=0 to dbgrid1.columns.count-1 do
begin
dbgrid1.columns[i].title.caption:=GridColName.values[dbgrid1.columns[i].FieldName];
end;}
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -