📄 unitprodwastebook.~pas
字号:
unit UnitProdWasteBook;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Grids, DBGrids, ComCtrls, StdCtrls, Buttons, DBCtrls;
type
TfrmProdWasteBook = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
bbShow: TBitBtn;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
Splitter1: TSplitter;
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
Panel1: TPanel;
DBText1: TDBText;
DBText2: TDBText;
Panel2: TPanel;
DBText3: TDBText;
Panel3: TPanel;
Panel4: TPanel;
Panel5: TPanel;
Label1: TLabel;
lCheckDate: TLabel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BitBtn3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure bbShowClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure zdyWasteBook(); //过程声明 建立流水帐
end;
var
frmProdWasteBook: TfrmProdWasteBook;
implementation
uses UnitDM, UnitProdWasteBookPrt;
{$R *.DFM}
procedure TfrmProdWasteBook.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
dm.tabProdWasteBook.close;
dm.tabProdIDHistory.close;
end;
procedure TfrmProdWasteBook.zdyWasteBook();
var
sStartID:string;
sCardID,sYear,sMonth,sDay,sProdName,sProdID,sProcBatID,sOutCardNum:string;
iNum,iCheckNum,iWasteBookNum,iContain,iWasteBookBox,iBoxLeft,iSerialNum:integer;
dFrom:Tdate;
fOutBox:real;
bInOut:boolean;
begin
dFrom:=dm.zdyGetProdCheckDate ;
//showmessage(datetostr(dm.zdyGetProdCheckDate));
lCheckDate.caption:=formatdatetime('yyyy"年"mm"月"dd"日" dddd',dFrom);
dFrom:=dFrom + 1;
sStartID := formatdatetime('yymmdd',dFrom)+'000';
//=======================================
//清空ProdWasteBook表 就是成品仓库台帐
//=======================================
with dm.qryExe do
begin
close;
sql.clear;
sql.add('delete from ProdWasteBook ');
execsql;
end; //with
with dm.tabProdIDHistory do
begin
open;
first;
while not eof do
begin
sProdID:=fieldbyname('ProdID').asstring;
if sProdID='' then
dm.tabProdIDHistory.Delete; //prodID为空的去掉
next;
end;
end;
//==============
// 开始写台帐
//==============
with dm.tabProdIDHistory do
begin
open;
first;
while not eof do
begin
sProdID:=fieldbyname('ProdID').asstring;
if sProdID='' then
begin
dm.tabProdIDHistory.Delete; //prodID为空的去掉
next;
end; //xia yi shang lai
sProdID:=fieldbyname('ProdID').asstring;
// end; //yi dao shang mian
//先写盘存
iCheckNum:=dm.zdyGetProdCheckNum(dm.zdyGetProdCheckDate,sProdID);
with dm.tabProdWasteBook do
begin
open;
insert;
fieldbyname('CardID').asstring:=sStartID;
fieldbyname('InOutFlag').asboolean:=true;
fieldbyname('Year').asstring:=sStartID[1]+sStartID[2];
fieldbyname('Month').asstring:=sStartID[3]+sStartID[4];
fieldbyname('Day').asstring:=sStartID[5]+sStartID[6];
fieldbyname('WasteBookNum').asinteger:=iCheckNum;
fieldbyname('ProdID').asstring:=sProdID;
fieldbyname('Note').asstring:='上月盘存';
fieldbyname('SerialNum').asinteger:=1;
post;
end; //with
//读取记录 从ProdInCard 入库单
with dm.qryExe do
begin
close;
sql.Clear;
sql.add('select * from ProdInCard ');
sql.add('where CardID >= :StartID and ProdID = :ProdID ');
parambyname('StartID').asstring:=sStartID;
parambyname('ProdID').asstring:=sProdID;
open;
first;
while not eof do
begin
sCardID:=fieldbyname('CardID').asstring;
sYear:=sCardID[1]+sCardID[2];
sMonth:=sCardID[3]+sCardID[4];
sDay:=sCardID[5]+sCardID[6];
iNum:=fieldbyname('Number').asinteger;
sProcBatID:=fieldbyname('ProcBatID').asstring;
with dm.tabProdWasteBook do
begin
open;
insert;
fieldbyname('CardID').asstring:=sCardID;
fieldbyname('Year').asstring:=sYear;
fieldbyname('Month').asstring:=sMonth;
fieldbyname('Day').asstring:=sDay;
fieldbyname('ProdID').asstring:=sProdID;
fieldbyname('InNum').asinteger:=iNum;
fieldbyname('InOutFlag').asboolean:=true;
fieldbyname('ProcBatID').asstring:=sProcBatID;
post;
end; //with dm.tabProdWasteBook
next;
end; //while
filter:='';
filtered:=false;
close;
end; //with dm.tabProdIncard
//读取记录 从ProdOutCard 出库单
with dm.qryExe do
begin
close;
sql.Clear;
sql.add('select * from ProdOutCard ');
sql.add('where CardID >= :StartID and ProdID = :ProdID ');
parambyname('StartID').asstring:=sStartID;
parambyname('ProdID').asstring:=sProdID;
open;
first;
while not eof do
begin
sCardID:=fieldbyname('CardID').asstring;
sYear:=sCardID[1]+sCardID[2];
sMonth:=sCardID[3]+sCardID[4];
sDay:=sCardID[5]+sCardID[6];
iNum:=fieldbyname('Number').asinteger;
sProcBatID:=fieldbyname('ProcBatID').asstring;
sProcBatID:=fieldbyname('ProcBatID').asstring;
fOutBox:=fieldbyname('Box').asfloat;
with dm.tabProdWasteBook do
begin
open;
insert;
fieldbyname('CardID').asstring:=sCardID;
fieldbyname('Year').asstring:=sYear;
fieldbyname('Month').asstring:=sMonth;
fieldbyname('Day').asstring:=sDay;
fieldbyname('ProdID').asstring:=sProdID;
fieldbyname('OutNum').asinteger:=iNum;
fieldbyname('InOutFlag').asboolean:=false;
fieldbyname('ProcBatID').asstring:=sProcBatID;
fieldbyname('OutBox').asfloat:=fOutBox;
post;
end; //with dm.tabProdWasteBook
next;
end; //while
filter:='';
filtered:=false;
close;
end; //with dm.tabProdIncard
next;
end; //while
end; //if
//=======================================
// 写各种产品库存,库存箱数,余数 ,序号
//=======================================
with dm.tabProdIDHistory do
begin
if not active then open;
first;
while not eof do
begin
iSerialNum:=0; //序号
sProdID:=fieldbyname('ProdID').asstring;
//依次填写流水帐库存
//iWasteBookNum:=iCheckNum;
//iWasteBookNum:=fieldbyname('WasteBookNum').asinteger;
with dm.tabProdWasteBook do
begin
if active then close;
filter:=format('ProdID = ''%S''',[sProdID]);
if not filtered then filtered:=true;
if not active then open;
first;
iWasteBookNum:=fieldbyname('WasteBookNum').asinteger;
// next; //跳过一条盘存
while not eof do
begin
iSerialNum:=iSerialNum+1;//序号加1
if fieldbyname('InOutFlag').asboolean then //是入库
begin
bInOut:=true;
iNum:=fieldbyname('InNum').asinteger;
iWasteBookNum:=iWasteBookNum + iNum;
end
else
begin
bInOut:=false;
iNum:=fieldbyname('OutNum').asinteger;
iWasteBookNum:=iWasteBookNum - iNum;
end; //if
sProcBatID:=fieldbyname('ProcBatID').asstring;
with dm.tabProdDictionary do
begin
if not active then open;
setkey;
if not findkey([sProdID]) then
begin
showmessage('not find key!');
exit;
end
else
iContain:=fieldbyname('Contain').asinteger;
end;//with
if iContain <> 0 then
begin
iWasteBookBox:= (iWasteBookNum div iContain) ;
iBoxLeft := abs(iWasteBookNum - iContain * iWasteBookBox);
end;
edit;
if bInOut then
fieldbyname('BoxBat').asstring:=sProcBatID+'-0'+inttostr(iWasteBookBox);
fieldbyname('SerialNum').asinteger:=iSerialNum;
fieldbyname('WasteBookNum').asinteger:=iWasteBookNum;
if iContain <> 0 then
begin
fieldbyname('WasteBookBox').asinteger:=iWasteBookBox;
fieldbyname('BoxLeft').asinteger:=iBoxLeft;
end;
post;
next;
end; //while
end; //with
next;
end; //while
end; //if
//===============
// 刷新表格
//===============
dm.tabProdIDHistory.first;
sProdID:=dm.tabProdIDHistory.fieldbyname('ProdID').asstring;
with dm.tabProdWasteBook do
begin
if active then close;
filter:=format('ProdID = ''%S''',[sProdID]);
if not filtered then filtered := true;
if not active then open;
end; //with
end;
procedure TfrmProdWasteBook.BitBtn3Click(Sender: TObject);
begin
close;
end;
procedure TfrmProdWasteBook.FormCreate(Sender: TObject);
begin
tabsheet1.TabVisible:=false;
pagecontrol1.ActivePageIndex:=0;
end;
procedure TfrmProdWasteBook.BitBtn2Click(Sender: TObject);
begin
with frmProdWasteBookPrt do
begin
QRLDate.caption:=datetostr(date);
QRLProdName.caption:=DM.tabProdIDHistory.fieldbyname('ProdName').asstring;
QRLFigID.caption:=DM.tabProdIDHistory.fieldbyname('FigID').asstring;
QuickRep1.Preview;
end; //with
end;
procedure TfrmProdWasteBook.BitBtn1Click(Sender: TObject);
begin
with frmProdWasteBookPrt do
begin
QRLDate.caption:=datetostr(date);
QRLProdName.caption:=DM.tabProdIDHistory.fieldbyname('ProdName').asstring;
QRLFigID.caption:=DM.tabProdIDHistory.fieldbyname('FigID').asstring;
QuickRep1.print;
end; //with
end;
procedure TfrmProdWasteBook.bbShowClick(Sender: TObject);
var
sProdID:string;
begin
sProdID:=dm.tabProdIDHistory.fieldbyname('ProdID').asstring;
with dm.tabProdWasteBook do
begin
if active then close;
filter:=format('ProdID = ''%S''',[sProdID]);
if not filtered then filtered := true;
if not active then open;
end; //with
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -