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