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

📄 labd_t.cpp

📁 速达开源ERP系统
💻 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 + -