pzhgen.cpp

来自「一个以前收集的基于C/S架构的ERP客户端源代码」· C++ 代码 · 共 838 行 · 第 1/2 页

CPP
838
字号
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "PzhGen.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "ListBaseForm"
#pragma link "SDComboBox"
#pragma link "SDGrid"
#pragma link "DateEdit"
#pragma resource "*.dfm"
TfrmPzhGen *frmPzhGen;
TPzhGenVoucherAct *PzhGenVoucherAct;
TPzhGenBill *PzhGenBill;
TPzGenPz *PzGenPz;
TComResultSet *RsVoActModule;
//---------------------------------------------------------------------------
__fastcall TfrmPzhGen::TfrmPzhGen(TComponent* Owner)
    : TListBaseForm(Owner)
{

}

__fastcall TfrmPzhGen::~TfrmPzhGen()
{
  if(PzhGenVoucherAct) delete PzhGenVoucherAct;
  if(PzhGenBill) delete PzhGenBill;
  if(PzGenPz) delete PzGenPz;
  if(RsVoActModule) delete RsVoActModule;
}
//---------------------------------------------------------------------------
__fastcall TfrmPzhGen::TfrmPzhGen(TComponent* Owner, HWND chWnd, AnsiString MidCode,AnsiString WhereStr)
        : TListBaseForm(Owner,chWnd,MidCode,WhereStr)
{
  g_ClientHandle=chWnd;
  try
  {
   PzhGenVoucherAct=new TPzhGenVoucherAct;
   PzhGenBill=new TPzhGenBill;
   RsVoActModule=new  TComResultSet(Handle,g_ClientHandle);
   PzGenPz=new TPzGenPz; 

  }
  catch(...)
  {
    throw Exception("创建窗体错误!");

  }

}
//---------------------------------------------------------------------------
void __fastcall TfrmPzhGen::InitEditControl()
{
  try
  {
    StartWaitForm("正在初始化,请稍候...");
    FillComboBox(Handle,scVocActModule,"select memo=ClassName+'-'+ClassID,ClassID from  sdClass where ClassId in (select distinct VoActModule from ksvoucheract) order by ClassID","memo","ClassID");
  } 
  __finally
  {
    EndWaitForm();
  }
}

void __fastcall TfrmPzhGen::scVocActModuleChange(TObject *Sender)
{
//得到当前FVoActList
  AnsiString VoActModule=scVocActModule->ItemData[1];
  PzhGenVoucherAct->GetVoActList(VoActModule,clbVoAct);
}
//---------------------------------------------------------------------------
void __fastcall TPzhGenVoucherAct::GenVoActBill(TSDGrid *GridValue)
{
  //由当前选中的凭证事物列表FSelectedList和条件从存储过程中产生来源单据表视图,并填充GRID
  //1先生成来源单据结构表ksSP_VoActGenBillStruct,以创建视图
  //2再生成来源单据数据视图ksSP_VoActGenBillView,视图结构表ksVoActViews
  //3从所有头视图里取数据填兖GRID
  AnsiString GridItemStr;
  AnsiString WhereStr,DetailWhereStr;//传入视图的过滤条件
  AnsiString curVoActCode; //当前凭证事物名
  AnsiString curHeadView; //当前视图头表名
  TComResultSet *RsVoActModule;//--来源表结构数据集
  TComResultSet *RsViewData;//来源视图里的数据集
  TComResultSet *RsBillStruct;//来源表字段结构集
  AnsiString VoActBillCode, //视图表里的字段名
           VoActBillDesc,
           VoActBillDate,
           VoActBillUser,
           VoActBillCheck,
           VoActBillChecker,
           VoActBillCheckDate,
           VoActBillClose;
  try
  {
    RsVoActModule=new TComResultSet(frmPzhGen->Handle,g_ClientHandle);
    RsViewData=new  TComResultSet(frmPzhGen->Handle,g_ClientHandle);
    RsBillStruct=new  TComResultSet(frmPzhGen->Handle,g_ClientHandle);

    try
    {
      for (int i=0;i<FVoActSelectedList->Count;i++)
      {
        curVoActCode=FVoActSelectedList->Strings[i];

       //1来源单据结构表
        RsVoActModule->Close();
        RsVoActModule->Execute("exec ksSP_VoActGenBillStruct "+QuotedStr(curVoActCode));

       //根据来源表结构得出相应字段,并由引用参数传出对相应字段的条件
        frmPzhGen->GetWhereString(curVoActCode,WhereStr,DetailWhereStr);//????
       //2来源单据数据视图
        RsVoActModule->Close();
        RsVoActModule->Execute("exec ksSP_VoActGenBillView "+QuotedStr(curVoActCode)+","+QuotedStr(WhereStr)+","+QuotedStr(DetailWhereStr));
      }

    //3取数据填充GRID

     //清空来源单据GRID里的数据
      GridValue->RowCount=1;

     //遍历视图列表ksVoActViews,取所有的头视图
      RsVoActModule->Close();
      RsVoActModule->Open("select * from ksVoActViews","");
      RsVoActModule->MoveFirst();
      for(int k=0;k<RsVoActModule->RecordCount;k++)
      {
       //当前的凭证事物名和头视图名
        curVoActCode=RsVoActModule->FieldByName("VoActViewsCode");
        curHeadView=RsVoActModule->FieldByName("VoActHeadView");
       //当前对应字段名
        try
        {
          RsBillStruct->Close();
          RsBillStruct->Open("Select * from ksVoActBillStruct where VoActBillVoActCode = "+QuotedStr(curVoActCode),"");
          if(RsBillStruct->RecordCount<=0)
            throw Exception("当前凭证事物对应的来源表结构不存在!");
        }
        catch(Exception &e)
        {
          throw Exception(e.Message);
        }
        VoActBillCode=RsBillStruct->FieldByName("VoActBillCode");
        VoActBillDesc=RsBillStruct->FieldByName("VoActBillDesc");
        VoActBillDate=RsBillStruct->FieldByName("VoActBillDate");
        VoActBillUser=RsBillStruct->FieldByName("VoActBillUser");
        VoActBillCheck=RsBillStruct->FieldByName("VoActBillCheck");
        VoActBillChecker=RsBillStruct->FieldByName("VoActBillChecker");
        VoActBillCheckDate=RsBillStruct->FieldByName("VoActBillCheckDate");
        VoActBillClose=RsBillStruct->FieldByName("VoActBillClose");

       //当前字段数据
        RsViewData->Close();
        RsViewData->Open("select * from "+curHeadView,"");
        RsViewData->MoveFirst();
        for(int j=0;j<RsViewData->RecordCount;j++)
        {
         //填充GRID
          GridItemStr=RsViewData->FieldByName(VoActBillCode)+"\t"
            +RsViewData->FieldByName(VoActBillDesc)+"\t"
            +RsViewData->FieldByName(VoActBillDate)+"\t"
            +RsViewData->FieldByName(VoActBillUser)+"\t"
            +(RsViewData->FieldByName(VoActBillCheck)=="1"?"√":"")+"\t"
            +RsViewData->FieldByName(VoActBillChecker)+"\t"
            +RsViewData->FieldByName(VoActBillCheckDate)+"\t"
            +(RsViewData->FieldByName(VoActBillClose)=="1"?"√":"");
          GridValue->AddItem(GridItemStr);
          RsViewData->MoveNext();
          
        }
        if(!RsVoActModule->Eof)
          RsVoActModule->MoveNext();
      }

      if(GridValue->RowCount>1)//定位第一行
      {
        GridValue->Row=1;
      }

    }
    catch(Exception &e)
    {
      throw Exception(e.Message);
    }

  }
  __finally
  {
    if(RsVoActModule) delete RsVoActModule;
    if(RsViewData) delete RsViewData;
    if(RsBillStruct) delete RsBillStruct;
  }
}
 
inline __fastcall TPzhGenBill::TPzhGenBill()
{
}

inline __fastcall TPzhGenBill::~TPzhGenBill()
{
}

inline __fastcall TPzhGenVoucherAct::TPzhGenVoucherAct()
{
  try
  {
    FVoActList= new TStringList;
    FVoActSelectedList= new TStringList;
  }
  catch(Exception &e)
  {
    throw Exception(e.Message);
  }

}

inline __fastcall TPzhGenVoucherAct::~TPzhGenVoucherAct()
{
   if(FVoActList) delete FVoActList;
   if(FVoActSelectedList) delete FVoActSelectedList;
}

void __fastcall TPzhGenVoucherAct::GetVoActList(AnsiString VoActModule,TCheckListBox *clbValue)
{
  //得到当前模块下的所有凭证事物列表(代码+名称)ksVoucheract
  AnsiString ItemStr;

  //字段值
  RsVoActModule->Close();
  RsVoActModule->Open("select VoActCode,VoActDesc from  ksVoucheract where voactmodule= "+QuotedStr(VoActModule)+" order by VoActCode","VoActCode");
  RsVoActModule->MoveFirst();
  clbValue->Clear();
  ItemStr="";
  FVoActList->Clear(); //先清空list
  while(!RsVoActModule->Eof)
  {
    ItemStr=RsVoActModule->FieldByName("VoActDesc");
    clbValue->Items->Add(ItemStr);
    //-----加入到FList里去
    try
    {
      FVoActList->Add((RsVoActModule->FieldByName("VoActCode")).c_str());
    }
    catch(Exception &e)
    {
      throw Exception(e.Message);
    }
    //-------
    RsVoActModule->MoveNext();
  }
  RsVoActModule->Close();
}

void __fastcall TfrmPzhGen::FormShow(TObject *Sender)
{
  scVocActModule->ItemIndex=-1;
  scVocActModuleChange(Sender);
  frmPzhGen->SetFocusedControl(scVocActModule);
  deFrom->Text="";
  rbSpecDate->Checked=false;
  rbFMonth->Checked=true;
  pgcVoAct->ActivePage=tsVoAct;
  frmPzhGen->Caption="凭证单自动生成--"+g_sdFMonth;
}
//---------------------------------------------------------------------------
void __fastcall TPzGenPz::SavePz()
{
 //保存ksSP_VoActGenPzApp
  try
  {
  StartWaitForm("正在保存自动生成的凭证,请稍侯...");
  RsVoActModule->Close();
  RsVoActModule->Execute("exec ksSP_VoActGenPzApp");
  }
  __finally
  {
   EndWaitForm();
  }

}

void __fastcall TfrmPzhGen::btnVoNextClick(TObject *Sender)
{
//先得到当前选中的FVoActSelectedList
//根据凭证事物列表生成来源单据视图结构与视图, 先初始化清理
  try
  {
    PzhGenVoucherAct->GetVoActSelectedList(clbVoAct);
   //初始化来源表结构
    RsVoActModule->Close();
    RsVoActModule->Execute("exec ksSP_VoActGenBillInit");
   //如果当前凭证事物
    if((PzhGenVoucherAct->FVoActSelectedList)->Count<=0)
     throw Exception("当前没有凭证事物!");

    pgcVoAct->ActivePage=tsBill;
    sgBill->RowCount=1;
    
    PzhGenVoucherAct->GenVoActBill(sgBill);

        //当前单据表没有记录
    if(!sgBill->RowCount>1)
       btnBillNext->Enabled=false;
    else
       btnBillNext->Enabled=true;
  }
  catch(Exception &e)
  { pgcVoAct->ActivePage=tsVoAct;
    throw Exception(e.Message);
  }
 
}
//---------------------------------------------------------------------------

void __fastcall TfrmPzhGen::FormCreate(TObject *Sender)
{
  //pagecontrol的table隐藏
  for (int i=0;i<pgcVoAct->PageCount;i++)
  {
    pgcVoAct->Pages[i]->TabVisible=false;
  }

}
//---------------------------------------------------------------------------


void __fastcall TfrmPzhGen::btnBillNextClick(TObject *Sender)
{
//生成自动凭证到临时表里,先执行生成自动凭证初始化清理
  try
  {

    RsVoActModule->Close();
    RsVoActModule->Execute("exec ksSP_VoActGenPzInit ");

    pgcVoAct->ActivePage=tsPz;
    sgPzh->RowCount=1;
    PzhGenBill->GenPzHeadAndDetail(sgPzh);

  }
  catch(Exception &e)
  {
    pgcVoAct->ActivePage=tsBill;
    throw Exception(e.Message);
  }

}
//---------------------------------------------------------------------------
void __fastcall TfrmPzhGen::btnNewPzClick(TObject *Sender)
{
//新增,做再次初始化工作
  if(ShowMessageWindow("当前生成的凭证没有保存\n是否要保存?",mwsConfirmation)==IDYES)
  {
    try
    {
     PzGenPz->SavePz();//save

    }
    catch(Exception &e)
    {
      throw Exception(e.Message);
    }
  }
   RsVoActModule->Close();
   RsVoActModule->Execute("exec ksSP_VoActGenPzFinalize");
   RsVoActModule->Close();
   RsVoActModule->Execute("exec ksSP_VoActGenBillFinalize");
   RsVoActModule->Close();
   RsVoActModule->Execute("exec ksSP_VoActGenBillInit"); //再次初始化
   frmPzhGen->FormShow(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TPzhGenVoucherAct::GetVoActSelectedList(TCheckListBox *clbValue)
{
  //得到当前控件bool Checked[int Index]中的index值,据相同的index在FVoActList里找到当前的代码加入到FVoActSelectedList
  FVoActSelectedList->Clear();
  for (int i=0;i<clbValue->Items->Count;i++)
  {
    if(clbValue->Checked[i]==true)
    {
     FVoActSelectedList->Add(FVoActList->Strings[i]);
    }
  }
}
//---------------------------------------------------------------------------
void __fastcall TPzhGenBill::GenPzHeadAndDetail(TSDGrid *GridValue)
{
  //执行存储过程ksSP_BillGenPz从生成的来源单据数据视图生成自动凭证到临时表ksPzhTemp,ksPzdTemp里
  AnsiString curUserCode,GridItemStr;
  curUserCode=g_sdUserCode;
  try
  {
     StartWaitForm("正在生成自动凭证,请稍候...");
      try
      {
        RsVoActModule->Close();
        RsVoActModule->Execute("exec ksSP_BillGenPz "+curUserCode);
      }
      catch(Exception &e)
      {
        throw Exception(e.Message);
      }

 //清空来源单据GRID 
  GridValue->RowCount=1;
 //填充GRID,从生成的凭证临时表ksPzhTemp里取数据
    RsVoActModule->Close();
    RsVoActModule->Open("select * from ksPzhTemp","");
    RsVoActModule->MoveFirst();
    for(int i=0;i<RsVoActModule->RecordCount;i++)
    {
      GridItemStr=RsVoActModule->FieldByName("PzhCode")+"\t"
        +RsVoActModule->FieldByName("PzhFvct")+"\t"
        +RsVoActModule->FieldByName("PzhDocType")+"\t"
        +RsVoActModule->FieldByName("PzhBillCode")+"\t"
        +RsVoActModule->FieldByName("PzhFmonth")+"\t"
        +RsVoActModule->FieldByName("PzhUser")+"\t"
        +RsVoActModule->FieldByName("PzhDate");

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?