⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cale.cpp

📁 科思ERP部分源码及控件
💻 CPP
字号:
//---------------------------------------------------------------------------
#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, HWND chWnd, AnsiString MidCode,AnsiString WhereStr)
        : TRecBaseForm(Owner,chWnd,MidCode,WhereStr)
{
   IsUserGernerate=true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::ClearControl(bool BringToNext)
{
    if(!BringToNext)
    {
      seCaleMonth->Text="";
      seCaleFacDate->Text="0";
      seCaleSocDate->Text="";
      seCaleWeek->Text   ="0";
      if(scCaleStatus->Items->Count>0)
        scCaleStatus->ItemIndex = 0;
      else
        scCaleStatus->ItemIndex = -1;
      seCaleYear->Text   ="";
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::GetDataFromComObject()
{
    AnsiString strStatus;
    seCaleMonth->Text  =GetFieldValue("CaleMonth");
    AnsiString tempS;
    tempS=GetFieldValue("CaleFacDate");
    seCaleFacDate->Text=GetFieldValue("CaleFacDate");
    seCaleSocDate->Text=GetFieldValue("CaleSocDate");
    //MoveFirst,MovePrority,MoveNext,MoveLast
    sgCale->LocateGrid(0,seCaleSocDate->Text);
    strStatus=GetFieldValue("CaleWeek");
    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("CaleYear");
    strStatus=GetFieldValue("CaleStatus");
    if(strStatus=="1")
       scCaleStatus->Text ="1-工作";
    else
    {
      if(strStatus=="2")
        scCaleStatus->Text ="2-停工";
      else
        scCaleStatus->Text ="3-厂休";
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::SendDataToComObject()
{
    AnsiString s;
    SetFieldValue("CaleMonth",seCaleMonth->Text);
    SetFieldValue("CaleFacDate",seCaleFacDate->Text);
    SetFieldValue("CaleSocDate",seCaleSocDate->Text);
    s=Trim(scCaleStatus->Text);
    if(s.AnsiPos("-")>0)
    s=s.SubString(1,1);
    SetFieldValue("CaleStatus",s);
    SetFieldValue("CaleYear",seCaleYear->Text);
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::WaitUserInput()
{
    scCaleStatus->SetFocus();
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmCale::GetDataToGrid()
{
    AnsiString s,strWeek,strStatus;
    s = GetFieldValue("CaleSocDate")+
        "\t" + GetFieldValue("CaleFacDate");
    strWeek=GetFieldValue("CaleWeek");

    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("CaleStatus");
    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)
{
    cbYearMonthClick(this);
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::FillGridWithData()
{
    AnsiString ItemStr;
    comServer->MoveFirst();
    sgCale->RowCount = 1;
    //cbYearMonth->LocateKey(GetFieldValue("CaleMonth"));
    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(Handle,cbYearMonth,"Select Distinct Fcmonth from sdFc Order by Fcmonth","Fcmonth");
    ClearControl(false);
    cbYearMonth->LocateKey(g_sdMMonth);
    cbYearMonthClick(Sender);
}
//---------------------------------------------------------------------------

void __fastcall TfrmCale::RefreshUpdateData(int MsgSrc,int MsgType)
{
/*
    try
    {
       if(MsgSrc==euSdFc)
       {
          if(ShowUpdateMessage(MsgSrc,MsgType))
          {
             AnsiString KeyCode;
             KeyCode=cbYearMonth->ItemData[0];
             StartWaitForm("正在刷新引用数据!");
             FillComboBox(Handle,cbYearMonth,"Select distinct Fcmonth from sdFc Order by Fcmonth","Fcmonth");
             cbYearMonth->LocateKey(KeyCode);
             EndWaitForm();
          }
       }
    }
    catch(Exception &e)
    {
       throw Exception(e.Message);
    }
*/
}
//---------------------------------------------------------------------

AnsiString __fastcall TfrmCale::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 TfrmCale::GetLastday()
{
    AnsiString s;
    TComResultSet *rsCaleYearMonth = new  TComResultSet(Handle,g_ClientHandle);
    rsCaleYearMonth->Open(WideString("select IsNull(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 = new  TComResultSet(Handle,g_ClientHandle);
    s="select IsNull(MAX(CaleFacDate),0) 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)
    {
       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(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("CaleFacDate",IntToStr(++FacDate));
           else
              SetFieldValue("CaleFacDate",IntToStr(FacDate));
           SetFieldValue("CaleMonth",cbYearMonth->Text);
           SetFieldValue("CaleSocDate",FormatDateTime("YYYY-MM-DD",EncodeDate(iYear,iMonth,i+1)));
           SetFieldValue("CaleWeek",IntToStr(DayOfWeek(EncodeDate(iYear,iMonth,i+1))));
           SetFieldValue("CaleStatus",IntToStr(Status));
           SetFieldValue("CaleYear",IntToStr(iYear));
           SaveComObject();
           SetControlState(caSave);
        }
        cbYearMonthClick(this);
      }
    }
    __finally
    {
      delete PickFacDate;
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::sgCaleClick(TObject *Sender)
{
    int ARow;
    ARow=sgCale->Row;
    if(ARow > 0)
      comServer->LocateByKey(Trim(sgCale->TextMatrix[ARow][0]));
    if(!comServer->Eof)
      GetDataFromComObject();
}
//---------------------------------------------------------------------------
void __fastcall TfrmCale::cbYearMonthClick(TObject *Sender)
{
    AnsiString pFilstr = Trim(cbYearMonth->Text);
    pFilstr = " CaleMonth='" + pFilstr +"' ";
    comServer->FilterString=pFilstr;
    comServer->Query();
    if(comServer->RecordCount>0)
    {
       tbAddHead->Visible=false;
       FillGridWithData();
       comServer->MoveFirst();
       GetDataFromComObject();
    }
    else
    {
       tbAddHead->Visible=true;
       ClearControl(false);
       sgCale->RowCount=1;
    }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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