📄 gmu.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Gmu.h"
#include "commfunction.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SDComboBox"
#pragma link "SDEdit"
#pragma link "SDGrid"
#pragma resource "*.dfm"
TfrmGmu *frmGmu;
//---------------------------------------------------------------------------
__fastcall TfrmGmu::TfrmGmu(TComponent* Owner,AnsiString Code,AnsiString Name)
: TStdBaseForm(Owner)
{
edtGoodsCode->Text=Code;
edtGoodsName->Text=Name;
edtGoodsCode->Enabled=false;
edtGoodsName->Enabled=false;
scPrmUnit->Enabled=false;
FillComboBox(scPrmUnit,"select unitname memo,unitcode from sdunit order by unitcode","memo","unitcode");
FillComboBox(scAidUnit,"select unitname memo,unitcode from sdunit order by unitcode","memo","unitcode");
Initial();
}
//---------------------------------------------------------------------------
void __fastcall TfrmGmu::Initial()
{
TComResultSet *pResultSet=NewResultSet();
AnsiString strSQL,sTemp,sItem;
scPrmUnit->ItemIndex=-1;
scAidUnit->ItemIndex=-1;
sgUnit->RowCount=1;
seUnitConv->Text="";
pc_PrimaryUnit="";
pc_HaveMultiUnit=false;
pv_UnitState=0;
//取物料计量单位
strSQL=" select GmuUnit,UnitName,GmuConv,GmuPrimary from sdGmu,sdUnit ";
strSQL=strSQL+" where GmuGoods = '"+edtGoodsCode->Text+"' and GmuUnit=UnitCode order by GmuUnit";
pResultSet->Open(strSQL,"");
pResultSet->MoveFirst();
while(!pResultSet->Eof)
{
if(pResultSet->FieldByName("GmuPrimary")=="1")
{
pc_PrimaryUnit=pResultSet->FieldByName("GmuUnit");
scPrmUnit->LocateKey(pc_PrimaryUnit);
}
else
{
sTemp=pResultSet->FieldByName("UnitName");
sTemp+="("+pResultSet->FieldByName("GmuUnit")+")";
sItem=sTemp+"\t"+pResultSet->FieldByName("GmuConv");
sgUnit->AddItem(sItem);
pc_HaveMultiUnit=true;
}
pResultSet->MoveNext();
}
pResultSet->Close();
SetNormalState();
if(scPrmUnit->ItemIndex == -1) //尚未定义主计量单位
{
sgUnit->Enabled=false;
btnAdd->Enabled=false;
btnDel->Enabled=false;
btnUpd->Enabled=false;
}
delete pResultSet;
}
void __fastcall TfrmGmu::scPrmUnitClick(TObject *Sender)
{
if(scPrmUnit->ItemData[1] == pc_PrimaryUnit)
return;
if(pc_PrimaryUnit=="" || (Application->MessageBox("修改主计量单位后所有的辅助单位需要重新设置,确定修改吗?",
"系统提示",MB_YESNO)==IDYES))
{
//在数据库中更新
ChgPrmUnit(scPrmUnit->ItemData[1]);
pc_PrimaryUnit=scPrmUnit->ItemData[1];
sgUnit->RowCount=1;
scAidUnit->ItemIndex=-1;
seUnitConv->Text="";
SetNormalState();
}
else
scPrmUnit->LocateKey(pc_PrimaryUnit);
}
//---------------------------------------------------------------------------
void __fastcall TfrmGmu::btnAddClick(TObject *Sender)
{
if(pv_UnitState != 0)
return;
GroupBox1->Enabled=true;
btnAdd->Enabled=false;
btnDel->Enabled=false;
btnUpd->Enabled=false;
pv_UnitState=1; //增加状态
scAidUnit->ItemIndex=-1;
seUnitConv->Text="";
scAidUnit->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TfrmGmu::btnDelClick(TObject *Sender)
{
AnsiString sTemp;
if(sgUnit->Row < 1)
return;
if(Application->MessageBox("确定要删除当前选中的辅助单位吗?",
"系统提示",MB_YESNO)==IDYES)
{
sTemp=sgUnit->Cells[0][sgUnit->Row];
sTemp=sTemp.SubString(sTemp.AnsiPos("(")+1,sTemp.AnsiPos(")")-sTemp.AnsiPos("(")-1);
DelAidUnit(sTemp);
sgUnit->RemoveItem(sgUnit->Row);
btnReturnClick(NULL);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmGmu::btnUpdClick(TObject *Sender)
{
if(sgUnit->Row < 1)
return;
if(pv_UnitState != 0)
return;
GroupBox1->Enabled=true;
scAidUnit->Enabled=false;
btnAdd->Enabled=false;
btnDel->Enabled=false;
btnUpd->Enabled=false;
seUnitConv->SetFocus();
pv_UnitState=2; //增加状态
}
//---------------------------------------------------------------------------
void __fastcall TfrmGmu::seUnitConvKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
AnsiString sTemp,sItem;
if(Key == 13)
{
switch(pv_UnitState)
{
case 1: //增加状态
if(scAidUnit->ItemIndex == -1)
throw Exception("请选择需增加的辅助计量单位");
if(scAidUnit->ItemData[1]==scPrmUnit->ItemData[1])
throw Exception("主单位不能再定义成辅助单位");
for(int i=1;i<sgUnit->RowCount;i++)
{
sTemp=sgUnit->Cells[0][i];
//取已定义辅助单位代码
sTemp=sTemp.SubString(sTemp.AnsiPos("(")+1,sTemp.AnsiPos(")")-sTemp.AnsiPos("(")-1);
if(sTemp == scAidUnit->ItemData[1])
throw Exception("该辅助单位已经定义");
}
if(seUnitConv->Text == "")
throw Exception("请输入辅助单位对主计量单位的转换系数");
if(StrToFloat(seUnitConv->Text) <= 0)
throw Exception("转换系数不能为零或负数");
//在数据库中增加记录
AddAidUnit(scAidUnit->ItemData[1],seUnitConv->Text);
sTemp=scAidUnit->Text+"("+scAidUnit->ItemData[1]+")";
sItem=sTemp+"\t"+seUnitConv->Text;
sgUnit->AddItem(sItem);
sgUnit->Row=sgUnit->RowCount-1;
break;
case 2: //修改状态
if(sgUnit->Row < 1)
return;
if(scAidUnit->ItemIndex == -1)
throw Exception("辅助计量单位出现错误");
if(seUnitConv->Text == "")
throw Exception("请输入辅助单位对主计量单位的转换系数");
if(StrToFloat(seUnitConv->Text) <= 0)
throw Exception("转换系数不能为零或负数");
//在数据库中修改记录
UpdAidUnit(scAidUnit->ItemData[1],seUnitConv->Text);
sTemp=scAidUnit->Text+"("+scAidUnit->ItemData[1]+")";
sItem=sTemp+"\t"+seUnitConv->Text;
sgUnit->ChangeItem(sItem,sgUnit->Row);
break;
default:
break;
}
SetNormalState();
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmGmu::AddAidUnit(AnsiString AidUnitCode,AnsiString ConvRate)
{
TComResultSet *pResultSet=NewResultSet();
AnsiString strSQL,sTemp;
strSQL=" insert into sdGmu(GmuGoods,GmuUnit,GmuConv,GmuPrimary)values(";
strSQL+="'"+edtGoodsCode->Text+"',";
strSQL+="'"+AidUnitCode+"',";
strSQL+=ConvRate+",";
strSQL+="0)";
pResultSet->Open(strSQL,"");
pResultSet->Close();
delete pResultSet;
}
//---------------------------------------------------------------------------
void __fastcall TfrmGmu::DelAidUnit(AnsiString AidUnitCode)
{
TComResultSet *pResultSet=NewResultSet();
AnsiString strSQL,sTemp;
strSQL=" delete from sdGmu ";
strSQL+=" where GmuGoods = '"+edtGoodsCode->Text+"' and ";
strSQL+=" GmuUnit='"+AidUnitCode+"'";
pResultSet->Open(strSQL,"");
pResultSet->Close();
delete pResultSet;
}
//---------------------------------------------------------------------------
void __fastcall TfrmGmu::UpdAidUnit(AnsiString AidUnitCode,AnsiString ConvRate)
{
TComResultSet *pResultSet=NewResultSet();
AnsiString strSQL,sTemp;
strSQL=" update sdGmu set GmuConv=";
strSQL+=ConvRate;
strSQL+=" where GmuGoods='"+edtGoodsCode->Text+"' and ";
strSQL+=" GmuUnit='"+AidUnitCode+"'";
pResultSet->Open(strSQL,"");
pResultSet->Close();
delete pResultSet;
}
//---------------------------------------------------------------------------
void __fastcall TfrmGmu::UpdMultiFlag(int mu)
{
TComResultSet *pResultSet=NewResultSet();
AnsiString strSQL;
strSQL=" update sdGoods set GoodsMunit=";
strSQL+=mu;
strSQL+=" where GoodsCode='"+edtGoodsCode->Text+"'";
pResultSet->Open(strSQL,"");
pResultSet->Close();
delete pResultSet;
}
//---------------------------------------------------------------------------
void __fastcall TfrmGmu::ChgPrmUnit(AnsiString PrmUnit)
{
TComResultSet *pResultSet=NewResultSet();
AnsiString strSQL,sTemp;
strSQL=" delete from sdGmu ";
strSQL=strSQL+" where GmuGoods = '"+edtGoodsCode->Text+"'";
pResultSet->Open(strSQL,"");
pResultSet->Close();
strSQL=" insert into sdGmu(GmuGoods,GmuUnit,GmuConv,GmuPrimary)values(";
strSQL+="'"+edtGoodsCode->Text+"',";
strSQL+="'"+scPrmUnit->ItemData[1]+"',";
strSQL+="1,";
strSQL+="1)";
pResultSet->Open(WideString(strSQL),WideString(""));
pResultSet->Close();
delete pResultSet;
}
//---------------------------------------------------------------------------
void __fastcall TfrmGmu::SetNormalState()
{
pv_UnitState=0;
btnAdd->Enabled=true;
btnDel->Enabled=true;
btnUpd->Enabled=true;
scAidUnit->Enabled=true;
seUnitConv->Enabled=true;
GroupBox1->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmGmu::btnCloseClick(TObject *Sender)
{
if(pc_HaveMultiUnit==1 && sgUnit->RowCount <=1)
{
UpdMultiFlag(0);
pc_HaveMultiUnit=0;
}
if(pc_HaveMultiUnit==0 && sgUnit->RowCount > 1)
{
UpdMultiFlag(1);
pc_HaveMultiUnit=1;
}
this->ModalResult=mrOk;
this->Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmGmu::sgUnitClick(TObject *Sender)
{
AnsiString sTemp;
int ARow;
ARow=sgUnit->Row;
if(ARow < 1)
return;
sTemp=sgUnit->Cells[0][ARow];
//取已定义辅助单位代码
sTemp=sTemp.SubString(sTemp.AnsiPos("(")+1,sTemp.AnsiPos(")")-sTemp.AnsiPos("(")-1);
scAidUnit->LocateKey(sTemp);
seUnitConv->Text=sgUnit->Cells[1][ARow];
SetNormalState();
}
//---------------------------------------------------------------------------
void __fastcall TfrmGmu::btnReturnClick(TObject *Sender)
{
if(sgUnit->Row < 1)
{
scAidUnit->ItemIndex=-1;
seUnitConv->Text="";
SetNormalState();
}
else
sgUnitClick(NULL);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -