📄 unitprodsetaccount.pas
字号:
unit UnitProdSetAccount;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Grids, DBGrids, ComCtrls, StdCtrls, Buttons, Db, DBTables;
type
TfrmProdSetAccount = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
DBGrid1: TDBGrid;
Panel1: TPanel;
Label1: TLabel;
lCurdate: TLabel;
lAccDate: TLabel;
Label2: TLabel;
Query1: TQuery;
Query2: TQuery;
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure zdySettleAccount(dDateFrom,dDateTo:Tdate); // 过程声明 填写月报表
procedure zdyFilterAcc(dDate:Tdate); // 过程声明 过滤月报表
procedure zdyMonthCheck(dCheckMonth:TDate;sProdID:string;iNum:integer); // 过程声明 写盘存记录
end;
var
frmProdSetAccount: TfrmProdSetAccount;
dyrq:Tdate;
implementation
uses UnitDM, UnitProdSetAccPrt, UnitAccSet;
{$R *.DFM}
procedure TfrmProdSetAccount.BitBtn4Click(Sender: TObject);
begin
close;
end;
//=====表中只保留结帐日期那天的结帐情况
procedure TfrmProdSetAccount.zdyFilterAcc(dDate:Tdate); // 过程声明 过滤月报表
begin
with dm.tabProdSetAcc do
begin
filter:= format('AccDate = ''%S''',[datetostr(dDate)]);
filtered:=true;
close;
open;
end; //with
lCurdate.caption:=datetostr(dDate);
lAccDate.caption:=formatdatetime('yyyy"年"mm"月" 报表',dDate);
end;
//======================
// 过程实现 写盘存记录
//======================
procedure TfrmProdSetAccount.zdyMonthCheck(dCheckMonth:TDate;sProdID:string;iNum:integer);
begin
//=================================
// 是否已经有该记录 如果有 就删除
//=================================
with dm.tabProdMonthCheck do
begin
open;
setkey;
if findkey([dCheckMonth,sProdID]) then
begin
//==============
// 删除原有记录
//==============
delete;
end; //if
//===========
// 添加记录
//===========
insert;
fieldbyname('MonthCheck').asdatetime:=dCheckMonth;
fieldbyname('ProdID').asstring:=sProdID;
fieldbyname('Number').asinteger:=iNum;
// showmessage(inttostr(iNum));
post;
end; //with
dm.tabProdMonthCheck.close;
end;
//======================
// 过程实现 填写月报表
//======================
procedure TfrmProdSetAccount.zdySettleAccount(dDateFrom,dDateTo:Tdate);
var
sProdID,sStartID,sEndID:string;
i,iLastNum,iThisIn,iThisOut,iThisNum:integer;
fPrice:real;
begin
sStartID := formatdatetime('yymmdd',dDateFrom+1)+'000';
sEndID:= formatdatetime('yymmdd',dDateTo+1)+'000';
dyrq:=dDateFrom;
// 先清空月报表
with dm.qryExe do
begin
close;
sql.clear;
sql.add('delete from ProdSettleAccount where accdate = :vdate ');
parambyname('vdate').asdatetime:=dDateTo;
// parambyname('vdate').asdatetime:=dDateFrom;
execsql;
end; //with
//=================
//开始建表 月报表
//=================
with dm.tabProdStock do
begin
open;
first;
while not eof do
begin
//==========================
// 就每一种成品进行总结
//==========================
sProdID:=fieldbyname('ProdID').asstring;
//==========================
// 确定上月库存 iLastNum
//==========================
iLastNum:=dm.zdyGetProdCheckNum(dm.zdyGetProdCheckDate,sProdID);
//==========================
// 确定本月入库 iThisIn
//==========================
with dm.qryExe do
begin
close;
sql.clear;
sql.add('select sum(Number) from ProdInCard ');
// sql.add('where CardID between :StartID and :EndID ');
sql.add('where InDate > :StartID and InDate<= :EndID ');
sql.add('and ProdID = :ProdID ');
if dm.zdyGetProdCheckDate=strtodate('00-01-01') then
parambyname('StartID').asdate:=frmCommAccSet.dtpFrom.date;
if dm.zdyGetProdCheckDate<>strtodate('00-01-01') then
parambyname('StartID').asdate:=dm.zdyGetProdCheckDate;
parambyname('EndID').asdate :=frmCommAccSet.dtpTo.date;
// sql.add('where CardID > :StartID and CardID<= :EndID ');
// sql.add('and ProdID = :ProdID ');
// parambyname('StartID').asstring:=sStartID;
// parambyname('EndID').asstring :=sEndID;
parambyname('ProdID').asstring:=sProdID;
open;
iThisIn:=fields[0].asinteger;
end; //with
//==========================
// 确定本月出库 iThisOut
//==========================
with dm.qryExe do
begin
close;
sql.clear;
sql.add('select sum(Number) from ProdOutCard ');
//sql.add('where CardID between :StartID and :EndID ');
sql.add('where OutDate > :StartID and OutDate<= :EndID ');
sql.add('and ProdID = :ProdID ');
if dm.zdyGetProdCheckDate=strtodate('00-01-01') then
parambyname('StartID').asdate:=frmCommAccSet.dtpFrom.date;
if dm.zdyGetProdCheckDate<>strtodate('00-01-01') then
parambyname('StartID').asdate:=dm.zdyGetProdCheckDate;
parambyname('EndID').asdate :=frmCommAccSet.dtpTo.date;
// sql.add('where CardID > :StartID and CardID<= :EndID ');
// sql.add('and ProdID = :ProdID ');
// parambyname('StartID').asstring:=sStartID;
// parambyname('EndID').asstring :=sEndID;
parambyname('ProdID').asstring:=sProdID;
open;
iThisOut:=fields[0].asinteger;
end; //with
//==========================
// 确定本月库存 iThisNum
//==========================
iThisNum:=abs(iLastNum + iThisIn - iThisOut);
//=====================================
// 确定该成品单价 fPrice
//=====================================
fPrice:=dm.zdyGetProdPrice(sProdID);
//=========================
// 向月报表中添加一条记录
//=========================
with dm.tabProdSetAcc do
begin
open;
insert;
fieldbyname('AccDate').asdatetime:=dDateTo;
fieldbyname('ProdID').asstring:=sProdID;
//showmessage(inttostr(iLastNum));
fieldbyname('LastNum').asinteger:=iLastNum;
fieldbyname('ThisIn').asinteger:=iThisIn;
fieldbyname('ThisOut').asinteger:=iThisOut;
fieldbyname('ThisNum').asinteger:=iThisNum;
fieldbyname('Price').asfloat:=fPrice;
post;
end; //with
next;
end; //while
{
for i:=1 to 50 do
begin
with Query1 do
begin
close;
sql.clear;
sql.add('select ProdID,sellprice from ProdDictionary ');
sql.add('where FigID like :tu');
parambyname('tu').asstring:=inttostr(i)+'$'+'%';
open;
//showmessage(inttostr(recordcount));
if recordcount=0 then
Continue;
iLastNum:=0;
iThisIn:=0;
iThisOut:=0;
iThisNum:=0;
first;
while not eof do
begin
Query2.Close;
Query2.sql.clear;
Query2.sql.add('select * from ProdSettleAccount ');
Query2.sql.add('where ProdID = :tu and accdate = :vdate');
Query2.parambyname('vdate').asdatetime:=dDateTo;
//showmessage(Query1.fieldbyname('ProdID').asstring);
Query2.parambyname('tu').asstring:=Query1.fieldbyname('ProdID').asstring;
Query2.open;
//showmessage(inttostr(Query2.fieldbyname('LastNum').asinteger));
iLastNum:=iLastNum+Query2.fieldbyname('LastNum').asinteger;
// showmessage(inttostr(iLastNum));
iThisIn:=iThisIn+Query2.fieldbyname('ThisIn').asinteger;
iThisOut:=iThisOut+Query2.fieldbyname('ThisOut').asinteger;
iThisNum:=iThisNum+Query2.fieldbyname('ThisNum').asinteger;
//Query2.Close;
//Query2.sql.clear;
//Query2.sql.add('delete from ProdSettleAccount ');
//Query2.sql.add('where ProdID = :tu');
//Query2.parambyname('tu').asstring:=Query1.fieldbyname('ProdID').asstring;
//Query2.execsql;
// end;
next;
end;
end;
with dm.tabProdSetAcc do
begin
open;
insert;
fieldbyname('AccDate').asdatetime:=dDateTo;
fieldbyname('ProdID').asstring:=Query1.fieldbyname('ProdID').asstring;
fieldbyname('LastNum').asinteger:=iLastNum;
// showmessage(inttostr(iThisIn)+'我们');
fieldbyname('ThisIn').asinteger:=iThisIn;
fieldbyname('ThisOut').asinteger:=iThisOut;
fieldbyname('ThisNum').asinteger:=iThisNum;
fieldbyname('Price').asfloat:=Query1.fieldbyname('SellPrice').asfloat;
post;
end; //with
// end;//with Query1
end; //for
}
end; //with dm.tabProdNum
//=========================
// 填写新的 ProdMonthCheck
//=========================
with dm.qryExe do
begin
close;
sql.clear;
sql.add('delete from ProdMonthCheck where MonthCheck = :MonthCheck ');
parambyname('MonthCheck').asdatetime:=dDateTo;
execsql;
end; //with
with dm.tabProdSetAcc do
begin
filter:= format('AccDate = ''%S''',[datetostr(dDateTo)]);
filtered:=true;
open;
first;
while not eof do
begin
sProdID:=fieldbyname('ProdID').asstring;
iThisNum:=fieldbyname('ThisNum').asinteger;
zdyMonthCheck(dDateto,sProdID,iThisNum);
next;
end; //while
filtered:=false;
first;
end; //with
//==========================
// 填写新的 ProdCheckDiary
//==========================
with dm.tabProdCheckDiary do
begin
open;
append;
fieldbyname('CheckDate').asdatetime:=dDateTo;
post;
close;
end; //with
//===============
// 刷新月报表
//===============
dm.tabProdSetAcc.close;
dm.tabProdSetAcc.open;
end;
procedure TfrmProdSetAccount.BitBtn2Click(Sender: TObject);
begin
with frmProdSetAccPrt do
begin
//QRLabelb1.Caption:='';
//QRLabelb2.Caption:='';
//QRLabelb3.Caption:='';
// QRLabelb4.Caption:='';
// QRLabelb5.Caption:='';
//QRLabel3.Caption:='';
QRLabel4.Caption:=formatdatetime('yy"年"mm"月"dd"日"',dyrq)+'---'+formatdatetime('yy"年"mm"月"dd"日"',strtodate(lCurDate.caption));
QRLDate.caption:=formatdatetime('yyyy"年"mm"月"dd"日"',strtodate(lCurDate.caption));
QuickRep1.Preview;
end; //with
end;
procedure TfrmProdSetAccount.BitBtn1Click(Sender: TObject);
begin
with frmProdSetAccPrt do
begin
// QRLabelb1.Caption:='';
//QRLabelb2.Caption:='';
//QRLabelb3.Caption:='';
// QRLabelb4.Caption:='';
// QRLabelb5.Caption:='';
// QRLabel3.Caption:='';
QRLDate.caption:=formatdatetime('yyyy"年"mm"月"dd"日"',strtodate(lCurDate.caption));
QuickRep1.print;
end; //with
end;
procedure TfrmProdSetAccount.BitBtn3Click(Sender: TObject);
begin
close;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -