📄 cale.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 + -