vw_mps_column.cpp
来自「科思ERP部分源码及控件」· C++ 代码 · 共 771 行 · 第 1/2 页
CPP
771 行
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "VW_Mps_column.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "QueryBaseForm"
#pragma link "SDGrid"
#pragma link "KSAdvReport"
#pragma link "DateEdit"
#pragma resource "*.dfm"
#define ParaCode "111" //计划管理参数代码
TfrmVW_MpsColumn *frmVW_MpsColumn;
//---------------------------------------------------------------------------
__fastcall TfrmVW_MpsColumn::TfrmVW_MpsColumn(TComponent* Owner, HWND chWnd, AnsiString ClassCode,AnsiString WhereStr)
: TQueryBaseForm(Owner,chWnd,ClassCode,WhereStr)
{
//Initiate();
}
//---------------------------------------------------------------------------
__fastcall TfrmVW_MpsColumn::TfrmVW_MpsColumn(TComponent* Owner,AnsiString wherestr)
: TQueryBaseForm(Owner)
{
Initiate();
tbControl->Enabled=false;
TBorderIcons tempBI = BorderIcons;
tempBI >> biMinimize;
BorderIcons = tempBI;
FilterStr=wherestr;
FillGridWithData();
}
//---------------------------------------------------------------------------
void __fastcall TfrmVW_MpsColumn::Initiate()
{
int BeginColNum;
FilterStr="";
sSQL="";
GetParaValue();
sgMrp->ColCount=8+zx_ColNum+jh_ColNum+xq_ColNum;
sgMrp->RowCount=1;
QueryGrid=sgMrp;
sgMrp->Cells[0][0]="物料编码";
sgMrp->Cells[1][0]="物料名称";
sgMrp->Cells[2][0]="批量";
sgMrp->Cells[3][0]="提前期";
sgMrp->Cells[4][0]="当前库存";
sgMrp->Cells[5][0]="安全库存";
sgMrp->Cells[6][0]="已分配量";
sgMrp->Cells[7][0]="需求类型";
/*
if(zx_ColNum+jh_ColNum+xq_ColNum > 20)
{
tbMainBar->Enabled=false;
throw Exception("系统参数定义的总列数超限");
}
*/
AnsiString LCurDate=g_sdCurDate;
AnsiString LCurDateZ;
BeginColNum=8; //起始周期列数
int m,n=0;
for(int i=0;i<zx_ColNum;i++)
{
LCurDateZ = FormatDateTime("mm.dd",StrToDate(LCurDate)+(n));
sgMrp->Cells[BeginColNum+i][0]="执行区"+LCurDateZ+""; //"+IntToStr(i+1)+"
n=n+zx_ColPer ;
}
BeginColNum+=zx_ColNum;
m=n;
n=0;
for(int i=0;i<jh_ColNum;i++)
{
LCurDateZ = FormatDateTime("mm.dd",StrToDate(LCurDate)+(m+n));
// sgMrp->Columns[BeginColNum+i].ColumnFont->Color=clRed;
sgMrp->Cells[BeginColNum+i][0]="需求区"+LCurDateZ+"";//"+IntToStr(i+1)+"
n=n+jh_ColPer;
}
BeginColNum+=jh_ColNum;
m=m+n;
n=0;
for(int i=0;i<xq_ColNum;i++)
{
LCurDateZ = FormatDateTime("mm.dd",StrToDate(LCurDate)+(m+n));
sgMrp->Cells[BeginColNum+i][0]="计划区"+LCurDateZ+"";//"+IntToStr(i+1)+"
n=n+jh_ColPer;
} //xq_ColPer
}
//---------------------------------------------------------------------------
void __fastcall TfrmVW_MpsColumn::tbQueryClick(TObject *Sender)
{
if(!ShowQueryWindow())
return;
try{
StartWaitForm("正在查询,请稍候...");
if (cb_bool->Checked)
FillGridWithData_Type();
else
FillGridWithData();
}
__finally
{
EndWaitForm();
}
}
//---------------------------------------------------------------------------
bool __fastcall TfrmVW_MpsColumn::ShowQueryWindow()
{
/* TfrmQuForm *FQuery=new TfrmQuForm(this,this->Name);
FQuery->ShowModal();
if(FQuery->CancelQuery)
return false;
FilterStr=FQuery->CreateSqlString;
delete FQuery; */
return true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmVW_MpsColumn::ClearControl(bool BringToNext)
{
return;
}
//---------------------------------------------------------------------------
void __fastcall TfrmVW_MpsColumn::GetDataFromComObject()
{
return;
}
//---------------------------------------------------------------------------
void __fastcall TfrmVW_MpsColumn::WaitUserInput()
{
return;
}
//---------------------------------------------------------------------------
void __fastcall TfrmVW_MpsColumn::RefreshGridData(int mAction)
{
return;
}
//---------------------------------------------------------------------------
void __fastcall TfrmVW_MpsColumn::DisplayBill()
{
return;
}
//---------------------------------------------------------------------------
void __fastcall TfrmVW_MpsColumn::GetBill(AnsiString BillID)
{
return;
}
//---------------------------------------------------------------------------
//获取查询语句
AnsiString __fastcall TfrmVW_MpsColumn::GetQueryStr()
{
AnsiString Selectstr,Fromstr,Wherestr,Orderstr;
AnsiString l_DateE ,l_DateF;
l_DateF = de_DateF->Text;
l_DateE = de_DateE->Text;
if (l_DateF.IsEmpty())
throw Exception("请输入起始日期");
if (l_DateE.IsEmpty())
throw Exception("请输入结束日期");
Selectstr =" select * ";
Fromstr=" from KSVW_Mps ";
//Wherestr=" where MpsdRDate >= '"+g_sdCurDate+"'";
Wherestr=" where MpsdRDate BETWEEN '"+FormatDateTime("yyyy-mm-dd",l_DateF)+"' and '"+FormatDateTime("yyyy-mm-dd",l_DateE)+"'";
if(FilterStr!="")
Wherestr+=" and "+FilterStr;
Wherestr+= GetQueryStrColumn();
//Orderstr=" order by MpsGoods,MpsdFrom,MpsdRDate";
sSQL=Selectstr+Fromstr+Wherestr;//+Orderstr;
return(sSQL);
}
//-------------------------------------------------
AnsiString __fastcall TfrmVW_MpsColumn::GetQueryStrColumn()
{
AnsiString l_SQLcolumn="",l_column;
//if(FilterStr!="")
//{
if(CB_Gross->Checked)
{
l_column="1";
}
if(CB_Poh->Checked)
{
if (l_column.IsEmpty())
l_column="2";
else
l_column=l_column +",2";
}
if(CB_Macc->Checked)
{
if (l_column.IsEmpty())
l_column="3";
else
l_column=l_column +",3" ;
}
if(CB_Clean->Checked)
{
if (l_column.IsEmpty())
l_column="4";
else
l_column=l_column +",4";
}
if(CB_Soh->Checked)
{
if (l_column.IsEmpty())
l_column="5";
else
l_column=l_column +",5" ;
}
if(CB_Take->Checked)
{
if (l_column.IsEmpty())
l_column="6" ;
else
l_column=l_column +",6" ;
}
if (!l_column.IsEmpty())
l_SQLcolumn =" and mpsdfrom in ("+l_column+")";
//}
return l_SQLcolumn;
}
//---------------------------------------------------------------------------
void __fastcall TfrmVW_MpsColumn::FillGridWithData()
{
TComResultSet *RsQuery;
AnsiString ItemStr,sSql;
AnsiString Tempstr,Tempstr1,Tempstr2;
AnsiString sRDate;
double iQty;
//获取查询语句
sSql=GetQueryStr()+" order by MpsGoods,MpsdFrom,MpsdRDate";
if(sSql=="")
return;
try
{
// StartWaitForm("正在执行查询...");
sgMrp->RowCount=1;
RsQuery=new TComResultSet(Handle,g_ClientHandle);
//RsQuery=NewResultSet();
RsQuery->Open(sSql,"");
RsQuery->MoveFirst();
Tempstr1="";
Tempstr2="";
Initiate();
sgMrp->ScrollBars=ssNone; //取消滚动条,防止屏幕滚动
while( RsQuery->Eof == 0)
{
Tempstr= RsQuery->FieldByName("MpsGoods");
if(Tempstr!=Tempstr1) //不同物料
{
Tempstr1=Tempstr;
Tempstr2= RsQuery->FieldByName("MpsdFrom");
ItemStr= RsQuery->FieldByName("MpsGoods")+
"\t"+RsQuery->FieldByName("GoodsName")+
"\t"+RsQuery->FieldByName("MpsEoq")+
"\t"+RsQuery->FieldByName("MpsLt")+
"\t"+(RsQuery->FieldByName("MpsCiq"))+
"\t"+RsQuery->FieldByName("MpsSiq")+
"\t"+RsQuery->FieldByName("MpsDiq")+
"\t"+DataConvert("MpsdFrom",RsQuery->FieldByName("MpsdFrom"))+
"\t"+AnsiString("0");
sgMrp->AddItem(ItemStr);
sgMrp->Row=sgMrp->RowCount-1;
sRDate=RsQuery->FieldByName("MpsdRDate");
iQty=StrToFloat(RsQuery->FieldByName("MpsdRQty"));
WriteMrpQty(sgMrp->Row,sRDate,iQty);
}
else //相同物料
{
Tempstr= RsQuery->FieldByName("MpsdFrom");
if(Tempstr!=Tempstr2) //相同物料,不同需求类型
{
Tempstr2=Tempstr;
ItemStr= AnsiString(" ")+
"\t"+AnsiString(" ")+
"\t"+AnsiString(" ")+
"\t"+AnsiString(" ")+
"\t"+AnsiString(" ")+
"\t"+AnsiString(" ")+
"\t"+AnsiString(" ")+
"\t"+DataConvert("MpsdFrom",RsQuery->FieldByName("MpsdFrom"))+
"\t"+AnsiString("0");
sgMrp->AddItem(ItemStr);
sgMrp->Row=sgMrp->RowCount-1;
sRDate=RsQuery->FieldByName("MpsdRDate");
iQty=StrToFloat(RsQuery->FieldByName("MpsdRQty"));
WriteMrpQty(sgMrp->Row,sRDate,iQty);
}
else //相同物料,相同需求类型,不同的需求日期
{
sRDate=RsQuery->FieldByName("MpsdRDate");
iQty=StrToFloat(RsQuery->FieldByName("MpsdRQty"));
WriteMrpQty(sgMrp->Row,sRDate,iQty);
}
}
RsQuery->MoveNext();
}
RsQuery->Close();
sgMrp->ScrollBars=ssBoth;//设置滚动条
}
__finally
{
// EndWaitForm();
delete RsQuery;
}
if(sgMrp->RowCount>1)
{
sgMrp->Row=1;
sgMrp->Col=1;
}
}
//---------------------------------------------------------------------------
//在GRID的第iRow行中添加日期为sDate的需求数量iQty
void __fastcall TfrmVW_MpsColumn::WriteMrpQty(int iRow,AnsiString sDate,double iQty)
{
AnsiString sCurDate=g_sdCurDate; //当前日期
AnsiString zxDate,jhDate,xqDate;
int BeginColNum;
double tmpQty;
div_t PerNum; //整除后的返回类型,包括商(quot)和余数(rem)
if(sDate < sCurDate)
return; //小于当前日期不执行
sDate = FormatDateTime("yyyy-mm-dd",sDate);
BeginColNum=8; //区间起始列序号
zxDate=FormatDateTime("yyyy-mm-dd",StrToDate(sCurDate)+zx_ColNum*zx_ColPer*DayNum); //执行区间的结束日期
jhDate=FormatDateTime("yyyy-mm-dd",StrToDate(zxDate)+jh_ColNum*jh_ColPer*DayNum); //计划区间的结束日期
xqDate=FormatDateTime("yyyy-mm-dd",StrToDate(jhDate)+xq_ColNum*xq_ColPer*DayNum); //需求区间的结束日期
if(sDate < zxDate) //在执行区间内
{
PerNum=div((StrToDate(sDate)-StrToDate(sCurDate)),zx_ColPer*DayNum);
if(sgMrp->Cells[BeginColNum+PerNum.quot][iRow] == "")
tmpQty=0;
else
tmpQty=StrToFloat(sgMrp->Cells[BeginColNum+PerNum.quot][iRow]);
if(sgMrp->Cells[7][iRow]=="计划库存")
tmpQty=iQty; //计划库存不累加
else
tmpQty+=iQty;
sgMrp->Cells[BeginColNum+PerNum.quot][iRow]=FloatToStr(tmpQty);
return;
}
if(sDate < jhDate) //在计划区间内
{
PerNum=div((StrToDate(sDate)-StrToDate(zxDate)),jh_ColPer*DayNum);
if(sgMrp->Cells[BeginColNum+zx_ColNum+PerNum.quot][iRow] == "")
tmpQty=0;
else
tmpQty=StrToFloat(sgMrp->Cells[BeginColNum+zx_ColNum+PerNum.quot][iRow]);
if(sgMrp->Cells[7][iRow]=="计划库存")
tmpQty=iQty; //计划库存不累加
else
tmpQty+=iQty;
sgMrp->Cells[BeginColNum+zx_ColNum+PerNum.quot][iRow]=FloatToStr(tmpQty);
return;
}
if(sDate < xqDate) //在需求区间内
{
PerNum=div((StrToDate(sDate)-StrToDate(jhDate)),xq_ColPer*DayNum);
if(sgMrp->Cells[BeginColNum+zx_ColNum+jh_ColNum+PerNum.quot][iRow] == "")
tmpQty=0;
else
tmpQty=StrToFloat(sgMrp->Cells[BeginColNum+zx_ColNum+jh_ColNum+PerNum.quot][iRow]);
if(sgMrp->Cells[7][iRow]=="计划库存")
tmpQty=iQty; //计划库存不累加
else
tmpQty+=iQty;
sgMrp->Cells[BeginColNum+zx_ColNum+jh_ColNum+PerNum.quot][iRow]=FloatToStr(tmpQty);
return;
}
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmVW_MpsColumn::DataConvert(AnsiString sFieldName,AnsiString sFieldValue)
{
sFieldName=UpperCase(sFieldName);
if(sFieldName=="MPSDFROM") //需求类型
{
if(sFieldValue=="1")
return("毛需求");
if(sFieldValue=="2")
return("计划入库");
if(sFieldValue=="3")
return("计划库存");
if(sFieldValue=="4")
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?