📄 unit_mater_main.pas
字号:
unit Unit_Mater_Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ImgList, ComCtrls, ToolWin, Menus, Grids, DBGrids, Db, DBTables, StdCtrls,
Buttons, ExtCtrls;
type
TForm_Mater_Main = class(TForm)
Qry_Main: TQuery;
DS_Main: TDataSource;
MainMenu1: TMainMenu;
CoolBar1: TCoolBar;
ToolBar1: TToolBar;
ToolButton_InCard: TToolButton;
ToolButton_OutCard: TToolButton;
ImageList_MenuIO: TImageList;
ToolButton_ModCard: TToolButton;
N1: TMenuItem;
N_InCard: TMenuItem;
N_OutCard: TMenuItem;
Panel1: TPanel;
Edit_index: TEdit;
BitBtn_Show: TBitBtn;
Edit_mater: TEdit;
Panel2: TPanel;
Panel3: TPanel;
StatusBar1: TStatusBar;
Timer1: TTimer;
N4: TMenuItem;
N_ModCard: TMenuItem;
N_DelCard: TMenuItem;
N7: TMenuItem;
N_QryIO: TMenuItem;
N9: TMenuItem;
N14: TMenuItem;
N_Exit: TMenuItem;
ToolButton_Exit: TToolButton;
ToolButton1: TToolButton;
Qry_Exe: TQuery;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ComboBox_Indate: TComboBox;
Panel5: TPanel;
N_StockView: TMenuItem;
N3: TMenuItem;
DBGrid1: TDBGrid;
N6: TMenuItem;
N8: TMenuItem;
N16: TMenuItem;
N_Sum: TMenuItem;
ToolButton5: TToolButton;
ToolButton7: TToolButton;
ToolButton4: TToolButton;
ToolButton6: TToolButton;
ToolButton8: TToolButton;
ComboBox_Per: TComboBox;
Panel4: TPanel;
N12: TMenuItem;
N13: TMenuItem;
ToolButton9: TToolButton;
N15: TMenuItem;
N_Auto: TMenuItem;
ToolButton10: TToolButton;
N20: TMenuItem;
N2: TMenuItem;
Qry_gailastflag: TQuery;
Qry_lastture: TQuery;
procedure FormCreate(Sender: TObject);
procedure BitBtn_ShowClick(Sender: TObject);
procedure N_InCardClick(Sender: TObject);
procedure N_OutCardClick(Sender: TObject);
procedure N_ExitClick(Sender: TObject);
procedure N_DelCardClick(Sender: TObject);
procedure N_ModCardClick(Sender: TObject);
procedure Edit_materChange(Sender: TObject);
procedure N_QryIOClick(Sender: TObject);
procedure N_StockViewClick(Sender: TObject);
procedure N_DicMaterClick(Sender: TObject);
procedure N_SumClick(Sender: TObject);
procedure N16Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure Qry_MainAfterScroll(DataSet: TDataSet);
procedure N13Click(Sender: TObject);
procedure ComboBox_IndateChange(Sender: TObject);
procedure N19Click(Sender: TObject);
procedure N_InitClick(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure Edit_indexEnter(Sender: TObject);
procedure Edit_indexExit(Sender: TObject);
procedure Edit_indexChange(Sender: TObject);
procedure N_AutoClick(Sender: TObject);
procedure N18Click(Sender: TObject);
procedure N21Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_Mater_Main: TForm_Mater_Main;
d_LimDate:Tdate;
implementation
uses Unit_Mater_InCard, Unit_Mater_OutCard, Unit_Mater_Qry,
Unit_Mater_InMod, Unit_Mater_OutMod, Unit_Mater_StockView, Unit_Mater_Dic,
Unit_Mater_SumCfg, Unit_Mater_PrtIO, Unit_Mater_AboutBox,IniFiles,
Unit_Mater_SumCancel, Unit_Mater_SysPass, Unit_Tip, Unit_Rubb_AutoCard,
Unit_Rubb_QryProcCard, Unit_mater_SumBrowse, Unit_Rubb_Main,
Unit_Mater_jiezhangmima, UnitDM, Unit_Mater_tishi;
{$R *.DFM}
procedure TForm_Mater_Main.FormCreate(Sender: TObject);
var
JLSumSys:TIniFile;
begin
//初始化数值
DBGrid1.Align:=alClient;
StatusBar1.Panels[0].Text:='今天 '+formatdatetime('yyyy"年"m"月"d"日" dddd',date);
d_LimDate:=strtodate('00-10-28');
//读出Ini文件 结账日期
JLSumSys:=TIniFile.Create('Jl2000.ini');
d_LimDate:=JLSumSys.ReadDate('SumDate','date' , 00-1-1);
JLSumSys.free;
end;
procedure TForm_Mater_Main.BitBtn_ShowClick(Sender: TObject);
var
s_OutCardNum,s_Indate:string;
begin
//检查填写材料名称栏
if Edit_mater.text = '' then
begin
showmessage('请填写材料名称栏!');
exit;
end; //if
//检查下拉列表框
if ComboBox_Indate.text = '' then
begin
showmessage('该原材料没有库存!');
exit;
end;
s_InDate:=ComboBox_Indate.text;
s_OutCardNum:='123456'; //6位
s_OutCardNum[1]:=s_InDate[1];
s_OutCardNum[2]:=s_InDate[2];
s_OutCardNum[3]:=s_InDate[4];
s_OutCardNum[4]:=s_InDate[5];
s_OutCardNum[5]:=s_InDate[7];
s_OutCardNum[6]:=s_InDate[8];
//调出记录
with Qry_Main do
begin
close;
sql.Clear;
sql.Add('select * from 原材料台帐 where 材料名称 = :v_mater ');
sql.Add('and 领料单号 = :v_OutCardNum and 单价 = :v_per');
sql.Add('order by 库存 Desc ');
parambyname('v_mater').asstring:=edit_mater.text;
parambyname('v_OutCardNum').asstring:=s_OutCardNum;
parambyname('v_per').asfloat:=strtofloat(ComboBox_Per.text);
open;
if recordcount = 0 then
close;
end; //with
perform(WM_NEXTDLGCTL,0,0);
end;
procedure TForm_Mater_Main.N_InCardClick(Sender: TObject);
begin
Form_Mater_InCard.Tab_InCard.open;
Form_Mater_InCard.Tab_InCard.append;
Form_Mater_InCard.showmodal;
end;
procedure TForm_Mater_Main.N_OutCardClick(Sender: TObject);
begin
Form_Mater_OutCard.Tab_OutCard.open;
Form_Mater_OutCard.Tab_OutCard.append;
with Form_Mater_OutCard do
begin
if (s_curdate = '') then
DBEdit_Date.text := datetostr(date)
else
DBEdit_Date.text := s_curdate;
end; //with
Form_Mater_OutCard.showmodal;
end;
procedure TForm_Mater_Main.N_ExitClick(Sender: TObject);
begin
Qry_Main.Active:=False;
Qry_Exe.Active:=False;
close;
end;
procedure TForm_Mater_Main.N_DelCardClick(Sender: TObject);
var
n_id:integer;
s_mater, s_OutCardNum :string;
f_per:real;
begin
if not Qry_Main.Active then
begin
showmessage('请先调出某个原材料的台帐');
exit;
end; //if
//判断日期是否小于等于结账日期
if Qry_Main.fieldbyname('日期').asdatetime <=dm.zdyGetmaterCheckDate then //d_LimDate then
begin
showmessage('不允许删除结账日期之前的记录!'+#13+#13+'上次结帐日期是:'+datetostr(dm.zdyGetmaterCheckDate));
perform(WM_NEXTDLGCTL,0,0);
exit;
end;
//删除警告!
if messagedlg('会删除该 '+Qry_Main.fieldbyname('材料名称').asstring+' 的记录 要继续吗?',mtWarning,[mbYes,mbNo],0) = mrNo then
exit;
// 判断删除是否合理
if not Qry_main.fieldbyname('出入标识').asboolean then //是入库
begin
with Qry_exe do
begin
close;
sql.Clear;
sql.Add('select * from 原材料台帐 where 材料名称 = :v_mater ');
sql.Add('and 领料单号 = :v_OutCardNum and 单价= :v_Per');
parambyname('v_mater').asstring:=Qry_Main.fieldbyname('材料名称').asstring;
parambyname('v_OutCardNum').asstring:=Qry_Main.fieldbyname('领料单号').asstring;
parambyname('v_Per').asfloat:=Qry_Main.fieldbyname('单价').asfloat;
open;
if recordcount > 1 then
begin
showmessage('此条入库记录已经对应多条出库记录.'+#13+#13+'不能删除!');
exit;
end; //if
end; //with
end; // if
//为刷新表格记录数据
s_mater:=Qry_Main.fieldbyname('材料名称').asstring;
s_OutCardNum:=Qry_Main.fieldbyname('领料单号').asstring;
f_per:=Qry_Main.fieldbyname('单价').asfloat;
//修改该记录日期以后的相关记录库存
with Qry_exe do
begin
close;
sql.Clear;
sql.Add('update 原材料台帐 set 库存 = (库存*1000 + :v_Rewt)/1000 ');
sql.Add('where 库存 < :v_stock and 材料名称 = :v_mater and 领料单号 = :v_outCardNum and 单价 = :v_Per ');
parambyname('v_stock').asfloat:=Qry_Main.fieldbyname('库存').asfloat;
parambyname('v_mater').asstring:=Qry_Main.fieldbyname('材料名称').asstring;
parambyname('v_OutCardNum').asstring:=Qry_Main.fieldbyname('领料单号').asstring;
parambyname('v_Rewt').asfloat:=Qry_Main.fieldbyname('出库数量').asfloat*1000;
parambyname('v_Per').asfloat:=Qry_Main.fieldbyname('单价').asfloat;
execsql;
end; //with
//修改相关入库记录 剩余库存
with Qry_exe do
begin
close;
sql.Clear;
sql.Add('update 原材料台帐 set 剩余库存 = (剩余库存*1000 + :v_Rewt)/1000 ');
sql.Add('where 出入标识 = :v_IfOut and 材料名称 = :v_mater and 领料单号 = :v_outCardNum and 单价 = :v_Per');
parambyname('v_Rewt').asfloat:=Qry_Main.fieldbyname('出库数量').asfloat*1000;
parambyname('v_IfOut').asboolean:=false;
parambyname('v_mater').asstring:=Qry_Main.fieldbyname('材料名称').asstring;
parambyname('v_OutCardNum').asstring:=Qry_Main.fieldbyname('领料单号').asstring;
parambyname('v_Per').asfloat:=Qry_Main.fieldbyname('单价').asfloat;
execsql;
end; //with
//删除该记录
with Qry_exe do
begin
close;
sql.Clear;
sql.Add('delete from 原材料台帐 where 标识号 = :v_id ');
parambyname('v_id').asinteger:=Qry_Main.fieldbyname('标识号').asinteger;
execsql;
end; //with
//修改最后领料标识的位置 先全部False 在最后一个True
with Qry_exe do
begin
close;
sql.Clear;
sql.Add('update 原材料台帐 set 最后领料标识 = :v_LastOutCardFlag');
sql.Add('where 材料名称 = :v_mater and 领料单号 = :v_outCardNum and 单价 = :v_per ');
parambyname('v_LastOutCardFlag').asboolean:=false;
parambyname('v_mater').asstring:=Form_Mater_Main.Qry_Main.fieldbyname('材料名称').asstring;
parambyname('v_OutCardNum').asstring:=Form_Mater_Main.Qry_Main.fieldbyname('领料单号').asstring;
parambyname('v_Per').asfloat:=Form_Mater_Main.Qry_Main.fieldbyname('单价').asfloat;
execsql;
close;
sql.Clear;
sql.Add('select * from 原材料台帐 ');
sql.Add('where 材料名称 = :v_mater and 领料单号 = :v_outCardNum and 单价 = :v_per ');
sql.Add('order by 库存 ');
parambyname('v_mater').asstring:=Form_Mater_Main.Qry_Main.fieldbyname('材料名称').asstring;
parambyname('v_OutCardNum').asstring:=Form_Mater_Main.Qry_Main.fieldbyname('领料单号').asstring;
parambyname('v_Per').asfloat:=Form_Mater_Main.Qry_Main.fieldbyname('单价').asfloat;
open;
n_id:=fieldbyname('标识号').asinteger;
close;
sql.Clear;
sql.Add('update 原材料台帐 set 最后领料标识 = :v_LastOutCardFlag ');
sql.Add('where 标识号 = :v_id');
parambyname('v_LastOutCardFlag').asboolean:=true;
parambyname('v_id').asinteger:=n_id;
execsql;
end; //with
//刷新主界面表格
with Form_Mater_Main.Qry_Main do
begin
close;
sql.Clear;
sql.Add('select * from 原材料台帐 where 材料名称 = :v_mater ');
sql.Add('and 领料单号 = :v_OutCardNum and 单价 = :v_per');
sql.Add('order by 库存 Desc ');
parambyname('v_mater').asstring:=s_mater;
parambyname('v_OutCardNum').asstring:= s_OutCardNum;
parambyname('v_per').asfloat:=f_per;
open;
end;//with
end;
procedure TForm_Mater_Main.N_ModCardClick(Sender: TObject);
var
n_id:integer;
begin
if not Qry_Main.Active then
begin
showmessage('请先调出某个原材料的台帐');
exit;
end; //if
//判断日期是否小于等于结账日期
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -