tsd.cpp

来自「一个以前收集的基于C/S架构的ERP客户端源代码」· C++ 代码 · 共 313 行

CPP
313
字号
//--------------------------------------------------------------------------
#include <vcl.h>
#include "Tsd.h"
#include "Tsh.h"
#include "wnquery.h"
//--------------------------------------------------------------------------
#pragma hdrstop
#pragma package(smart_init)
#pragma link "fpanel"
#pragma link "SDEdit"
#pragma link "SDGrid"
#pragma link "SDComboBox"
#pragma resource "*.dfm"

TfrmTsd  *frmTsd;
//--------------------------------------------------------------------------
__fastcall TfrmTsd::TfrmTsd(TComponent* Owner)
        : TStdBaseForm(Owner)
{
  InitControlGroup();
  btnOK->Enabled=false;
}
//--------------------------------------------------------------------------

void __fastcall TfrmTsd::btnOKClick(TObject *Sender)
{
  double FAPrice,FTPrice,FAQty,FTQty,FAAmt,FTAmt;
  AnsiString l_GoodsSpec="";
  try
  {
    StartWaitForm("正在生成盘点单,请稍候......");
    if(sgTsd->RowCount>1)
    {
     int j;
     j=comServer->ItemCount-1;
     if(j>=0)
     {
        comServer->LocateItemByIndex(j);
        j=StrToInt(frmTsh->GetDetailValue("TsdLine"));
        j=j+1;
     }
     else
        j=1;
     try
     {
       for(int i=1;i<sgTsd->RowCount;i++)
       {
           if(sgTsd->Cells[1][i]=="√")
           {
               comServer->AddItem();
               SetDetailValue("TsdCode", frmTsh->seTshCode->Text);
               SetDetailValue("TsdLine", AnsiString(j));
               SetDetailValue("TsdLoc",sgTsd->Cells[2][i]);              //货位
               SetDetailValue("TsdGoods",sgTsd->Cells[4][i]);            //物料编码
               SetDetailValue("GoodsName",sgTsd->Cells[5][i]);
               if(InitRsGoods(WideString(sgTsd->Cells[4][i])))
               l_GoodsSpec= GetGoodsValue(gtInitRs,"GoodsSpec");
               if(l_GoodsSpec=="")
               l_GoodsSpec=" ";
               SetDetailValue("GoodsSpec",l_GoodsSpec);

               SetDetailValue("TsdUnit",sgTsd->Cells[6][i]);             //计量单位
               SetDetailValue("TsdBatch","");            //批号
               SetDetailValue("TsdSod","");              //订单号
               SetDetailValue("TsdSodLine","0");          //订单行号
               SetDetailValue("TsdAQty",sgTsd->Cells[7][i]);             //帐面数
               FAQty=StrToFloat(sgTsd->Cells[7][i]);
               if(sgTsd->Cells[9][i] == "")
                throw Exception("请输入实盘数量");
               SetDetailValue("TsdTQty",sgTsd->Cells[9][i]);             //实盘数
               FTQty=StrToFloat(sgTsd->Cells[9][i]);
               if(FTQty-FAQty == 0)   //盘平
               {
                SetDetailValue("TsdDQty","0");             //差异数
                SetDetailValue("TsdFlg","0");              //盈/亏标识
               }
               if(FTQty-FAQty < 0)    //盘亏
               {
                SetDetailValue("TsdDQty",FloatToStr(DataCarry(FAQty-FTQty,2,0)));    //差异数
                SetDetailValue("TsdFlg","-1");              //盈/亏标识
               }
               if(FTQty-FAQty > 0)    //盘盈
               {
                SetDetailValue("TsdDQty",FloatToStr(DataCarry(FTQty-FAQty,2,0)));    //差异数
                SetDetailValue("TsdFlg","1");              //盈/亏标识
               }
               SetDetailValue("TsdAAmt",sgTsd->Cells[8][i]);             //帐面金额
               FAAmt=StrToFloat(sgTsd->Cells[8][i]);
               FAPrice=DataCarry(FAAmt/FAQty,2,0);
               SetDetailValue("TsdAPrice",FloatToStr(FAPrice));           //帐面单价
               if(sgTsd->Cells[10][i] == "")
                throw Exception("请输入实盘金额");
               SetDetailValue("TsdTAmt",sgTsd->Cells[10][i]);           //实盘金额
               FTAmt=StrToFloat(sgTsd->Cells[10][i]);
               if(FTQty == 0)
                FTPrice=0;
               else
                FTPrice=DataCarry(FTAmt/FTQty,4,0);
               SetDetailValue("TsdTPrice",FloatToStr(FTPrice));             //实盘单价
               SetDetailValue("TsdDesc","");             //备注
               SetDetailValue("TsdIoQty",0);            //出入库数量
               comServer->AddToObject();
               j=j+1;
           }
       }
     }
     catch(Exception &e)
     {
      comServer->FreeItem();
      this->ModalResult=0;
      throw Exception(e.Message);
     }
    }
  }
  __finally
  {
    EndWaitForm();
  }
  Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmTsd::btnCancelClick(TObject *Sender)
{
    Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmTsd::InitControlGroup()
{
    sgTsd->RowCount = 1;
    seTshType->Text=frmTsh->scTshType->Text;
    seTsdLoc->Text="";
}
//---------------------------------------------------------------------------

void __fastcall TfrmTsd::FillGridWithData()
{

    AnsiString  ItemStr,s_SQL;
    double FPrice,FQty,FAmt;
    if(seTsdLoc->Text == "")
    {
     s_SQL =" select MaccLoc,LocName,MaccGoods,GoodsName,GoodsUnitCode,MaccAoyQty,CdNopPrice ";
     s_SQL+=" from sdMacc,sdLoc,sdGoods,sdCd ";
     s_SQL+=" where MaccLoc=LocCode and MaccGoods=GoodsCode and MaccInitFlg=1 ";
     s_SQL+=" and maccfmonth=cdfmonth and maccgoods=cdgoods ";
     s_SQL+=" order by maccloc,maccgoods ";
    }
    else
    {
     s_SQL =" select MaccLoc,LocName,MaccGoods,GoodsName,GoodsUnitCode,MaccAoyQty,CdNopPrice ";
     s_SQL+=" from sdMacc,sdLoc,sdGoods,sdCd ";
     s_SQL+=" where MaccLoc=LocCode and MaccGoods=GoodsCode and MaccInitFlg=1 ";
     s_SQL+=" and maccfmonth=cdfmonth and maccgoods=cdgoods and maccloc='"+seTsdLoc->Text+"' ";
     s_SQL+=" order by maccloc,maccgoods ";
    }
    TComResultSet *RsTsd;
    try
    {
      StartWaitForm("正在查询数据,请稍候......");
      RsTsd=new  TComResultSet(Handle,g_ClientHandle);
      RsTsd->Open(s_SQL,"");
      while( RsTsd->Eof == 0)
      {
        FPrice=StrToFloat(RsTsd->FieldByName("CdNopPrice"));
        FQty=StrToFloat(RsTsd->FieldByName("MaccAoyQty"));
        FAmt=DataCarry(FPrice*FQty,2,0);
        ItemStr="\t"+AnsiString("√") +
                "\t"+RsTsd->FieldByName("MaccLoc")+
                "\t"+RsTsd->FieldByName("LocName")+
                "\t"+RsTsd->FieldByName("MaccGoods")+
                "\t"+RsTsd->FieldByName("GoodsName")+
                "\t"+RsTsd->FieldByName("GoodsUnitCode")+
                "\t"+RsTsd->FieldByName("MaccAoyQty")+
                "\t"+FloatToStr(FAmt);
        sgTsd->AddItem(ItemStr);
        RsTsd->MoveNext();
      }
      RsTsd->Close();
    }
    __finally
    {
      EndWaitForm();
    }
    //DONE:BUG NO. 295 FIXED 01-08-13 ===================
    if(sgTsd->RowCount>0)
      btnOK->Enabled = true;
    //=======END OF MODIFICATION====================
    delete RsTsd;
}
//---------------------------------------------------------------------------
void __fastcall TfrmTsd::GetComObject(TComServer *comServerPtr)
{
    comServer = comServerPtr;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TfrmTsd::sgTsdDblClick(TObject *Sender)
{
    AnsiString SqlStr;
    int ARow=sgTsd->Row;
    if (ARow >0)
    {
      if(sgTsd->Col==1)
      {
        if (sgTsd->Cells[1][ARow] == "√")
        {
         sgTsd->Cells[1][ARow] =  "";
         for (int i=1;i<sgTsd->RowCount;i++)
         {
            if(sgTsd->Cells[1][i]=="√")
            {
               btnOK->Enabled=true;
               break;
            }
            else
               btnOK->Enabled=false;
         }
        }
        else
        {
          sgTsd->Cells[1][ARow] =  "√";
          btnOK->Enabled=true;
        }
      }
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmTsd::seTsdLocButtonClick(TObject *Sender)
{
  AnsiString SqlStr;
  SqlStr="003[货位编码][货位名称][货位类型]";
  SqlStr+="select LocCode,LocName,Type=(case LocType when 1 then '存储货位' when 2 then '在制货位'";
  SqlStr+="when 3 then '待检货位' when 4 then '待发货位' else '在途货位' end)  from sdLoc ";
  if(Trim(GetParamValue("10520"))=='Y')
  SqlStr+=" where LocCode in(select LrLoc from KsLocRight where LrUser= '"+g_sdUserCode+"') ";
  SqlStr+="  order by LocCode ";
  if(SqlStr=="")
   return;
  TfrmWnQuery *p;
  try
  {
    StartWaitForm("正在查询,请稍候...");
    p=new TfrmWnQuery(this,"货位查询",SqlStr);
  }
  __finally
  {
    EndWaitForm();
  }
  if(p->ShowModal()==mrOk)
  {
    seTsdLoc->Text=p->ColData[1];
    FillGridWithData();
  }
  delete p;
}
//---------------------------------------------------------------------------

void __fastcall TfrmTsd::bbSelAllClick(TObject *Sender)
{
  if(sgTsd->RowCount <=1)
   return;
  for(int i=1;i<sgTsd->RowCount;i++)
    sgTsd->Cells[1][i] = "√";
  btnOK->Enabled=true;
}
//---------------------------------------------------------------------------

void __fastcall TfrmTsd::bbSelNoneClick(TObject *Sender)
{
  for(int i=1;i<sgTsd->RowCount;i++)
    sgTsd->Cells[1][i] = "";
  btnOK->Enabled=false;
}
//---------------------------------------------------------------------------


void __fastcall TfrmTsd::sgTsdSelectCell(TObject *Sender, int ACol,
      int ARow, bool &CanSelect)
{
 if(sgTsd->Cells[1][ARow]=="√")
  sgTsd->ReadOnly=false;
 else
  sgTsd->ReadOnly=true;
}
//---------------------------------------------------------------------------


void __fastcall TfrmTsd::bbQueryClick(TObject *Sender)
{
 AnsiString tmp;
 tmp=seTsdLoc->Text;
 if(tmp == "")
 {
  if(Application->MessageBox("需要盘点所有货位物料吗?", "系统提示", MB_YESNO) != IDYES)
   return;
  else
   sgTsd->RowCount=1;
 }
 else
 {
  for(int i=0;i<sgTsd->RowCount;i++)
   if(sgTsd->Cells[2][i]==tmp)
   {
    Application->MessageBox("已经选取了该货位", "系统提示", MB_OK);
    return;
   }
 }
 FillGridWithData();
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?