📄 pingzheng.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "pingzheng.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "Parent"
#pragma resource "*.dfm"
TfmPingZheng *fmPingZheng;
//---------------------------------------------------------------------------
__fastcall TfmPingZheng::TfmPingZheng(TComponent* Owner)
: TfmParent(Owner)
{
this->szCondition1 = "凭证编号";
this->szCondition2 = "会计期间";
this->szCondition3 = "日期";
// 设置查询条件的显示
this->SetSeekEditStatus();
lblCount->Caption = "记录数: " + IntToStr(Table1->RecordCount) ;
// 设置分录输入GRid
StringGrid1->ColWidths[0] = 80;
StringGrid1->ColWidths[1] = 60;
StringGrid1->ColWidths[2] = 150;
StringGrid1->ColWidths[3] = 60;
StringGrid1->ColWidths[4] = 60;
StringGrid1->Cells[0][0] = "摘要";
StringGrid1->Cells[1][0] = "科目代码";
StringGrid1->Cells[2][0] = "科目名称";
StringGrid1->Cells[3][0] = "借方";
StringGrid1->Cells[4][0] = "贷方";
m_CurrentRow = 1;
m_CurrentCol = 0;
}
//---------------------------------------------------------------------------
void __fastcall TfmPingZheng::btNewClick(TObject *Sender)
{
// 注意如何调用父类窗体的方法
TfmParent::btNewClick(NULL);
// 计算凭证编号(Primary key);
AnsiString szID,szID1;
AnsiString sql;
Query1->SQL->Clear();
Query1->SQL->Add("select max(凭证编号) as 编号 from 凭证表历史");
Query1->Open();
TField* pField = Query1->FieldByName("编号");
if(pField->IsNull)
szID = "000001";
else
{
AnsiString szT = "000000";
szID = pField->AsInteger + 1;
szID = szT.SubString(1,6-szID.Length()) + szID;
}
Query1->SQL->Clear();
Query1->SQL->Add("select max(凭证编号) as 编号 from 凭证表");
Query1->Open();
pField = Query1->FieldByName("编号");
if(pField->IsNull)
szID1 = "000001";
else
{
AnsiString szT = "000000";
szID1 = pField->AsInteger + 1;
szID1 = szT.SubString(1,6-szID1.Length()) + szID1;
}
// 取最大值作为新凭证的ID
if(szID < szID1)
szID = szID1;
EditDBEdit1->Text = szID;
// 填写会计区间、凭证编号等信息
DBComboBox1->SetFocus();
DBComboBox1->ItemIndex = 0;
// 日期
TDateTime dt;
dt = dt.CurrentDate();
EditDBEdit4->SetFocus();
EditDBEdit4->Text = dt.DateString();
// 会计区间
Query1->SQL->Clear();
Query1->SQL->Add("select 取值 from 系统参数表 where 参数名称 = '当前会计期间'");
Query1->Open();
EditDBEdit3->Text = Query1->FieldByName("取值")->AsString;
// 状态
EditDBEdit7->Text = "未过";
// 其他
EditDBEdit2->Text = "";
EditDBEdit5->Text = "";
EditDBEdit6->Text = "";
// 清除分录
for(int i=1; i< StringGrid1->RowCount; i++)
{
StringGrid1->Cells[0][i] = "";
StringGrid1->Cells[1][i] = "";
StringGrid1->Cells[2][i] = "";
StringGrid1->Cells[3][i] = "";
StringGrid1->Cells[4][i] = "";
}
StringGrid1->SetFocus();
m_CurrentRow = 1;
m_CurrentCol = 0;
StringGrid1->Row = 1;
StringGrid1->Col = 0;
}
//---------------------------------------------------------------------------
void __fastcall TfmPingZheng::btDeleteClick(TObject *Sender)
{
if (Application->MessageBox("是否删除记录?", "确定", MB_YESNO)
== mrYes)
{
// 先删除分录
Query1->SQL->Clear();
Query1->SQL->Add("delete from 分录表 where ");
Query1->SQL->Add("凭证编号='" + EditDBEdit1->Text + "'");
Query1->ExecSQL();
DataSource1->Edit();
// 删除凭证
Table1->Delete();
}
}
//---------------------------------------------------------------------------
void __fastcall TfmPingZheng::btSaveClick(TObject *Sender)
{
// 检查借贷是否平衡
if(EditDBEdit5->Text != EditDBEdit6->Text)
{
Application->MessageBox("借贷双方不平衡,请检查","提示",MB_OK);
return;
}
// 提交凭证
// 注意如何调用父类窗体的方法
TfmParent::btSaveClick(NULL); // 子表分录表
// 保存分录
AnsiString sql;
// 先删除分录
Query1->SQL->Clear();
sql = "delete from 分录表 where 凭证编号='" + EditDBEdit1->Text + "'";
Query1->SQL->Add(sql);
Query1->ExecSQL();
// 重新插入分录表
for(int i=1; i< StringGrid1->RowCount; i++)
{
if(StringGrid1->Cells[1][i].Trim().IsEmpty())
continue;
sql = "insert into 分录表(凭证编号,摘要,科目代码,借方,贷方)";
sql += " values('" + EditDBEdit1->Text + "','";
//if(!StringGrid1->Cells[0][i].Trim().IsEmpty())
sql += StringGrid1->Cells[0][i].Trim() + "','";
sql += StringGrid1->Cells[1][i].Trim() + "',";
if(StringGrid1->Cells[3][i].Trim().IsEmpty())
sql += "0,";
else
sql += StringGrid1->Cells[3][i].Trim() + ",";
if(StringGrid1->Cells[4][i].Trim().IsEmpty())
sql += "0)";
else
sql += StringGrid1->Cells[4][i].Trim() + ")";
Query1->SQL->Clear();
Query1->SQL->Add(sql);
Query1->ExecSQL();
}
}
//---------------------------------------------------------------------------
void __fastcall TfmPingZheng::StringGrid1SelectCell(TObject *Sender,
int ACol, int ARow, bool &CanSelect)
{
// 关联科目名称
if(m_CurrentCol == 1)
{
Query1->SQL->Clear();
Query1->SQL->Add("select 科目名称 from 科目表 where ");
Query1->SQL->Add("科目代码='" + StringGrid1->Cells[1][m_CurrentRow].Trim() + "'");
Query1->Open();
StringGrid1->Cells[2][m_CurrentRow] = Query1->FieldByName("科目名称")->AsString;
}
// 是否换行了
if(m_CurrentRow != ARow)
{
// 检查数据是否合法
if(!StringGrid1->Cells[1][m_CurrentRow].Trim().IsEmpty() &&
StringGrid1->Cells[2][m_CurrentRow].Trim().IsEmpty())
{
Application->MessageBox("科目代码不存在","提示",MB_OK);
CanSelect = false;
return;
}
if(!StringGrid1->Cells[1][m_CurrentRow].Trim().IsEmpty() &&
StringGrid1->Cells[3][m_CurrentRow].Trim().IsEmpty() &&
StringGrid1->Cells[4][m_CurrentRow].Trim().IsEmpty() )
{
Application->MessageBox("金额不许都为空","提示",MB_OK);
CanSelect = false;
return;
}
}
// 计算汇总金额
double fAmt1=0, fAmt2=0;
for(int i=1; i< StringGrid1->RowCount; i++)
{
if(!StringGrid1->Cells[1][i].Trim().IsEmpty())
{
if(!StringGrid1->Cells[3][i].Trim().IsEmpty())
fAmt1 += StrToFloat(StringGrid1->Cells[3][i].Trim());
if(!StringGrid1->Cells[4][i].Trim().IsEmpty())
fAmt2 += StrToFloat(StringGrid1->Cells[4][i].Trim());
}
}
EditDBEdit5->Text = fAmt1;
EditDBEdit6->Text = fAmt2;
// 新行
if(ACol == 2)
CanSelect = false;
if(ACol == 2 && m_CurrentCol == 1)
{
StringGrid1->Col = 3;
return;
}
else if(ACol == 2 && m_CurrentCol == 3)
{
StringGrid1->Col = 1;
return;
}
m_CurrentRow = ARow;
m_CurrentCol = ACol;
}
//---------------------------------------------------------------------------
void __fastcall TfmPingZheng::Table1AfterScroll(TDataSet *DataSet)
{
// 清除分录
for(int i=1; i< StringGrid1->RowCount; i++)
{
StringGrid1->Cells[0][i] = "";
StringGrid1->Cells[1][i] = "";
StringGrid1->Cells[2][i] = "";
StringGrid1->Cells[3][i] = "";
StringGrid1->Cells[4][i] = "";
}
// 刷新
Query1->SQL->Clear();
Query1->SQL->Add("select * from 分录表 where ");
Query1->SQL->Add("凭证编号='" + EditDBEdit1->Text + "'");
Query1->Open();
Query1->First() ;
for(int i=1; i<=Query1->RecordCount; i++)
{
StringGrid1->Cells[0][i] = Query1->FieldByName("摘要")->AsString;
StringGrid1->Cells[1][i] = Query1->FieldByName("科目代码")->AsString;
Table2->Filter = "科目代码='" + StringGrid1->Cells[1][i].Trim() + "'";
Table2->Filtered = false;
Table2->Filtered = true;
StringGrid1->Cells[2][i] = Table2->FieldByName("科目名称")->AsString;
StringGrid1->Cells[3][i] = Query1->FieldByName("借方")->AsString;
StringGrid1->Cells[4][i] = Query1->FieldByName("贷方")->AsString;
Query1->Next();
}
}
//---------------------------------------------------------------------------
void __fastcall TfmPingZheng::btCancelClick(TObject *Sender)
{
// 注意如何调用父类窗体的方法
TfmParent::btCancelClick(NULL);
// 刷新
Table1AfterScroll(NULL);
}
//---------------------------------------------------------------------------
void __fastcall TfmPingZheng::btEditClick(TObject *Sender)
{
// 注意如何调用父类窗体的方法
TfmParent::btEditClick(NULL);
StringGrid1->SetFocus();
m_CurrentRow = 1;
m_CurrentCol = 0;
StringGrid1->Row = 1;
StringGrid1->Col = 0;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -