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 + -
显示快捷键?