📄 saleview.cpp
字号:
GetDlgItem(IDC_DEDIT)->SetFocus();
m_edt="";
UpdateData(FALSE);
for(int row=1; row<m_Grid.GetRows();row++)
for(int cols=2;cols<m_Grid.GetCols();cols++)
{
if (cols==3) continue;
m_Grid.SetTextMatrix(row,cols,"");
}
}
catch (DBErr &err)
{
char *str;
int code;
err.GetLastErr(code,&str);
((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(%d)",str,code);
DB.RollbackTrans();
GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE);
}
catch (char *estr)
{
((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr(estr);
DB.RollbackTrans();
GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE);
}
catch(...)
{
((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1);
DB.RollbackTrans();
GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE);
}
}
void CSaleView::DefineGrid()
{
int i,rows=8;
m_Grid.SetCols(rows);
m_Grid.SetRows(2);
m_Grid.SetFixedCols(2);
m_Grid.SetFixedRows(1);
m_Grid.SetRowHeight(0,400);
m_Grid.SetRowHeight(1,320);
for (i=1;i<m_Grid.GetRows() -1;i++)
m_Grid.SetRowHeight(i,320);
int row=0;
char *head[]={"序号","医 生","数 量 ","临床费","应付金额(元)","折扣费用","实付金额","日期"};//,"备 注"};
for (i=0;i<rows;i++)
{
m_Grid.SetTextMatrix(row,i,head[i]);
m_Grid.SetColAlignment(i,( i>1 && i<m_Grid.GetCols() - 1 ) ? 7 : 1);
}
m_Grid.SetColWidth(0,500);
m_Grid.SetColWidth(1,1500);
m_Grid.SetColWidth(2,1100);
m_Grid.SetColWidth(3,680);
m_Grid.SetColWidth(4,1300);
m_Grid.SetColWidth(5,1200);
m_Grid.SetColWidth(6,1200);
m_Grid.SetColWidth(7,1200);
}
void CSaleView::SetEdtPos()
{
if (m_Grid.GetRow() == m_Grid.GetRows() - 1) return;
if (m_Grid.GetCol() == m_Grid.GetCols()-1)
{
if (m_Grid.GetRow() > 1)
{
m_edt=m_Grid.GetTextMatrix(m_Grid.GetRow() - 1,m_Grid.GetCol());
UpdateData(FALSE);
m_Grid.SetTextMatrix(m_Grid.GetRow(),m_Grid.GetCol(),m_edt);
}
}
if (m_Grid.GetCol() == 6)
{
double real_fee=0.00;
char tmp[20];
real_fee = atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),4)) - atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),5));
sprintf(tmp,"%.2f",real_fee);
m_edt=tmp;
UpdateData(FALSE);
m_Grid.SetTextMatrix(m_Grid.GetRow(),6,(LPCTSTR)tmp);
SumCol(6,m_Grid.GetRows() - 1);
}
long x,y,cx,cy;
CRect rect;
m_Grid.GetWindowRect(&rect);
x= m_Grid.GetCellLeft() / 15 + 10 ;
y=m_Grid.GetCellTop();
y= rect.top + m_Grid.GetCellTop()/15 - 65;
cx=m_Grid.GetCellWidth() /15 + 1;
cy=m_Grid.GetCellHeight() /15 + 2;
GetDlgItem(IDC_EDT)->SetWindowPos(&wndTop,x,y,cx,cy,SWP_SHOWWINDOW);
GetDlgItem(IDC_EDT)->SetFocus();
GetDlgItem(IDC_EDT)->SendMessage(EM_SETLIMITTEXT,10,0);
GetDlgItem(IDC_EDT)->SendMessage(EM_SETSEL,0,-1);
//::SendMessage((HWND)GetDlgItem(IDC_EDT),WM_SETFOCUS,(HWND)GetDlgItem(IDC_EDT),0);
}
BEGIN_EVENTSINK_MAP(CSaleView, CFormView)
//{{AFX_EVENTSINK_MAP(CSaleView)
ON_EVENT(CSaleView, IDC_MSFLEXGRID1, -600 /* Click */, OnCellClick, VTS_NONE)
ON_EVENT(CSaleView, IDC_MSFLEXGRID1, 71 /* EnterCell */, OnEnterCellMsflexgrid1, VTS_NONE)
ON_EVENT(CSaleView, IDC_MSFLEXGRID1, 73 /* Scroll */, OnScrollMsflexgrid1, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CSaleView::OnCellClick()
{
if(m_Grid.GetRow()>0 || m_Grid.GetCol()>1 )
SetEdtPos();
}
void CSaleView::MoveEdt(MSG *pMsg)
{
switch( pMsg->wParam)
{
case VK_LEFT:
if(m_Grid.GetCol()>2)
m_Grid.SetCol(m_Grid.GetCol() - 1);
else
if(m_Grid.GetCol()== 2 && m_Grid.GetRow() > 1 )
{
m_Grid.SetRow(m_Grid.GetRow() - 1);
m_Grid.SetCol(m_Grid.GetCols() - 1);
}
SetEdtPos();
break;
case VK_RIGHT:
case VK_RETURN:
if(m_Grid.GetCol()< m_Grid.GetCols() - 1)
m_Grid.SetCol(m_Grid.GetCol() + 1);
else
if (m_Grid.GetCol() == m_Grid.GetCols() - 1 && m_Grid.GetRow() < m_Grid.GetRows() - 2)
{
m_Grid.SetRow(m_Grid.GetRow() + 1);
m_Grid.SetCol(2);
}
SetEdtPos();
break;
case VK_UP:
if(m_Grid.GetRow() > 1)
m_Grid.SetRow(m_Grid.GetRow() - 1);
SetEdtPos();
break;
case VK_DOWN:
if(m_Grid.GetRow() < m_Grid.GetRows() - 2)
m_Grid.SetRow(m_Grid.GetRow() + 1 );
SetEdtPos();
break;
}
}
BOOL CSaleView::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN )
MoveEdt(pMsg);
return CFormView::PreTranslateMessage(pMsg);
}
void CSaleView::OnEnterCellMsflexgrid1()
{
m_edt.Empty();
m_edt=m_Grid.GetText();
UpdateData(FALSE);
}
void CSaleView::OnSelchangeHospitalComb()
{
UpdateData();
m_Grid.SetRedraw(FALSE);
m_Grid.SetRows(2);
int cols=m_Grid.GetCols();
DBLibrary DB(((CPhysicMApp *)AfxGetApp())->DBSession);
try{
char tmp[50],pn[40];
long id;
CString m_id,p_id;
m_HospitalComb.GetWindowText(m_id);
p_id=m_id.Mid(1,3);
DB.Open("select doctor_id did,doctor_name dn from doctor where hospital_id = %s order by doctor_id",p_id);
memset(tmp,0,50);
int i=1;
while(!DB.isEof())
{
m_Grid.SetRows(m_Grid.GetRows()+1);
m_Grid.SetRow(m_Grid.GetRows()-1);
m_Grid.SetRowHeight(m_Grid.GetRows() - 1,310);
sprintf(pn,"%03d",i);
m_Grid.SetTextMatrix(i,0,pn);
memset(pn,0,40);
id=DB.GetValue("did");
DB.GetValue("dn",pn);
sprintf(tmp,"[%03d]%s",id,pn);
m_Grid.SetTextMatrix(i,1,tmp);
sprintf(tmp,"%.2f",m_dt_rate);
for (int j=2;j<cols;j++)
(j==3) ? m_Grid.SetTextMatrix(i,3,tmp) : m_Grid.SetTextMatrix(i,j,"");
i++;
DB.Next();
}
if (i==1) return;
m_Grid.SetCellAlignment(4);
m_Grid.SetTextMatrix(i,0,"合 计");
m_Grid.SetTextMatrix(i,1,"合 计");
m_Grid.SetMergeRow(i,TRUE);
m_Grid.SetRedraw(TRUE);
m_Grid.SetRow(1);
SetEdtPos();
}catch (DBErr &err)
{
char *str;
int code;
err.GetLastErr(code,&str);
((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(%d)",str,code);
}
catch (...)
{
((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1);
}
}
bool CSaleView::CheckGrid(CMSFlexGrid *pGrid)
{
CString dt,did;
CString num,price,sub_fee,real_fee,date,dt_rate;
char errstr[100];
int rt,count=0,rows=pGrid->GetRows()-1;
try{
for (rt=1;rt<rows;rt++)
{
dt=m_Grid.GetTextMatrix(rt,1);
did=dt.Mid(1,3);
did.TrimLeft();
did.TrimRight();
num=m_Grid.GetTextMatrix(rt,2);
dt_rate=m_Grid.GetTextMatrix(rt,3);
price=m_Grid.GetTextMatrix(rt,4);
sub_fee=m_Grid.GetTextMatrix(rt,5);
real_fee=m_Grid.GetTextMatrix(rt,6);
date=m_Grid.GetTextMatrix(rt,7);
num.TrimLeft();
num.TrimRight();
if (atof(num) <= 0.00) continue;
price.TrimLeft();
price.TrimRight();
if (price.IsEmpty()) price="0";
sub_fee.TrimLeft();
sub_fee.TrimRight();
if (sub_fee.IsEmpty()) sub_fee="0";
date.TrimLeft();
date.TrimRight();
if (date.IsEmpty())
{
sprintf(errstr,"销售日期不能为空(第%d行),请输入",rt);
throw errstr;
}
if(date.GetLength() != 10)
{
sprintf(errstr,"销售日期有误(第%d行),请检查",rt);
throw errstr;
}
int year,month,day;
year=atoi(date.Mid(0,4));
month=atoi(date.Mid(5,2));
day=atoi(date.Mid(8,2));
COleDateTime dt;
if (dt.SetDate(year,month,day) != 0)
{
sprintf(errstr,"销售日期%s有误(第%d行),请更正",date,rt);
throw errstr;
}
date=dt.Format("%Y-%m-%d");
if (did.IsEmpty()) {
sprintf(errstr,"第%d行医生编号有误",rt);
throw errstr;
}
count++;
}
if (count == 0) throw "没有内容需要增加";
return TRUE;
}
catch (char *estr)
{
((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr(estr);
return FALSE;
}
catch(...)
{
((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1);
return FALSE;
}
}
void CSaleView::SumCol(int col,int rows)
{
double sum=0.00;
for (int i=1;i< rows;i++)
sum += atof(m_Grid.GetTextMatrix(i,col));
char str[20];
sprintf(str,"%.2f",sum);
m_Grid.SetTextMatrix(rows,col,(LPCTSTR) str);
}
void CSaleView::OnChangeEdt()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CFormView::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
UpdateData();
m_Grid.SetText(m_edt);
char tmp[20];
double pay_fee=0.00;
//输入数量
if(m_Grid.GetCol() == 2)
{
pay_fee=atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),3)) * atof(m_edt);
sprintf(tmp,"%.2f",pay_fee);
m_Grid.SetTextMatrix(m_Grid.GetRow(),4,(LPCTSTR)tmp);
m_Grid.SetTextMatrix(m_Grid.GetRow(),6,(LPCTSTR)tmp);
SumCol(4,m_Grid.GetRows() - 1);
SumCol(m_Grid.GetCol(),m_Grid.GetRows() - 1);
SumCol(6,m_Grid.GetRows() - 1);
return;
}
//临床费
if(m_Grid.GetCol()==3)
{
pay_fee=atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),2)) * atof(m_edt);
sprintf(tmp,"%.2f",pay_fee);
m_Grid.SetTextMatrix(m_Grid.GetRow(),4,(LPCTSTR)tmp);
m_Grid.SetTextMatrix(m_Grid.GetRow(),6,(LPCTSTR)tmp);
SumCol(4,m_Grid.GetRows() - 1);
SumCol(6,m_Grid.GetRows() - 1);
return;
}
if (m_Grid.GetCol() == 4)
{
double real_fee=0.00;
real_fee = atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),4)) - atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),5));
sprintf(tmp,"%.2f",real_fee);
m_Grid.SetTextMatrix(m_Grid.GetRow(),6,(LPCTSTR)tmp);
SumCol(6,m_Grid.GetRows() - 1);
}
if (m_Grid.GetCol() == 7 ) return;
SumCol(m_Grid.GetCol(),m_Grid.GetRows() - 1);
}
CDBSession CSaleView::GetDB()
{
return ((CPhysicMApp *)AfxGetApp())->DBSession;
}
void CSaleView::ShowErr(char *str,int code)
{
if(((CPhysicMApp *)AfxGetApp())->pMainFrm==NULL)
{
MessageBox(str,"错误提示",MB_OK | MB_ICONERROR);
return;
}
((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(errcode:%d)",str,code);
}
void CSaleView::GetHospital()
{
m_HospitalComb.ResetContent();
try{
DBLibrary DB(GetDB());
int id=0;
char pn[40],tmp[50];
memset(tmp,0,50);
memset(pn,0,40);
DB.Open("select hospital_id hid,hospital_name hn from hospital order by hospital_id");
memset(tmp,0,50);
memset(pn,0,40);
while(!DB.isEof())
{
id=DB.GetValue("hid");
DB.GetValue("hn",pn);
sprintf(tmp,"[%03d]%s",id,pn);
m_HospitalComb.AddString(tmp);
DB.Next();
}
}catch (DBErr &err)
{
char *str;
int code;
err.GetLastErr(code,&str);
//((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(%d)",str,code);
ShowErr(str,code);
}
catch (...)
{
ShowErr("unknow error",-1);
//((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1);
}
}
void CSaleView::OnScrollMsflexgrid1()
{
GetDlgItem(IDC_EDT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_DEDIT)->SetFocus();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -