📄 wage.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Wage.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"
TfrmWage *frmWage;
//---------------------------------------------------------------------------
__fastcall TfrmWage::TfrmWage(TComponent* Owner)
: TRecBaseForm(Owner,euSdWage,"")
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmWage::GetDataFromComObject()
{
scWageEmployee->LocateKey(GetFieldValue(fiWageEmployee));
// scWageEmployee->Text=scWageEmployee->ItemData[cbItem1];
seWageFix->Text = GetFieldValue(fiWageFix);
seWageAnce->Text = GetFieldValue(fiWageAnce);
seWageOther->Text = GetFieldValue(fiWageOther);
seWageBorus->Text = GetFieldValue(fiWageBorus);
seWagePiece->Text = GetFieldValue(fiWagePiece);
seWageLab->Text = GetFieldValue(fiWageLab);
seWageTax->Text = GetFieldValue(fiWageTax);
lbWageSum->Caption =GetFieldValue(fiWageSum);
SpCopy->Enabled=false;
tbDuplic->Enabled=true;
sgWage->LocateGrid(1,GetFieldValue(fiWageEmployee));
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmWage::GetFieldValue(int FieldIndex)
{
WideString S;
S = ReadFieldValue(comServer,FieldIndex);
return(S);
}
//---------------------------------------------------------------------------
void __fastcall TfrmWage::ClearControl(bool BringToNext)
{
// BringToNext为真时,不清空
if(BringToNext)
return;
scWageEmployee->ItemIndex=-1;
seWageFix->Text = "0";
seWageAnce->Text = "0";
seWageOther->Text = "0";
seWageBorus->Text = "0";
seWagePiece->Text = "0";
seWageLab->Text = "0";
seWageTax->Text = "0";
lbWageSum->Caption="0";
}
//---------------------------------------------------------------------------
void __fastcall TfrmWage::SendDataToComObject()
{
EditIsEmptyToZero(FloatPanel1);
WriteFieldValue(comServer,fiWageFmonth,WideString(cbWageFmonth->Text));
WriteFieldValue(comServer,fiWageEmployee,WideString(scWageEmployee->ItemData[cbItem2]));
WriteFieldValue(comServer,fiWageFix,WideString(seWageFix->Text));
WriteFieldValue(comServer,fiWageAnce,WideString(seWageAnce->Text));
WriteFieldValue(comServer,fiWageOther,WideString(seWageOther->Text));
WriteFieldValue(comServer,fiWageBorus,WideString(seWageBorus->Text));
WriteFieldValue(comServer,fiWagePiece,WideString(seWagePiece->Text));
WriteFieldValue(comServer,fiWageLab,WideString(seWageLab->Text));
WriteFieldValue(comServer,fiWageTax,WideString(seWageTax->Text));
}
//---------------------------------------------------------------------------
void __fastcall TfrmWage::WaitUserInput()
{
if(CurrentState==caAddDetail)
scWageEmployee->SetFocus();
else
seWageFix->SetFocus();
SpCopy->Enabled=true;
tbDuplic->Enabled=false;
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmWage::GetDataToGrid()
{
AnsiString s;
s = "\t" + GetFieldValue(fiWageEmployee)+"\t" + GetFieldValue(fiWageSum)+
"\t" + GetFieldValue(fiWageFix)+"\t" + GetFieldValue(fiWageBorus)+
"\t" + GetFieldValue(fiWageAnce)+"\t" + GetFieldValue(fiWageOther)+
"\t" + GetFieldValue(fiWagePiece)+"\t" + GetFieldValue(fiWageLab)+
"\t" + GetFieldValue(fiWageTax);
return(s);
}
//---------------------------------------------------------------------------
void __fastcall TfrmWage::RefreshGridData(int mAction)
{
AnsiString ItemStr;
ItemStr = GetDataToGrid();
// 新增
if (mAction == 0)
{
sgWage->AddItem(ItemStr);
sgWage->Row=sgWage->RowCount-1;
}
// 修改
else if(mAction == 1)
{
sgWage->ChangeItem(ItemStr,sgWage->Row);
}
// 删除
else if(mAction == 2)
{
sgWage->RemoveItem(sgWage->Row);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmWage::FillGridWithData()
{
AnsiString ItemStr;
comServer->MoveFirst();
sgWage->RowCount = 1;
while (comServer->Eof == 0)
{
ItemStr = GetDataToGrid();
sgWage->AddItem(ItemStr);
comServer->MoveNext();
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmWage::InitEditControl()
{
ClientGroup->AddComponent(2,true,true,false, sgWage,sgWage->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(cbWageFmonth,"select FcMonth from sdfc ","FcMonth");
FillComboBox(scWageEmployee,"Select Employee=EmployeeCode+'|'+EmployeeName,EmployeeCode from sdEmployee","Employee","EmployeeCode");
}
//---------------------------------------------------------------------------
void __fastcall TfrmWage::cbWageFmonthClick(TObject *Sender)
{
if(cbWageFmonth->Text!=FmonthValue)
{
if(cbWageFmonth->LocateKey(cbWageFmonth->Text))
{
WideString s;
s = "WageFmonth= '" + cbWageFmonth->Text + "'";
comServer->FilterString = 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 TfrmWage::SetFmonthValue(AnsiString value)
{
if(FFmonthValue != value) {
FFmonthValue = value;
}
}
AnsiString __fastcall TfrmWage::GetFmonthValue()
{
return FFmonthValue;
}
void __fastcall TfrmWage::FormShow(TObject *Sender)
{
ClearControl(false);
cbWageFmonth->LocateKey(g_sdHMonth);
cbWageFmonthClick(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TfrmWage::tbDuplicClick(TObject *Sender)
{
try{
TfrmWageDuplic *frmWageDuplic= new TfrmWageDuplic(this);
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();
}
sgWage->RowCount=1;
for(int i=0;i<frmWageDuplic->comServer->RecordCount;i++)
{
frmWageDuplic->comServer->LocateByIndex(i);
comServer->AddNew();
WriteFieldValue(comServer,fiWageFmonth,WideString(cbWageFmonth->Text));
WriteFieldValue(comServer,fiWageEmployee,WideString(frmWageDuplic->GetFieldValue(fiWageEmployee)));
WriteFieldValue(comServer,fiWageFix,WideString(frmWageDuplic->GetFieldValue(fiWageFix)));
WriteFieldValue(comServer,fiWageAnce,WideString(frmWageDuplic->GetFieldValue(fiWageAnce)));
WriteFieldValue(comServer,fiWageOther,WideString(frmWageDuplic->GetFieldValue(fiWageOther)));
WriteFieldValue(comServer,fiWageBorus,WideString(frmWageDuplic->GetFieldValue(fiWageBorus)));
WriteFieldValue(comServer,fiWagePiece,WideString(frmWageDuplic->GetFieldValue(fiWagePiece)));
WriteFieldValue(comServer,fiWageLab,WideString(frmWageDuplic->GetFieldValue(fiWageLab)));
WriteFieldValue(comServer,fiWageTax,WideString(frmWageDuplic->GetFieldValue(fiWageTax)));
comServer->Post();
RefreshGridData(0);
}
}
else
ShowMessage("没有可复制的记录!");
}
}
__finally
{
delete frmWageDuplic;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmWage::SpCopyClick(TObject *Sender)
{
try{
TfrmWageCopy *frmWageCopy= new TfrmWageCopy(this);
frmWageCopy->ShowModal();
if(frmWageCopy->ModalResult==mrOk)
{
frmWageCopy->comServer->LocateByKey(WideString(frmWageCopy->scFmonth ->Text+frmWageCopy->sgWage->TextMatrix[frmWageCopy->sgWage->Row][1]));
if(!frmWageCopy->comServer->Eof)
{
seWageFix->Text=frmWageCopy->GetFieldValue(fiWageFix);
seWageAnce->Text=frmWageCopy->GetFieldValue(fiWageAnce);
seWageOther->Text=frmWageCopy->GetFieldValue(fiWageOther);
seWageBorus->Text=frmWageCopy->GetFieldValue(fiWageBorus);
seWagePiece->Text=frmWageCopy->GetFieldValue(fiWagePiece);
seWageLab->Text=frmWageCopy->GetFieldValue(fiWageLab);
seWageTax->Text=frmWageCopy->GetFieldValue(fiWageTax);
lbWageSum->Caption=frmWageCopy->GetFieldValue(fiWageSum);
}
}
}
__finally
{
delete frmWageCopy;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmWage::seWageTaxEnter(TObject *Sender)
{
if(CurrentState!=0)
{
double TaxAmt[8][3],Amt;
int i;
Currency Tax=0;
EditIsEmptyToZero(FloatPanel1);
Amt=seWageFix->Text.ToDouble()+seWageBorus->Text.ToDouble()+seWageAnce->Text.ToDouble()+
seWageOther->Text.ToDouble()+seWagePiece->Text.ToDouble()+seWageLab->Text.ToDouble();
lbWageSum->Caption=AnsiString(Amt);
Amt=Amt-1260; //减去基数1260
if(Amt>0)
{
TaxAmt[0][0]=500;TaxAmt[0][1]=0.05;TaxAmt[0][2]=0;
TaxAmt[1][0]=2000;TaxAmt[1][1]=0.1;TaxAmt[1][2]=25;
TaxAmt[2][0]=5000;TaxAmt[2][1]=0.15;TaxAmt[2][2]=125;
TaxAmt[3][0]=20000;TaxAmt[3][1]=0.2;TaxAmt[3][2]=375;
TaxAmt[4][0]=40000;TaxAmt[4][1]=0.25;TaxAmt[4][2]=1375;
TaxAmt[5][0]=60000;TaxAmt[5][1]=0.3;TaxAmt[5][2]=3375;
TaxAmt[6][0]=80000;TaxAmt[6][1]=0.35;TaxAmt[6][2]=6375;
TaxAmt[7][0]=100000;TaxAmt[7][1]=0.40;TaxAmt[7][2]=10375;
// TaxAmt[8][0]=100000.01;TaxAmt[8][1]=0.45;TaxAmt[8][2]=15375;
if(Amt<=500||Amt>100000)
{
if(Amt>100000)
Tax=Amt*0.45-15375;
else
Tax=Amt*0.05;
}
else
{
for(i=7;i>0;i--)
{
if((TaxAmt[i][0]>Amt)&&(Amt>=TaxAmt[i-1][0]))
{
Tax=Amt*TaxAmt[i][1]-TaxAmt[i][2];
break;
}
}
}
}
seWageTax->Text=AnsiString(Tax);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmWage::sgWageClick(TObject *Sender)
{
if (sgWage->Row > 0)
comServer->LocateByKey(WideString(cbWageFmonth->Text+sgWage->TextMatrix[sgWage->Row][1]));
if (!comServer->Eof)
GetDataFromComObject();
}
//---------------------------------------------------------------------------
void __fastcall TfrmWage::EditIsEmptyToZero(TWinControl* ControlName)
{
for(int i=0;i<ControlName->ControlCount;i++)
{
if(UpperCase((AnsiString)(ControlName->Controls[i])->ClassName())=="TSDEDIT")
{
if((dynamic_cast<TSDEdit *>(ControlName->Controls[i])->Text.IsEmpty())&&(dynamic_cast<TSDEdit *>(ControlName->Controls[i])->DataType==dtNumber))
dynamic_cast<TSDEdit *>(ControlName->Controls[i])->Text="0";
}
}
}
void __fastcall TfrmWage::RefreshUpdateData(int MsgSrc,int MsgType)
{
switch(MsgSrc)
{
case euSdFc:
if(ShowUpdateMessage(MsgSrc,MsgType))
{
KeyCode=cbWageFmonth->ItemData[cbItem2];
FillComboBox(cbWageFmonth,"select FcMonth from sdfc ","FcMonth");
cbWageFmonth->LocateKey(KeyCode);
}
break;
case euSdEmployee:
if(ShowUpdateMessage(MsgSrc,MsgType))
{
KeyCode=scWageEmployee->ItemData[cbItem2];
FillComboBox(scWageEmployee,"Select Employee=EmployeeCode+'|'+EmployeeName,EmployeeCode from sdEmployee","Employee","EmployeeCode");
scWageEmployee->LocateKey(KeyCode);
}
break;
}
}
void __fastcall TfrmWage::scWageEmployeeClick(TObject *Sender)
{
if(CurrentState==caNormal)
{
comServer->LocateByKey(WideString(cbWageFmonth->Text+scWageEmployee->ItemData[cbItem2]));
GetDataFromComObject();
}
}
//---------------------------------------------------------------------------
bool __fastcall TfrmWage::ShowQueryWindow()
{
TfrmQuForm *FQuery=new TfrmQuForm(this,this->Name);
FQuery->ShowModal();
if(FQuery->CancelQuery)
return false;
if(FQuery->CreateSqlString.IsEmpty())
comServer->FilterString=WideString("WageFmonth='"+FmonthValue+"'");
else
comServer->FilterString=WideString(FQuery->CreateSqlString+" and WageFmonth='"+FmonthValue+"'");
delete FQuery;
return true;
}
void __fastcall TfrmWage::SetToolbarEnabled(bool bEnabled)
{
tbAddHead->Enabled=bEnabled;
tbEditHead->Enabled=bEnabled;
tbDeleteHead->Enabled=bEnabled;
tbDuplic->Enabled=bEnabled;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -