📄 bomquery.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "BomQuery.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "QueryBaseForm"
#pragma link "SDTreeView"
#pragma link "KSAdvReport"
#pragma resource "*.dfm"
TfrmBomQuery *frmBomQuery;
//---------------------------------------------------------------------------
__fastcall TfrmBomQuery::TfrmBomQuery(TComponent* Owner, HWND chWnd, AnsiString MidCode,AnsiString WhereStr)
: TQueryBaseForm(Owner,chWnd,MidCode,WhereStr)
{
QueryGrid=gBomEndChild;
changeflag=false;
FillTreeBom();
tvBomMReverse->Items->Assign(tvBomInfo->Items);
tvBomReverse->Items->Assign(tvBomInfo->Items);
}
//---------------------------------------------------------------------------
void __fastcall TfrmBomQuery::FillTreeBom()
{
TTreeNode *TempNode[7];
int mLevel;
TComResultSet *RsPmpc=new TComResultSet(Handle,g_ClientHandle);
tvBomInfo->Items->Clear();
TempNode[0]=tvBomInfo->Items->Add(NULL,"所有产品");
TempNode[0]->StateIndex = 0;
TempNode[0]->SelectedIndex = 0;
RsPmpc->Open("select PmpcCode,PmpcName,PmpcLevel,PmpcEnd from sdPmpc order by PmpcCode,PmPcLevel","");
RsPmpc->MoveFirst();
while( RsPmpc->Eof == 0 )
{
mLevel=RsPmpc->FieldByName("PmpcLevel").ToInt();
TempNode[mLevel] = tvBomInfo->Items->AddChild(TempNode[mLevel-1],"(" + RsPmpc->FieldByName("PmpcCode") + ")" +RsPmpc->FieldByName("PmpcName"));
if(RsPmpc->FieldByName("PmpcEnd")=="1")
{
TempNode[mLevel]->StateIndex = 2;
TempNode[mLevel]->SelectedIndex = 2;
}
else
{
TempNode[mLevel]->StateIndex = 0;
TempNode[mLevel]->SelectedIndex = 0;
}
TempNode[mLevel]->Text= "(" + RsPmpc->FieldByName("PmpcCode") + ")"+RsPmpc->FieldByName("PmpcName");
RsPmpc->MoveNext();
}
RsPmpc->Close();
TempNode[0]->Expand(false);
delete RsPmpc;
}
//---------------------------------------------------------------------------
void __fastcall TfrmBomQuery::tvBomInfoDblClick(TObject *Sender)
{
if(tvBomInfo->Selected == NULL)
return;
if(tvBomInfo->Selected->Count>0)
return;
if(changeflag)
return;
FillBomGoods(tvBomInfo->Selected);
changeflag=true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmBomQuery::FillBomGoods(TTreeNode *SelectedPmpcNode)
{
AnsiString sSQL,sPmpcCode,ItemStr,SqlItemStr;
TComResultSet *RsGoods;
TTreeNode *TemNode;
if(SelectedPmpcNode==NULL)
return;
sPmpcCode = SelectedPmpcNode->Text;
sPmpcCode = sPmpcCode.SubString(2,sPmpcCode.AnsiPos(")")-2);
if(sPmpcCode=="")
return;
sSQL=" select goodscode,goodsname from sdgoods where goodspmpccode ='"
+sPmpcCode+"'";
SqlItemStr="1";
RsGoods=new TComResultSet(Handle,g_ClientHandle);
RsGoods->Open(sSQL,"");
if(RsGoods->RecordCount < 1)
{
sSQL=" select GoodsName,BomdGoods,BomdpGoods,BomdQty from sdGoods INNER JOIN sdBomd ON GoodsCode=BomdGoods WHERE BomdPgoods ='"+sPmpcCode+"'";
SqlItemStr="2";
}
try
{
StartWaitForm("正在执行查询...");
RsGoods->Close();
RsGoods->Open(sSQL,"");
while( RsGoods->Eof == 0)
{
if(SqlItemStr=="1")
ItemStr="("+RsGoods->FieldByName("GoodsCode")+
")"+RsGoods->FieldByName("GoodsName");
else
ItemStr="("+RsGoods->FieldByName("BomdGoods")+
")"+RsGoods->FieldByName("GoodsName")+
" 消耗定额:"+RsGoods->FieldByName(AnsiString("BomdQty"));
TemNode= tvBomInfo->Items->AddChild(SelectedPmpcNode,ItemStr);
TemNode->StateIndex = 1;
TemNode->SelectedIndex = 1;
TemNode->Text=ItemStr;
RsGoods->MoveNext();
}
}
__finally
{
EndWaitForm();
}
SelectedPmpcNode->Expand(false);
SelectedPmpcNode->StateIndex=3;
SelectedPmpcNode->SelectedIndex=3;
delete RsGoods;
}
//---------------------------------------------------------------------------
void __fastcall TfrmBomQuery::tvBomInfoItemChange(TObject *Sender,
TTreeNode *Node)
{
changeflag=false;
AnsiString m,BomInfoCode,BomInfoName;
TTreeNode *TempNode[7];
if(Node == tvBomInfo->Items->Item[0])
return;
if(Node == tvBomInfo->Items->Item[1])
return;
if(tvBomInfo->Selected==NULL)
return;
m = tvBomInfo->Selected->Text;
BomInfoCode = m.SubString(2,m.AnsiPos(")")-2);
BomInfoName = m.SubString(m.AnsiPos(")")+1,m.AnsiPos("消")-8);
tvBomMReverse->Items->Clear();
tvBomReverse->Items->Clear();
TempNode[0]=tvBomMReverse->Items->AddChild(NULL,"(" + BomInfoCode + ")" +BomInfoName);
TempNode[0]=tvBomReverse->Items->AddChild(NULL,"(" + BomInfoCode + ")" +BomInfoName);
FillBomMReverse(BomInfoCode);
FillBomReverse(BomInfoCode);
CheckEndChild(BomInfoCode);
TempNode[0]->Expand(true);
}
//---------------------------------------------------------------------------
void __fastcall TfrmBomQuery::FillBomMReverse(AnsiString t_Code)
{
TTreeNode *TempNode[7],*LastNode;
LastNode=TempNode[0];
TTreeNode *CurItem ;//
for(int i=0;i<tvBomInfo->Selected->Level;i++)
{
LastNode = tvBomMReverse->Items->Item[i] ;
if(tvBomInfo->Selected->Parent)
{
tvBomMReverse->Items->AddChild(LastNode,tvBomInfo->Selected->Parent->Text);
CurItem= tvBomInfo->Selected->Parent;
CurItem->Parent->Selected ;
}
}
tvBomMReverse->FullExpand();
}
//---------------------------------------------------------------------------
void __fastcall TfrmBomQuery::FillBomReverse(AnsiString t_Code)
{
TComResultSet *RsQuery;
TTreeNode *TempNode[7],*LastNode;
AnsiString sSQL=AnsiString("select BomdPGoods,BomdGoods,BomdQty,GoodsName from sdBomd,sdGoods where GoodsCode=BomdPGoods and BomdGoods='"+t_Code+"'");
RsQuery=new TComResultSet(Handle,g_ClientHandle);
RsQuery->Open(sSQL,"");
RsQuery->MoveFirst();
LastNode=TempNode[0];
while(RsQuery->Eof == 0)
{
for(int i=0;i<tvBomReverse->Items->Count;i++)
{
AnsiString c;
//取关键字
c = tvBomReverse->Items->Item[i]->Text;
c = c.SubString(2,c.AnsiPos(")")-2);
if(t_Code == c)
{
LastNode = tvBomReverse->Items->Item[i];
break;
}
}
tvBomReverse->Items->AddChild(LastNode,"(" + RsQuery->FieldByName("BomdPGoods") +
")" +RsQuery->FieldByName("GoodsName")+
" 消耗定额:"+RsQuery->FieldByName(AnsiString("BomdQty")));
RsQuery->MoveNext();
}
RsQuery->Close();
delete RsQuery;
}
//---------------------------------------------------------------------------
void __fastcall TfrmBomQuery::FillGridWithData()
{
TComResultSet *RsQuery;
AnsiString ItemStr,sSql;
//获取查询语句
sSql=GetQueryStr();
if(sSql=="")
return;
gBomEndChild->RowCount=1;
RsQuery=new TComResultSet(Handle,g_ClientHandle);
RsQuery->Open(sSql,"");
RsQuery->MoveFirst();
while( RsQuery->Eof == 0)
{
ItemStr=RsQuery->FieldByName("Bomdgoods")+
"\t"+RsQuery->FieldByName("GoodsName")+
"\t"+RsQuery->FieldByName("BomdUnit")+
"\t"+RsQuery->FieldByName("BomdQty")+
"\t"+RsQuery->FieldByName("BomdShl")+
"\t"+RsQuery->FieldByName("BomdFrom");
gBomEndChild->AddItem(ItemStr);
RsQuery->MoveNext();
}
RsQuery->Close();
delete RsQuery;
}
//---------------------------------------------------------------------------
//获取查询语句
AnsiString __fastcall TfrmBomQuery::GetQueryStr()
{
AnsiString Selectstr,Fromstr,Wherestr,Orderstr,sSQL;
Selectstr="select "
+AnsiString("Bomdgoods, ") //父件编号
+AnsiString("GoodsName, ") //子件名称
+AnsiString("BomdUnit, ") //子件编号
+AnsiString("BomdQty, ") //消耗定额
+AnsiString("BomdShl, ") //损耗率
+AnsiString("BomdFrom "); //来源
Fromstr=" from sdBomd,sdGoods ";
Wherestr=" where sdBomd.BomdGoods = sdGoods.GoodsCode ";
Orderstr=" order by BomdPgoods desc,Bomdgoods desc ";
sSQL=Selectstr+Fromstr+Wherestr+Orderstr;
return(sSQL);
}
//---------------------------------------------------------------------------
void __fastcall TfrmBomQuery::CheckEndChild(AnsiString c_code)
{
int ErrNum;
AnsiString ItemStr;
TComResultSet *RsLastGoods;
gBomEndChild->RowCount=1;
RsLastGoods=new TComResultSet(Handle,g_ClientHandle);
StartWaitForm("正在检索最终子件,请稍候...");
try
{
ItemStr="ksBom_LastGoods '"+c_code+"',0";
RsLastGoods->Execute(ItemStr);
}
catch(Exception &e)
{
EndWaitForm();
throw Exception(e.Message);
}
RsLastGoods->Close();
RsLastGoods->Open("select * from kslastgoods","");
RsLastGoods->MoveFirst();
while( RsLastGoods->Eof == 0)
{
ItemStr=RsLastGoods->FieldByName("LastGoodsgoods")+
"\t"+RsLastGoods->FieldByName("LastGoodsName")+
"\t"+RsLastGoods->FieldByName("LastGoodsUnit")+
"\t"+RsLastGoods->FieldByName("LastGoodsQty")+
"\t"+RsLastGoods->FieldByName("LastGoodsShl")+
"\t"+RsLastGoods->FieldByName("LastGoodsFrom");
gBomEndChild->AddItem(ItemStr);
RsLastGoods->MoveNext();
}
RsLastGoods->Close();
delete RsLastGoods;
EndWaitForm();
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -