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

📄 editsubject.pas

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

interface

uses
  Windows, Graphics, Controls, Forms, SysUtils, ExtFunc,
  Dialogs, StdCtrls, ExtCtrls, SUIButton, SUIEdit,
  jpeg, Classes, SUIForm,
  DB, ADODB, ComCtrls, SUIComboBox,
  fcdbtreeview, SUITabControl;

type
  TFrmEditSubject = class(TForm)
    suiForm1: TsuiForm;
    btnSave: TsuiButton;
    btnCancel: TsuiButton;
    GroupBox1: TGroupBox;
    rb_J: TsuiRadioButton;
    rb_D: TsuiRadioButton;
    btnAdd1: TsuiButton;
    btnAdd2: TsuiButton;
    btnDel: TsuiButton;
    btnEdit: TsuiButton;
    tq: TADOQuery;
    btnSelect: TsuiButton;
    TabSubject: TsuiTabControl;
    tv: TfcDBTreeView;
    procedure FormShow(Sender: TObject);
    procedure btnAdd1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure tvChange(TreeView: TfcDBCustomTreeView; Node: TfcDBTreeNode);
    procedure btnSaveClick(Sender: TObject);
    procedure btnAdd2Click(Sender: TObject);
    procedure btnDelClick(Sender: TObject);
    procedure btnEditClick(Sender: TObject);
    procedure btnSelectClick(Sender: TObject);
    procedure tvDblClick(TreeView: TfcDBCustomTreeView;
      Node: TfcDBTreeNode; Button: TMouseButton; Shift: TShiftState; X,
      Y: Integer);
    procedure TabSubjectChange(Sender: TObject);
  private
    { Private declarations }
  public
    t:array of TAdoTable;
    ds:array of TDataSource;
    CanEdit,isEdited,CanSelect:Boolean;
    SelectID:integer;
    SelectName,SelectLongSubjectName,SelectCodeLongSubjectName:string;
  end;

var
  FrmEditSubject: TFrmEditSubject;
implementation

uses EditSubjectAdd,PublicFunc, DataModule;

{$R *.dfm}

procedure TFrmEditSubject.FormShow(Sender: TObject);
var
  i:integer;
begin
  isEdited:=false;
  btnSelect.Enabled:=CanSelect;
  btnEdit.Enabled:=CanEdit;
  SelectID:=-1;

  tq.Connection:=DM.adoc;
  tq.Close;
  tq.SQL.Clear;
  tq.SQL.Add('select * into #TempEditSubject from V_Subject');
  tq.ExecSQL;
  tq.Close;

  TabSubject.Tabs.Clear;
  for i:=0 to DM.SubjectTypeNum-1 do TabSubject.Tabs.Add(DM.SubjectType[i]);
  SetLength(t,DM.MaxSubjectLevel);
  SetLength(ds,DM.MaxSubjectLevel);
  tv.DisplayFields.Clear;
  for i:=0 to DM.MaxSubjectLevel-1 do
  begin
    t[i]:=TAdoTable.Create(self);
    t[i].Connection:=DM.adoc;
    ds[i]:=TDataSource.Create(self);
    ds[i].DataSet:=t[i];
    t[i].TableName:='#TempEditSubject';
    t[i].Open;
    t[i].Sort:='Code';
    if i>0 then
    begin
      t[i].MasterSource:=ds[i-1];
      t[i].MasterFields:='id';
      t[i].IndexFieldNames:='Parent_id';
    end;
    tv.DisplayFields.Add('CodeName');
  end;
  TabSubject.TabIndex:=0;
  t[0].Filter:='Type='''+DM.SubjectType[0]+''' and Parent_id=-1';
  t[0].Filtered:=true;
  tv.DataSourceFirst:=ds[0];
  tv.DataSourceLast:=ds[DM.MaxSubjectLevel-1];
end;

procedure TFrmEditSubject.btnAdd1Click(Sender: TObject);
//var
//  fesa:TFrmEditSubjectAdd;
begin
//  fesa:=TFrmEditSubjectAdd.Create(self);
//  fesa.ShowModal;
//  fesa.Destroy;
end;

procedure TFrmEditSubject.btnAdd2Click(Sender: TObject);
var
  fesa:TFrmEditSubjectAdd;
  i,j,k:integer;
  NewSubCode:string;
  s:string;
begin
  if t[tv.ActiveNode.Level].FieldByName('isCarryForwardParentSubject').AsBoolean then
  begin
    Frm_MsgBox('系统信息','此科目为结转余额科目,不能增加子科目。',MsgBox_OK_ERROR);
    Exit;
  end;

  tq.Close;
  tq.SQL.Clear;
  tq.SQL.Add('select top 1 Subject_id from Credence where Subject_id='+t[tv.ActiveNode.Level].FieldByName('id').AsString+' union all '+
             'select top 1 Subject_id from Balance where Subject_id='+t[tv.ActiveNode.Level].FieldByName('id').AsString+' union all '+
             'select top 1 Subject_id from CashCredence where Subject_id='+t[tv.ActiveNode.Level].FieldByName('id').AsString+' union all '+
             'select top 1 Subject_id from CashBalance where Subject_id='+t[tv.ActiveNode.Level].FieldByName('id').AsString+' union all '+
             'select top 1 Subject_id from BankCredence where Subject_id='+t[tv.ActiveNode.Level].FieldByName('id').AsString+' union all '+
             'select top 1 Subject_id from BankBalance where Subject_id='+t[tv.ActiveNode.Level].FieldByName('id').AsString);
  tq.Open;
  if tq.RecordCount>0 then
  begin
    tq.Close;
    Frm_MsgBox('系统信息','此科目已经有业务发生,不能增加子科目。',MsgBox_OK_ERROR);
    Exit;
  end;
  tq.Close;

  fesa:=TFrmEditSubjectAdd.Create(self);
  fesa.tq.Connection:=DM.adoc;
  fesa.editCode1.Text:=Trim(t[tv.ActiveNode.Level].FieldByName('Code').AsString);

  NewSubCode:=Fun_LeftPad('1',DM.SubjectCodeLen[tv.ActiveNode.Level+1],'0')^;
  tq.Close;
  tq.SQL.Clear;
  tq.SQL.Add('select Code from #TempEditSubject where (ltrim(rtrim(Code))>'''+Trim(t[tv.ActiveNode.Level].FieldByName('code').AsString)+''') and (ltrim(rtrim(Code)) like '''+Trim(t[tv.ActiveNode.Level].FieldByName('code').AsString)+'%'')');
  tq.Open;
  while tq.Locate('Code',Trim(t[tv.ActiveNode.Level].FieldByName('Code').AsString)+NewSubCode,[loPartialKey]) do
    NewSubCode:=Fun_LeftPad(IntToStr(StrToInt(NewSubCode)+1),DM.SubjectCodeLen[tv.ActiveNode.Level+1],'0')^;
  tq.Close;
  fesa.editCode2.Text:=NewSubCode;
  fesa.editCode2.MaxLength:=DM.SubjectCodeLen[tv.ActiveNode.Level+1];
  fesa.rb_J.Checked:=rb_J.Checked;
  fesa.rb_D.Checked:=rb_D.Checked;

  if fesa.ShowModal=mrOK then
  begin
    j:=tv.ActiveNode.Level;
    k:=t[j].RecNo;
    t[j].Edit;
    t[j].FieldByName('IsHasSubSubject').AsBoolean:=true;
    t[j].Post;
    if fesa.rb_J.Checked then s:='借' else s:='贷';
    t[j].AppendRecord([Fun_GetMaxID(DM.adoc,'#TempEditSubject','id'),
                      t[j].FieldByName('id').Value,
                      -1,
                      '',
                      -1,
                      Trim(fesa.editCode1.Text)+Trim(fesa.editCode2.Text),
                      Trim(Copy(Fun_GetCodeFromHZ(Trim(fesa.editName.Text),'拼音',1,1)^,1,10)),
                      Trim(Copy(Fun_GetCodeFromHZ(Trim(fesa.editName.Text),'五笔',1,1)^,1,10)),
                      Trim(fesa.editName.Text),
                      t[j].FieldByName('Type_id').Value,
                      t[j].FieldByName('Type').Value,
                      s,
                      t[j].FieldByName('BalanceSheetSubject_id').Value,
                      t[j].FieldByName('BalanceSheet_L_R').Value,
                      t[j].FieldByName('ProfitAndLossSheetSubject_id').Value,
                      t[j].FieldByName('CashFlowSheetSubject_id').Value,
                      t[j].FieldByName('GainAllotSheetSubject_id').Value,
                      t[j].FieldByName('CarryForwardToSubject_id').Value,
                      t[j].FieldByName('isCarryForwardParentSubject').Value,
                      false,
                      Trim(t[j].FieldByName('LongSubjectName').AsString)+'/'+Trim(fesa.editName.Text),
                      Trim(fesa.editCode1.Text)+Trim(fesa.editCode2.Text)+' '+Trim(t[j].FieldByName('LongSubjectName').AsString)+'/'+Trim(fesa.editName.Text),
                      Trim(fesa.editCode1.Text)+Trim(fesa.editCode2.Text)+' '+Trim(fesa.editName.Text),
                      t[j].FieldByName('IsCash').Value,
                      t[j].FieldByName('isBank').Value,
                      true]);
    for i:=0 to DM.MaxSubjectLevel-1 do t[i].Requery;
    if k<=t[j].RecordCount then t[j].RecNo:=k;
    btnSave.Enabled:=true;
    btnSelect.Enabled:=false;
  end;
  fesa.Destroy;
end;

procedure TFrmEditSubject.btnEditClick(Sender: TObject);
var
  fesa:TFrmEditSubjectAdd;
  i,j,k:integer;
  s:string;
begin
  fesa:=TFrmEditSubjectAdd.Create(self);
  fesa.tq.Connection:=DM.adoc;
  fesa.editCode1.Text:=Trim(t[tv.ActiveNode.Level].FieldByName('Code').AsString);
  fesa.editCode2.Enabled:=false;
  fesa.editCode2.Visible:=false;
  fesa.Label2.Visible:=false;
  fesa.editName.Text:=Trim(t[tv.ActiveNode.Level].FieldByName('Name').AsString);

  fesa.rb_J.Checked:=rb_J.Checked;
  fesa.rb_D.Checked:=rb_D.Checked;

  if fesa.ShowModal=mrOK then
  begin
    j:=tv.ActiveNode.Level;
    k:=t[j].RecNo;
    t[j].Edit;
    t[j].FieldByName('Name').AsString:=Trim(fesa.editName.Text);
    t[j].FieldByName('CodeName').AsString:=fesa.editCode1.text+' '+Trim(fesa.editName.Text);

    s:=Trim(t[j].FieldByName('LongSubjectName').AsString);
    s:=Copy(s,1,Fun_nPos(s,'/',Fun_ChInStrNum(s,'/')))+Trim(fesa.editName.Text);
    t[j].FieldByName('LongSubjectName').AsString:=s;

    s:=Trim(t[j].FieldByName('CodeLongSubjectName').AsString);
    s:=Copy(s,1,Fun_nPos(s,'/',Fun_ChInStrNum(s,'/')))+Trim(fesa.editName.Text);
    t[j].FieldByName('CodeLongSubjectName').AsString:=s;

    if fesa.rb_J.Checked then t[j].FieldByName('J_D_Type').AsString:='借' else t[j].FieldByName('J_D_Type').AsString:='贷';
    t[j].Post;
    for i:=0 to DM.MaxSubjectLevel-1 do t[i].Requery;
    if k<=t[j].RecordCount then t[j].RecNo:=k;
    btnSave.Enabled:=true;
    btnSelect.Enabled:=false;
  end;
  fesa.Destroy;
end;

procedure TFrmEditSubject.btnDelClick(Sender: TObject);
var
  i,j:integer;
begin
  if t[tv.ActiveNode.Level].FieldByName('isCarryForwardParentSubject').AsBoolean then
  begin
    Frm_MsgBox('系统信息','此科目为结转余额科目,不能增加子科目。',MsgBox_OK_ERROR);
    Exit;
  end;

  if t[tv.ActiveNode.Level].FieldByName('isHasSubSubject').AsBoolean then
  begin
    Frm_MsgBox('系统信息','此科目包含子科目,不能直接删除,请先逐一删除其子科目。',MsgBox_OK_ERROR);
    Exit;
  end;

  tq.Close;
  tq.SQL.Clear;
  tq.SQL.Add('select top 1 Subject_id from Credence where Subject_id='+t[tv.ActiveNode.Level].FieldByName('id').AsString+' union all '+
             'select top 1 Subject_id from Balance where Subject_id='+t[tv.ActiveNode.Level].FieldByName('id').AsString+' union all '+
             'select top 1 Subject_id from CashCredence where Subject_id='+t[tv.ActiveNode.Level].FieldByName('id').AsString+' union all '+
             'select top 1 Subject_id from CashBalance where Subject_id='+t[tv.ActiveNode.Level].FieldByName('id').AsString+' union all '+
             'select top 1 Subject_id from BankCredence where Subject_id='+t[tv.ActiveNode.Level].FieldByName('id').AsString+' union all '+
             'select top 1 Subject_id from BankBalance where Subject_id='+t[tv.ActiveNode.Level].FieldByName('id').AsString);
  tq.Open;
  if tq.RecordCount>0 then
  begin
    tq.Close;
    Frm_MsgBox('系统信息','此科目已经有业务发生,不能删除。',MsgBox_OK_ERROR);
    Exit;
  end;
  tq.Close;

  if Frm_MsgBox('系统信息','确信要删除此科目吗?',MsgBox_YESNO)=mrNo then Exit;

  j:=tv.ActiveNode.Level;
  t[j].Delete;
  for i:=0 to DM.MaxSubjectLevel-1 do t[i].Requery;
  btnSave.Enabled:=true;
  btnSelect.Enabled:=false;
end;

procedure TFrmEditSubject.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i:integer;
begin
  for i:=0 to DM.MaxSubjectLevel-1 do
  begin
    t[i].Close;
    t[i].Destroy;
    ds[i].Destroy;
  end;

  tq.Close;
  tq.SQL.Clear;
  tq.SQL.Add('drop table #TempEditSubject');
  tq.ExecSQL;
  tq.Close;
end;

procedure TFrmEditSubject.tvChange(TreeView: TfcDBCustomTreeView;
  Node: TfcDBTreeNode);
begin
  rb_J.Checked:=(t[Node.Level].FieldByName('J_D_Type').AsString='借');
  rb_D.Checked:=not rb_J.Checked;
  btnDel.Enabled:=(not (Node.Level=0)) and (CanEdit);
  btnAdd2.Enabled:=(not (Node.Level=(DM.MaxSubjectLevel-1))) and (CanEdit);
end;

procedure TFrmEditSubject.btnSaveClick(Sender: TObject);
var
  s:string;
begin
  if Frm_MsgBox('系统信息','确信要保存所做的修改吗?',MsgBox_YESNO)=mrNo then Exit;

  DM.adoc.BeginTrans;
  try
    tq.Close;
    tq.SQL.Clear;
    tq.SQL.Add('delete from Subject');
    tq.ExecSQL;
    tq.Close;
    tq.SQL.Clear;
    s:='insert into Subject select id,Code,Code_PinYin,Code_WuBi,Name,';
    s:=s+'Type_id as Type,J_D_Type,BalanceSheetSubject_id as BalanceSheetSubject,BalanceSheet_L_R,ProfitAndLossSheetSubject_id as ProfitAndLossSheetSubject,';
    s:=s+'CashFlowSheetSubject_id as CashFlowSheetSubject,GainAllotSheetSubject_id as GainAllotSheetSubject,CarryForwardToSubject_id as CarryForwardToSubject,';
    s:=s+'IsCarryForwardParentSubject,IsCash,IsBank,';
    s:=s+'Used from #TempEditSubject';
    tq.SQL.Add(s);
    tq.ExecSQL;
    tq.Close;
    DM.adoc.CommitTrans;
    isEdited:=true;
    btnSave.Enabled:=false;
    if CanSelect then btnSelect.Enabled:=true;
  except
    DM.adoc.RollbackTrans;
    Frm_MsgBox('错误信息','保存失败!请与网络管理员联系,检查网络、数据库是否有故障。',MsgBox_OK_ERROR);
  end;
end;

procedure TFrmEditSubject.btnSelectClick(Sender: TObject);
begin
  if t[tv.ActiveNode.Level].FieldByName('IsHasSubSubject').AsBoolean then
  begin
    Frm_MsgBox('系统信息','请选择一个子科目。',MsgBox_OK_INFO);
    Exit;
  end;
  SelectID:=t[tv.ActiveNode.Level].FieldByName('id').AsInteger;
  SelectName:=Trim(t[tv.ActiveNode.Level].FieldByName('Name').AsString);
  SelectLongSubjectName:=Trim(t[tv.ActiveNode.Level].FieldByName('LongSubjectName').AsString);
  SelectCodeLongSubjectName:=Trim(t[tv.ActiveNode.Level].FieldByName('CodeLongSubjectName').AsString);
  Close;
end;

procedure TFrmEditSubject.tvDblClick(TreeView: TfcDBCustomTreeView;
  Node: TfcDBTreeNode; Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer);
begin
  if btnSelect.Enabled=true then btnSelect.Click;
end;

procedure TFrmEditSubject.TabSubjectChange(Sender: TObject);
begin
  t[0].Filter:='Type='''+DM.SubjectType[TabSubject.TabIndex]+''' and Parent_id=-1';
end;

end.

⌨️ 快捷键说明

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