workplan.cpp
来自「一个以前收集的基于C/S架构的ERP客户端源代码」· C++ 代码 · 共 363 行
CPP
363 行
//---------------------------------------------------------------------------
#include <vcl.h>
#include "WorkPlan.h"
#include "FacDate.h"
//---------------------------------------------------------------------------
#pragma hdrstop
#pragma package(smart_init)
#pragma link "fpanel"
#pragma link "RecBaseForm"
#pragma link "SDEdit"
#pragma link "SDGrid"
#pragma link "SDComboBox"
#pragma resource "*.dfm"
TfrmWorkPlan *frmWorkPlan;
//---------------------------------------------------------------------------
__fastcall TfrmWorkPlan::TfrmWorkPlan(TComponent* Owner, HWND chWnd, AnsiString MidCode,AnsiString WhereStr)
: TRecBaseForm(Owner,chWnd,MidCode,WhereStr)
{
IsUserGernerate=true;
seWorkManCode->Text="";
seSectName->Text="";
}
//---------------------------------------------------------------------------
void __fastcall TfrmWorkPlan::ClearControl(bool BringToNext)
{
//清除编辑构件内容
if(!BringToNext)
{
seWorkPlanFmonth->Text=""; //财务月份
seWorkPlanDate->Text=""; //工作日期
seWorkPlanEmployee->Text=""; //员工编码
seWorkPlanSect->Text=""; //班制
seWorkPlanQty->Text=""; //累计时间
meWorkPlanDesc->Text=""; //备注
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmWorkPlan::InitEditControl()
{
//初始化构件在增加 修改 浏览时的属性 false -可编辑 true -不可编辑
ClientGroup->AddComponent(2,false,false,true,FloatPanel1,FloatPanel1->Name);
ClientGroup->AddComponent(2,true,true,false,sgWorkPlan,sgWorkPlan->Name);
}
//---------------------------------------------------------------------------
void __fastcall TfrmWorkPlan::WaitUserInput()
{
//设置焦点构件
seWorkPlanFmonth->SetFocus(); //财务月份
}
//---------------------------------------------------------------------------
void __fastcall TfrmWorkPlan::GetDataFromComObject()
{
//得到数据填充编辑构件
seWorkPlanFmonth->Text=GetFieldValue("WorkPlanFmonth"); //财务月份
sgWorkPlan->LocateGrid(1,seWorkPlanFmonth->Text);
seWorkPlanDate->Text=GetFieldValue("WorkPlanDate"); //工作日期
seWorkPlanEmployee->Text=GetFieldValue("WorkPlanEmployee"); //员工编码
seWorkPlanSect->Text=GetFieldValue("WorkPlanSect"); //班制
seWorkPlanQty->Text=GetFieldValue("WorkPlanQty"); //累计时间
meWorkPlanDesc->Text=GetFieldValue("WorkPlanDesc"); //备注
}
//---------------------------------------------------------------------------
void __fastcall TfrmWorkPlan::SendDataToComObject()
{
//发送数据
SetFieldValue("WorkPlanFmonth",seWorkPlanFmonth->Text); //财务月份
SetFieldValue("WorkPlanDate",seWorkPlanDate->Text); //工作日期
SetFieldValue("WorkPlanEmployee",seWorkPlanEmployee->Text); //员工编码
SetFieldValue("WorkPlanSect",seWorkPlanSect->Text); //班制
SetFieldValue("WorkPlanQty",seWorkPlanQty->Text); //累计时间
SetFieldValue("WorkPlanDesc",meWorkPlanDesc->Text); //备注
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmWorkPlan::GetDataToGrid()
{
//组成网格行数据
AnsiString s="";
s+=GetFieldValue("WorkPlanFmonth");//财务月份
s+="\t"+GetFieldValue("WorkPlanDate"); //工作日期
s+="\t"+GetFieldValue("WorkPlanEmployee"); //员工编码
s+="\t"+GetFieldValue("WorkPlanSect"); //班制
s+="\t"+GetFieldValue("WorkPlanQty"); //累计时间
s+="\t"+GetFieldValue("WorkPlanDesc"); //备注
return(s);
}
//---------------------------------------------------------------------------
void __fastcall TfrmWorkPlan::RefreshGridData(int mAction)
{
//刷新网格数据
AnsiString ItemStr;
ItemStr = GetDataToGrid();
if (mAction == 0) //Add
{
sgWorkPlan->AddItem(ItemStr);
}
else if(mAction == 1) //Edit
{
int i = sgWorkPlan->Row;
sgWorkPlan->RemoveItem(i);
sgWorkPlan->AddItem(ItemStr,i);
}
else if(mAction == 2) //Del
{
sgWorkPlan->RemoveItem(sgWorkPlan->Row);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmWorkPlan::FillGridWithData()
{
//填充网格
AnsiString ItemStr;
comServer->MoveFirst();
sgWorkPlan->RowCount = 1;
while (comServer->Eof == 0)
{
ItemStr = GetDataToGrid();
sgWorkPlan->AddItem(ItemStr);
comServer->MoveNext();
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmWorkPlan::FormShow(TObject *Sender)
{
FillComboBox(Handle,Fmonth,"Select Distinct Fcmonth from sdFc Order by Fcmonth","Fcmonth");
ClearControl(false);
Fmonth->LocateKey(g_sdMMonth);
FMonthClick(this);
FillGridWithData();
comServer->MoveFirst();
GetDataFromComObject();
}
//---------------------------------------------------------------------------
void __fastcall TfrmWorkPlan::sgWorkPlanClick(TObject *Sender)
{
//定位数据
if (sgWorkPlan->Row > 0)
comServer->LocateByIndex(sgWorkPlan->Row -1);
if (!comServer->Eof)
GetDataFromComObject();
}
//---------------------------------------------------------------------
AnsiString __fastcall TfrmWorkPlan::GetCaleBeginDate()
{
AnsiString CaleBegDate;
TComResultSet *rsCaleBegDate = new TComResultSet(Handle,g_ClientHandle);
rsCaleBegDate->Open("select ParameterValue from sdParameter where ParameterCode='1060101'","");
rsCaleBegDate->MoveFirst();
CaleBegDate = rsCaleBegDate->FieldByName("ParameterValue");
if(CaleBegDate=="")
{
delete rsCaleBegDate;
throw Exception("参数1060101(生产日历的起始日期)的值没有定义或被破坏.");
}
else
{
AnsiString tempD;
tempD=CaleBegDate.SubString(1,4)+CaleBegDate.SubString(6,2);
if(tempD!=g_sdMMonth)
{
delete rsCaleBegDate;
throw Exception("参数1060101(生产日历的起始日期)的值初始化错误.");
}
}
rsCaleBegDate->Close();
delete rsCaleBegDate;
return CaleBegDate;
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmWorkPlan::GetLastday()
{
AnsiString s;
TComResultSet *rsCaleYearMonth = new TComResultSet(Handle,g_ClientHandle);
rsCaleYearMonth->Open(WideString("select IsNull(MAX(WorkPlanDate),'') As YearMonth from KsWorkPlan"),WideString(""));
rsCaleYearMonth->MoveFirst();
s = rsCaleYearMonth->FieldByName("YearMonth");
rsCaleYearMonth->Close();
if(Trim(s)=="")
s=GetCaleBeginDate();
delete rsCaleYearMonth;
return s;
}
//---------------------------------------------------------------------------
void __fastcall TfrmWorkPlan::FMonthClick(TObject *Sender)
{
AnsiString pFilstr = Trim(Fmonth->Text);
pFilstr = " WorkPlanFmonth='" + pFilstr +"' ";
comServer->FilterString=pFilstr;
comServer->Query();
if(comServer->RecordCount>0)
{
tbAddHead->Visible=false;
FillGridWithData();
comServer->MoveFirst();
GetDataFromComObject();
}
else
{
tbAddHead->Visible=true;
ClearControl(false);
sgWorkPlan->RowCount=1;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmWorkPlan::seWorkManCodeButtonClick(TObject *Sender)
{
AnsiString SqlStr;
TfrmWnQuery *p;
SqlStr="003[员工代码][员工名称][员工部门]select Employeecode, Employeename,EmployeeDept from sdEmployee order by Employeecode ";
try{
StartWaitForm("正在查询,请稍候...");
p=new TfrmWnQuery(this,"员工资料查询",SqlStr);
}
__finally
{
EndWaitForm();
}
if(p->ShowModal()==mrOk)
{
seWorkManCode->Text=(p->ColData[1]);
}
delete p;
}
//---------------------------------------------------------------------------
void __fastcall TfrmWorkPlan::tbGenrateClick(TObject *Sender)
{
if(seWorkManCode->Text=="")
{
::MessageBox(Handle,"请选择员工编码","操作错误",MB_OK);
return;
}
else
if(seSectName->Text=="")
{
::MessageBox(Handle,"请选择班制","操作错误",MB_OK);
return;
}
AnsiString SelFmonth; //当前选择的财务月份
AnsiString MaxFmonth; //取数据库的最大财务月份
int DayCount; //返回当前财务月份的天数
TDate strDay=StrToDate(Lastday)+1;
SelFmonth=Fmonth->Text;
MaxFmonth=FormatDateTime("YYYYMM",strDay);
if(SelFmonth < g_sdMMonth)
{
AnsiString tempStr="选择的财务月份:'"+SelFmonth+"'不能小于系统财务月份:'"+g_sdMMonth+"'";
::MessageBox(Handle,tempStr.c_str(),"操作错误", MB_OK|MB_ICONSTOP);
return;
}
if(SelFmonth<MaxFmonth)
{
AnsiString tempstr="选择的财务月份:'"+SelFmonth+"'的员工排班已经生成";
::MessageBox(Handle,tempstr.c_str(),"操作错误",MB_OK|MB_ICONSTOP);
return;
}
if(SelFmonth>MaxFmonth)
{
AnsiString tempstr="财务月份:'"+MaxFmonth+"'的员工排班尚未生成";
::MessageBox(Handle,tempstr.c_str(),"操作错误",MB_OK|MB_ICONSTOP);
return;
}
try
{
TPickFacDate *PickFacDate=new TPickFacDate(this);
PickFacDate->Year=StrToInt(FormatDateTime("YYYY",strDay));
PickFacDate->Month=StrToInt(FormatDateTime("MM",strDay));
PickFacDate->YearSpin->Enabled=false;
PickFacDate->MonthSpin->Enabled=false;
PickFacDate->ShowModal();
if(PickFacDate->ModalResult==mrOk)
{
int iYear=PickFacDate->FacYear; //取财务年
int iMonth=StrToInt(Fmonth->Text.SubString(5,2)); //取财务月
DayCount=PickFacDate->Days; //该月的天数
SetControlState(caAddDetail);
TComResultSet *SectResult = new TComResultSet(Handle,g_ClientHandle);
AnsiString KsSqlStr="select WorkSecQty from KsWorkSect where WorkSectname='";
KsSqlStr+=Trim(seSectName->Text)+"'";
SectResult->Open(KsSqlStr,"");
SectResult->MoveFirst();
AnsiString WorkPlanQty;
WorkPlanQty=SectResult->FieldByName(AnsiString("WorkSecQty"));
SectResult->Close();
delete SectResult ;
for(int i=0;i<DayCount;i++)
{
int Status=PickFacDate->GetDayStatu(i);
NewComObject();
if(Status==1)
{
SetFieldValue("WorkPlanFmonth",Fmonth->Text);
SetFieldValue("WorkPlanDate",FormatDateTime("YYYY-MM-DD",EncodeDate(iYear,iMonth,i+1)));
SetFieldValue("WorkPlanEmployee",seWorkManCode->Text);
SetFieldValue("WorkPlanSect",seSectName->Text);
SetFieldValue("WorkPlanQty",WorkPlanQty);
SaveComObject();
SetControlState(caSave);
}
FMonthClick(this);
}
}
}
__finally
{
delete PickFacDate;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmWorkPlan::seSectNameButtonClick(TObject *Sender)
{
AnsiString SqlStr;
TfrmWnQuery *p;
SqlStr="002[班制代码][班制名称]select WorkSectCode,WorkSectName from KsWorkSect order by WorkSectCode ";
try{
StartWaitForm("正在查询,请稍候...");
p=new TfrmWnQuery(this,"班制资料查询",SqlStr);
}
__finally
{
EndWaitForm();
}
if(p->ShowModal()==mrOk)
{
seSectName->Text=(p->ColData[2]);
}
delete p;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?