wageinput.cpp
来自「一个以前收集的基于C/S架构的ERP客户端源代码」· C++ 代码 · 共 676 行 · 第 1/2 页
CPP
676 行
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "WageInput.h"
#include "wageDuplic.h"
#include "WageCopy.h"
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "fpanel"
#pragma link "RecBaseForm"
#pragma link "SDGrid"
#pragma link "SDEdit"
#pragma link "SDComboBox"
#pragma resource "*.dfm"
TfrmWageInput *frmWageInput;
//---------------------------------------------------------------------------
__fastcall TfrmWageInput::TfrmWageInput(TComponent* Owner, HWND chWnd, AnsiString MidCode,AnsiString WhereStr)
: TRecBaseForm(Owner,chWnd,MidCode,WhereStr)
{
iMidCode=MidCode;
tbAddHead->Enabled=false;
TComResultSet *RsQuery;
AnsiString ItemStr,sSql;
sSql="select WageItemCode,WageItemName,WageItemFormula,WageItemInPut from kswageitem order by WageItemNO"; //取Head查询的SQL语句
RsQuery=new TComResultSet(Handle,g_ClientHandle);
RsQuery->Open(sSql,"");
RsQuery->MoveFirst();
fi_countG = RsQuery->RecordCount ;
Formula_n="";
for (i=0;i<fi_countG;i++)
{
m_WItemG[i].Code=RsQuery->FieldByName("WageItemCode");
m_WItemG[i].Name=RsQuery->FieldByName("WageItemName") ;
m_WItemG[i].Formula=RsQuery->FieldByName("WageItemFormula");
m_WItemG[i].InputYN=StrToInt(RsQuery->FieldByName("WageItemInPut"));
Formula_n=Formula_n+m_WItemG[i].Code+",";
RsQuery->MoveNext();
}
//公式运算的先后顺序
Expression = new TExpression();
AnsiString WageItemC;
bool goYN=true;
int i1,i2,Poswagei;
while (goYN)
{
goYN=false;
for (i=0;i<fi_countG;i++)
{
if (m_WItemG[i].InputYN!=1)
{
goYN=true;
if (m_WItemG[i].Formula!=NULL && m_WItemG[i].Formula!="")
{
for (i2=0;i2<30;i2++) m_ForWitem[i2]=""; //拆分公式
mForcount=0;
Expression->OnIsVariable = FoVariable;
Expression->ChangeExpression(m_WItemG[i].Formula);
for (i2=0;i2<30;i2++)
{
if (m_ForWitem[i2]=="")
{
m_WItemG[i].InputYN=1;
break;
}
for (i1=0;i1<fi_countG;i1++)
if (m_WItemG[i1].Code == m_ForWitem[i2]) break;
if (m_WItemG[i1].InputYN!=1) //公式内含有需计算的项目
{
goYN=true;
break;
}
else //替换公式
{
if (m_WItemG[i1].Formula!=NULL && m_WItemG[i1].Formula!="")
{
Poswagei=m_WItemG[i].Formula.Pos(m_ForWitem[i2]);
m_WItemG[i].Formula.Delete(Poswagei,m_ForWitem[i2].Length());
m_WItemG[i].Formula.Insert("("+m_WItemG[i1].Formula+")",Poswagei);
//m_WItemG[i].Formula=m_WItemG[i1].Formula m_ForWitem[i2]
}
}
}
/* WageItemC = m_WItemG[i].Code;
for (i1=i+1;i1<fi_countG;i1++)
{
if (m_WItemG[i1].Formula!=NULL && m_WItemG[i1].Formula!="")
{
if (m_WItemG[i1].Formula.Pos(WageItemC)>0) //&&
{
}
}
}
*/
}
else
throw Exception("计算项目的公式不能为空,公式定义错误,请重新定义!");
}
}
}
delete Expression;
//公式运算的先后顺序完毕
sgWageInput->ColCount = fi_countG + 2; // 1 for employeecode
for (i=2;i<=fi_countG+1;i++)
sgWageInput->Columns->Items[i]->TitleString= m_WItemG[i-2].Name ;
RsQuery->Close();
sSql="select WageItemCode,WageItemName from KsWageItem where WageItemInPut=1 order by WageItemNO"; //取Head查询的SQL语句
RsQuery=new TComResultSet(Handle,g_ClientHandle);
RsQuery->Open(sSql,"");
RsQuery->MoveFirst();
fi_countF = RsQuery->RecordCount ;
for (i=0;i<fi_countF;i++)
{
m_WItemF[i].Code=RsQuery->FieldByName("WageItemCode");
m_WItemF[i].Name=RsQuery->FieldByName("WageItemName") ;
RsQuery->MoveNext();
}
RsQuery->Close();
for (i=0;i<fi_countF;i++)
{
((TLabel *)(FindComponent("Label"+IntToStr(i+8))))->Visible = true;
((TSDEdit *)(FindComponent("seWageItem"+IntToStr(i+1))))->Visible = true;
((TLabel *)(FindComponent("Label"+IntToStr(i+8))))->Caption = m_WItemF[i].Name + ":";
if (i>3 && i<=9)
{
// ((TLabel *)(FindComponent("Label"+IntToStr(i+8))))->Left = 77 - m_WItemF[i].Name.Length()-2;
}
else if (i>9 && i<=20)
{
}
else
{
}
}
}
//---------------------------------------------------------------------------
bool __fastcall TfrmWageInput::FoVariable(AnsiString Variable)
{
// GetFoVariable(Variable);
m_ForWitem[mForcount]=Variable;
mForcount++;
return true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmWageInput::GetDataFromComObject()
{
scWageEmployee->LocateKey(GetFieldValue("WageEmployee"));
// scWageEmployee->Text=scWageEmployee->ItemData[cbItem1];
scWageEmployee->Text=GetFieldValue("WageEmployee");
for (i=0;i<fi_countF;i++)
((TSDEdit *)(FindComponent("seWageItem"+IntToStr(i+1))))->Text = GetFieldValue(m_WItemF[i].Code);
SpCopy->Enabled=false;
tbDuplic->Enabled=true;
sgWageInput->LocateGrid(1,GetFieldValue("WageEmployee"));
}
//---------------------------------------------------------------------------
void __fastcall TfrmWageInput::ClearControl(bool BringToNext)
{
// BringToNext为真时,不清空
if(BringToNext)
return;
scWageEmployee->ItemIndex=-1;
for (i=0;i<fi_countF;i++)
((TSDEdit *)(FindComponent("seWageItem"+IntToStr(i+1))))->Text = "0";
}
//---------------------------------------------------------------------------
void __fastcall TfrmWageInput::SendDataToComObject()
{
EditIsEmptyToZero(FloatPanel1);
seWageItem4Enter(NULL);
SetFieldValue("WageFmonth",WideString(cbWageFmonth->Text));
SetFieldValue("WageEmployee",WideString(scWageEmployee->Text));
for (i=0;i<fi_countF;i++)
SetFieldValue(m_WItemF[i].Code,WideString(((TSDEdit *)(FindComponent("seWageItem"+IntToStr(i+1))))->Text));
}
//---------------------------------------------------------------------------
void __fastcall TfrmWageInput::WaitUserInput()
{
if(CurrentState==caAddDetail)
scWageEmployee->SetFocus();
else
seWageItem1->SetFocus();
SpCopy->Enabled=true;
tbDuplic->Enabled=false;
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmWageInput::GetDataToGrid()
{
AnsiString s;
s = "\t" + GetFieldValue("WageEmployee");
for (i=0;i<fi_countG;i++)
s = s + "\t" + GetFieldValue(m_WItemG[i].Code);
return(s);
}
//---------------------------------------------------------------------------
void __fastcall TfrmWageInput::RefreshGridData(int mAction)
{
AnsiString ItemStr;
ItemStr = GetDataToGrid();
// 新增
if (mAction == 0)
{
sgWageInput->AddItem(ItemStr);
sgWageInput->Row=sgWageInput->RowCount-1;
}
// 修改
else if(mAction == 1)
{
sgWageInput->ChangeItem(ItemStr,sgWageInput->Row);
}
// 删除
else if(mAction == 2)
{
sgWageInput->RemoveItem(sgWageInput->Row);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmWageInput::FillGridWithData()
{
AnsiString ItemStr;
comServer->MoveFirst();
sgWageInput->RowCount = 1;
while (comServer->Eof == 0)
{
ItemStr = GetDataToGrid();
sgWageInput->AddItem(ItemStr);
comServer->MoveNext();
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmWageInput::InitEditControl()
{
ClientGroup->AddComponent(2,true,true,false, sgWageInput,sgWageInput->Name);
ClientGroup->AddComponent(2,false,false,true, FloatPanel1,FloatPanel1->Name);
ClientGroup->AddComponent(2,true,true,false, FloatPanel2,FloatPanel2->Name);
ClientGroup->AddComponent(2,false,true,false,scWageEmployee,scWageEmployee->Name);
FillComboBox(Handle,cbWageFmonth,"select FcMonth from sdfc ","FcMonth");
FillComboBox(Handle,scWageEmployee,"Select Employee=EmployeeCode+'|'+EmployeeName,EmployeeCode from sdEmployee where EmployeeState <>1 order by EmployeeCode","Employee","EmployeeCode");
}
//---------------------------------------------------------------------------
void __fastcall TfrmWageInput::cbWageFmonthClick(TObject *Sender)
{
if(cbWageFmonth->Text!=FmonthValue)
{
if(cbWageFmonth->LocateKey(cbWageFmonth->Text))
{
WideString s;
s = "WageFmonth= '" + cbWageFmonth->Text + "'";
comServer->FilterString = s;
// comServer->WhereString = s;
comServer->Query();
FillGridWithData();
comServer->MoveFirst();
GetDataFromComObject();
FmonthValue=cbWageFmonth->Text;
}
else
cbWageFmonth->Text=FmonthValue;
}
if(cbWageFmonth->Text<g_sdHMonth)
SetToolbarEnabled(false);
else
SetToolbarEnabled(true);
}
//---------------------------------------------------------------------------
void __fastcall TfrmWageInput::SetFmonthValue(AnsiString value)
{
if(FFmonthValue != value) {
FFmonthValue = value;
}
}
AnsiString __fastcall TfrmWageInput::GetFmonthValue()
{
return FFmonthValue;
}
void __fastcall TfrmWageInput::FormShow(TObject *Sender)
{
ClearControl(false);
cbWageFmonth->LocateKey(g_sdHMonth);
cbWageFmonthClick(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TfrmWageInput::tbDuplicClick(TObject *Sender)
{
try{
TfrmWageDuplic *frmWageDuplic= new TfrmWageDuplic(this,g_ClientHandle,iMidCode,"");
frmWageDuplic->ShowModal();
if(frmWageDuplic->ModalResult==mrOk)
{
frmWageDuplic->comServer->FilterString=WideString("WageFmonth='"+frmWageDuplic->scFmonth->Text+"'");
frmWageDuplic->comServer->Query();
if(frmWageDuplic->comServer->RecordCount>0)
{
comServer->MoveFirst(); //删除当月工资记录
while(!comServer->Eof)
{
comServer->Delete();
}
sgWageInput->RowCount=1;
for(int i=0;i<frmWageDuplic->comServer->RecordCount;i++)
{
frmWageDuplic->comServer->LocateByIndex(i);
comServer->AddNew();
SetFieldValue("WageFmonth",WideString(cbWageFmonth->Text));
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?