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