📄 goodsquery.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "GoodsQuery.h"
#include "commfunction.h"
#include "gvar.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "fpanel"
#pragma link "SDEdit"
#pragma link "SDComboBox"
#pragma link "SDGrid"
#pragma resource "*.dfm"
TfrmGoodsQuery *frmGoodsQuery;
//---------------------------------------------------------------------------
__fastcall TfrmGoodsQuery::TfrmGoodsQuery(TComponent* Owner,int &QueryStatus,int iFrmStyle,AnsiString mSqlStr)
: TForm(Owner)
{
AnsiString sSQL;
int Temp;
FQueryStatus=&QueryStatus;
//参数赋值
pv_iFrmStyle=iFrmStyle;
pv_sSelect="select GoodsCode,GoodsName,GoodsPmpcCode,GoodsUnitCode,GoodsType,GoodsFrom from sdGoods ";
//用户自定义查询条件
if(pv_iFrmStyle==0)
{
PageControl1->Enabled=false;
btnQuery->Enabled=false;
btnClear->Enabled=false;
sSQL=UpperCase(mSqlStr);
if(mSqlStr.IsEmpty())
pv_sSelect+=" order by goodspmpccode,goodscode";
else
{
Temp=sSQL.AnsiPos(" FROM ");
pv_sSelect="select GoodsCode,GoodsName,GoodsPmpcCode,GoodsUnitCode,GoodsType,GoodsFrom ";
pv_sSelect+=sSQL.SubString(Temp,sSQL.Length());
}
FillGridWithData();
}
else
{
//填充货位
sSQL="select loccode,locname from sdloc order by loccode";
FillComboBox(scLoc,sSQL,"locname","loccode");
scLoc->ItemIndex=-1;
//填充供应商
sSQL="select SupplyName,SupplyCode from sdSupply order by SupplyCode";
FillComboBox(scSupply,sSQL,"SupplyName","SupplyCode");
scSupply->ItemIndex=-1;
//初始化
ClearCondition();
}
}
//---------------------------------------------------------------------------
//清除过滤条件
void __fastcall TfrmGoodsQuery::ClearCondition()
{
sgGoods->RowCount=1;
btnOK->Enabled=false;
if(scLoc->Enabled)
scLoc->ItemIndex=-1;
if(scSupply->Enabled)
scSupply->ItemIndex=-1;
seCode->Text="";
if(chkType1->Enabled)
chkType1->Checked=false;
if(chkType2->Enabled)
chkType2->Checked=false;
if(chkType3->Enabled)
chkType3->Checked=false;
if(chkType4->Enabled)
chkType4->Checked=false;
if(chkType5->Enabled)
chkType5->Checked=false;
if(chkType6->Enabled)
chkType6->Checked=false;
if(chkType7->Enabled)
chkType7->Checked=false;
if(chkType8->Enabled)
chkType8->Checked=false;
if(chkType9->Enabled)
chkType9->Checked=false;
chkFrom1->Checked=false;
chkFrom2->Checked=false;
rbtBatch->Checked=false;
rbtSingle->Checked=false;
chkSale->Checked=false;
PageControl1->ActivePage=TabSheet1;
edtLocate->Text="";
btnQuery->Enabled=true;
}
//获取查询语句
AnsiString __fastcall TfrmGoodsQuery::GetQueryStr()
{
AnsiString sSQL,sFrom,sWhere,sOrder,sTemp;
if(scLoc->ItemIndex > -1)
{
sFrom=sFrom+",sdLg ";
if(sWhere == "")
sWhere=" where GoodsCode=LgGoodsCode and LgLocCode='"+scLoc->ItemData[1]+"'";
else
sWhere+=" and GoodsCode=LgGoodsCode and LgLocCode='"+scLoc->ItemData[1]+"'";
}
//供应商
if(scSupply->ItemIndex > -1)
{
sFrom=sFrom+",sdPgd ";
if(sWhere == "")
sWhere=" where GoodsCode=PgdGoodsCode and PgdSupplyCode='"+scSupply->ItemData[1]+"'";
else
sWhere+=" and GoodsCode=PgdGoodsCode and PgdSupplyCode='"+scSupply->ItemData[1]+"'";
}
//货物编码
if(seCode->Text != "")
if(sWhere == "")
sWhere=" where GoodsCode like '%"+Trim(seCode->Text)+"%'";
else
sWhere+=" and GoodsCode like '%"+Trim(seCode->Text)+"%'";
//货物类型
sTemp="";
if(chkType1->Checked)
if(sTemp == "")
sTemp=" (GoodsType=1";
else
sTemp=sTemp+" or GoodsType=1";
if(chkType2->Checked)
if(sTemp == "")
sTemp=" (GoodsType=2";
else
sTemp=sTemp+" or GoodsType=2";
if(chkType3->Checked)
if(sTemp == "")
sTemp=" (GoodsType=3";
else
sTemp=sTemp+" or GoodsType=3";
if(chkType4->Checked)
if(sTemp == "")
sTemp=" (GoodsType=4";
else
sTemp=sTemp+" or GoodsType=4";
if(chkType5->Checked)
if(sTemp == "")
sTemp=" (GoodsType=5";
else
sTemp=sTemp+" or GoodsType=5";
if(chkType6->Checked)
if(sTemp == "")
sTemp=" (GoodsType=6";
else
sTemp=sTemp+" or GoodsType=6";
if(chkType7->Checked)
if(sTemp == "")
sTemp=" (GoodsType=7";
else
sTemp=sTemp+" or GoodsType=7";
if(chkType8->Checked)
if(sTemp == "")
sTemp=" (GoodsType=8";
else
sTemp=sTemp+" or GoodsType=8";
if(chkType9->Checked)
if(sTemp == "")
sTemp=" (GoodsType=9";
else
sTemp=sTemp+" or GoodsType=9";
if(sTemp!="")
if(sWhere=="")
sWhere=" where "+sTemp+")";
else
sWhere+=" and "+sTemp+")";
//货物来源
sTemp="";
if(chkFrom1->Checked)
if(sTemp == "")
sTemp=" (GoodsFrom=1";
else
sTemp=sTemp+" or GoodsFrom=1";
if(chkFrom2->Checked)
if(sTemp == "")
sTemp=" (GoodsFrom=2";
else
sTemp=sTemp+" or GoodsFrom=2";
if(sTemp!="")
if(sWhere=="")
sWhere=" where "+sTemp+")";
else
sWhere=sWhere+" and "+sTemp+")";
//需批次管理
if(rbtBatch->Checked)
if(sWhere == "")
sWhere=" where GoodsBatch=1";
else
sWhere=sWhere+" and GoodsBatch=1";
//需单独管理
if(rbtSingle->Checked)
if(sWhere == "")
sWhere=" where GoodsSingle=1";
else
sWhere=sWhere+" and GoodsSingle=1";
//可销售
if(chkSale->Checked)
if(sWhere == "")
sWhere=" where GoodsSale=1";
else
sWhere=sWhere+" and GoodsSale=1";
sOrder=" order by GoodsPmpcCode,GoodsType,GoodsCode";
if(sWhere == "")
{
if(Application->MessageBox(
"查询没有设置过滤条件,可能会影响查询效率,重新设置吗?",
"编码查询",MB_YESNO) == IDYES)
Abort();
}
sSQL=pv_sSelect+sFrom+sWhere+sOrder;
return sSQL;
}
//获取类型名称
AnsiString __fastcall TfrmGoodsQuery::GetTypeName(AnsiString sIndex)
{
int iIndex;
iIndex=StrToIntDef(sIndex,-1);
switch(iIndex)
{
case 1:
return "成品";
case 2:
return "半成品";
case 3:
return "原材料";
case 4:
return "零件";
case 5:
return "备用件";
case 6:
return "工具";
case 7:
return "费用件";
case 8:
return "虚拟件";
case 9:
return "在流件";
default:
return "未定义";
}
}
//获取查询语句
void __fastcall TfrmGoodsQuery::FillGridWithData()
{
AnsiString sSQL,ItemStr;
sgGoods->RowCount=1;
btnOK->Enabled=false;
if(pv_iFrmStyle==0)
sSQL=pv_sSelect;
else
sSQL=GetQueryStr();
btnQuery->Enabled=false;
TComResultSet *RsGoods;
try
{
StartWaitForm("正在执行查询...");
RsGoods=NewResultSet();
RsGoods->Open(sSQL,"GoodsCode");
sgGoods->ScrollBars=ssNone; //取消滚动条,防止屏幕滚动
while( RsGoods->Eof == 0)
{
ItemStr=RsGoods->FieldByName("GoodsPmpcCode")+
"\t"+RsGoods->FieldByName("GoodsCode")+
"\t"+RsGoods->FieldByName("GoodsName")+
"\t"+RsGoods->FieldByName("GoodsUnitCode")+
"\t"+GetTypeName(RsGoods->FieldByName("GoodsType"))+
"\t"+((RsGoods->FieldByName("GoodsFrom")=="1")?"采购":"制造");
sgGoods->AddItem(ItemStr);
RsGoods->MoveNext();
}
sgGoods->ScrollBars=ssBoth;//设置滚动条
}
__finally
{
EndWaitForm();
delete RsGoods;
}
if(sgGoods->RowCount > 1)
{
sgGoods->Row=1;
btnOK->Enabled=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmGoodsQuery::btnQueryClick(TObject *Sender)
{
FillGridWithData();
}
//---------------------------------------------------------------------------
void __fastcall TfrmGoodsQuery::btnClearClick(TObject *Sender)
{
ClearCondition();
}
//---------------------------------------------------------------------------
void __fastcall TfrmGoodsQuery::btnOKClick(TObject *Sender)
{
if(sgGoods->RowCount > 1 && sgGoods->Row>0)
{
try
{
g_sdRsGoods->LocateByKey(sgGoods->Cells[1][sgGoods->Row]);
*FQueryStatus=1;
}
catch(...)
{
FQueryStatus=0;
}
}
else
*FQueryStatus=0;
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmGoodsQuery::btnCancelClick(TObject *Sender)
{
*FQueryStatus=0;
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmGoodsQuery::sgGoodsSelectCell(TObject *Sender,
int ACol, int ARow, bool &CanSelect)
{
if(ARow > 0)
btnOK->Enabled=true;
}
//---------------------------------------------------------------------------
//name : IsSimilar
//function : 判断字串str是否包含字串substr
//parameter: str 为母串,substr为字串
//return : 包含则返回true,否则返回false
//---------------------------------------------------------------------------
bool __fastcall TfrmGoodsQuery::IsSimilar(AnsiString str,AnsiString substr)
{
char *pTemp;
int iBegin,iCount,iLen,iType,i;
if((str == "")||(substr == "")||(str.Length()<substr.Length()))
return(false);
iBegin=1;
iCount=0;
iType=1;
iLen=substr.Length();
pTemp=substr.c_str();
if(*pTemp == '\\') //首字母是转义字符
{
substr=substr.SubString(2,iLen-1); //去除转义字符
iType=1;
}
else
if(*pTemp == '*') //首字母是多字母匹配符
{
substr=substr.SubString(2,iLen-1); //去除匹配符
iType=2;
}
else
if(*pTemp == '#') //首字母是单字母匹配符
{
iCount=1;
i=1;
while(i < iLen) //统计字串首部连续单字母匹配符的个数
{
if(*(pTemp+i) == '#')
{
iCount++;
i++;
}
else
break;
}
iBegin=iCount+1; //串匹配的开始位置
substr=substr.SubString(iBegin,iLen-iCount); //去除匹配符
iType=3;
}
switch(iType)
{
case 1: //首部匹配
if(substr=="")
return(false);
if (UpperCase(str).Pos(UpperCase(substr))==1)
return(true);
else
return(false);
case 2: //包含匹配
if(substr=="")
return(false);
if (UpperCase(str).Pos(UpperCase(substr))>0)
return(true);
else
return(false);
case 3: //从iBegin处开始匹配
if(substr=="")
if(str.Length()==iCount)
return(true);
else
return(false);
else
if (UpperCase(str).Pos(UpperCase(substr))==iBegin)
return(true);
else
return(false);
default:
return(false);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmGoodsQuery::edtLocateChange(TObject *Sender)
{
cur_location=0;
}
//---------------------------------------------------------------------------
void __fastcall TfrmGoodsQuery::edtLocateKeyPress(TObject *Sender,
char &Key)
{
AnsiString srcstr;
int item_cursor;
if(Key == 13)
{
srcstr=Trim(edtLocate->Text); // source string
if (srcstr == "" || sgGoods->RowCount <= 1)
return;
if (cur_location >= sgGoods->RowCount)
if (Application->MessageBox("是否重新开始搜索?",
"编码查询", MB_YESNO) == IDYES)
cur_location=0;
else
return;
item_cursor=cur_location+1;
while(item_cursor < sgGoods->RowCount)
{
if(IsSimilar(sgGoods->Cells[1][item_cursor],srcstr))
{
sgGoods->Row=item_cursor;
break;
}
item_cursor++;
}
if (item_cursor >= sgGoods->RowCount)
if(cur_location == 0)
Application->MessageBox("搜索已结束,未找到目标","编码查询", MB_OK);
else
Application->MessageBox("搜索已结束","编码查询", MB_OK);
cur_location=item_cursor;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmGoodsQuery::chkType1Click(TObject *Sender)
{
btnQuery->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmGoodsQuery::rbtBatchClick(TObject *Sender)
{
if(((TRadioButton *)Sender)->Checked)
btnQuery->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmGoodsQuery::sgGoodsDblClick(TObject *Sender)
{
if(sgGoods->RowCount > 1 && sgGoods->Row>0)
{
try
{
g_sdRsGoods->LocateByKey(sgGoods->Cells[1][sgGoods->Row]);
*FQueryStatus=1;
}
catch(Exception &e)
{
*FQueryStatus=0;
throw Exception(e.Message);
}
}
else
*FQueryStatus=0;
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmGoodsQuery::FormClose(TObject *Sender,
TCloseAction &Action)
{
Action=caFree;
}
//---------------------------------------------------------------------------
void __fastcall TfrmGoodsQuery::FormShow(TObject *Sender)
{
edtLocate->SetFocus();
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -