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

📄 qutype.cpp

📁 速达开源ERP系统
💻 CPP
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include "QuType.h"
//---------------------------------------------------------------------------
#pragma hdrstop
#pragma package(smart_init)
#pragma link "RecBaseForm"
#pragma link "fpanel"
#pragma link "SDEdit"
#pragma resource "*.dfm"
#define ParaCode "11603"  //分类码各层字符长度参数代码头
TfrmQuType *frmQuType;
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmQuType::GetFieldValue(int FieldIndex)
{
    AnsiString S;
    S = ReadFieldValue(comServer,FieldIndex);
    return(S);
}
//---------------------------------------------------------------------------

void __fastcall TfrmQuType::ClearControl(bool BringToNext)
{
    if(!BringToNext)
    {
        lblUpperCode->Caption="";
        seQuTypeItem->Text = "";
        seQuTypeName->Text = "";
        memQuTypeDesc->Text = "";
        chkQuTypeEnd->Checked=false;
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmQuType::GetDataFromComObject()
{
    AnsiString strLevel;
    strLevel=GetFieldValue(fiQuTypeLevel);
    //根据各层设定的代码长度,设置控件的最大字符数
    if (TierLen[strLevel.ToInt()] <= 0)
     seQuTypeItem->MaxLength=18;
    else
     seQuTypeItem->MaxLength=TierLen[strLevel.ToInt()];
    lblUpperCode->Caption=GetFieldValue(fiQuTypeUpperCode);
    seQuTypeItem->Text = GetFieldValue(fiQuTypeItem);
    seQuTypeName->Text = GetFieldValue(fiQuTypeName);
    chkQuTypeEnd->Checked=GetFieldValue(fiQuTypeEnd)=="1";
    memQuTypeDesc->Text = GetFieldValue(fiQuTypeDesc);
}
//---------------------------------------------------------------------------

void __fastcall TfrmQuType::SendDataToComObject()
{
    AnsiString strLevel;
    AnsiString strErr,strTemp;
    if(CurrentState == caAddDetail)
     strLevel=IntToStr(tvQuType->Selected->Level+1);
    if(CurrentState == caEditDetail)
     strLevel=IntToStr(tvQuType->Selected->Level);
    //输入的代码长度必须等于设定长度
    if (TierLen[strLevel.ToInt()] <= 0)
    {
     throw Exception("本级编码长度参数无效!");
    }
    strTemp=seQuTypeItem->Text;
    if (strTemp.Length() != TierLen[strLevel.ToInt()])
    {
     strErr="本级编码长度必须为"+AnsiString(TierLen[strLevel.ToInt()]);
     throw Exception(strErr.c_str());
    }
    WriteFieldValue(comServer,fiQuTypeUpperCode,lblUpperCode->Caption);
    WriteFieldValue(comServer,fiQuTypeItem,seQuTypeItem->Text);   // QuTypeItem
    WriteFieldValue(comServer,fiQuTypeCode,lblUpperCode->Caption+seQuTypeItem->Text);   // QuTypeItem
    WriteFieldValue(comServer,fiQuTypeName,seQuTypeName->Text);   // QuTypeName
    WriteFieldValue(comServer,fiQuTypeLevel,strLevel);  
    WriteFieldValue(comServer,fiQuTypeEnd,chkQuTypeEnd->Checked?"1":"0");  // QuTypeEnd
    WriteFieldValue(comServer,fiQuTypeDesc,memQuTypeDesc->Text);  // QuTypeDesc
}
//---------------------------------------------------------------------------

void __fastcall TfrmQuType::WaitUserInput()
{
    seQuTypeItem->SetFocus();
}
//---------------------------------------------------------------------------

void __fastcall TfrmQuType::RefreshGridData(int mAction)
{
    AnsiString  tempText;
    TTreeNode *TempNode;
    if (mAction == 0)
    {
        if(tvQuType->Selected)
        {
            tempText = "(" + GetFieldValue(fiQuTypeCode) + ")" + GetFieldValue(fiQuTypeName);
            TempNode=tvQuType->Items->AddChild(tvQuType->Selected,tempText);
            tvQuType->Selected=TempNode;
            if(GetFieldValue(fiQuTypeEnd)=="1")
            {
             TempNode->StateIndex=1;
             TempNode->SelectedIndex=1;
            }
            else
            {
             TempNode->StateIndex=-1;
             TempNode->SelectedIndex=-1;
            }
            tvQuType->Selected->Expanded = true;
        }
    }
    else if(mAction == 1)
    {
        if(tvQuType->Selected->HasChildren)
        {   //如果有子节点,则刷新一次.
            comServer->Query();
            FillGridWithData();
        }
        else
        {
            tvQuType->Selected->Text = "(" + GetFieldValue(fiQuTypeCode) + ")"
                + GetFieldValue(fiQuTypeName);
            if(GetFieldValue(fiQuTypeEnd)=="1")
            {
             tvQuType->Selected->StateIndex=1;
             tvQuType->Selected->SelectedIndex=1;
            }
            else
            {
             tvQuType->Selected->StateIndex=-1;
             tvQuType->Selected->SelectedIndex=-1;
            }
        }
    }
    else if(mAction == 2)
    {
        tvQuType->Items->Delete(tvQuType->Selected);
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmQuType::FillGridWithData()
{
     AnsiString  tempText;
     TTreeNode *TempNode[10];
     int mLevel;
     TreeFresh=true; //更新分类码树,不执行Change事件
     tvQuType->Items->Clear();
     TreeFresh=false;
     TempNode[0]=tvQuType->Items->Add(NULL,"所有的分类码");
     TempNode[0]->StateIndex=-1;
     TempNode[0]->SelectedIndex=-1;
     comServer->MoveFirst();

     while (comServer->Eof == 0)
     {
//        ShowMessage(GetFieldValue(fiQuTypeCode));
//        ShowMessage(GetFieldValue(fiQuTypeLevel));
        mLevel  =   StrToIntDef(GetFieldValue(fiQuTypeLevel),-1);
        if((mLevel <= 0)||(mLevel > 18))
        {
            ::MessageBox(Handle,"分类码层级的级别必须在1和18之间。","错误",MB_OK|MB_ICONSTOP);
            comServer->MoveNext();
            continue;
        }

        tempText = "(" + GetFieldValue(fiQuTypeCode) + ")" + GetFieldValue(fiQuTypeName);
        TempNode[mLevel] = tvQuType->Items->AddChild(TempNode[mLevel-1],tempText);
        if(GetFieldValue(fiQuTypeEnd)=="1")
        {
         TempNode[mLevel]->StateIndex=1;
         TempNode[mLevel]->SelectedIndex=1;
        }
        else
        {
         TempNode[mLevel]->StateIndex=-1;
         TempNode[mLevel]->SelectedIndex=-1;
        }
        comServer->MoveNext();
     }
     //展开所有的节点。
     if (tvQuType->Items->Count > 0)
     {
        tvQuType->FullExpand();
        comServer->MoveFirst();
        GetDataFromComObject();
     }
}
//---------------------------------------------------------------------------
void __fastcall TfrmQuType::InitEditControl()
{
    ClientGroup->AddComponent(2,false,false,true, FloatPanel1,FloatPanel1->Name);
    ClientGroup->AddComponent(2,true,true,false, Panel1,Panel1->Name);
}
//---------------------------------------------------------------------------

void __fastcall TfrmQuType::TreeViewLocation()
{
    AnsiString s,c;
    s = GetFieldValue(fiQuTypeCode);
    for(int i = 1 ; i < tvQuType->Items->Count ; i ++)
    {
        c = tvQuType->Items->Item[i]->Text;    //取关键字
        c = c.SubString(2,c.AnsiPos(")")-2);
        if(s == c)
        {
            tvQuType->Selected = tvQuType->Items->Item[i];
            break;
        }
    }
}
//---------------------------------------------------------------------------

__fastcall TfrmQuType::TfrmQuType(TComponent* Owner)
       : TRecBaseForm(Owner,euSdQuType,"")
{
 InitTierLen();
}
//---------------------------------------------------------------------------
void __fastcall TfrmQuType::FormShow(TObject *Sender)
{
    FillGridWithData();
}
//---------------------------------------------------------------------------
void __fastcall TfrmQuType::tvQuTypeChange(TObject *Sender,
      TTreeNode *Node)
{
    AnsiString s;
    if (TreeFresh)
        return;
    if(Node == tvQuType->Items->Item[0])
    {
        return;
    }
/*
    if((CurrentState==caAddDetail)||(CurrentState==caEditDetail))
    {
        CancelChange();
    }
*/
    s = Node->Text;
    s = s.SubString(2,s.AnsiPos(")")-2);
    comServer->LocateByKey(WideString(s));
    if (comServer->Eof == 0)
    {
        GetDataFromComObject();
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmQuType::FormClose(TObject *Sender,
      TCloseAction &Action)
{
    TRecBaseForm::FormClose(Sender,Action);
}
//---------------------------------------------------------------------------

void __fastcall TfrmQuType::muAddDetailClick(TObject *Sender)
{
    AnsiString  s;
    if(tvQuType->Selected == NULL)
     return;
    if(tvQuType->Selected->StateIndex == 1)
    {
     ::MessageBox(Handle,"当前编码已是末级不能增加下级编码","系统提示",MB_OK|MB_ICONINFORMATION);
     return;
    }
    TRecBaseForm::muAddDetailClick(Sender);
    int tempLevel = tvQuType->Selected->Level;
    if(tempLevel <= 0)
    {
       lblUpperCode->Caption = "";
    }
    else
    {
        s = tvQuType->Selected->Text;
        s = s.SubString(2,s.AnsiPos(")")-2);
        lblUpperCode->Caption=s;
    }
    //“增加”下一层时,要控件的最大字符数设置为下一层的字符长度
    if (TierLen[tempLevel+1] <= 0)
     seQuTypeItem->MaxLength=18;
    else
     seQuTypeItem->MaxLength=TierLen[tempLevel+1];

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

void __fastcall TfrmQuType::muEditDetailClick(TObject *Sender)
{
    AnsiString  s;
    if(tvQuType->Selected == NULL)
     return;
    if(tvQuType->Selected->Level == 0)
    {
        return;
    }
    TRecBaseForm::muEditDetailClick(Sender);
    if(tvQuType->Selected->HasChildren)
     chkQuTypeEnd->Enabled=false;
    else
     chkQuTypeEnd->Enabled=true;
}
//---------------------------------------------------------------------------

void __fastcall TfrmQuType::muDeleteDetailClick(TObject *Sender)
{
   if(tvQuType->Selected == NULL)
    return;
   if(tvQuType->Selected->HasChildren)
   {
     ::MessageBox(Handle,"该分类码下包含有子分类码,不允许删除!","操作错误", MB_OK|MB_ICONSTOP);
     return;
   }
   TRecBaseForm::muDeleteDetailClick(Sender);
   if (tvQuType->Items->Count == 1)
   {
      ClearControl(false);
   }
}
//---------------------------------------------------------------------------

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

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

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

void __fastcall TfrmQuType::muLastClick(TObject *Sender)
{
    TRecBaseForm::muLastClick(Sender);
    TreeViewLocation();
}
//---------------------------------------------------------------------------
int __fastcall TfrmQuType::GetTierLen(int tiernum)
{
 //从数组中获取指定层的字符长度
 if ((tiernum>0)&&(tiernum<19)) //层数从1-18为有效
  return TierLen[tiernum];
 else
  return 0;
}
//---------------------------------------------------------------------------
void __fastcall TfrmQuType::InitTierLen()
{
 //从参数表sdparameter中获取分类码各层字符长度,并存入数组
 TComResultSet *pResultSet=NewResultSet();
 AnsiString strSQL,strItem,strValue;
 strSQL=" select parameteritem,parametervalue from sdparameter ";
 strSQL=strSQL+" where parametertype = 2 and parametercode like '"+ParaCode+"%'";
 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()<20))
     TierLen[strItem.ToInt()]=strValue.ToInt();
   pResultSet->MoveNext();
 }
 delete pResultSet;
}
//---------------------------------------------------------------------------



⌨️ 快捷键说明

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