📄 prepay.pas
字号:
unit Prepay;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, ToolEdit, CurrEdit, ComCtrls, ToolWin, ExtCtrls,
ImgList, DB, Grids, DBGrids, Buttons, ADODB, ReportControl,IniFiles;
type
TFormPrepay = class(TForm)
ControlBar: TControlBar;
ToolBarLB: TToolBar;
ToolButtonName: TToolButton;
EditHH: TEdit;
ToolBarRT: TToolBar;
ToolButtonYS: TToolButton;
ToolButtonJL: TToolButton;
ImageList1: TImageList;
DS: TDataSource;
Panel1: TPanel;
Label2: TLabel;
CEditYuJiao: TCurrencyEdit;
DBGridYJ: TDBGrid;
SpeedButtonPrn: TSpeedButton;
SpeedButtonZuoFei: TSpeedButton;
QueryYuJiao: TADOQuery;
QueryYiJiao: TADOQuery;
RepRunShouFei: TReportRunTime;
SpeedButtonPre: TSpeedButton;
ScrollBoxView: TScrollBox;
procedure ToolButtonJLClick(Sender: TObject);
procedure ToolButtonYSClick(Sender: TObject);
procedure EditHHKeyPress(Sender: TObject; var Key: Char);
procedure FormCreate(Sender: TObject);
procedure SpeedButtonPrnClick(Sender: TObject);
procedure SpeedButtonZuoFeiClick(Sender: TObject);
procedure SpeedButtonPreClick(Sender: TObject);
private
procedure DBGridFldRef(Query:TAdoQuery);
procedure FillReport(IsPrint: Boolean);
{ Private declarations }
public
procedure YuJiao;
procedure JiLu;
{ Public declarations }
end;
const
YuJiaoYL = 'select 户号,名称,账面金额=0,HIDE=1,ID from df_yonghudangan';
implementation
uses UnitDataMD, SelOpDate,MainOutUnit;
{$R *.dfm}
procedure TFormPrepay.ToolButtonJLClick(Sender: TObject);
var
SqlString : String;
begin
FormOpDate:=TFormOpDate.Create(Self);
if FormOpDate.ShowModal=mrOK then begin
CEditYuJiao.Value:=0;
Label2.Visible:=False;
CEditYuJiao.Visible:=False;
SpeedButtonPre.Visible:=False;
SpeedButtonPrn.Visible:=False;
SpeedButtonZuoFei.Visible:=True;
SqlString :='select 名称,户号,收费日期,本次预缴,收款员,HIDE=1,收费序号,账面金额,ID from sf_yujiao_cunru where 收款员='''+DCurOpName+''' and ';
if Abs(FormOpDate.DateT-FormOpDate.DateF)>1 then
SqlString :=SqlString+'收费日期 between '''
+FormatDateTime('mm/dd/yyyy',FormOpDate.DateF)
+''' and '''
+FormatDateTime('mm/dd/yyyy',FormOpDate.DateT)+''''
else
SqlString :=SqlString
+'datediff(dd,收费日期,'''
+FormatDateTime('mm/dd/yyyy',FormOpDate.DateF)+''')=0 ';
with QueryYiJiao do begin
Active:=False;
SQL.Clear;
SQL.Add(SqlString);
Active:=True;
DS.DataSet:=QueryYiJiao;
DBGridFldRef(QueryYiJiao);
end;
end
else
ToolButtonYS.Down:=True;
FormOpDate.Free;
end;
procedure TFormPrepay.ToolButtonYSClick(Sender: TObject);
begin
YuJiao;
end;
procedure TFormPrepay.YuJiao;
var
TempStr,FldName : String;
i : Integer;
begin
Label2.Visible:=True;
CEditYuJiao.Visible:=True;
SpeedButtonPrn.Visible:=True;
SpeedButtonPre.Visible:=True;
SpeedButtonZuoFei.Visible:=False;
TempStr:=EditHH.Text;
FldName:='户号';
for I:=1 to Length(TempStr) do
if(Ord(TempStr[I])>128)then begin
FldName:='名称';
Break;
end;
with QueryYuJiao do begin
Active:=False;
SQL.Clear;
SQL.Add('select 户号,名称,账面金额,HIDE=1,ID from sf_yujiao where '+FldName+'='''+TempStr+'''');
Active:=True;
if RecordCount=0 then begin
Active:=False;
SQL.Clear;
SQL.Add(YuJiaoYL+' where '+FldName+'='''+TempStr+'''');
Active:=True;
end;
DS.DataSet:=QueryYuJiao;
DBGridFldRef(QueryYuJiao);
end;
end;
procedure TFormPrepay.JiLu;
var
TempStr,FldName : String;
i : Integer;
begin
CEditYuJiao.Value:=0;
Label2.Visible:=False;
CEditYuJiao.Visible:=False;
SpeedButtonPrn.Visible:=False;
SpeedButtonPre.Visible:=False;
SpeedButtonZuoFei.Visible:=True;
TempStr:=EditHH.Text;
FldName:='户号';
for I:=1 to Length(TempStr) do
if(Ord(TempStr[I])>128)then begin
FldName:='名称';
Break;
end;
with QueryYiJiao do begin
Active:=False;
SQL.Clear;
SQL.Add('select 名称,户号,收费日期,本次预缴,收款员,HIDE=1,收费序号,账面金额,ID from sf_yujiao_cunru where 收款员='''+DCurOpName+''' and '+FldName+'='''+TempStr+'''');
Active:=True;
DS.DataSet:=QueryYiJiao;
DBGridFldRef(QueryYiJiao);
end;
end;
procedure TFormPrepay.EditHHKeyPress(Sender: TObject; var Key: Char);
var
TempStr,FldName : String;
i : Integer;
begin
if Key=#13 then begin
if ToolButtonYS.Down then
YuJiao
else begin
TempStr:=EditHH.Text;
FldName:='户号';
for I:=1 to Length(TempStr) do
if(Ord(TempStr[I])>128)then begin
FldName:='名称';
Break;
end;
if not QueryYiJiao.Locate(FldName,EditHH.Text,[]) then
ShowMessage('没有找到指定的预缴记录');
end;
end;
end;
procedure TFormPrepay.FormCreate(Sender: TObject);
begin
YuJiao;
end;
procedure TFormPrepay.DBGridFldRef(Query: TAdoQuery);
var
I:Integer;
CanShow:Boolean;
begin
CanShow:=True;
DBGridYJ.Options:=DBGridYJ.Options-[dgEditing];
for I:=0 to Query.FieldCount-1 do begin
case Query.Fields[I].DataType of
ftString:Query.Fields[I].DisplayWidth:=25;
ftDate,ftDateTime:
begin
TDateTimeField(Query.Fields[I]).DisplayFormat:='yyyy-mm-dd';
Query.Fields[I].DisplayWidth:=15;
end;
else
Query.Fields[I].DisplayWidth:=15;
end;
if UpperCase(Query.Fields[I].FieldName)='HIDE' then
CanShow:=False;
Query.Fields[I].Visible:=CanShow;
end;
end;
procedure TFormPrepay.SpeedButtonPrnClick(Sender: TObject);
begin
if QueryYuJiao.RecordCount=0 then begin
ShowMessage('请先选择用户');
Exit;
end;
//打印
FillReport(True);
RepRunShouFei.Print;
SpeedButtonPre.Caption:='&V预览收据';
DBGridYJ.Visible:=True;
ScrollBoxView.Visible:=False;
end;
procedure TFormPrepay.SpeedButtonZuoFeiClick(Sender: TObject);
begin
if QueryYiJiao.RecordCount=0 then begin
ShowMessage('请先选择需要作废的记录');
Exit;
end;
if Application.MessageBox('您确定要作废这条记录吗?','',MB_OKCANCEL+MB_ICONQUESTION)<>ID_OK then
Exit;
with DataMD.ADOSPzuofeiYuJiao do begin
Parameters.ParamByName('@ID').DataType:=ftInteger;
Parameters.ParamByName('@ID').Value:=QueryYiJiao.FieldByName('ID').AsInteger;
Parameters.ParamByName('@ShouFeiXH').DataType:=ftInteger;
Parameters.ParamByName('@ShouFeiXH').Value:=QueryYiJiao.FieldByName('收费序号').AsInteger;
Parameters.ParamByName('@OpName').DataType:=ftString;
Parameters.ParamByName('@OpName').Size:=50;
Parameters.ParamByName('@OpName').Value:=DCurOpName;
ExecProc;
end;
QueryYiJiao.Close;
QueryYiJiao.Open;
DBGridFldRef(QueryYiJiao);
end;
function StrIPos(const Str1, Str2: PChar): PChar;
var
TmpPos:Integer;
begin
TmpPos:=Pos(UpperCase(Str2),UpperCase(Str1));
asm
mov ECX,Str1;
Add ECX,TmpPos;
DEC ECX;
mov Result,ECX;
end;
end;
function GetPrintRepName(FName:String):String;
var
PrnRepName:Pchar;
begin
Result:=FName+' ';//如果不这样做,Result将于FName共用同一地址
PrnRepName:=PChar(FName);
CopyMemory(StrIPos(PrnRepName,'.ept'),Pchar('.prn'),4);
if FileExists(PrnRepName) then
Result:=PrnRepName;
end;
procedure TFormPrepay.FillReport(IsPrint : Boolean);
var
RepFileName : String;
IniFile : TIniFile;
ShiShouFee : Double;
begin
if CEditYuJiao.Value=0 then begin
ShowMessage('没有预缴金额!');
Abort;
end;
IniFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'ShouFei.Sys');
RepRunShouFei.ResetSelf;
RepFileName:='';
RepFileName:=IniFile.ReadString('设置','预收报表','');
if RepFileName='' then begin
ShowMessage('没有收据格式!');
Abort;
end;
IniFile.Free;
if IsPrint then
RepFileName:=GetPrintRepName(RepFileName);
ShiShouFee:=CEditYuJiao.Value;
RepRunShouFei.loadfile(RepFileName);
RepRunShouFei.SetVarValue('OpID',DCurOpID);
RepRunShouFei.SetVarValue('OpName',DCurOpName);
RepRunShouFei.SetVarValue('OpDate',Now);
RepRunShouFei.SetVarValue('ShiShouFee',ShiShouFee);
RepRunShouFei.SetVarValue('户号',QueryYuJiao.FieldByName('户号').AsString);
RepRunShouFei.SetVarValue('名称',QueryYuJiao.FieldByName('名称').AsString);
if IsPrint then begin
with DataMD.ADOSPpringYuJiao do begin
Parameters.ParamByName('@ID').DataType:=ftInteger;
Parameters.ParamByName('@ID').Value:=QueryYuJiao.FieldByName('ID').AsInteger;
Parameters.ParamByName('@HuMing').DataType:=ftString;
Parameters.ParamByName('@HuMing').Size:=50;
Parameters.ParamByName('@HuMing').Value:=QueryYuJiao.FieldByName('名称').AsString;
Parameters.ParamByName('@HuHao').DataType:=ftString;
Parameters.ParamByName('@HuHao').Size:=20;
Parameters.ParamByName('@HuHao').Value:=QueryYuJiao.FieldByName('户号').AsString;
Parameters.ParamByName('@YuJiaoJE').DataType:=ftFloat;
Parameters.ParamByName('@YuJiaoJE').Value:=CEditYuJiao.Value;
Parameters.ParamByName('@OpName').DataType:=ftString;
Parameters.ParamByName('@OpName').Size:=50;
Parameters.ParamByName('@OpName').Value:=DCurOpName;
ExecProc;
end;
QueryYuJiao.Close;
QueryYuJiao.Open;
DBGridFldRef(QueryYuJiao);
CEditYuJiao.Value:=0;
end;
end;
procedure TFormPrepay.SpeedButtonPreClick(Sender: TObject);
begin
//预览
if QueryYuJiao.RecordCount=0 then begin
ShowMessage('请先选择用户');
Exit;
end;
if SpeedButtonPre.Caption='&V预览收据' then begin
FillReport(False);
RepRunShouFei.InsidePreview:=True;
RepRunShouFei.PrintPreview(False);
DBGridYJ.Visible:=False;
ScrollBoxView.Visible:=True;
SpeedButtonPre.Caption:='&V取消预览';
end
else begin
SpeedButtonPre.Caption:='&V预览收据';
DBGridYJ.Visible:=True;
ScrollBoxView.Visible:=False;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -