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

📄 pingzheng.cpp

📁 全面剖析财务管理的内容
💻 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 + -