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

📄 bomquery.cpp

📁 科思ERP部分源码及控件
💻 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 + -