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

📄 labd_t.cpp

📁 科思ERP部分源码及控件
💻 CPP
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include "Labd_T.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, HWND chWnd, AnsiString MidCode,AnsiString WhereStr)
    : TStdBaseForm(Owner,chWnd,MidCode,WhereStr)
{
    int iPos;
    iPos=WhereStr.Pos("\t");
    FLabhCode=WhereStr.SubString(1,iPos-1);
    WhereStr=WhereStr.SubString(iPos+1,WhereStr.Length());

    iPos=WhereStr.Pos("\t");
    FLabhShop=WhereStr.SubString(1,iPos-1);
    FLabhTeam=WhereStr.SubString(iPos+1,WhereStr.Length());
}
//---------------------------------------------------------------------------
void __fastcall TfrmLabd_T::FormShow(TObject *Sender)
{
    scLabdDType->ClearAll();
    scLabdDType->AddItems("0-手工分配","0");
    scLabdDType->AddItems("1-平均分配","1");
    FillEdit(Handle,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= new  TComResultSet(Handle,g_ClientHandle);
    if(!FLabhTeam.IsEmpty())
      m_SQL=AnsiString("select distinct TeEmployee,EmployeeName from sdTe,sdTeam,")+
            AnsiString("sdEmployee where TeTeam=TeamCode and TeEmployee= EmployeeCode and TeamShopCode='"+FLabhShop+"' and TeTeam='"+FLabhTeam+"' ")+
            AnsiString("Order by TeEmployee");
    else
      m_SQL=AnsiString("select distinct TeEmployee,EmployeeName from sdTe,sdTeam,")+
            AnsiString("sdEmployee where TeTeam=TeamCode and TeEmployee= EmployeeCode and TeamShopCode='"+FLabhShop+"' ")+
            AnsiString("Order by TeEmployee");
    Rst->Open(m_SQL,"");
    Rst->MoveFirst();
    sgLabd->RowCount=1;
    while(Rst->Eof == 0)
    {
       m_STR=AnsiString("√")+
             "\t"+Rst->FieldByName("TeEmployee")+
             "\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::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;
    try{
      StartWaitForm("正在生成记时单行......");
      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;
         try{
           j=comServer->ItemCount-1;
           if(j>0)
           {
              comServer->LocateItemByIndex(j);
              j=GetDetailValue("LabdLine").ToInt();
              j=j+1;
           }
           else
              j=1;
           for(int i=1;i<sgLabd->RowCount;i++)
           {
              if(sgLabd->Cells[0][i]=="√")
              {
                comServer->AddItem();
                SetDetailValue("LabdCode",FLabhCode);
                SetDetailValue("LabdLine",AnsiString(j));
                SetDetailValue("LabdWo",seLabdWo->Text);
                SetDetailValue("LabdDType",scLabdDType->ItemData[1]);
                SetDetailValue("LabdProcess",seLabdProcess->ItemData[1]);
                SetDetailValue("LabdEmployee",sgLabd->Cells[1][i]);
                SetDetailValue("LabdTime",sgLabd->Cells[3][i]);
                SetDetailValue("LabdPrice",seLabdPrice->Text);
                comServer->AddToObject();
                j=j+1;
              }
           }
         }
         catch(Exception &e)
         {
           comServer->Cancel();
           this->ModalResult=0;
           throw Exception(e.Message);
         }
      }
    }
    __finally
    {
      EndWaitForm();
    }
    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 + -