pmpc.cpp
来自「科思ERP部分源码及控件」· C++ 代码 · 共 390 行
CPP
390 行
//---------------------------------------------------------------------------
#include <vcl.h>
#include "Pmpc.h"
//---------------------------------------------------------------------------
#pragma hdrstop
#pragma package(smart_init)
#pragma link "RecBaseForm"
#pragma link "fpanel"
#pragma link "SDEdit"
#pragma link "SDComboBox"
#pragma resource "*.dfm"
#define ParaCode "10501" //分类码各层字符长度参数代码头
TfrmPmpc *frmPmpc;
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::ClearControl(bool BringToNext)
{
if(!BringToNext)
{
//scPmpcClass->Text="";
sePmpcName->Text = "";
memPmpcDesc->Text = "";
chkPmpcEnd->Checked=false;
sePmpcCode->Text="";
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::GetDataFromComObject()
{
AnsiString strLevel;
strLevel=GetFieldValue("PmpcLevel");
//根据各层设定的代码长度,设置控件的最大字符数
sePmpcCode->Text=GetFieldValue("PmpcCode");
l_UpperCode=GetFieldValue("PmpcUpperCode");
//scPmpcClass->LocateKey(GetFieldValue("PmpcClass"));
l_Item = GetFieldValue("PmpcItem");
sePmpcName->Text = GetFieldValue("PmpcName");
chkPmpcEnd->Checked=GetFieldValue("PmpcEnd")=="1";
memPmpcDesc->Text = GetFieldValue("PmpcDesc");
//scPmpcClass->LocateKey(GetFieldValue("PmpcClass"));
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::SendDataToComObject()
{
AnsiString strErr,strTemp;
GetPmpcInsideCode();
SetFieldValue("PmpcCode",sePmpcCode->Text);
SetFieldValue("PmpcCompose",l_UpperCode+l_Item);
SetFieldValue("PmpcUpperCode",l_UpperCode);
SetFieldValue("PmpcItem",l_Item); // PmPcItem
SetFieldValue("PmpcName",sePmpcName->Text); // PmPcName
SetFieldValue("PmpcLevel",strLevel);
SetFieldValue("PmpcEnd",chkPmpcEnd->Checked?"1":"0"); // PmPcEnd
SetFieldValue("PmpcDesc",memPmpcDesc->Text); // PmPcDesc
//SetFieldValue("PmpcClass",scPmpcClass->ItemData[1]);
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::WaitUserInput()
{
sePmpcCode->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::RefreshGridData(int mAction)
{
AnsiString tempText;
TTreeNode *TempNode;
if (mAction == 0)
{
if(tvPmPc->Selected)
{
tempText = "(" + GetFieldValue("PmpcCode") + ")" + GetFieldValue("PmpcName");
TempNode=tvPmPc->Items->AddChild(tvPmPc->Selected,tempText);
tvPmPc->Selected=TempNode;
if(GetFieldValue("PmpcEnd")=="1")
{
TempNode->StateIndex=1;
TempNode->SelectedIndex=1;
}
else
{
TempNode->StateIndex=-1;
TempNode->SelectedIndex=-1;
}
tvPmPc->Selected->Expanded = true;
}
}
else if(mAction == 1)
{
if(tvPmPc->Selected->HasChildren)
{ //如果有子节点,则刷新一次.
comServer->Query();
FillGridWithData();
}
else
{
tvPmPc->Selected->Text = "(" + GetFieldValue("PmpcCode") + ")"
+ GetFieldValue("PmpcName");
if(GetFieldValue("PmpcEnd")=="1")
{
tvPmPc->Selected->StateIndex=1;
tvPmPc->Selected->SelectedIndex=1;
}
else
{
tvPmPc->Selected->StateIndex=-1;
tvPmPc->Selected->SelectedIndex=-1;
}
}
}
else if(mAction == 2)
{
tvPmPc->Items->Delete(tvPmPc->Selected);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::FillGridWithData()
{
AnsiString tempText;
TTreeNode *TempNode[10];
int mLevel;
TreeFresh=true; //更新分类码树,不执行Change事件
tvPmPc->Items->Clear();
TreeFresh=false;
TempNode[0]=tvPmPc->Items->Add(NULL,"所有的分类码");
TempNode[0]->StateIndex=-1;
TempNode[0]->SelectedIndex=-1;
comServer->MoveFirst();
while (comServer->Eof == 0)
{
mLevel = StrToIntDef(GetFieldValue("PmpcLevel"),-1);
if((mLevel <= 0)||(mLevel > 18))
{
::MessageBox(Handle,"分类码层级的级别必须在1和18之间。","错误",MB_OK|MB_ICONSTOP);
comServer->MoveNext();
continue;
}
tempText = "(" + GetFieldValue("PmpcCode") + ")" + GetFieldValue("PmpcName");
TempNode[mLevel] = tvPmPc->Items->AddChild(TempNode[mLevel-1],tempText);
if(GetFieldValue("PmpcEnd")=="1")
{
TempNode[mLevel]->StateIndex=1;
TempNode[mLevel]->SelectedIndex=1;
}
else
{
TempNode[mLevel]->StateIndex=-1;
TempNode[mLevel]->SelectedIndex=-1;
}
comServer->MoveNext();
}
//展开所有的节点。
if (tvPmPc->Items->Count > 0)
{
tvPmPc->FullExpand();
comServer->MoveFirst();
if(comServer->RecordCount>0)
GetDataFromComObject();
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::InitEditControl()
{
ClientGroup->AddComponent(2,false,false,true, FloatPanel1,FloatPanel1->Name);
ClientGroup->AddComponent(2,true,true,false, Panel1,Panel1->Name);
//scPmpcClass->ClearAll();
//scPmpcClass->AddItems("1-原材料","1");
//scPmpcClass->AddItems("2-成 品","2");
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::TreeViewLocation()
{
AnsiString s,c;
s = GetFieldValue("PmpcCode");
for(int i = 1 ; i < tvPmPc->Items->Count ; i ++)
{
c = tvPmPc->Items->Item[i]->Text; //取关键字
c = c.SubString(2,c.AnsiPos(")")-2);
if(s == c)
{
tvPmPc->Selected = tvPmPc->Items->Item[i];
break;
}
}
}
//---------------------------------------------------------------------------
__fastcall TfrmPmpc::TfrmPmpc(TComponent* Owner, HWND chWnd, AnsiString MidCode,AnsiString WhereStr)
: TRecBaseForm(Owner,chWnd,MidCode,WhereStr)
{
InitTierLen();
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::FormShow(TObject *Sender)
{
FillGridWithData();
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::tvPmPcChange(TObject *Sender,
TTreeNode *Node)
{
AnsiString s;
if (TreeFresh)
return;
if(Node == tvPmPc->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 TfrmPmpc::muAddDetailClick(TObject *Sender)
{
AnsiString s;
if(tvPmPc->Selected == NULL)
{
::MessageBox(Handle,"要增加请选择左边的树结点","系统提示",MB_OK|MB_ICONINFORMATION);
return;
}
if(tvPmPc->Selected->StateIndex == 1)
{
::MessageBox(Handle,"当前编码已是末级不能增加下级编码","系统提示",MB_OK|MB_ICONINFORMATION);
return;
}
int tempLevel = tvPmPc->Selected->Level;
if(tempLevel <= 0)
l_UpperCode="";
else
l_UpperCode=AnsiString(GetFieldValue("PmpcCompose"));
TRecBaseForm::muAddDetailClick(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::muEditDetailClick(TObject *Sender)
{
AnsiString s;
if(tvPmPc->Selected == NULL)
{
::MessageBox(Handle,"要修改请选择左边的树结点对应项目","系统提示",MB_OK|MB_ICONINFORMATION);
return;
}
if(tvPmPc->Selected->Level == 0)
{
return;
}
TRecBaseForm::muEditDetailClick(Sender);
if(tvPmPc->Selected->HasChildren)
chkPmpcEnd->Enabled=false;
else
chkPmpcEnd->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::muDeleteDetailClick(TObject *Sender)
{
if(tvPmPc->Selected == NULL)
{
::MessageBox(Handle,"要删除请选择左边的树结点对应项目","系统提示",MB_OK|MB_ICONINFORMATION);
return;
}
if(tvPmPc->Selected->HasChildren)
{
::MessageBox(Handle,"该分类码下包含有子分类码,不允许删除!","操作错误", MB_OK|MB_ICONSTOP);
return;
}
TRecBaseForm::muDeleteDetailClick(Sender);
if (tvPmPc->Items->Count == 1)
{
ClearControl(false);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::muFirstClick(TObject *Sender)
{
TRecBaseForm::muFirstClick(Sender);
TreeViewLocation();
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::muPreviousClick(TObject *Sender)
{
TRecBaseForm::muPreviousClick(Sender);
TreeViewLocation();
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::muNextClick(TObject *Sender)
{
TRecBaseForm::muNextClick(Sender);
TreeViewLocation();
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::muLastClick(TObject *Sender)
{
TRecBaseForm::muLastClick(Sender);
TreeViewLocation();
}
//---------------------------------------------------------------------------
int __fastcall TfrmPmpc::GetTierLen(int tiernum)
{
//从数组中获取指定层的字符长度
if ((tiernum>0)&&(tiernum<19)) //层数从1-18为有效
return TierLen[tiernum];
else
return 0;
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::InitTierLen()
{
//从参数表sdparameter中获取分类码各层字符长度,并存入数组
TComResultSet *pResultSet=new TComResultSet(Handle,g_ClientHandle);
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;
}
//---------------------------------------------------------------------------
void __fastcall TfrmPmpc::GetPmpcInsideCode()//获取内部编码
{
AnsiString sql,str;
//输入的代码长度必须等于设定长度
if(CurrentState == caAddDetail)
{
strLevel=IntToStr(tvPmPc->Selected->Level+1);
TComResultSet *pResultSet=new TComResultSet(Handle,g_ClientHandle);
if (strLevel>1)
sql="select top 1 pmpcItem as pmpcItem from sdpmpc where pmpcuppercode='"+l_UpperCode+"' order by pmpcItem desc ";
else
sql="select top 1 pmpcCompose as pmpcItem from sdpmpc where pmpcuppercode='' order by pmpcCompose desc ";
pResultSet->Open(sql,"");
if(pResultSet->RecordCount>0)
{
str=AnsiString(pResultSet->FieldByName("pmpcItem"));
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(tvPmPc->Selected->Level);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?