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

📄 fat.cpp

📁 速达开源ERP系统
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Fat.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "RecBaseForm"
#pragma link "fpanel"
#pragma link "SDEdit"
#pragma link "SDComboBox"
#pragma resource "*.dfm"
TfrmFat *frmFat;
//---------------------------------------------------------------------------
__fastcall TfrmFat::TfrmFat(TComponent* Owner)
        : TRecBaseForm(Owner,euSdFat,"")
{
    InitTierLen();
    m_FatUpperCode="";
    m_FatLevel=0;
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::InitEditControl()
{
    ClientGroup->AddComponent(2,false,false,true, FloatPanel1,FloatPanel1->Name);
    ClientGroup->AddComponent(2,true,true,false, Panel1,Panel1->Name);
    FillComboBox(scFatFacsCode,"select facsCode,facsName from sdfacs order By facsCode","facsName","facsCode");
    FillComboBox(scFatFadmCode,"select fadmCode,fadmName from sdfadm order By fadmCode","fadmName","fadmCode");
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmFat::GetFieldValue(int FieldIndex)
{
    WideString S;
    S = ReadFieldValue(comServer,FieldIndex);
    return(S);
}

//---------------------------------------------------------------------------
void __fastcall TfrmFat::ClearControl(bool BringToNext)
{
     if(!BringToNext)
    {
        labFatUpperCode->Caption="";
        seFatItem->Text      ="";
        seFatName->Text      ="";
        scFatFacsCode->Text  ="";
        seFatPeriod->Text    ="1";
        scFatFacsCode->ItemIndex=-1;
        scFatFadmCode->ItemIndex=-1;
        scFatFadmCode->Text  ="";
        seFatValRate->Text   ="0.00";
        ckFatEnd->Checked    =false;
    }
}

//---------------------------------------------------------------------------
void __fastcall TfrmFat::GetDataFromComObject()
{
        labFatUpperCode->Caption=GetFieldValue(fiFatUpperCode);
        seFatItem->Text      =GetFieldValue(fiFatItem);
        seFatName->Text      =GetFieldValue(fiFatName);
        scFatFacsCode->LocateKey(GetFieldValue(fiFatFacsCode));
        scFatFacsCode->Text  =scFatFacsCode->ItemData[0];
        seFatPeriod->Text    =GetFieldValue(fiFatPeriod);
        scFatFadmCode->LocateKey(GetFieldValue(fiFatFadmCode));
        scFatFadmCode->Text  =scFatFadmCode->ItemData[0];
        seFatValRate->Text   =GetFieldValue(fiFatValRate);
        ckFatEnd->Checked    =GetFieldValue(fiFatEnd)=="1";
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::SendDataToComObject()
{
    AnsiString strLevel, strErr,strTemp;
    int Level;
    strLevel= tvFat->Selected->Level;
    Level=strLevel.ToInt();
    if(CurrentState==4)
      Level++;
    //输入的代码长度必须等于设定长度
    strTemp=seFatItem->Text;
    if (strTemp.Length() != TierLen[Level])
    {
     strErr="本级编码长度必须为:  "+AnsiString(TierLen[Level]);
     throw Exception(strErr.c_str());
    }
    if((labFatUpperCode->Caption+seFatItem->Text).Length()>18)
            throw Exception("上级编码长度将超过18");
    WriteFieldValue(comServer,fiFatUpperCode,m_FatUpperCode);
    WriteFieldValue(comServer,fiFatLevel,AnsiString(m_FatLevel));
    WriteFieldValue(comServer,fiFatItem,seFatItem->Text);
    WriteFieldValue(comServer,fiFatName,seFatName->Text);
    WriteFieldValue(comServer,fiFatFacsCode,scFatFacsCode->ItemData[1]);
    if(seFatPeriod->Text.IsEmpty())
      WriteFieldValue(comServer,fiFatPeriod,"1");
    else
      WriteFieldValue(comServer,fiFatPeriod,seFatPeriod->Text);
    WriteFieldValue(comServer,fiFatFadmCode,scFatFadmCode->ItemData[1]);
    WriteFieldValue(comServer,fiFatValRate,seFatValRate->Text);
    WriteFieldValue(comServer,fiFatEnd,ckFatEnd->Checked ? "1":"0");
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::WaitUserInput()
{
    seFatItem->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::RefreshGridData(int mAction)
{
    AnsiString  tempText;
    if (mAction == 0)         //增加
    {
        if(tvFat->Selected)
        {
            tempText = "(" + GetFieldValue(fiFatCode) + ")" + GetFieldValue(fiFatName);
            tvFat->Items->AddChild(tvFat->Selected,tempText);
            tvFat->Selected->Expanded = true;
        }
    }
    else if(mAction == 1) //修改
    {
        tvFat->Selected->Text = "(" + GetFieldValue(fiFatCode) + ")"
             + GetFieldValue(fiFatName);
    }
    else if(mAction == 2) //删除
    {
        tvFat->Items->Delete(tvFat->Selected);
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::FillGridWithData()
{
     AnsiString  tempText;
     static TTreeNode* TempNode[7];
     int mLevel;
     tvFat->Items->Clear();
     TempNode[0]=tvFat->Items->Add(NULL,"设备分类码");
     comServer->MoveFirst();
     while (comServer->Eof == 0)
     {

        mLevel  =   StrToInt(GetFieldValue(fiFatLevel));
        if( (mLevel <= 0) || (mLevel > 7))
        {
            ::MessageBox(Handle,"区域层级的级别不能大于7。","错误",MB_OK|MB_ICONSTOP);
            comServer->MoveNext();
            continue;
        }
        for(int i=0;i<8;i++)
        {
          if(TempNode[mLevel-1]->Text=="")
              mLevel--;
        }
        tempText = "(" + GetFieldValue(fiFatCode) + ")" + GetFieldValue(fiFatName);
        TempNode[mLevel] = tvFat->Items->AddChild(TempNode[mLevel-1],tempText);
        comServer->MoveNext();
     }
     tvFat->Selected=TempNode[0];
     TempNode[0]->Expand(false);
     
}
//---------------------------------------------------------------------------

void __fastcall TfrmFat::FormShow(TObject *Sender)
{
    FillGridWithData();
    comServer->MoveFirst();
    labItemLength->Caption=AnsiString(TierLen[1]);
}
//---------------------------------------------------------------------------

void __fastcall TfrmFat::tvFatChange(TObject *Sender, TTreeNode *Node)
{
    ClearControl(false);
    AnsiString s;
    if(Node == tvFat->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[tvFat->Selected->Level]);
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::muAddDetailClick(TObject *Sender)
{
    AnsiString  s;
    if(ckFatEnd->Checked==true)
    {
       ::MessageBox(Handle,"当前是末级,不能增加下一级.","操作错误",MB_OK|MB_ICONSTOP);
       return;
    }
    else
    {
       m_FatLevel = tvFat->Selected->Level;
        if(TierLen[m_FatLevel+1]==0)
         throw Exception("设备分类码不能超过'"+AnsiString(m_FatLevel+1)+"'级");
       labItemLength->Caption=AnsiString(TierLen[m_FatLevel+1]);
       TRecBaseForm::muAddDetailClick(Sender);
       if(m_FatLevel == 0)
       {
           m_FatUpperCode="";
           labFatUpperCode->Caption = "";
       }
       else
       {
           s = tvFat->Selected->Text;
           s = s.SubString(2,s.AnsiPos(")")-2);
           labFatUpperCode->Caption=s;
           m_FatUpperCode=s;
       }
        m_FatLevel++;
    }

}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::muEditDetailClick(TObject *Sender)
{
    AnsiString  s;
    m_FatLevel = tvFat->Selected->Level;
    if(tvFat->Selected->Level == 0)
    {
        ::MessageBox(Handle,"当前是根节点,不能修改.","操作错误",MB_OK|MB_ICONSTOP);
        return;
    }
    TRecBaseForm::muEditDetailClick(Sender);
    s = tvFat->Selected->Parent->Text;
    if (tvFat->Selected->Parent->Level == 0)
       //当选择的节点的父节点是根节点时
       s = "";
    else
       s = s.SubString(2,s.AnsiPos(")")-2);
    m_FatUpperCode=s;
    if(EnabledEnd(labFatUpperCode->Caption+seFatItem->Text))  //判断末级Enabled
      ckFatEnd->Enabled=true;
    else
      ckFatEnd->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::muDeleteDetailClick(TObject *Sender)
{
    if(tvFat->Selected->Level == 0)
    {
        ::MessageBox(Handle,"当前是根节点,不能删除.","操作错误",MB_OK|MB_ICONSTOP);
        return;
    }

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

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

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

void __fastcall TfrmFat::muLastClick(TObject *Sender)
{
    TRecBaseForm::muLastClick(Sender);
    TreeViewLocation();
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::TreeViewLocation()
{
    AnsiString s,c;
    s = GetFieldValue(fiFatCode);
    for(int i = 1 ; i < tvFat->Items->Count ; i ++)
    {
        c = tvFat->Items->Item[i]->Text;    //取关键字
        c = c.SubString(2,c.AnsiPos(")")-2);
        if(s == c)
        {
            tvFat->Selected = tvFat->Items->Item[i];
            break;
        }
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::InitTierLen()
{
 //从参数表sdparameter中获取分类码各层字符长度,并存入数组
 TComResultSet *pResultSet=NewResultSet();
 AnsiString strSQL,strItem,strValue,TempAsRes;
 strSQL="select moduleformname,modulecaption from sdmodule where moduleformname='"+this->Name+"'";
 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();
  }
  pResultSet->Close();
 }
 __finally
 {
  delete pResultSet;
 }
}

void __fastcall TfrmFat::muSaveClick(TObject *Sender)
{
    AnsiString tempst;
    tempst= labFatUpperCode->Caption+seFatItem->Text;
    if(tempst.Length()>18)
    {
       ::MessageBox(Handle,"上级编码长度将超过18.","操作错误",MB_OK|MB_ICONSTOP);
    }
    else
    {
      TRecBaseForm::muSaveClick(Sender);
    }

}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::RefreshUpdateData(int MsgSrc,int MsgType)
{
    switch(MsgSrc)
    {
        case euSdFacs:
        case euSdFadm:
       default:
         break;
    
    }
    try
    {
      StartWaitForm("正在刷新引用数据");
      switch(MsgSrc)
      {
        case euSdFacs:
          if(ShowUpdateMessage(MsgSrc,MsgType))
            FillComboBox(scFatFacsCode,"select facsCode,facsName from sdfacs order By facsCode","facsName","facsCode");
         break;
        case euSdFadm:
          if(ShowUpdateMessage(MsgSrc,MsgType))
            FillComboBox(scFatFadmCode,"select fadmCode,fadmName from sdfadm order By fadmCode","fadmName","fadmCode");
         break;
       default:
          break;
      }
    }
    __finally
    {
        EndWaitForm();
    }
}
//---------------------------------------------------------------------------
bool  __fastcall TfrmFat::EnabledEnd( AnsiString Keycode)
{
  //如果有下一级则End 为false
     TComResultSet *TResultSet=NewResultSet();
     AnsiString strSQL;
     strSQL="select FatUpperCode from sdFat where FatUpperCode='"+Keycode+"'";
     TResultSet->Close();
     TResultSet->Open(strSQL,"");
     if(TResultSet->RecordCount>0)
     {
        delete TResultSet;
        return false;
     }
     else
     {
        delete TResultSet;
        return true;
     }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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