TakeOutEditDlg.cpp
上传用户:biney012
上传日期:2022-05-09
资源大小:4592k
文件大小:8k
源码类别:

数据库系统

开发平台:

Visual C++

  1. // TakeOutEditDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Stock.h"
  5. #include "TakeOutEditDlg.h"
  6. #include "COMDEF.H"
  7. #include "Columns.h"
  8. #include "Column.h"
  9. #include "_recordset.h"
  10. #include "ProInStore.h"
  11. #include "TakeOut.h"
  12. extern CUsers curUser;
  13. #ifdef _DEBUG
  14. #define new DEBUG_NEW
  15. #undef THIS_FILE
  16. static char THIS_FILE[] = __FILE__;
  17. #endif
  18. /////////////////////////////////////////////////////////////////////////////
  19. // CTakeOutEditDlg dialog
  20. CTakeOutEditDlg::CTakeOutEditDlg(CWnd* pParent /*=NULL*/)
  21. : CDialog(CTakeOutEditDlg::IDD, pParent)
  22. {
  23. //{{AFX_DATA_INIT(CTakeOutEditDlg)
  24. m_OptDate = _T("");
  25. m_Pprice = _T("");
  26. m_User = _T("");
  27. m_Pnum1 = _T("");
  28. m_Pnum = 0;
  29. //}}AFX_DATA_INIT
  30. }
  31. void CTakeOutEditDlg::DoDataExchange(CDataExchange* pDX)
  32. {
  33. CDialog::DoDataExchange(pDX);
  34. //{{AFX_DATA_MAP(CTakeOutEditDlg)
  35. DDX_Control(pDX, IDC_TYPE_COMBO, m_Type);
  36. DDX_Control(pDX, IDC_CLTTYPE_COMBO, m_CltType);
  37. DDX_Control(pDX, IDC_ADODC1, m_adodc1);
  38. DDX_Control(pDX, IDC_ADODC2, m_adodc2);
  39. DDX_Control(pDX, IDC_ADODC3, m_adodc3);
  40. DDX_Control(pDX, IDC_ADODC4, m_adodc4);
  41. DDX_Control(pDX, IDC_CLIENT_DATACOMBO, m_Client);
  42. DDX_Control(pDX, IDC_DATAGRID2, m_datagrid);
  43. DDX_Text(pDX, IDC_OPTDATE_STATIC, m_OptDate);
  44. DDX_Control(pDX, IDC_PNAME_DATACOMBO, m_Pname);
  45. DDX_Text(pDX, IDC_PPRICE_STATIC, m_Pprice);
  46. DDX_Control(pDX, IDC_PROTYPE1_DATACOMBO, m_ProType1);
  47. DDX_Control(pDX, IDC_PROTYPE2_DATACOMBO, m_ProType2);
  48. DDX_Control(pDX, IDC_STOREHOUSE_DATACOMBO, m_Storehouse);
  49. DDX_Text(pDX, IDC_USER_STATIC, m_User);
  50. DDX_Control(pDX, IDC_ADODC5, m_adodc5);
  51. DDX_Control(pDX, IDC_ADODC6, m_adodc6);
  52. DDX_Text(pDX, IDC_Pnum_STATIC, m_Pnum1);
  53. DDX_Text(pDX, IDC_PNUM_EDIT, m_Pnum);
  54. //}}AFX_DATA_MAP
  55. }
  56. BEGIN_MESSAGE_MAP(CTakeOutEditDlg, CDialog)
  57. //{{AFX_MSG_MAP(CTakeOutEditDlg)
  58. ON_CBN_SELCHANGE(IDC_CLTTYPE_COMBO, OnSelchangeClttypeCombo)
  59. //}}AFX_MSG_MAP
  60. END_MESSAGE_MAP()
  61. /////////////////////////////////////////////////////////////////////////////
  62. // CTakeOutEditDlg message handlers
  63. void CTakeOutEditDlg::Refresh_Data()
  64. {
  65. CString cPid;  //保存当前选择的产品编号
  66. if (m_Pname.GetBoundText() == "")
  67. cPid = "0";
  68. else
  69. cPid = m_Pname.GetBoundText();
  70. CString cSid; //保存当前选择的仓库编号
  71. if (m_Storehouse.GetBoundText() == "")
  72. cSid = "0";
  73. else
  74. cSid = m_Storehouse.GetBoundText();
  75. //设置SELECT语句
  76. CString cSource;
  77. cSource = "SELECT SpId, Pprice As 产品入库单价, Pnum As 库存数量, MakeDate As 生产日期";
  78. cSource += " FROM ProInStore WHERE Pid=" + cPid + " AND Sid=" + cSid;
  79. //设置记录源
  80. m_adodc6.SetRecordSource(cSource);
  81. m_adodc6.Refresh();
  82. //设置表格列宽度
  83. _variant_t vIndex;
  84. vIndex = long(0);
  85. m_datagrid.GetColumns().GetItem(vIndex).SetWidth(0);
  86. vIndex = long(1);
  87. m_datagrid.GetColumns().GetItem(vIndex).SetWidth(130);
  88. vIndex = long(2);
  89. m_datagrid.GetColumns().GetItem(vIndex).SetWidth(130);
  90. vIndex = long(3);
  91. m_datagrid.GetColumns().GetItem(vIndex).SetWidth(130);
  92. }
  93. BOOL CTakeOutEditDlg::OnInitDialog() 
  94. {
  95. CDialog::OnInitDialog();
  96. m_CltType.SetCurSel(0);  //设置客户类型
  97. m_Type.SetCurSel(0);  //设置出库类型
  98. CTime t = CTime::GetCurrentTime();  //读取当前系统日期
  99. m_User = curUser.GetUserName();  //自动设置操作人
  100. m_OptDate = t.Format("%Y-%m-%d");  //自动设置操作时间
  101. UpdateData(FALSE);
  102. //刷新库存产品表格
  103. Refresh_Data();
  104. return TRUE;  // return TRUE unless you set the focus to a control
  105.               // EXCEPTION: OCX Property Pages should return FALSE
  106. }
  107. void CTakeOutEditDlg::OnSelchangeClttypeCombo() 
  108. {
  109. //设置查询客户的SELECT语句
  110. CString cSource;
  111. cSource = "SELECT * FROM Client";
  112. //根据客户类别设置查询条件
  113. if (m_CltType.GetCurSel() == 0)
  114. cSource += " WHERE Ctype = 1";
  115. else
  116. cSource += " WHERE Ctype = 2";
  117. m_Client.SetText(""); //清除客户组合框的显示内容
  118. m_adodc1.SetRecordSource(cSource);  //设置数据源,重新客户列表
  119. m_adodc1.Refresh();
  120. }
  121. BEGIN_EVENTSINK_MAP(CTakeOutEditDlg, CDialog)
  122.     //{{AFX_EVENTSINK_MAP(CTakeOutEditDlg)
  123. ON_EVENT(CTakeOutEditDlg, IDC_PROTYPE1_DATACOMBO, -600 /* Click */, OnClickProtype1Datacombo, VTS_I2)
  124. ON_EVENT(CTakeOutEditDlg, IDC_PROTYPE2_DATACOMBO, -600 /* Click */, OnClickProtype2Datacombo, VTS_I2)
  125. ON_EVENT(CTakeOutEditDlg, IDC_PNAME_DATACOMBO, -600 /* Click */, OnClickPnameDatacombo, VTS_I2)
  126. ON_EVENT(CTakeOutEditDlg, IDC_STOREHOUSE_DATACOMBO, -600 /* Click */, OnClickStorehouseDatacombo, VTS_I2)
  127. ON_EVENT(CTakeOutEditDlg, IDC_DATAGRID2, -600 /* Click */, OnClickDatagrid2, VTS_NONE)
  128. //}}AFX_EVENTSINK_MAP
  129. END_EVENTSINK_MAP()
  130. void CTakeOutEditDlg::OnClickProtype1Datacombo(short Area) 
  131. {
  132. //读取一级产品类别编号
  133. CString cUpperId;
  134. cUpperId = m_ProType1.GetBoundText();
  135. if (cUpperId == "")
  136. cUpperId = "0";
  137. //设置查询二级产品类型的SELECT语句
  138. CString cSource;
  139. cSource = "SELECT * FROM ProType WHERE UpperId=" + cUpperId;
  140. m_ProType2.SetText("");
  141. //设置m_adodc3,从而刷新二级产品类别的列表
  142. m_adodc3.SetRecordSource(cSource);
  143. m_adodc3.Refresh();
  144. //设置产品列表框,因为没有选中二级产品类别,所以要清空产品列表框
  145. cSource = "SELECT * FROM Product WHERE TypeId=0";
  146. m_Pname.SetText("");
  147. //设置m_adodc3,从而刷新二级产品类别的列表
  148. m_adodc4.SetRecordSource(cSource);
  149. m_adodc4.Refresh();
  150. //刷新库存产品表格
  151. Refresh_Data();
  152. }
  153. void CTakeOutEditDlg::OnClickProtype2Datacombo(short Area) 
  154. {
  155. // TODO: Add your control notification handler code here
  156. //读取二级产品类别编号
  157. CString cTypeId;
  158. cTypeId = m_ProType2.GetBoundText();
  159. if (cTypeId == "")
  160. cTypeId = "0";
  161. //设置查询二级产品类型的SELECT语句
  162. CString cSource;
  163. cSource = "SELECT * FROM Product WHERE TypeId=" + cTypeId;
  164. m_Pname.SetText("");
  165. //设置m_adodc3,从而刷新二级产品类别的列表
  166. m_adodc4.SetRecordSource(cSource);
  167. m_adodc4.Refresh();
  168. //刷新库存产品表格
  169. Refresh_Data();
  170. }
  171. void CTakeOutEditDlg::OnClickPnameDatacombo(short Area) 
  172. {
  173. //刷新库存产品表格
  174. Refresh_Data();
  175. }
  176. void CTakeOutEditDlg::OnClickStorehouseDatacombo(short Area) 
  177. {
  178. //刷新库存产品表格
  179. Refresh_Data();
  180. }
  181. void CTakeOutEditDlg::OnClickDatagrid2() 
  182. {
  183. // TODO: Add your control notification handler code here
  184. if (m_adodc6.GetRecordset().GetEof())
  185. {
  186. m_Pprice = "0"; //产品价格设置为0
  187. m_Pnum1 = "0"; //产品数量设置为0
  188. }
  189. else
  190. {
  191. m_Pprice = m_datagrid.GetItem(1); //从表格中读取产品价格
  192. m_Pnum1 = m_datagrid.GetItem(2); //从表格中读取产品库存数量
  193. }
  194. UpdateData(FALSE);
  195. }
  196. void CTakeOutEditDlg::OnOK() 
  197. {
  198. UpdateData(TRUE);  //将输入数据读取到成员变量
  199. //判断输入数据是否有效
  200. if (m_Client.GetBoundText() == "")
  201. {
  202. MessageBox("请选择客户");
  203. return;
  204. }
  205. if (m_Pname.GetBoundText() == "")
  206. {
  207. MessageBox("请选择产品");
  208. return;
  209. }
  210. if (m_Storehouse.GetBoundText() == "")
  211. {
  212. MessageBox("请选择仓库");
  213. return;
  214. }
  215. if (m_Pnum == 0)
  216. {
  217. MessageBox("请输入出库产品数量");
  218. return;
  219. }
  220. if (m_adodc6.GetRecordset().GetEof())
  221. {
  222. MessageBox("请选择要出库的库存产品记录");
  223. return;
  224. }
  225. // 从库存产品表中读取当前的产品数量
  226. // 因为此库存产品可能在其他客户端被出库,从而导致库存数量变量
  227. CProInStore pi;
  228. pi.GetData(m_datagrid.GetItem(0));
  229. if (m_Pnum > pi.GetPnum())
  230. {
  231. MessageBox("出库数量大于库存数量");
  232. m_Pnum1 = pi.GetPnum(); //显示新的库存数量
  233. UpdateData(FALSE);
  234. return;
  235. }
  236. //保存出库信息
  237. CTakeOut to;
  238. int index;
  239. index = m_Type.GetCurSel();
  240. CString cType;
  241. m_Type.GetLBText(index, cType);
  242. to.SetTtype(cType); //出库类型
  243. to.SetPid(atoi(m_Pname.GetBoundText())); //产品编号
  244. to.SetPprice(atof(m_Pprice)); //单价
  245. to.SetPnum(m_Pnum); //数量
  246. to.SetCid(atoi(m_Client.GetBoundText())); //客户编号
  247. to.SetSid(atoi(m_Storehouse.GetBoundText())); //仓库编号
  248. to.SetEmpName(m_User); //操作用户
  249. to.SetOptDate(m_OptDate); //操作日期
  250. //插入出库数量
  251. to.sql_insert();
  252. //@@@@@  保存库存产品信息  @@@@@
  253. pi.SetPid(atoi(m_Pname.GetBoundText())); //产品编号
  254. pi.SetPprice(atof(m_Pprice)); //单价
  255. pi.SetPnum(m_Pnum * (-1)); //数量(因为要减去库存,所以乘以-1)
  256. CString cMakeDate;
  257. cMakeDate = m_datagrid.GetItem(3);
  258. pi.SetMakeDate(cMakeDate); //生产日期
  259. pi.SetSid(atoi(m_Storehouse.GetBoundText())); //仓库编号
  260. //如果不存在当前库存产品,则插入新记录,否则更新库存数量
  261. CString cPid;
  262. cPid.Format("%d", pi.GetPid());
  263. CString cSid;
  264. cSid.Format("%d", pi.GetSid());
  265. if (pi.HaveData(cPid, m_Pprice, pi.GetMakeDate(), cSid) == 1)
  266. pi.sql_updateDiff(cPid, m_Pprice, pi.GetMakeDate(), cSid);
  267. else
  268. pi.sql_insert();
  269. CDialog::OnOK();
  270. }