⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prepay.pas

📁 电力行业前台收费程序,需要有后台SQL数据库,和电费管理系统配合应用.
💻 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 + -