area.cpp

来自「一个以前收集的基于C/S架构的ERP客户端源代码」· C++ 代码 · 共 433 行

CPP
433
字号
//---------------------------------------------------------------------------
#include <vcl.h>
#include "Area.h"
//---------------------------------------------------------------------------
#pragma hdrstop
#pragma package(smart_init)
#pragma link "fpanel"
#pragma link "RecBaseForm"
#pragma link "SDEdit"
#pragma link "DateEdit"
#pragma resource "*.dfm"
//#include "ParMat.h"
TfrmArea *frmArea;
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TfrmArea::ClearControl(bool BringToNext)
{
    if(!BringToNext)
    {
      labAreaUpperCode->Caption="";
      seAreaCode-> Text = "";
      seAreaName-> Text = "";
      memAreaDesc->Text = "";
      chkAreaEnd->Checked = false;
      seAreaCom->Text ="";
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmArea::GetDataFromComObject()
{
  labAreaUpperCode->Caption=GetFieldValue("AreaUpperCode");
  seAreaCode->Text = GetFieldValue("AreaCode");
  seAreaName->Text = GetFieldValue("AreaName");
  memAreaDesc->Text = GetFieldValue("AreaDesc");
  chkAreaEnd->Checked=GetFieldValue("AreaEnd")=="1"?true:false;
  seAreaCom->Text= GetFieldValue("AreaComPose");
}
//---------------------------------------------------------------------------
void __fastcall TfrmArea::SendDataToComObject()
{
   /* AnsiString strLevel, strErr,strTemp;
    int Level;
    strLevel= tvArea->Selected->Level;
    Level=strLevel.ToInt();
    if(CurrentState==4)
      Level++;
     //输入的代码长度必须等于设定长度
    strTemp=seAreaItem->Text;
    if (strTemp.Length() != TierLen[Level])
    {
     strErr="本级编码长度必须为:  "+AnsiString(TierLen[Level]);
     throw Exception(strErr.c_str());
    }*/
    if(seAreaCode->Text.Length()>18)
         throw Exception("地区编码长度将超过18");
    SetFieldValue("AreaCode",seAreaCode->Text);//areacode
    GetAreaInsideCode();
    SetFieldValue("AreaCompose",l_UpperCode+l_Item);//areacompose
    SetFieldValue("AreaUpperCode",l_UpperCode);//areauppercode
    SetFieldValue("AreaItem",l_Item);   // AreaItem
    SetFieldValue("AreaLevel",strLevel);//arealevel
    SetFieldValue("AreaName",seAreaName->Text);   // AreaName
    SetFieldValue("AreaDesc",memAreaDesc->Text);  // AreaDesc
    SetFieldValue("AreaEnd",chkAreaEnd->Checked==true? "1":"0");//ifcheck

}
//---------------------------------------------------------------------------

void __fastcall TfrmArea::WaitUserInput()
{
    seAreaCode->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArea::RefreshGridData(int mAction)
{
    AnsiString  tempText;
    if (mAction == 0)       //增加
    {
        if(tvArea->Selected)
        {
       tempText = "(" + GetFieldValue("AreaCode") + ")" + GetFieldValue("AreaName");
            tvArea->Items->AddChild(tvArea->Selected,tempText);
            tvArea->Selected->Expanded = true;
        }
    }
    else if(mAction == 1)    //修改
    {
   tvArea->Selected->Text = "(" + GetFieldValue("AreaCode") + ")"
        + GetFieldValue("AreaName");
    }
    else if(mAction == 2)     //删除
    {
        tvArea->Items->Delete(tvArea->Selected);
    }

}
//---------------------------------------------------------------------------
void __fastcall TfrmArea::FillGridWithData()
{
     AnsiString  tempText;
     TTreeNode* TempNode[10];
     int mLevel=0;
     tvArea->Items->Clear();
     TempNode[0]=tvArea->Items->Add(NULL,"所有的区域");
     TempNode[0]->StateIndex=-1;
     TempNode[0]->SelectedIndex=-1;
     comServer->MoveFirst();
     while (comServer->Eof == 0)
     {
        mLevel  =   StrToInt(GetFieldValue("AreaLevel"));
        if( (mLevel <= 0) || (mLevel > 10))
        {
            ::MessageBox(Handle,"区域层级的级别不能大于10。","错误",MB_OK|MB_ICONSTOP);
            comServer->MoveNext();
            continue;
        }
        tempText = "(" + GetFieldValue("AreaCode") + ")" + GetFieldValue("AreaName");
        TempNode[mLevel] = tvArea->Items->AddChild(TempNode[mLevel-1],tempText);
        comServer->MoveNext();
     }
    if (tvArea->Items->Count > 0)
     {
        //tvArea->FullExpand();
        comServer->MoveFirst();
        if(comServer->RecordCount>0)
          GetDataFromComObject();
     }
}
//---------------------------------------------------------------------------

void __fastcall TfrmArea::InitEditControl()
{
    ClientGroup->AddComponent(2,false,false,true, FloatPanel1,FloatPanel1->Name);
    ClientGroup->AddComponent(2,true,true,false, Panel1,Panel1->Name);
}
//---------------------------------------------------------------------------
void __fastcall TfrmArea::TreeViewLocation()
{
    AnsiString s,c;
     s= GetFieldValue("AreaCode");
    for(int i = 1 ; i < tvArea->Items->Count ; i ++)
    {
        c = tvArea->Items->Item[i]->Text;    //取关键字
        c = c.SubString(2,c.AnsiPos(")")-2);
        if(s == c)
        {
            tvArea->Selected = tvArea->Items->Item[i];
            break;
        }
    }
}
//---------------------------------------------------------------------------

__fastcall TfrmArea::TfrmArea(TComponent* Owner, HWND chWnd, AnsiString MidCode,AnsiString WhereStr)
       : TRecBaseForm(Owner,chWnd,MidCode,WhereStr)
{
    FMidCode = MidCode ; // add 2003-02-19
    InitTierLen();
    m_AreaLevel=0;
    m_AreaUpperCode="";
}
//---------------------------------------------------------------------------

void __fastcall TfrmArea::FormShow(TObject *Sender)
{
    FillGridWithData();
    comServer->MoveFirst();
    labItemLength->Caption=AnsiString(TierLen[1]);
}
//---------------------------------------------------------------------------
void __fastcall TfrmArea::tvAreaChange(TObject *Sender,
      TTreeNode *Node)
{
    ClearControl(false);
    AnsiString s;
    if(Node == tvArea->Items->Item[0])
    {
        return;
    }
    s = Node->Text;
    s = s.SubString(2,s.AnsiPos(")")-2);
    comServer->LocateByKey(s);
    if (comServer->Eof == 0)
    {
        GetDataFromComObject();
    }
    labItemLength->Caption=AnsiString(TierLen[tvArea->Selected->Level]);
}
//---------------------------------------------------------------------------
void __fastcall TfrmArea::muAddDetailClick(TObject *Sender)
{
    AnsiString  s;
    if(tvArea->Selected == NULL)
    {
     ::MessageBox(Handle,"要增加请选择左边的树结点","系统提示",MB_OK|MB_ICONINFORMATION);
     return;
    }
    if(chkAreaEnd->Checked==true)
    {
       ::MessageBox(Handle,"当前是末级,不能增加下一级.","操作错误",MB_OK|MB_ICONSTOP);
       return;
    }
    else
    {
       m_AreaLevel = tvArea->Selected->Level;
       if(TierLen[m_AreaLevel+1]==0)
         throw Exception("地区代码不能超过'"+AnsiString(m_AreaLevel+1)+"'级");
        labItemLength->Caption=AnsiString(TierLen[m_AreaLevel+1]);
       if(m_AreaLevel == 0)
       {
           m_AreaUpperCode="";
           labAreaUpperCode->Caption = "";
       }
       else
       {
           s = tvArea->Selected->Text;
           s = s.SubString(2,s.AnsiPos(")")-2);
           labAreaUpperCode->Caption=s;
           m_AreaUpperCode=s;
       }
       m_AreaLevel++;
    }
    //
    int tempLevel = tvArea->Selected->Level;
    if(tempLevel <= 0)
       l_UpperCode="";
    else
       l_UpperCode=AnsiString(GetFieldValue("AreaCompose"));
       TRecBaseForm::muAddDetailClick(Sender);
    //
}
//---------------------------------------------------------------------------
void __fastcall TfrmArea::muEditDetailClick(TObject *Sender)
{
    AnsiString  s;
    m_AreaLevel = tvArea->Selected->Level;
    if(tvArea->Selected->Level == 0)
    {
        ::MessageBox(Handle,"当前是根节点,不能修改.","操作错误",MB_OK|MB_ICONSTOP);
        return;
    }
    TRecBaseForm::muEditDetailClick(Sender);
    s = tvArea->Selected->Parent->Text;
    if (tvArea->Selected->Parent->Level == 0)
       //当选择的节点的父节点是根节点时
       s = "";
    else
       s = s.SubString(2,s.AnsiPos(")")-2);
    m_AreaUpperCode=s;
    if(EnabledEnd(labAreaUpperCode->Caption+seAreaCode->Text))  //判断末级Enabled
      chkAreaEnd->Enabled=true;
    else
      chkAreaEnd->Enabled=false;
}
//---------------------------------------------------------------------------

void __fastcall TfrmArea::muDeleteDetailClick(TObject *Sender)
{
    if(tvArea->Selected->Level == 0)
    {
        ::MessageBox(Handle,"当前是根节点,不能删除.","操作错误",MB_OK|MB_ICONSTOP);
        return;
    }

    if(tvArea->Selected->HasChildren)
    {
        if(::MessageBox(Handle,"该分类码下包含有子分类码,\n本操作将会删除它的全部子分类码。",
                      "注意", MB_YESNO|MB_ICONQUESTION) == IDYES)
        {
            TRecBaseForm::muDeleteDetailClick(Sender);
            //如果删除根节点下的所有分类节点
            if (tvArea->Items->Count > 1)
            {
               comServer->Query();
               FillGridWithData();
               comServer->MoveFirst();
               GetDataFromComObject();
            }
            else
               ClearControl(false);
            return;
        }
    }
    else
    {
      TRecBaseForm::muDeleteDetailClick(Sender);
      GetDataFromComObject();
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmArea::muCancelDetailClick(TObject *Sender)
{
    TRecBaseForm::muCancelClick(Sender);
}
//---------------------------------------------------------------------------

void __fastcall TfrmArea::muFirstClick(TObject *Sender)
{
    TRecBaseForm::muFirstClick(Sender);
    TreeViewLocation();
}
//---------------------------------------------------------------------------

void __fastcall TfrmArea::muPreviousClick(TObject *Sender)
{
    TRecBaseForm::muPreviousClick(Sender);
    TreeViewLocation();
}
//---------------------------------------------------------------------------

void __fastcall TfrmArea::muNextClick(TObject *Sender)
{
    TRecBaseForm::muNextClick(Sender);
    TreeViewLocation();
}
//---------------------------------------------------------------------------

void __fastcall TfrmArea::muLastClick(TObject *Sender)
{
    TRecBaseForm::muLastClick(Sender);
    TreeViewLocation();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArea::InitTierLen()
{
 //从参数表sdparameter中获取分类码各层字符长度,并存入数组
    TComResultSet *pResultSet=new  TComResultSet(Handle,g_ClientHandle);
    AnsiString strSQL,strItem,strValue,TempAsRes;
    strSQL="select moduleformcode,modulecaption from sdmodule where moduleformcode='"+FMidCode+"'";
    try
    {
     pResultSet->Close();
     pResultSet->Open(strSQL,"");
     TempAsRes=pResultSet->FieldByName("modulecaption");
     pResultSet->Close();
     pResultSet->Open("select parametercode from sdparameter where parametername='"+TempAsRes+"'","");
     TempAsRes=pResultSet->FieldByName("parametercode");
     strSQL=" select parameteritem,parametervalue from sdparameter ";
     strSQL=strSQL+" where parametertype = 2 and parametercode like '"+TempAsRes+"%'";
     pResultSet->Close();
     pResultSet->Open(strSQL,"");
     //clear the TierLen Array
     for(int i=0;i<10;i++)
       TierLen[i]=0;
     pResultSet->MoveFirst();
     while(!pResultSet->Eof)
     {
       strItem=pResultSet->FieldByName("parameteritem");
       strValue=pResultSet->FieldByName("parametervalue");
       if ((strItem.ToIntDef(0) != 0)&&(strValue.ToIntDef(0) != 0))
       if ((strItem.ToInt()>0) && (strItem.ToInt()<18))
        TierLen[strItem.ToInt()]=strValue.ToInt();
         pResultSet->MoveNext();
     }
    }
    __finally
    {
      delete pResultSet;
    }  
}
int __fastcall TfrmArea::GetTierLen(int tiernum)
{
 //从数组中获取指定层的字符长度
 if ((tiernum>0)&&(tiernum<19)) //层数从1-18为有效
  return TierLen[tiernum];
 else
  return 0;
}
//---------------------------------------------------------------------------
bool  __fastcall TfrmArea::EnabledEnd( AnsiString Keycode)
{
  //如果有下一级则End 为false
      TComResultSet *TResultSet=new  TComResultSet(Handle,g_ClientHandle);
      AnsiString strSQL;
      strSQL="select AreaUpperCode from sdArea where AreaUpperCode='"+Keycode+"'";
      TResultSet->Close();
      TResultSet->Open(strSQL,"");
      if(TResultSet->RecordCount>0)
      {
        delete TResultSet;
        return false;
      }
      else
      {
        delete TResultSet;
        return true;
      }
}
//-----------------------------------------------------------------------------
void __fastcall TfrmArea::GetAreaInsideCode()//获取内部编码
{
    AnsiString sql,str;
    //输入的代码长度必须等于设定长度
    if(CurrentState == caAddDetail)
    {
      strLevel=IntToStr(tvArea->Selected->Level+1);
      TComResultSet *pResultSet=new  TComResultSet(Handle,g_ClientHandle);

      if(strLevel>1)
      sql="select top 1 AreaItem from sdArea where Areauppercode='"+l_Item+"' order by  AreaItem desc ";
      else
      sql="select top 1 AreaItem from sdArea where Areauppercode='' order by  AreaItem desc ";

      pResultSet->Open(sql,"");
      if(pResultSet->RecordCount>0)
      {
        str=AnsiString(pResultSet->FieldByName("AreaItem"));
        str="1"+str;
        l_Item=IntToStr((str.ToInt())+1).Delete(1,1);
      }
      else
      {
        l_Item="1000000000000000000000000";
        if (TierLen[strLevel.ToInt()] <= 0)
        {
          delete pResultSet;
          throw Exception("本级编码长度参数无效!");
        }
        l_Item.SetLength(TierLen[strLevel.ToInt()]+1);
        l_Item=IntToStr(l_Item.ToInt()+1).Delete(1,1);
      }
      if(l_Item.Length()!=TierLen[strLevel.ToInt()])
      {
          delete pResultSet;
          throw Exception("本级编码长度无效!");
      }
      delete pResultSet;
    }
    if(CurrentState == caEditDetail)
     strLevel=IntToStr(tvArea->Selected->Level);
}

⌨️ 快捷键说明

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