📄 labd_t.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include "Labd_T.h"
#include "Labh_T.h"
#include "Func.h"
//---------------------------------------------------------------------------
#pragma hdrstop
#pragma package(smart_init)
#pragma link "fpanel"
#pragma link "SDComboBox"
#pragma link "SDEdit"
#pragma link "SDGrid"
#pragma resource "*.dfm"
TfrmLabd_T *frmLabd_T;
//---------------------------------------------------------------------------
__fastcall TfrmLabd_T::TfrmLabd_T(TComponent* Owner)
: TStdBaseForm(Owner)
{
}
//---------------------------------------------------------------------------
__fastcall TfrmLabd_T::TfrmLabd_T(TComponent* Owner,AnsiString t_ShopCode,AnsiString t_TeamCode)
: TStdBaseForm(Owner)
{
FLabhShop=t_ShopCode;
FLabhTeam=t_TeamCode;
}
//---------------------------------------------------------------------------
void __fastcall TfrmLabd_T::FormShow(TObject *Sender)
{
scLabdDType->ClearAll();
scLabdDType->AddItems("0-手工分配","0");
scLabdDType->AddItems("1-平均分配","1");
FillEdit(seLabdProcess,"SELECT ProcessCode,ProcessName FROM sdProcess order by ProcessCode","ProcessName","ProcessCode");
InitEditControl();
FillDataToGrid();
seLabdWo->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TfrmLabd_T::SetcomServer(TComServer *value)
{
comServer=value;
}
//---------------------------------------------------------------------------
void __fastcall TfrmLabd_T::FillDataToGrid()
{
AnsiString m_SQL,m_STR;
TComResultSet *Rst= NewResultSet();
m_SQL=AnsiString("Select distinct WpeEmployee,EmployeeName from sdWpe,")+
AnsiString("sdEmployee where WpeEmployee=EmployeeCode and WpeShop='"+FLabhShop+"' and WpeTeam='"+FLabhTeam+"' ")+
AnsiString("Order by WpeEmployee");
Rst->Open(m_SQL,"");
Rst->MoveFirst();
sgLabd->RowCount=1;
while(Rst->Eof == 0)
{
m_STR=AnsiString("√")+
"\t"+Rst->FieldByName("WpeEmployee")+
"\t"+Rst->FieldByName("EmployeeName")+
"\t"+AnsiString("0.00");
sgLabd->AddItem(m_STR);
Rst->MoveNext();
}
Rst->Close();
delete Rst;
}
//---------------------------------------------------------------------------
void __fastcall TfrmLabd_T::InitEditControl()
{
seLabdWo->Text="";
seLabdProcess->ItemIndex=-1;
seLabdTime->Text="0.00";
seLabdPrice->Text="0.00";
scLabdDType->ItemIndex=-1;
}
//---------------------------------------------------------------------------
void __fastcall TfrmLabd_T::btCacelClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmLabd_T::scLabdDTypeClick(TObject *Sender)
{
AnsiString tempS;
double totalTime;
totalTime=seLabdTime->Text.ToDouble();
if(totalTime<=0)
throw Exception("团体工时的数量不能小于或等于零!");
tempS=Trim(scLabdDType->Text);
if(scLabdDType->ItemData[1]==1)
{
sgLabd->ReadOnly=true;
AverageTotalTime();
}
else
{
sgLabd->ReadOnly=false;
sgLabd->Options<<goEditing;
sgLabd->Options<<goAlwaysShowEditor;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmLabd_T::AverageTotalTime()
{
int iRowCount=0;
double aveTime,totalTime,lastTime;
totalTime=seLabdTime->Text.ToDouble();
if(sgLabd->RowCount>1)
{
//统计已选择员工的数量
for(int i=1;i<sgLabd->RowCount;i++)
{
if(sgLabd->Cells[0][i]=="√")
iRowCount=iRowCount+1;
}
if(iRowCount>0){
aveTime=totalTime/iRowCount;
aveTime=DataCarry(aveTime,2,1);
for(int i=1;i<sgLabd->RowCount;i++)
{
if(sgLabd->Cells[0][i]=="√")
sgLabd->Cells[3][i]=aveTime;
else
sgLabd->Cells[3][i]="0.00";
}
//查找最后一个被选择的员工
for(int i=sgLabd->RowCount;i>0;i--)
{
if(sgLabd->Cells[0][i]=="√"){
lastTime=sgLabd->Cells[3][i].ToDouble();
sgLabd->Cells[3][i]=lastTime+totalTime-aveTime*iRowCount;
return;
}
}
}
else
throw Exception("没有选择可分摊的员工!");
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmLabd_T::SetDetailValue(int Index,AnsiString Value)
{
frmLabh_T->SetDetailValue(Index,Value);
}
//---------------------------------------------------------------------------
void __fastcall TfrmLabd_T::sgLabdSelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
if(ARow>0 && ACol==0){
if(sgLabd->Cells[0][ARow]==""){
sgLabd->Cells[0][ARow]="√";
if(scLabdDType->ItemData[1]==1)
AverageTotalTime();
}
else{
sgLabd->Cells[0][ARow]="";
sgLabd->Cells[3][ARow]="0.00";
if(scLabdDType->ItemData[1]==1)
AverageTotalTime();
}
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmLabd_T::btOkClick(TObject *Sender)
{
double TotalTime,v_Time;
TotalTime = 0;
for(int i=1;i<sgLabd->RowCount;i++)
{
if(sgLabd->Cells[0][i]=="√")
TotalTime=TotalTime+sgLabd->Cells[3][i].ToDouble();
}
v_Time= seLabdTime->Text.ToDouble();
if(TotalTime != v_Time)
throw Exception("工时分配后的总和不等于团体总工时,请重新分配.");
if(sgLabd->RowCount>1)
{
int j;
j=comServer->ItemCount-1;
if(j>0)
{
comServer->LocateItemByIndex(j);
j=StrToInt(frmLabh_T->GetDetailValue(fiLabdLine));
j=j+1;
}
else
j=1;
for(int i=1;i<sgLabd->RowCount;i++)
{
if(sgLabd->Cells[0][i]=="√")
{
comServer->AddItem();
SetDetailValue(fiLabdCode,frmLabh_T->seLabhCode->Text);
SetDetailValue(fiLabdLine,AnsiString(j));
SetDetailValue(fiLabdWo,seLabdWo->Text);
SetDetailValue(fiLabdDType,scLabdDType->ItemData[1]);
SetDetailValue(fiLabdProcess,seLabdProcess->ItemData[1]);
SetDetailValue(fiLabdEmployee,sgLabd->Cells[1][i]);
SetDetailValue(fiLabdTime,sgLabd->Cells[3][i]);
SetDetailValue(fiLabdPrice,seLabdPrice->Text);
try
{
comServer->AddToObject();
}
catch(Exception &e)
{
comServer->Cancel();
this->ModalResult=0;
throw Exception(e.Message);
}
j=j+1;
}
}
}
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmLabd_T::seLabdWoButtonClick(TObject *Sender)
{
AnsiString SqlStr;
SqlStr="006[加工单号][加工件码][要求数量][要求日期][订单单号][订单行号]SELECT WoCode,WoGoods,WoQty,WoRDate,";
SqlStr=SqlStr+"WoSoCode,WoSodLine from sdWo where WoCheck=1 and WoClose=0 ORDER BY WoCode";
TfrmWnQuery *p;
try
{
StartWaitForm("正在查询,请稍候...");
p=new TfrmWnQuery(this,"加工订单查询",SqlStr);
}
__finally
{
EndWaitForm();
}
if(p->ShowModal()==mrOk)
{
seLabdWo->Text=p->ColData[1];
}
delete p;
}
//---------------------------------------------------------------------------
void __fastcall TfrmLabd_T::seLabdProcessButtonClick(TObject *Sender)
{
AnsiString SqlStr;
SqlStr="003[序号][工序代码][工序名称]SELECT WrgNo,WrgProcess,ProcessName FROM sdWrg,sdProcess ";
SqlStr=SqlStr+"where WrgProcess=ProcessCode and WrgWo='"+seLabdWo->Text+"' ORDER BY WrgNo";
TfrmWnQuery *p;
try
{
StartWaitForm("正在查询,请稍候...");
p=new TfrmWnQuery(this,"工序资料查询",SqlStr);
}
__finally
{
EndWaitForm();
}
if(p->ShowModal()==mrOk)
{
seLabdProcess->LocateKey(p->ColData[2]);
}
delete p;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -