📄 unitsulfmoju.~pas
字号:
unit UnitSulfmoju;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, Db, DBTables, ExtCtrls, ComCtrls, Buttons;
type
Tsulfmoju = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Table1: TTable;
Query1: TQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
Panel1: TPanel;
DBGrid2: TDBGrid;
Edit1: TEdit;
DataSource2: TDataSource;
Button3: TButton;
Button4: TButton;
Query2: TQuery;
Query1hgs: TFloatField;
Query1zje: TFloatField;
Query1fps: TFloatField;
Query1ms: TFloatField;
Query1fb: TFloatField;
Query1hgl: TFloatField;
Query1jsl: TFloatField;
Query1jfb: TFloatField;
Query1je: TFloatField;
Query3: TQuery;
DateTimePicker1: TDateTimePicker;
DateTimePicker2: TDateTimePicker;
Panel2: TPanel;
Panel3: TPanel;
Bevel1: TBevel;
DateTimePicker3: TDateTimePicker;
DateTimePicker4: TDateTimePicker;
Panel4: TPanel;
Panel5: TPanel;
Panel6: TPanel;
Bevel2: TBevel;
Table2: TTable;
Label1: TLabel;
Label2: TLabel;
Table2Riqi: TDateField;
Table2Ms: TIntegerField;
Table2Hgl: TFloatField;
Table2Fb: TFloatField;
Table2Jsl: TFloatField;
Table2Hgs: TIntegerField;
Table2Fps: TIntegerField;
Table2Jfb: TFloatField;
Table2Je: TFloatField;
Table2Zje: TFloatField;
Table2Name: TStringField;
BitBtn1: TBitBtn;
bbpint: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
Query1mjbh: TStringField;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure TabSheet1Show(Sender: TObject);
procedure Edit1Enter(Sender: TObject);
procedure DateTimePicker3Change(Sender: TObject);
procedure DateTimePicker1Change(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Edit1Exit(Sender: TObject);
procedure bbpintClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
sulfmoju: Tsulfmoju;
j,i:integer;
implementation
uses Unitsulfmojuprt, Unitsulfmojuperprt, Unitsulfmojuallchart,
Unitsulfmojuperchart;
{$R *.DFM}
procedure Tsulfmoju.Button1Click(Sender: TObject);
var int0,int1,int2,int3,int4,int5,int6,int7:integer;
flt1,flt2,flt3,flt4,flt5,flt6,flt7,flt8,flt9,flt10:real;
clmodhu:real;
str1,str2,str3:string;
begin
Button1.Cursor:=crhourglass;
flt8:=0;
flt1:=0;
//===========初始化table1,清空记录==========
i:=1;
// with tableall do begin
// first;
//while not eof do
//delete;
// next;
// end;//with
with query2 do
begin
close;
sql.Clear;
sql.Add('delete from Sulfmoju ');
execsql;
end;
//===========以下第一次Query2的分组SQL查询过滤============
with query3 do
begin
close;
SQL.Clear ;
sql.Add (' select tdate,sourceid,prodnameId,sum(qcnum)as SumQcNum,sum(DrawWeight)as sumDW,avg(MaterWeight)as SumMW,');
sql.Add ('sum(lacknum)as SumLackNum,sum(impunum)as SumImpuNum,sum(polenum)as SumPoleNum,sum(moshu)as summoshu,');
sql.Add ('sum(ripnum)as SumRipNum,sum(elsenum)as SumElseNum from SulfCard');//avg(Weight)as avgPW,avg(SellPrice)as avgPP,');
sql.Add (' where tdate >=:fromdate and tdate <=:todate ');
sql.Add ('group by tdate,prodnameId,sourceid');
parambyname('fromdate').asdate:=DateTimePicker1.date;
parambyname('todate').asdate:=DateTimePicker2.date;
prepare;
open;
if query3.FieldByName('prodnameId').asstring='' then
begin
showmessage('无记录!');
Button1.Cursor:=crDefault;
exit;
end;
///==========以上第一次SQL查询结束====================
end;
// showmessage('ppppppppppppppppppppppppppppppppppppppp');
//=========以下把Query2中查询过滤结果向抄写到table1中====================
table1.open;
query3.First;
while not query3.eof do
begin
table1.append;
//table1.FieldByName('figid').asstring:=query1.fieldbyname('figid').asstring;
//table1.FieldByName('prodname').asstring:=query1.fieldbyname('prodname').asstring;
table1.FieldByName('mjbh').asstring:=query3.fieldbyname('sourceid').asstring;
table1.FieldByName('hgs').asinteger:=query3.fieldbyname('sumqcnum').asinteger;
int0:=query3.FieldByName('sumqcnum').asinteger; //总合格品数
int1:=query3.fieldbyname('sumlacknum').asinteger;
int2:=query3.fieldbyname('sumimpunum').asinteger;
int3:=query3.fieldbyname('sumripnum').asinteger;
int4:=query3.fieldbyname('sumpolenum').asinteger;
int5:=query3.fieldbyname('sumelsenum').asinteger;
flt2:=query3.fieldbyname('sumDW').asfloat;//总领料
int7:=query3.fieldbyname('Summoshu').asinteger;//模数
table1.FieldByName('ms').asinteger:=int7;
table1.FieldByName('fps').asinteger:=int1+int2+int3+int4+int5;
with Query2 do
begin
close;
SQL.Clear ;
sql.Add (' select * from ProdDictionary');
sql.Add (' where ProdID =:index');
parambyname('index').asstring:=query3.fieldbyname('prodnameId').asstring;
open;
// if recordcount=0 then
// continue;
flt3:=Query2.fieldbyname('Weight').asfloat; //单净重
str1:=query2.fieldbyname('rubbname').asstring;
int6:=int0+int1+int2+int3+int4+int5;
if int7<>0 then
flt9:=strtofloat(formatfloat('0.00',(flt2-flt3*int6)/int7))
else
flt9:=0;
end;
table1.FieldByName('jfb').asfloat:=flt9;
table1.FieldByName('fb').asfloat:=flt2-flt3*int6;
flt10:=flt3*int6/int7;//每模成品胶重
flt10:=strtofloat(formatfloat('0.00',100*flt9/flt10));
table1.FieldByName('jsl').asfloat:=flt10;
with Query2 do
begin
close;
SQL.Clear ;
sql.Add (' select * from 炼胶工艺卡');
sql.Add (' where 制成品名称=:index');
parambyname('index').asstring:=str1;
open;
flt6:=fieldbyname('单价').asfloat; //胶料价
end;
if int7<>0 then
begin
clmodhu:=strtofloat(formatfloat('0.00',(flt2-flt3*int0)*flt6/int7/1000));
table1.FieldByName('je').asfloat:=clmodhu; //金额损耗
end
else
table1.FieldByName('je').asfloat:=0;
table1.FieldByName('zje').asfloat:=strtofloat(formatfloat('0.00',(flt2-flt3*int0)*flt6/1000));
//=========以下求废品之和/胶料损耗/金额损耗/合格率/利润率============
if int6=0 then
table1.FieldByName('hgl').asfloat:=0
else
begin
flt1:=int0/int6;
flt1:=strtofloat(formatfloat('0.00',flt1*100));
table1.FieldByName('hgl').asfloat:=flt1;//合格率
end;
table1.post;
query3.next;
end;//while
with table1 do
begin
open;
first;
while not eof do
begin
edit;
with Query2 do
begin
close;
sql.clear;
sql.Add (' select sum(hgs)as hgs,sum(fps)as fps,sum(ms)as ms, sum(fb)as fb from Sulfmoju where mjbh=:na');
parambyname('na').asstring:=table1.fieldbyname('mjbh').asstring;
open;
flt1:=fieldbyname('hgs').asinteger/(fieldbyname('hgs').asinteger+fieldbyname('fps').asinteger)*100;
flt1:=strtofloat(formatfloat('0.00',flt1));
flt4:=fieldbyname('fb').asfloat/fieldbyname('ms').asinteger;
flt4:=strtofloat(formatfloat('0.00',flt4));
end;//with
fieldbyname('hgl').asfloat:=flt1;
fieldbyname('jfb').asfloat:=flt4;
post;
next;
end;
end;
//===再分组======
with query1 do begin
close;
sql.clear;
sql.Add (' select mjbh,sum(hgs)as hgs,sum(fps)as fps,sum(ms)as ms,sum(zje)as zje,');
sql.Add ('sum(fb)as fb,avg(hgl)as hgl,avg(jsl)as jsl,avg(je)as je ,avg(jsl)as jsl ,avg(jfb)as jfb');
sql.Add (' from Sulfmoju');
sql.Add ('group by mjbh');
sql.Add ('order by jfb desc ');
open;
end;//with
Button1.Cursor:=crDefault;
end;//======结束===============
procedure Tsulfmoju.FormShow(Sender: TObject);
begin
j:=0;
i:=0;
DateTimePicker1.date:=date-30;
DateTimePicker2.date:=date;
DateTimePicker3.date:=date-30;
DateTimePicker4.date:=date;
end;
procedure Tsulfmoju.Button2Click(Sender: TObject);
begin
close;
end;
procedure Tsulfmoju.Button3Click(Sender: TObject);
var int0,int1,int2,int3,int4,int5,int6,int7:integer;
flt1,flt2,flt3,flt4,flt5,flt6:real;
clmodhu:real;
ru,str1:string;
begin
flt4:=0;
if (i<>1) or (edit1.text='') then
begin
showmessage('请输入模具编号!');
exit;
end;
j:=1;
//=============初始化,清空记录===================
with query3 do
begin
close;
sql.Clear;
sql.Add('delete from Sulfmojuper');
execsql;
end;
//============SQL分组查询开始===========================
with query2 do
begin
close;
SQL.Clear ;
sql.Add (' select tdate,name,prodnameid,qcnum as SumQcNum,DrawWeight as sumDW,');
sql.Add ('lacknum as SumLackNum,impunum as SumImpuNum,polenum as SumPoleNum,moshu as summoshu,');
sql.Add ('ripnum as SumRipNum,elsenum as SumElseNum from SulfCard');
sql.Add (' where sourceid=:index and tdate between :fromdate and :todate ');//and SulfCard.prodnameid=ProdDictionary.prodid');
parambyname('fromdate').asdate:=DateTimePicker3.date;
parambyname('todate').asdate:=DateTimePicker4.date;
parambyname('index').asstring:=edit1.text;
open;
if query2.FieldByName('name').asstring='' then begin
showmessage('无记录!');
exit;
end;
end;
//===========以下是向Table1中抄写记录================
//Table1TMonth.Visible:=false;
//Table1TDate.Visible:=true;
table2.open;
query2.First;
while not query2.eof do
begin
table2.append;
table2.FieldByName('riqi').asdatetime:=query2.fieldbyname('tdate').asdatetime;
table2.FieldByName('name').asstring:=query2.fieldbyname('name').asstring;
table2.FieldByName('ms').asinteger:=query2.fieldbyname('summoshu').asinteger;
//table2.FieldByName('prodname').asstring:=query2.fieldbyname('prodname').asstring;
table2.FieldByName('hgs').asinteger:=query2.fieldbyname('sumqcnum').asinteger;
int1:=query2.fieldbyname('sumlacknum').asinteger;
int2:=query2.fieldbyname('sumimpunum').asinteger;
int4:=query2.fieldbyname('sumripnum').asinteger;
int3:=query2.fieldbyname('sumpolenum').asinteger;
int5:=query2.fieldbyname('sumelsenum').asinteger;
//==============计算废品数和合格率/胶料损耗/金额损耗=====================
int0:=query2.fieldbyname('sumqcnum').asinteger;
int7:=query2.fieldbyname('summoshu').asinteger;
table2.FieldByName('fps').asinteger:=int1+int2+int3+int4+int5;//废品数
if int0+int1+int2+int3+int4+int5=0 then
table2.FieldByName('hgl').asfloat:=0
else
begin
flt4:=int0/(int0+int1+int2+int3+int4+int5);
flt4:=strtofloat(formatfloat('0.00',flt4*100));
table2.FieldByName('hgl').asfloat:=flt4; //合格率
end;
flt1:=query2.fieldbyname('sumDW').asfloat; //领料重
with query3 do
begin
close;
SQL.Clear ;
sql.Add (' select * from ProdDictionary');
sql.Add (' where prodid=:index ');
parambyname('index').asstring:=query2.fieldbyname('prodnameid').asstring;
open;
if recordcount=0 then
continue;
flt2:=fieldbyname('Weight').asfloat; //单净重
ru:=fieldbyname('rubbname').asstring;
int6:=int0+int1+int2+int3+int4+int5;
if int7<>0 then
flt6:=strtofloat(formatfloat('0.00',(flt1-flt2*int6)/int7))
else
flt6:=0;
// end;
table2.FieldByName('jfb').asfloat:=flt6;
table2.FieldByName('fb').asfloat:=flt1-flt2*int6;//废边总量
table2.FieldByName('jsl').asfloat:=strtofloat(formatfloat('0.00',(flt6*int7/int6/flt2)*100));
//int6:=fieldbyname('gujia').asinteger;
close;
SQL.Clear ;
sql.Add (' select 单价,制成品名称 from 炼胶工艺卡');
sql.Add (' where 制成品名称=:index ');
parambyname('index').asstring:=ru;
open;
flt5:=fieldbyname('单价').asfloat; //胶料单价
table2.FieldByName('je').asfloat:=strtofloat(formatfloat('0.00',flt6*flt5/1000));
//修改小数点
clmodhu:=strtofloat(formatfloat('0.00',(flt1-flt2*int6)*flt5/1000));
table2.FieldByName('zje').asfloat:=clmodhu;//金额损耗
table2.post;
end;
query2.next;
end;//while
// end;//======显示日结束===============
end;
procedure Tsulfmoju.TabSheet1Show(Sender: TObject);
begin
query1.Close;
table2.Close;
i:=0;
j:=0;
end;
procedure Tsulfmoju.Edit1Enter(Sender: TObject);
begin
j:=0;
i:=1;
table2.Close;
edit1.Text:='';
end;
procedure Tsulfmoju.DateTimePicker3Change(Sender: TObject);
begin
j:=0;
table2.Close;
end;
procedure Tsulfmoju.DateTimePicker1Change(Sender: TObject);
begin
i:=0;
query1.Close;
end;
procedure Tsulfmoju.Button4Click(Sender: TObject);
begin
close;
end;
procedure Tsulfmoju.Edit1Exit(Sender: TObject);
begin
Label2.Caption:=edit1.Text;
end;
procedure Tsulfmoju.bbpintClick(Sender: TObject);
begin
if i=1 then
begin
Frmsulfmoju.QRLabel1.caption:='从'+datetostr(DateTimePicker1.date)+'到 '+datetostr(DateTimePicker2.date)+' 全部模具质量统计表';
Frmsulfmoju.QRLabeldate.Caption:=datetostr(date);
Frmsulfmoju.QuickRep1.Preview;
exit
end;
showmessage('请先按“查询”按键!');
end;
procedure Tsulfmoju.BitBtn1Click(Sender: TObject);
begin
if i=1 then
begin
Frmsulfmojuallchart.DBChart1.Title.Text.Text:='从'+datetostr(DateTimePicker1.date)+'到 '+datetostr(DateTimePicker2.date)+' 全部模具质量统计图表';
Frmsulfmojuallchart.show;
exit
end;
showmessage('请先按“查询”按键!');
end;
procedure Tsulfmoju.BitBtn3Click(Sender: TObject);
begin
if j=1 then
begin
Frmsulfmojuperprt.QRLabel1.caption:='从'+datetostr(DateTimePicker3.date)+'到 '+datetostr(DateTimePicker4.date)+' 模具编号为:'+edit1.text+' 的质量统计表';
Frmsulfmojuperprt.QRLabeldate.Caption:=datetostr(date);
Frmsulfmojuperprt.QuickRep1.Preview;
exit
end;
showmessage('请先按“查询”按键!');
end;
procedure Tsulfmoju.BitBtn2Click(Sender: TObject);
begin
if i=1 then
begin
Frmsulfmojuperchart.DBChart1.Title.Text.Text:='从'+datetostr(DateTimePicker3.date)+'到 '+datetostr(DateTimePicker4.date)+' 模具编号为:'+edit1.text+' 的质量统计图表';
Frmsulfmojuperchart.show;
exit
end;
showmessage('请先按“查询”按键!');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -