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