📄 editsubject.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 + -