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

📄 goodsquery.cpp

📁 速达开源ERP系统
💻 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 + -