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

📄 invoice400v_f.pas

📁 县级供电企业电费核算源码, 在客户处正常运行8年以上, Delphi 5开发,数据库为Interbase/Firebird, 深入使用Procedure和Trigger等, 对入门者具有很好的参考价值
💻 PAS
📖 第 1 页 / 共 2 页
字号:
procedure TF_Invoice400v.Bt_EditClick(Sender: TObject);
begin
    R_Invoice.Template.FileName := gRootPath + '400V发票.RTM';
    R_Invoice.Template.LoadFromFile();
    D_Invoice.ShowModal();
    If R_Invoice.Modified Then
        If Application.MessageBox('报表已被修改, 存储报表?','系统提示',MB_YESNO) = IDYES Then
            R_Invoice.Template.SaveToFile();
end;

procedure TF_Invoice400v.ppLabel89GetText(Sender: TObject; var Text: String);
begin
    Text := Default_Auditing;//审核
end;

procedure TF_Invoice400v.ppLabel87GetText(Sender: TObject; var Text: String);
begin
    Text := Default_Fee;//收费
end;

procedure TF_Invoice400v.ppLabel88GetText(Sender: TObject; var Text: String);
begin
    Text := Default_Use;//开票
end;

procedure TF_Invoice400v.ppL_UpperCashGetText(Sender: TObject; var Text: String);
begin
	//大写金额
	Text := UpperMoney(Q_Invoice['f_FeeAmount']);
end;

procedure TF_Invoice400v.ppLabel1GetText(Sender: TObject; var Text: String);
begin
	Text := CurrentYear;
end;

procedure TF_Invoice400v.ppLabel2GetText(Sender: TObject; var Text: String);
begin
	Text := CurrentMonth;
end;

procedure TF_Invoice400v.ppDetailBand4BeforePrint(Sender: TObject);
begin
	//大写金额
	ppL_UpperCash.Caption := UpperMoney(Q_Invoice['f_FeeAmount']);
end;

procedure TF_Invoice400v.Bt_SearchClick(Sender: TObject);
Var
	SqlStr:String;
    SearchStr:String[12];
begin
    Bt_PrintInvoice.Enabled := False;
	Bt_PrintBalance.Enabled := False;

	Q_Invoice.Close();
    Q_Invoice.SQL.Clear();
	Q_Invoice.SQL.Add('Select H.f_Used_Amount As f_FeeAmount');
	Q_Invoice.SQL.Add(', T.f_Transfer_Name');
    Q_Invoice.SQL.Add(', V.f_Village_Name || H.f_Position As f_Position');
    Q_Invoice.SQL.Add(', H.*');
	Q_Invoice.SQL.Add(', H.f_Used_Amount - H.f_Last_Balance As f_Should_Receive');
    Q_Invoice.SQL.Add(' From Tb_House H');
    Q_Invoice.SQL.Add('   Join Tb_Transfer T On H.f_Transfer_No = T.f_Transfer_No');
    Q_Invoice.SQL.Add('   Left Join Tb_Village V On H.f_Village_No = V.f_Village_No');

    SearchStr := E_Search.Text;
	If SearchStr = '' Then
    	SqlStr := ' Where H.f_PrintInvoice = ''Y'''
    Else
    Begin
		If (SearchStr[1] >= 'A') And (SearchStr[2] <= 'Z') Then//Is Alpha
	        If Length(SearchStr) >= 11 Then//户号足位
		    	SqlStr := Format(' Where  f_House_No = ''%s''',[SearchStr])
        	Else
        		SqlStr := Format(' Where f_House_No Like ''%s%%''',[SearchStr])
        Else//认为是户名
        	SqlStr := Format(' Where f_House_Name Like ''%s%%''',[SearchStr]);
    End;

    Q_Invoice.SQL.Add(SqlStr);
	Q_Invoice.SQL.Add(' Order By f_House_No');
    Q_Invoice.Open();
    If Q_Invoice.Eof Or (Q_Invoice.RecordCount <> 1) Then//未找到
    Begin
        E_Search.SetFocus();
    	Beep();
        Exit;
    End;

    //查询用户表
    Q_Ammeter.Close();
    Q_Ammeter.ParamByName('House_No').AsString := DBE_House_No.Text;
    Q_Ammeter.Open();

    //查询电费项目明细
    Q_FeeDetail.Close();
    Q_FeeDetail.ParamByName('House_No').AsString := DBE_House_No.Text;
    Q_FeeDetail.Open();

    //收款额输入
    E_Gathering.Text := Q_Invoice['f_Gathering'];
    E_GiveChange.Text := Q_Invoice['f_Give_Change'];
    E_Gathering.SetFocus();

    If Q_Invoice['f_Gathering'] > 0 Then
    	ShowMessage('请注意:此用户本月已缴费,系统只记录最后一次收费!');
end;

procedure TF_Invoice400v.E_SearchKeyPress(Sender: TObject; var Key: Char);
begin
	If Key = #13 Then
    	Bt_SearchClick(Nil);
end;

procedure TF_Invoice400v.DBG_HouseDblClick(Sender: TObject);
begin
	E_Search.Text := DBE_House_No.Text;
    Bt_SearchClick(Nil);
end;

procedure TF_Invoice400v.DBG_HouseCellClick(Column: TColumn);
begin
	E_Search.Text := DBE_House_No.Text;
end;

procedure TF_Invoice400v.E_SearchDblClick(Sender: TObject);
begin
	E_Search.Text := '';
end;

procedure TF_Invoice400v.CB_PreviewClick(Sender: TObject);
begin
	If CB_Preview.Checked Then
    	R_Invoice.DeviceType := dtScreen
    Else
    	R_Invoice.DeviceType := dtPrinter;
end;

procedure TF_Invoice400v.E_GatheringChange(Sender: TObject);
Var
	//收款, 找零, 实收, 应收, 本期余额
	Gathering, GiveChange, ActualReceive, Amount, Balance: Currency;
begin
	Try
		Amount := StrToCurr(DBE_Should_Receive.Field.AsString);//应收
	    Gathering := StrToCurr(E_Gathering.Text);//收款
		If CB_PreDeposit.Checked Then//允许预存电费
        	GiveChange := 0
        Else
		    GiveChange := Gathering - Amount;
        ActualReceive := Gathering - GiveChange;//实收/下帐
        Balance := ActualReceive - Amount;
		E_GiveChange.Text := CurrToStrF(GiveChange, ffGeneral, 2);//打零
		E_ActualReceive.Text := CurrToStrF(ActualReceive, ffGeneral, 2);//实收
        E_Balance.Text := CurrToStrF(Balance, ffGeneral, 2);//本期余额
        Bt_Charge.Enabled := GiveChange >= 0;//收款金额足够
    Except
    	E_GiveChange.Text := '';
        E_ActualReceive.Text := '';
        E_Balance.Text := '';
        Bt_Charge.Enabled := False;
        Bt_PrintInvoice.Enabled := False;
        Bt_PrintBalance.Enabled := False;
    End;
end;

procedure TF_Invoice400v.DBG_TransferDblClick(Sender: TObject);
begin
	E_Search.Text := Tb_Transfer['f_Transfer_No'];
    Bt_SearchClick(Nil);
end;

procedure TF_Invoice400v.Bt_ChargeClick(Sender: TObject);
Var
	//实收 本期余额 找零 收款
	ActualReceive, Balance, GiveChange, Gathering: Currency;
begin
    //各种金额
    ActualReceive := StrToCurr(E_ActualReceive.Text);
    Balance := StrToCurr(E_Balance.Text);
    GiveChange := StrToCurr(E_GiveChange.Text);
    Gathering := StrToCurr(E_Gathering.Text);

    //记录收费信息
	Query.SQL.Clear();
	Query.SQL.Add(Format('Update Tb_House Set f_Receiver = "%s", f_Charge_Date = "%s"',[LoginNo, DateToStr(Now())]));
	Query.SQL.Add(Format('  ,f_Gathering = %.2f, f_Give_Change = %.2f',[Gathering, GiveChange]));
	Query.SQL.Add(Format('  ,f_Actual_Receive = %.2f, f_Balance = %.2f',[ActualReceive, Balance]));
	Query.SQL.Add(Format('Where f_House_No = "%s"',[DBE_House_No.Text]));
	Query.ExecSQL();

	Bt_Charge.Enabled := False;
	Bt_PrintInvoice.Enabled := True;
    Bt_PrintBalance.Enabled := True;
end;

procedure TF_Invoice400v.Bt_SwitchClick(Sender: TObject);
begin
	F_Invoice10KV.Show();
end;

procedure TF_Invoice400v.FormCreate(Sender: TObject);
begin
	Query.SQL.Text := 'Update Tb_House Set f_Position = '''' Where f_Position Is Null';
	Query.ExecSQL;
end;

procedure TF_Invoice400v.E_GiveChangeChange(Sender: TObject);
Var
	//收款, 找零, 实收, 本期余额, 应收
	Gathering, GiveChange, ActualReceive, Balance, Amount: Currency;
begin
	//手工修改找零时
	Try
		Amount := StrToCurr(DBE_Should_Receive.Field.AsString);//应收
	    Gathering := StrToCurr(E_Gathering.Text);//收款
	    GiveChange := StrToCurr(E_GiveChange.Text);//找零
        ActualReceive := Gathering - GiveChange;//实收/下帐
        Balance := ActualReceive - Amount;
		E_ActualReceive.Text := CurrToStrF(ActualReceive, ffGeneral, 2);//实收
        E_Balance.Text := CurrToStrF(Balance, ffGeneral, 2);//本期余额
        Bt_Charge.Enabled := GiveChange >= 0;//收款金额足够
    Except
        E_ActualReceive.Text := '';
        E_Balance.Text := '';
        Bt_Charge.Enabled := False;
    End;
end;

procedure TF_Invoice400v.CB_PreDepositClick(Sender: TObject);
begin
	E_GiveChange.ReadOnly := Not CB_PreDeposit.Checked;
end;

procedure TF_Invoice400v.Bt_PrintBalanceClick(Sender: TObject);
begin
    R_Balance.Template.FileName := gRootPath + '400V收费单.RTM';
    R_Balance.Template.LoadFromFile();
    R_Balance.PassSetting := psTwoPass;
    R_Balance.ShowPrintDialog := False;
    If Sender <> Nil Then//用户按
        If CB_Preview.Checked Then
            R_Balance.DeviceType := dtScreen
        Else
            R_Balance.DeviceType := dtPrinter
    Else
        R_Balance.DeviceType := dtPrinter;

    R_Balance.Print();
end;

procedure TF_Invoice400v.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
	Tb_Transfer.Close();
    Q_Invoice.Close();
    Q_Ammeter.Close();
    Q_FeeDetail.Close();
    MyReleaseForm(TForm(F_Invoice400v));
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -