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