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

📄 pd.pas

📁 晓风财务软件源码,具有财务软基本功能,仅供学习,勿商用,后果与本人无关 1、使用的第三方VCL: FastReport2.6中文版 EHLIB3 sncCurrency SUIPac
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Pd;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, sncCurrency, sncDBCurrency, Grids, DBGridEh, DB, ADODB, ImgList,
  StdCtrls, ExtCtrls, SUIForm, SUIEdit, ComCtrls, SUIButton, Buttons,
  ToolWin , ExtFunc, TFlatSpeedButtonUnit, TFlatButtonUnit, FR_DSet,
  FR_DBSet, FR_Class, printers;

type
  TFrmPD = class(TForm)
    suiFrmPD: TsuiForm;
    g: TDBGridEh;
    sncDBCurrencyInplaceEdit: TsncDBCurrencyEdit;
    Panel1: TPanel;
    Label1: TLabel;
    sncCurrencyLabel3: TsncCurrencyLabel;
    sncCurrencyLabel4: TsncCurrencyLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Panel5: TPanel;
    Panel6: TPanel;
    DataSource1: TDataSource;
    editPZBH: TsuiEdit;
    Panel7: TPanel;
    Label2: TLabel;
    Panel8: TPanel;
    Panel9: TPanel;
    Label6: TLabel;
    Label7: TLabel;
    editFJ: TsuiEdit;
    Label8: TLabel;
    Label9: TLabel;
    datePD: TDateTimePicker;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Panel10: TPanel;
    Panel11: TPanel;
    Panel12: TPanel;
    editZD: TsuiEdit;
    editSH: TsuiEdit;
    editDZ: TsuiEdit;
    Panel13: TPanel;
    editCWZG: TsuiEdit;
    Label13: TLabel;
    tq: TADOQuery;
    t: TADOTable;
    tbPrint: TFlatButton;
    tbPrePrint: TFlatButton;
    tbSave: TFlatButton;
    tbDel: TFlatButton;
    tbPrevious: TFlatButton;
    tbNext: TFlatButton;
    tbCalc: TFlatButton;
    tbAddRow: TFlatButton;
    tbInsertRow: TFlatButton;
    tbDeleteRow: TFlatButton;
    tbSwap: TFlatButton;
    tbBalance: TFlatButton;
    qPDAll: TADOQuery;
    fr: TfrReport;
    frDS: TfrDBDataSet;
    procedure sncDBCurrencyInplaceEditEnter(Sender: TObject);
    procedure sncDBCurrencyInplaceEditExit(Sender: TObject);
    procedure sncDBCurrencyInplaceEditMoveOut(Sender: TObject;
      var Key: Word; Shift: TShiftState);
    procedure gColEnter(Sender: TObject);
    procedure gColExit(Sender: TObject);
    procedure gDrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
    procedure gKeyPress(Sender: TObject; var Key: Char);
    procedure editFJExit(Sender: TObject);
    procedure gColumns0EditButtonClick(Sender: TObject;
      var Handled: Boolean);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure gColumns1EditButtonClick(Sender: TObject;
      var Handled: Boolean);
    procedure Label1MouseEnter(Sender: TObject);
    procedure Label1MouseLeave(Sender: TObject);
    procedure Label1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Label1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Label1Click(Sender: TObject);
    procedure gCellClick(Column: TColumnEh);
    procedure tbAddRowClick(Sender: TObject);
    procedure tbInsertRowClick(Sender: TObject);
    procedure tbDeleteRowClick(Sender: TObject);
    procedure tbSwapClick(Sender: TObject);
    procedure tbBalanceClick(Sender: TObject);
    procedure tbSaveClick(Sender: TObject);
    procedure editFJKeyPress(Sender: TObject; var Key: Char);
    procedure tbDelClick(Sender: TObject);
    procedure tbPreviousClick(Sender: TObject);
    procedure tbNextClick(Sender: TObject);
    procedure tbCalcClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure tbPrePrintClick(Sender: TObject);
    procedure tbPrintClick(Sender: TObject);
    procedure sncDBCurrencyInplaceEditKeyPress(Sender: TObject;
      var Key: Char);
  private
    { Private declarations }
  public
    CurrentYear,CurrentMonth:integer;
    MaxNum:integer;
    CanEdit,CanEditSubject:Boolean;
    Deleted,Edited,Added,EditSubjected:Boolean;
    DefaultYear,DefaultMonth,DefaultNum:integer;

    procedure SetHighLightColor;
    procedure SetNormalColor;
    function CheckCurrencyField(FieldName: String): Boolean;
    function CheckPDFull:Boolean;
    function CheckRowFull:Boolean;
    procedure EditChange;
    procedure GoPD(Num:integer);
    procedure NewPD;
    procedure SetPDDateRange;
    procedure SetPDDateRangeCancel;
    procedure PrintPD(PrintType:integer);
    procedure ChangeGridCol(Col:integer);
  end;

const
  CurrencyFieldSet: array[0..1] of string=('J_Money' , 'D_Money');

var
  FrmPD: TFrmPD;


implementation

uses PublicFunc, EditSubject, DataModule;

{$R *.dfm}
procedure TFrmPD.EditChange;
begin
  t.Edit;
  t.Post;
  tbSave.Enabled:=CheckPDFull;
  tbSwap.Enabled:=((t.FieldByName('J_Money').AsCurrency<>0) or (t.FieldByName('D_Money').AsCurrency<>0));
  tbBalance.Enabled:=(t.RecordCount>1);
  tbDeleteRow.Enabled:=(t.RecordCount>1);
  tbAddRow.Enabled:=(CheckRowFull) or (t.RecordCount<1);
  tbInsertRow.Enabled:=CheckRowFull;
end;

function TFrmPD.CheckPDFull:Boolean;
var
  J,D:Currency;
begin
  result:=false;
  if t.RecordCount<2 then Exit;

  tq.Close;
  tq.SQL.Clear;
  tq.SQL.Add('select top 1 * from #TempPD order by RecNo');
  tq.Open;
  if Trim(tq.FieldByName('Summary').AsString)='' then
  begin
    tq.Close;
    Exit;
  end;

  tq.Close;
  tq.SQL.Clear;
  tq.SQL.Add('select * from #TempPD where Name is null or (J_Money=0 and D_Money=0)');
  tq.Open;
  if tq.RecordCount>0 then
  begin
    tq.Close;
    Exit;
  end;

  tq.Close;
  tq.SQL.Clear;
  tq.SQL.Add('select sum(J_Money) as SUM_J,sum(D_Money) as SUM_D from #TempPD');
  tq.Open;
  J:=tq.FieldByName('SUM_J').AsCurrency;
  D:=tq.FieldByName('SUM_D').AsCurrency;
  tq.Close;
  result:=(J=D);
end;

function TFrmPD.CheckRowFull:Boolean;
begin
  if t.RecNo=1 then
    result:=((Trim(t.FieldByName('Summary').AsString)<>'') and (Trim(t.FieldByName('Name').AsString)<>'') and ((t.FieldByName('J_Money').asCurrency<>0) or (t.FieldByName('D_Money').asCurrency<>0)))
  else
    result:=((Trim(t.FieldByName('Name').AsString)<>'') and ((t.FieldByName('J_Money').asCurrency<>0) or (t.FieldByName('D_Money').asCurrency<>0)));
end;

procedure TFrmPD.GoPD(Num:integer);
begin
  qPDAll.RecNo:=Num;
  CurrentYear:=qPDAll.FieldByName('Year').AsInteger;
  CurrentMonth:=qPDAll.FieldByName('Month').AsInteger;
  editPZBH.Text:=Trim(qPDAll.FieldByName('Number').AsString);

  tq.Close;
  tq.SQL.Clear;
  tq.SQL.Add('delete from #TempPD');
  tq.ExecSQL;
  tq.Close;
  tq.SQL.Clear;
  tq.SQL.Add('insert into #TempPD select * from V_Credence where [Year]='+IntToStr(CurrentYear)+' and [Month]='+IntToStr(CurrentMonth)+' and Number='+editPZBH.Text);
  tq.ExecSQL;
  tq.Close;
  t.Requery;
  g.SumList.RecalcAll;

  t.First;
  while not t.Eof do
  begin
    t.Edit;
    t.FieldByName('Name').AsString:=Trim(t.FieldByName('CodeLongSubjectName').AsString);
    t.Post;
    t.Next;
  end;

  t.First;
  editCWZG.Text:=DM.FinanceManager;
  editZD.Text:=Trim(t.FieldByName('MakeOperator').AsString);
  editSH.Text:=Trim(t.FieldByName('AuditingOperator').AsString);
  SetPDDateRangeCancel;
  DatePD.Date:=t.FieldByName('DateTime').AsDateTime;
  SetPDDateRange;
  editFJ.Text:=Trim(t.FieldByName('AccessoryNum').AsString);
  CanEdit:=(editSH.Text='');

  tbPrint.Enabled:=true;
  tbPrePrint.Enabled:=true;
  tbSave.Enabled:=true;
  tbDel.Enabled:=(qPDAll.RecNo=qPDAll.RecordCount);
  tbPrevious.Enabled:=(qPDAll.RecNo>1);
  tbNext.Enabled:=true;

  g.Readonly:=false;
  datePD.Enabled:=true;
  editFJ.Enabled:=true;
  sncDBCurrencyInplaceEdit.ReadOnly:=false;

  if (DefaultNum<>-1) then
  begin
    tbNext.Enabled:=false;
    tbPrevious.Enabled:=false;
    CanEdit:=false;
  end;

  if (not CanEdit) then
  begin
    tbSave.Enabled:=false;
    tbDel.Enabled:=false;
    tbAddRow.Enabled:=false;
    tbInsertRow.Enabled:=false;
    tbDeleteRow.Enabled:=false;
    tbSwap.Enabled:=false;
    tbBalance.Enabled:=false;

    g.Readonly:=true;
    datePD.Enabled:=false;
    editFJ.Enabled:=false;
    sncDBCurrencyInplaceEdit.ReadOnly:=true;
  end;
end;

procedure TFrmPD.NewPD;
begin
  CanEdit:=true;

  tbPrint.Enabled:=false;
  tbPrePrint.Enabled:=false;
  tbSave.Enabled:=false;
  tbDel.Enabled:=false;
  tbPrevious.Enabled:=false;
  tbNext.Enabled:=false;
  tbAddRow.Enabled:=false;
  tbInsertRow.Enabled:=false;
  tbDeleteRow.Enabled:=false;
  tbSwap.Enabled:=false;
  tbBalance.Enabled:=false;

  CurrentYear:=DM.AccountYear;
  CurrentMonth:=DM.AccountMonth;
  SetPDDateRangeCancel;
  if DM.AccountMonth=12 then datePD.Date:=StrToDate(IntToStr(DM.AccountYear+1)+'-1-1')-1 else datePD.Date:=StrToDate(IntToStr(DM.AccountYear)+'-'+IntToStr(DM.AccountMonth+1)+'-1')-1;
  SetPDDateRange;
  editCWZG.Text:=DM.FinanceManager;
  editZD.Text:=DM.UserName;
  editSH.Text:='';
  CanEdit:=true;

  g.Readonly:=false;
  datePD.Enabled:=true;
  editFJ.Enabled:=true;
  sncDBCurrencyInplaceEdit.ReadOnly:=false;

  tq.Close;
  tq.SQL.Clear;
  tq.SQL.Add('delete from #TempPD');
  tq.ExecSQL;
  t.Requery;
  g.SumList.RecalcAll;

  if qPDAll.RecordCount<1 then
    MaxNum:=1
  else
  begin
    tbPrevious.Enabled:=true;
    qPDAll.Last;
    if (qPDAll.FieldByName('Year').AsInteger=DM.AccountYear) and (qPDAll.FieldByName('Month').AsInteger=DM.AccountMonth) then
       MaxNum:=qPDAll.FieldByName('Number').AsInteger+1
    else
      MaxNum:=1;
  end;
  editPZBH.Text:=IntToStr(MaxNum);
  editFJ.Text:='0';
  t.Append;
  t.FieldByName('RecNo').AsInteger:=1;
  t.Post;
end;

function TFrmPD.CheckCurrencyField(FieldName: String): Boolean;
var
  I: Integer;
begin
  Result := False;
  for I:=0 to Length(CurrencyFieldSet)-1 do
  begin
    if (FieldName=CurrencyFieldSet[I]) then
    begin
      Result := True;
      Break;
    end;
  end;
end;

procedure TFrmPD.SetHighLightColor;
begin
  sncDBCurrencyInplaceEdit.Color := clMoneyGreen;
  sncDBCurrencyInplaceEdit.Font.Color := clWhite;
end;

procedure TFrmPD.SetNormalColor;
begin
  sncDBCurrencyInplaceEdit.Color := g.Color;
  sncDBCurrencyInplaceEdit.Font.Color := g.Font.Color;
end;

procedure TFrmPD.sncDBCurrencyInplaceEditEnter(Sender: TObject);
begin
  SetNormalColor;
  if CanEdit then
  begin
    if ((g.SelectedField.FieldName='J_Money') and (t.FieldByName('D_Money').AsCurrency<>0)) or
       ((g.SelectedField.FieldName='D_Money') and (t.FieldByName('J_Money').AsCurrency<>0)) then
    begin
      sncDBCurrencyInplaceEdit.ReadOnly:=true;
      tbCalc.Enabled:=false;
    end
    else
    begin
      tbCalc.Enabled:=true;
      EditChange;
      sncDBCurrencyInplaceEdit.ReadOnly:=false;
    end;
  end;
end;

procedure TFrmPD.sncDBCurrencyInplaceEditExit(Sender: TObject);
begin
  SetHighLightColor;
  if CanEdit then EditChange;
end;

procedure TFrmPD.sncDBCurrencyInplaceEditMoveOut(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  case Key of
    VK_UP,VK_DOWN,VK_LEFT,VK_RIGHT:
      begin
        g.SetFocus;
        SendMessage(g.Handle, WM_KEYDOWN, WORD(Key), 0);
      end;
  end;
end;

procedure TFrmPD.gColEnter(Sender: TObject);
begin
  if CheckCurrencyField(g.SelectedField.FieldName) then
  begin
    sncDBCurrencyInplaceEdit.DataField := g.SelectedField.FieldName;
    sncDBCurrencyInplaceEdit.Tag := 1;
  end;
end;

procedure TFrmPD.gColExit(Sender: TObject);
begin
  if CheckCurrencyField(g.SelectedField.FieldName) then
  begin
    sncDBCurrencyInplaceEdit.Visible := false;
    sncDBCurrencyInplaceEdit.Tag := 0;
  end;
end;

procedure TFrmPD.gDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
var
  OldColor, OldFontColor: TColor;
begin
  if CheckCurrencyField(Column.FieldName) then
  begin
    if (gdFocused in State) then
    begin
      sncDBCurrencyInplaceEdit.Left := Rect.Left + g.Left+2;
      sncDBCurrencyInplaceEdit.Top := Rect.Top + g.top+2;
      sncDBCurrencyInplaceEdit.Width := Rect.Right-Rect.Left;
      sncDBCurrencyInplaceEdit.Height := Rect.Bottom- Rect.Top;
      SetHighLightColor;
      if (sncDBCurrencyInplaceEdit.Tag=1) and not sncDBCurrencyInplaceEdit.Visible then
        sncDBCurrencyInplaceEdit.Visible := True;
    end
    else
      begin
        OldColor := sncDBCurrencyInplaceEdit.Color;
        OldFontColor := sncDBCurrencyInplaceEdit.Font.Color;
        SetNormalColor;
        DrawCurrencyFrame(g.Canvas, Rect, sncDBCurrencyInplaceEdit, Column.Field.AsFloat);
        sncDBCurrencyInplaceEdit.Color := OldColor;
        sncDBCurrencyInplaceEdit.Font.Color := OldFontColor;
      end;
  end;
end;

procedure TFrmPD.gKeyPress(Sender: TObject; var Key: Char);
var
  id:integer;
  d:pChar;
begin
  if (Key=#13) and (g.SelectedField.FieldName='Summary') then
  begin
    EditChange;
    ChangeGridCol(1);
    Exit;
  end;

⌨️ 快捷键说明

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