bcs.cpp

来自「科思ERP部分源码及控件」· C++ 代码 · 共 442 行

CPP
442
字号
#include <vcl.h>
#include "Bcs.h"
#include "BcsSub.h"
//---------------------------------------------------------------------------
#pragma hdrstop
#pragma package(smart_init)
#pragma link "RecBaseForm"
#pragma link "fpanel"
#pragma link "SDEdit"
#pragma link "SDGrid"
#pragma link "DateEdit"
#pragma link "SDComboBox"
#pragma resource "*.dfm"

TfrmBcs *frmBcs;
TfrmBcsSub *BcsSubfrm;
TSDEdit *seZYb,*seSettleModeb;
//---------------------------------------------------------------------------
__fastcall TfrmBcs::TfrmBcs(TComponent* Owner, HWND chWnd, AnsiString MidCode,AnsiString WhereStr)
        : TRecBaseForm(Owner,chWnd,MidCode,WhereStr)
{

}
//---------------------------------------------------------------------------
 AnsiString __fastcall TfrmBcs::GetDataToGrid()
{
    AnsiString ItemStr,BcsAmtStr,ZYStr,SettleModeStr;
    if(!GetFieldValue("BcsAmt").IsEmpty())
    {
      BcsAmtStr=GetFieldValue("BcsAmt");
    }
    else
    {
      BcsAmtStr="0";
    }

    try
    {
      //得到摘要名称
      seZYb->LocateKey(GetFieldValue("BcsZy"));
      ZYStr=seZYb->ItemData[0];
      //得到结结算方式名称
      seSettleModeb->LocateKey(GetFieldValue("BcsSettleMode"));
      SettleModeStr=seSettleModeb->ItemData[0];
      //------------
      ItemStr =GetFieldValue("BcsLine")+"\t"+GetFieldValue("BcsDate")+"\t"+ZYStr+"\t"+SettleModeStr+"\t"+GetFieldValue("BcsSettleNo")+"\t";
      if(GetFieldValue("BcsDir")==1)
        ItemStr =ItemStr+FormatFloat("#,##0.00",BcsAmtStr.ToDouble())+"\t"+AnsiString("");
      else
        ItemStr = ItemStr+AnsiString("")+"\t"+FormatFloat("#,##0.00",BcsAmtStr.ToDouble());
      if(GetFieldValue("BcsVeriry")==1)
         ItemStr=ItemStr+"\t"+"√";
      else
         ItemStr=ItemStr+"\t"+AnsiString("");

    }
    __finally
    {
      return (ItemStr);
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmBcs::InitEditControl()
{
    ClientGroup->AddComponent(2,true,true,false,sgBcs,sgBcs->Name);
    ClientGroup->AddComponent(2,true,true,false,scBcsCode,scBcsCode->Name);
    FillComboBox(Handle,scBcsCode,"select distinct BcsCode from sdBcs order by BcsCode","BcsCode");
}
//---------------------------------------------------------------------------
void __fastcall TfrmBcs::ClearControl(bool BringToNext)
{
    //AddCode
}
//---------------------------------------------------------------------------
void __fastcall TfrmBcs::WaitUserInput()
{
//AddCode    scBcsCode->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TfrmBcs::GetDataFromComObject()
{
    //AddCode
}
//---------------------------------------------------------------------------
void __fastcall TfrmBcs::SendDataToComObject()
{
    //AddCode
}
//---------------------------------------------------------------------------
void __fastcall TfrmBcs::RefreshGridData(int mAction)
{
    AnsiString sItemStr;
    sItemStr=GetDataToGrid();
    switch(mAction)
    {
      case 0:  //新增
         sgBcs->AddItem(sItemStr);
         break;
      case 1:  //修改
         int i;
         i = sgBcs->Row;
         sgBcs->ChangeItem(sItemStr,i);
         break;
      case 2:  //删除
         sgBcs->RemoveItem(sgBcs->Row);
         break;
    };
}
//---------------------------------------------------------------------------
void __fastcall TfrmBcs::FillGridWithData()
{
    AnsiString ItemStr;
    comServer->MoveFirst();
    sgBcs->RowCount = 1;
    while(comServer->Eof == 0)
    {
      ItemStr = GetDataToGrid();
      sgBcs->AddItem(ItemStr);
      comServer->MoveNext();
    }
    if(sgBcs->RowCount>1)
    {
      sgBcs->Row=1;
      sgBcsClick(this);
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmBcs::FormShow(TObject *Sender)
{
  try
  {
    StartWaitForm("正在启动银行对帐单明细");
    BcsSubfrm=new TfrmBcsSub(this);
    //摘要
    seZYb=new TSDEdit(frmBcs);
    seZYb->Parent=frmBcs;
    seZYb->Visible=false;
    seZYb->KeyItem=cbItem2;
    seZYb->DispItem=cbItem1;
    FillEdit(Handle,seZYb,"select NoteBookText,NoteBookCode from  sdNoteBook order by NoteBookCode","NoteBookText","NoteBookCode");
    //结算方式
    seSettleModeb =new TSDEdit(frmBcs);
    seSettleModeb->Parent=frmBcs;
    seSettleModeb->Visible=false;
    seSettleModeb->KeyItem=cbItem2;
    seSettleModeb->DispItem=cbItem1;
    FillEdit(Handle,seSettleModeb,"select SettleModeName,SettleModeCode from sdSettleMode","SettleModeName","SettleModeCode");
  }
  __finally
  {
    EndWaitForm();
  }

  sgBcs->RowCount=1;
  if(scBcsCode->Items->Count>0)
  {
    scBcsCode->ItemIndex=0;
    scBcsCode->Tag=0;//default发生change事件
    scBcsCodeChange(Sender);
  }
}
//---------------------------------------------------------------------------
void __fastcall TfrmBcs::RefreshUpdateData(int MsgSrc,int MsgType)
{
/*
    //AddCode
*/
}
//---------------------------------------------------------------------------

int __fastcall TfrmBcs::GetMaxBcsLine()
{
    int vMaxLine;
    if(sgBcs->RowCount>1)
    {
      vMaxLine=sgBcs->Cells[0][1].ToInt();
      for(int i=2;i<sgBcs->RowCount;i++)
      {
        if(sgBcs->Cells[0][i].ToInt()>vMaxLine)
          vMaxLine=sgBcs->Cells[0][i].ToInt();
      }
    }
    else
      vMaxLine=0;
    return vMaxLine;
}
//---------------------------------------------------------------------------
void __fastcall TfrmBcs::sgBcsDblClick(TObject *Sender)
{
  if(comServer->RecordCount>0)
  {   AnsiString Keystr;
    Keystr=scBcsCode->Text+"\t"+sgBcs->TextMatrix[sgBcs->Row][0]+"\t";; //多字段主键需要用"\t"分开)
    if(comServer->LocateByKey(Keystr))//定为成功后返回值为false~!,不成功返回true!
        throw Exception("当前没有记录可以编辑");
    try
    {
      BcsSubfrm->SetcomServer(comServer);//基类里不要析构该对象
      BcsSubfrm->FCurState=CurrentState;
      BcsSubfrm->FBcsVeriry=GetFieldValue("BcsVeriry");
      BcsSubfrm->FBcsCode=scBcsCode->Text;
      BcsSubfrm->FMaxBcsLine=sgBcs->TextMatrix[sgBcs->Row][0];
      BcsSubfrm->ShowModal();
    }
    catch(Exception &e)
    {
      throw Exception(e.Message);
    }
  }  
}
//---------------------------------------------------------------------------
void __fastcall TfrmBcs::muAddDetailClick(TObject *Sender)
{
  AnsiString tempBcsCode;
  tempBcsCode=Trim(scBcsCode->Text);
  if(tempBcsCode.IsEmpty())
  {
    scBcsCode->SetFocus();
    sgBcs->RowCount=1; //新增bcscode
  }
  else
  {
     if(!scBcsCode->LocateKey(tempBcsCode))
       sgBcs->RowCount=1; //新增bcscode
  }
  try
  {
    TRecBaseForm::muAddDetailClick(Sender);
    BcsSubfrm->SetcomServer(comServer);
    BcsSubfrm->FCurState=CurrentState;
    BcsSubfrm->FBcsCode=scBcsCode->Text;
    BcsSubfrm->FMaxBcsLine=AnsiString(GetMaxBcsLine()+1);
    BcsSubfrm->ShowModal();
    if(BcsSubfrm->FRetState=="OK")
    {
      TRecBaseForm::muSaveClick(Sender);
      FillComboBox(Handle,scBcsCode,"select distinct BcsCode from sdBcs order by BcsCode","BcsCode");
      scBcsCode->LocateKey(BcsSubfrm->FBcsCode);
      scBcsCodeChange(Sender);
    }
    else//cancel
    {
      try
      {
        try
        {
          if(CurState==caAddDetail || CurState==caEditDetail)
          {
                Screen->Cursor=crHourGlass;
                Application->ProcessMessages();
                comServer->Cancel();
                SetControlState(caSave);
          }
        }
        catch(Exception &e)
        {
          throw Exception(e.Message);
        }
      }
      __finally
      {
        Application->ProcessMessages();
        Screen->Cursor=crDefault;
      }
    }
  }
  catch(...)
  {
    TRecBaseForm::muCancelClick(Sender);
  }

}
//---------------------------------------------------------------------------
void __fastcall TfrmBcs::muEditDetailClick(TObject *Sender)
{
   AnsiString Keystr;
  if(comServer->RecordCount>0)
  {
   Keystr=scBcsCode->Text+"\t"+sgBcs->TextMatrix[sgBcs->Row][0]+"\t";; //多字段主键需要用"\t"分开)
   try
    {
      if(comServer->LocateByKey(Keystr))
        throw Exception("当前没有记录可以编辑");
      else
        TRecBaseForm::muEditDetailClick(Sender);
        
      BcsSubfrm->SetcomServer(comServer);
      BcsSubfrm->FCurState=CurrentState;
      BcsSubfrm->FBcsVeriry=GetFieldValue("BcsVeriry");
      BcsSubfrm->FBcsCode=scBcsCode->Text;
      BcsSubfrm->FMaxBcsLine=sgBcs->TextMatrix[sgBcs->Row][0];
      BcsSubfrm->ShowModal();
      if(BcsSubfrm->FRetState=="OK")
        TRecBaseForm::muSaveClick(Sender);
      else
      {
         try
          {
            try
            {
              if(CurState==caAddDetail || CurState==caEditDetail)
              {
                    Screen->Cursor=crHourGlass;
                    Application->ProcessMessages();
                    comServer->Cancel();
                    SetControlState(caSave);
              }
            }
            catch(Exception &e)
            {
              throw Exception(e.Message);
            }
          }
          __finally
          {
            Application->ProcessMessages();
            Screen->Cursor=crDefault;
          }
      }
    }
    catch(Exception &e)
    {
      throw Exception(e.Message);
    }
  }  
}

//---------------------------------------------------------------------------
void __fastcall TfrmBcs::scBcsCodeChange(TObject *Sender)
{
  if(  scBcsCode->Tag!=0)//定位不到时不为0
  {
    scBcsCode->Tag=0;
    return;
  }
    AnsiString tBcsCode;
    tBcsCode=scBcsCode->Text;
    if(tBcsCode.IsEmpty())
      return;
    comServer->FilterString="BcsCode='"+tBcsCode+"'";
    comServer->Query();
    if(comServer->RecordCount>0)
      FillGridWithData();
    else
      sgBcs->RowCount=1;
}
//---------------------------------------------------------------------------

void __fastcall TfrmBcs::sgBcsClick(TObject *Sender)
{
   int ARow;
   AnsiString KeyCode;
   ARow=sgBcs->Row;
   if(ARow==0)
     return;                           
   KeyCode=scBcsCode->Text+"\t"+sgBcs->TextMatrix[ARow][0]+"\t";
   comServer->LocateByKey(KeyCode);//多字段主键需要用"\t"分开
   if(GetFieldValue("BcsVeriry")==1)
    {
     tbDeleteHead->Enabled=false;
     muDeleteDetail->Enabled=false;
    }
   else
    {
     tbDeleteHead->Enabled=true;
     muDeleteDetail->Enabled=true;     
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmBcs::scBcsCodeKeyPress(TObject *Sender, char &Key)
{
  scBcsCode->Tag=1;
  TObject *temp_Sender;
  if(Key==0 && CurrentState==caNormal)//回车
  {
    try
    {
      temp_Sender=new TObject;
      if(scBcsCode->LocateKey(Trim(scBcsCode->Text)))
      {
        scBcsCode->Tag=0;//key=0
        scBcsCodeChange(temp_Sender);
      }
      else
        throw Exception("银行对帐单号:'"+scBcsCode->Text+"'不存在");
    }
    __finally
    {
      delete temp_Sender;
    }
 }
}
//---------------------------------------------------------------------------
void __fastcall TfrmBcs::muPreviousClick(TObject *Sender)
{
    if(sgBcs->RowCount > 1 && sgBcs->Row > 1)
      sgBcs->Row=sgBcs->Row-1;
}
//---------------------------------------------------------------------------

void __fastcall TfrmBcs::muNextClick(TObject *Sender)
{
    if(sgBcs->RowCount > 1 && sgBcs->Row < sgBcs->RowCount-1)
      sgBcs->Row=sgBcs->Row+1;
}
//---------------------------------------------------------------------------

void __fastcall TfrmBcs::muLastClick(TObject *Sender)
{
    if(sgBcs->RowCount > 1)
      sgBcs->Row=sgBcs->RowCount-1;
}
//---------------------------------------------------------------------------
void __fastcall TfrmBcs::muFirstClick(TObject *Sender)
{
   if(sgBcs->RowCount > 1)
      sgBcs->Row=1;
}
//---------------------------------------------------------------------------

void __fastcall TfrmBcs::muDeleteDetailClick(TObject *Sender)
{
  //先判断行数!
  if(sgBcs->RowCount>=2)
  {
    TRecBaseForm::muDeleteDetailClick(Sender);
  }

  if(sgBcs->RowCount<2)//当最后一行被删除时,头也被删掉
  {
    FillComboBox(Handle,scBcsCode,"select distinct BcsCode from sdBcs order by BcsCode","BcsCode");
    scBcsCode->ItemIndex=-1;
    scBcsCodeChange(Sender);
  }
}
//---------------------------------------------------------------------------
__fastcall TfrmBcs::~TfrmBcs()
{
  if(BcsSubfrm) delete BcsSubfrm;
  delete seZYb;
  delete seSettleModeb;
}

⌨️ 快捷键说明

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