cale.cpp

来自「速达开源ERP系统」· C++ 代码 · 共 345 行

CPP
345
字号
//---------------------------------------------------------------------------
#include <vcl.h>
#include "Cale.h"
#include "FacDate.h"
//---------------------------------------------------------------------------
#pragma hdrstop
#pragma package(smart_init)
#pragma link "DateEdit"
#pragma link "fpanel"
#pragma link "RecBaseForm"
#pragma link "SDComboBox"
#pragma link "SDEdit"
#pragma link "SDGrid"
#pragma resource "*.dfm"

TfrmCale *frmCale;
//---------------------------------------------------------------------------
__fastcall TfrmCale::TfrmCale(TComponent* Owner)
        : TRecBaseForm(Owner,euSdCale,"")
{
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmCale::GetFieldValue(int FieldIndex)
{
    return ReadFieldValue(comServer,FieldIndex);
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::SetFieldValue(int iFieldIndex,AnsiString sFieldValue)
{
    WriteFieldValue(comServer,iFieldIndex,sFieldValue);
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::ClearControl(bool BringToNext)
{
    if(!BringToNext)
    {
      seCaleMonth->Text  ="";
      seCaleFacDate->Text="0";
      seCaleSocDate->Text="";
      seCaleWeek->Text   ="0";
      scCaleStatus->Text ="0";
      seCaleYear->Text   ="";
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::GetDataFromComObject()
{
      AnsiString strStatus;
      seCaleMonth->Text  =GetFieldValue(fiCaleMonth);
      seCaleFacDate->Text=GetFieldValue(fiCaleFacDate);
      seCaleSocDate->Text=GetFieldValue(fiCaleSocDate);
      //MoveFirst,MovePrority,MoveNext,MoveLast
      sgCale->LocateGrid(0,seCaleSocDate->Text);
      strStatus=GetFieldValue(fiCaleWeek);
      switch(StrToInt(strStatus))
      {
        case 1:
            seCaleWeek->Text   ="日";
            break;
        case 2:
            seCaleWeek->Text   ="一";
            break;
        case 3:
             seCaleWeek->Text  ="二";
             break;
        case 4:
             seCaleWeek->Text  ="三";
             break;
        case 5:
             seCaleWeek->Text  ="四";
             break;
        case 6:
            seCaleWeek->Text   ="五";
            break;
        case 7:
            seCaleWeek->Text   ="六";
            break;
      }
      seCaleYear->Text = GetFieldValue(fiCaleYear);
      strStatus=GetFieldValue(fiCaleStatus);
      if(strStatus=="1")
         scCaleStatus->Text ="1-工作";
      else
        {
        if(strStatus=="2")
           scCaleStatus->Text ="2-停工";
        else
           scCaleStatus->Text ="3-厂休";
        }
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::SendDataToComObject()
{
    AnsiString s;
    SetFieldValue(fiCaleMonth,seCaleMonth->Text);
    SetFieldValue(fiCaleFacDate,seCaleFacDate->Text);
    SetFieldValue(fiCaleSocDate,seCaleSocDate->Text);
    s=Trim(scCaleStatus->Text);
    if(s.AnsiPos("-")>0)
    s=s.SubString(1,1);
    SetFieldValue(fiCaleStatus,s);
    SetFieldValue(fiCaleYear,seCaleYear->Text);
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::WaitUserInput()
{
    scCaleStatus->SetFocus();
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmCale::GetDataToGrid()
{
    AnsiString s,strWeek,strStatus;
    s = GetFieldValue(fiCaleSocDate)+
        "\t" + GetFieldValue(fiCaleFacDate);
    strWeek=GetFieldValue(fiCaleWeek);

    switch(StrToInt(strWeek))
    {
      case 1:
          s=s+"\t"+"日";
          break;
      case 2:
          s=s+"\t"+"一";
          break;
      case 3:
          s=s+"\t"+"二";
          break;
      case 4:
          s=s+"\t"+"三";
          break;
      case 5:
          s=s+"\t"+"四";
          break;
      case 6:
          s=s+"\t"+"五";
          break;
      case 7:
          s=s+"\t"+"六";
          break;
    }

    strStatus=GetFieldValue(fiCaleStatus);
    if(strStatus=="1")
       s=s+"\t"+"工作";
    else
    {
     if(strStatus=="2")
       s=s+"\t"+"停工";
    else
       s=s+"\t"+"厂休";
    }
    return(s);
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::RefreshGridData(int mAction)
{
    cbYearMonthChange(this);
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::FillGridWithData()
{
    AnsiString ItemStr;
    comServer->MoveFirst();
    sgCale->RowCount = 1;

    while(comServer->Eof == 0)
    {
        ItemStr = GetDataToGrid();
        sgCale->AddItem(ItemStr);
        comServer->MoveNext();
     }
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::InitEditControl()
{
    ClientGroup->AddComponent(2,true,true,true,seCaleMonth,seCaleMonth->Name);
    ClientGroup->AddComponent(2,true,true,true,seCaleFacDate,seCaleFacDate->Name);
    ClientGroup->AddComponent(2,true,true,true,seCaleSocDate,seCaleSocDate->Name);
    ClientGroup->AddComponent(2,true,true,true,seCaleWeek,seCaleWeek->Name);
    ClientGroup->AddComponent(2,true,false,true,scCaleStatus,scCaleStatus->Name);
    ClientGroup->AddComponent(2,true,true,true,seCaleYear,seCaleYear->Name);
    ClientGroup->AddComponent(2,true,true,false,cbYearMonth,cbYearMonth->Name);
    ClientGroup->AddComponent(2,true,true,false,sgCale,sgCale->Name);
}
//---------------------------------------------------------------------------

void __fastcall TfrmCale::FormShow(TObject *Sender)
{
    FillComboBox(cbYearMonth,"Select Distinct Fcmonth from sdFc Order by Fcmonth","Fcmonth");
    ClearControl(false);
    cbYearMonth->ItemIndex=0;
    cbYearMonthChange(Sender);
}
//---------------------------------------------------------------------------

void __fastcall TfrmCale::RefreshUpdateData(int MsgSrc,int MsgType)
{
    try
    {
       if(MsgSrc==euSdFc)
       {
          if(ShowUpdateMessage(MsgSrc,MsgType)){
             StartWaitForm("正在刷新引用数据!");
             FillComboBox(cbYearMonth,"Select Distinct Fcmonth from sdFc Order by Fcmonth","Fcmonth");
             EndWaitForm();
          }
       }
    }
    __finally
    {
       //AddCode;
    }
}
//---------------------------------------------------------------------

void __fastcall TfrmCale::cbYearMonthChange(TObject *Sender)
{
    AnsiString s = Trim(cbYearMonth->Text);
    s = " CaleMonth='" + s +"' ";
    comServer->FilterString =WideString(s);
    comServer->Query();
    if(comServer->RecordCount>0)
       tbAddHead->Visible=false;
    else
       tbAddHead->Visible=true;
    FillGridWithData();
    comServer->MoveFirst();
    GetDataFromComObject();
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmCale::GetCaleBeginDate()
{
    AnsiString CaleBegDate;
    TComResultSet *rsCaleBegDate = NewResultSet();

    rsCaleBegDate->Open("select ParameterValue from sdParameter where ParameterCode='1060101'","");
    rsCaleBegDate->MoveFirst();
    CaleBegDate = rsCaleBegDate->FieldByName("ParameterValue");
    rsCaleBegDate->Close();
    delete rsCaleBegDate;
    return CaleBegDate;
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmCale::GetLastday()
{
    AnsiString s;
    TComResultSet *rsCaleYearMonth = NewResultSet();
    rsCaleYearMonth->Open(WideString("select MAX(CaleSocDate) As YearMonth from sdCale"),WideString(""));
    rsCaleYearMonth->MoveFirst();
    s = rsCaleYearMonth->FieldByName("YearMonth");
    rsCaleYearMonth->Close();
    if(Trim(s)=="")
       s=GetCaleBeginDate();
    delete rsCaleYearMonth;
    return s;
}
//---------------------------------------------------------------------------
int __fastcall TfrmCale::GetLastFacDate(AnsiString LastDay)
{
    AnsiString s;
    TComResultSet *rsFacDate = NewResultSet();
    s="select MAX(CaleFacDate) As FacDate from sdCale where CaleSocDate<='"+LastDay+"'";
    rsFacDate->Open(s,"");
    rsFacDate->MoveFirst();
    s = rsFacDate->FieldByName("FacDate");
    rsFacDate->Close();
    if(s.IsEmpty())
       return 0;
    delete rsFacDate;
    return StrToInt(s);
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::muAddDetailClick(TObject *Sender)
{
    AnsiString SelFmonth; //当前选择的财务月份
    AnsiString MaxFmonth; //取数据库的最大财务月份
    int DayCount;         //返回当前财务月份的天数
    TDate strDay=StrToDate(Lastday)+1;

    SelFmonth=cbYearMonth->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 || SelFmonth<MaxFmonth)
    {
       AnsiString tempstr="财务月份:'"+MaxFmonth+"'的制造日历未生成,\n当前选择的财务月份:'"+SelFmonth+"'不能大于和小于'"+MaxFmonth+"'!";
       ::MessageBox(Handle,tempstr.c_str(),"操作错误",MB_OK|MB_ICONSTOP);
       return;
    }
    try
    {
      TPickFacDate *PickFacDate=new TPickFacDate(this);
      PickFacDate->YearSpin->Value=StrToInt(FormatDateTime("YYYY",strDay));
      PickFacDate->MonthSpin->Value=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(cbYearMonth->Text.SubString(5,2));
        int FacDate=GetLastFacDate(Lastday);   //查询最大生产日期
        DayCount=PickFacDate->Days;
        SetControlState(caAddDetail);
        for(int i=0;i<DayCount;i++)
        {
           int Status=PickFacDate->GetDayStatu(i);
           NewComObject();
           if(Status==1)
              SetFieldValue(fiCaleFacDate,IntToStr(++FacDate));
           else
              SetFieldValue(fiCaleFacDate,IntToStr(FacDate));
           SetFieldValue(fiCaleMonth,cbYearMonth->Text);
           SetFieldValue(fiCaleSocDate,FormatDateTime("YYYY-MM-DD",EncodeDate(iYear,iMonth,i+1)));
           SetFieldValue(fiCaleWeek,IntToStr(DayOfWeek(EncodeDate(iYear,iMonth,i+1))));
           SetFieldValue(fiCaleStatus,IntToStr(Status));
           SetFieldValue(fiCaleYear,IntToStr(iYear));
           SaveComObject();
           SetControlState(caSave);
        }
        cbYearMonthChange(this);
      }
    }
    __finally
    {
      delete PickFacDate;
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::sgCaleClick(TObject *Sender)
{
    int ARow;
    ARow=sgCale->Row;
    if(ARow > 0)
      comServer->LocateByKey(WideString(sgCale->TextMatrix[ARow][0]));
    if(!comServer->Eof)
      GetDataFromComObject();
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?