U_clsld.pas
上传用户:psxgmh
上传日期:2013-04-08
资源大小:15112k
文件大小:15k
源码类别:

Delphi/CppBuilder

开发平台:

Delphi

  1. unit U_clsld;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   StdCtrls, DBCtrls, Buttons, Mask, Grids, DBGrids, ExtCtrls, Db, DBClient,
  6.   ComCtrls, Menus, ImgList, QuickRpt, Qrctrls, variants;
  7. type
  8.   TfrmClsld = class(TForm)
  9.     ScrollBox2: TScrollBox;
  10.     pnl_detail: TPanel;
  11.     DBGrid: TDBGrid;
  12.     pnl_operate: TPanel;
  13.     btn_insert: TSpeedButton;
  14.     btn_find: TSpeedButton;
  15.     btn_save: TSpeedButton;
  16.     btn_cancel: TSpeedButton;
  17.     btn_delete: TSpeedButton;
  18.     btn_edit: TSpeedButton;
  19.     btn_refresh: TSpeedButton;
  20.     DBNavigator: TDBNavigator;
  21.     pnl_Main: TPanel;
  22.     Label1: TLabel;
  23.     Label2: TLabel;
  24.     Label3: TLabel;
  25.     Label4: TLabel;
  26.     Label5: TLabel;
  27.     Label6: TLabel;
  28.     Label7: TLabel;
  29.     Label8: TLabel;
  30.     Label9: TLabel;
  31.     Label10: TLabel;
  32.     Label14: TLabel;
  33.     Label15: TLabel;
  34.     Label39: TLabel;
  35.     edtSlzh: TDBEdit;
  36.     edtZdrq: TDBEdit;
  37.     edtGycj: TDBEdit;
  38.     edtWzly: TDBEdit;
  39.     edtCgr: TDBEdit;
  40.     edtHtbh: TDBEdit;
  41.     edtFpje: TDBEdit;
  42.     edtQzyzf: TDBEdit;
  43.     edtFph: TDBEdit;
  44.     edtShr: TDBEdit;
  45.     edtDjbz: TDBEdit;
  46.     cbSfsh: TDBCheckBox;
  47.     cmbCkmc: TDBComboBox;
  48.     pnl_Main1: TPanel;
  49.     Label11: TLabel;
  50.     Label12: TLabel;
  51.     Label13: TLabel;
  52.     edtZg: TDBEdit;
  53.     edtZdr: TDBEdit;
  54.     edtYsr: TDBEdit;
  55.     DataSource_Main: TDataSource;
  56.     DataSource_Detail: TDataSource;
  57.     StatusBar1: TStatusBar;
  58.     btn_cgr: TBitBtn;
  59.     btn_zg: TBitBtn;
  60.     btn_zdr: TBitBtn;
  61.     btn_ysr: TBitBtn;
  62.     Timer1: TTimer;
  63.     pm_Detail: TPopupMenu;
  64.     ImageList1: TImageList;
  65.     pmi_Insert: TMenuItem;
  66.     pmi_Delete: TMenuItem;
  67.     btn_print: TSpeedButton;
  68.     PopupMenu2: TPopupMenu;
  69.     N_Passed: TMenuItem;
  70.     N_NotPassed: TMenuItem;
  71.     N_All: TMenuItem;
  72.     QuickRep: TQuickRep;
  73.     QRBand1: TQRBand;
  74.     QRLabel1: TQRLabel;
  75.     QRLabel2: TQRLabel;
  76.     QRLabel3: TQRLabel;
  77.     QRDBText1: TQRDBText;
  78.     QRDBText2: TQRDBText;
  79.     QRDBText3: TQRDBText;
  80.     QRLabel7: TQRLabel;
  81.     QRLabel8: TQRLabel;
  82.     QRLabel9: TQRLabel;
  83.     QRDBText7: TQRDBText;
  84.     QRDBText8: TQRDBText;
  85.     QRDBText9: TQRDBText;
  86.     QRLabel10: TQRLabel;
  87.     QRDBText10: TQRDBText;
  88.     QRLabel4: TQRLabel;
  89.     QRLabel5: TQRLabel;
  90.     QRLabel6: TQRLabel;
  91.     QRDBText4: TQRDBText;
  92.     QRDBText5: TQRDBText;
  93.     QRDBText6: TQRDBText;
  94.     QRLabel11: TQRLabel;
  95.     QRLabel12: TQRLabel;
  96.     QRLabel13: TQRLabel;
  97.     QRDBText11: TQRDBText;
  98.     QRDBText12: TQRDBText;
  99.     QRDBText13: TQRDBText;
  100.     PageHeaderBand1: TQRBand;
  101.     QRLabel14: TQRLabel;
  102.     QRLabel22: TQRLabel;
  103.     QRSysData1: TQRSysData;
  104.     QRShape1: TQRShape;
  105.     QRSubDetail1: TQRSubDetail;
  106.     QRDBText14: TQRDBText;
  107.     QRDBText15: TQRDBText;
  108.     QRDBText16: TQRDBText;
  109.     QRDBText17: TQRDBText;
  110.     QRDBText18: TQRDBText;
  111.     QRDBText19: TQRDBText;
  112.     QRShape2: TQRShape;
  113.     SummaryBand1: TQRBand;
  114.     QRDBText22: TQRDBText;
  115.     QRDBText24: TQRDBText;
  116.     QRLabel21: TQRLabel;
  117.     QRLabel23: TQRLabel;
  118.     QRLabel24: TQRLabel;
  119.     QRDBText25: TQRDBText;
  120.     QRDBText26: TQRDBText;
  121.     QRDBText27: TQRDBText;
  122.     QRDBText28: TQRDBText;
  123.     QRLabel25: TQRLabel;
  124.     QRLabel26: TQRLabel;
  125.     QRLabel27: TQRLabel;
  126.     PageFooterBand1: TQRBand;
  127.     QRLabel28: TQRLabel;
  128.     QRLabel29: TQRLabel;
  129.     QRSysData2: TQRSysData;
  130.     ColumnHeaderBand1: TQRBand;
  131.     QRLabel15: TQRLabel;
  132.     QRLabel16: TQRLabel;
  133.     QRLabel17: TQRLabel;
  134.     QRLabel18: TQRLabel;
  135.     QRLabel19: TQRLabel;
  136.     QRLabel20: TQRLabel;
  137.     btn_gycj: TBitBtn;
  138.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  139.     procedure btn_insertClick(Sender: TObject);
  140.     procedure btn_editClick(Sender: TObject);
  141.     procedure btn_cancelClick(Sender: TObject);
  142.     procedure btn_saveClick(Sender: TObject);
  143.     procedure btn_cgrClick(Sender: TObject);
  144.     procedure btn_zgClick(Sender: TObject);
  145.     procedure btn_zdrClick(Sender: TObject);
  146.     procedure btn_ysrClick(Sender: TObject);
  147.     procedure btn_refreshClick(Sender: TObject);
  148.     procedure btn_findClick(Sender: TObject);
  149.     procedure btn_deleteClick(Sender: TObject);
  150.     procedure DBGridDblClick(Sender: TObject);
  151.     procedure Timer1Timer(Sender: TObject);
  152.     procedure pmi_InsertClick(Sender: TObject);
  153.     procedure pmi_DeleteClick(Sender: TObject);
  154.     procedure btn_printClick(Sender: TObject);
  155.     procedure FormShow(Sender: TObject);
  156.     procedure N_PassedClick(Sender: TObject);
  157.     procedure N_NotPassedClick(Sender: TObject);
  158.     procedure N_AllClick(Sender: TObject);
  159.   private
  160.     procedure btn_valid;
  161.     { Private declarations }
  162.   public
  163.     { Public declarations }
  164.   end;
  165. var
  166.   frmClsld: TfrmClsld;
  167. implementation
  168. uses U_mainform, WzglDB, u_public, U_fzlr_clbm, GenQ3;
  169. {$R *.DFM}
  170. procedure TfrmClsld.FormClose(Sender: TObject; var Action: TCloseAction);
  171. begin
  172.   action := cafree;
  173.   frmClsld := nil;
  174. end;
  175. procedure TfrmClsld.btn_insertClick(Sender: TObject);
  176. begin
  177.   //取消过滤
  178.   DM.CDS_CLSLD.filter := '';
  179.   DM.CDS_CLSLD.filtered := true;
  180.   //数据集处于添加状态
  181.   DM.CDS_CLSLD.Insert;
  182.   edtSlzh.enabled := true;
  183.   //改变组件的有效性
  184.   btn_valid;
  185.   cmbCkmc.SetFocus;
  186. end;
  187. procedure TfrmClsld.btn_valid;
  188. begin
  189.   DBNavigator.enabled := not dbnavigator.enabled;
  190.   btn_insert.enabled := not btn_insert.enabled;
  191.   btn_delete.enabled := not btn_delete.enabled;
  192.   btn_edit.enabled := not btn_edit.enabled;
  193.   btn_cancel.enabled := not btn_cancel.enabled;
  194.   btn_Save.enabled := not btn_Save.enabled;
  195.   btn_find.enabled := not btn_find.enabled;
  196.   btn_refresh.enabled := not btn_refresh.enabled;
  197.   btn_print.enabled := not btn_print.enabled;
  198.   //显示区的切换
  199.   pnl_Main.enabled := not pnl_Main.enabled;
  200.   pnl_Main1.enabled := not pnl_Main1.enabled;
  201.   //DBGrid中2、3、4、5字段状态切换,其他字段仍是只读
  202.   dbgrid.Columns[2].readonly := not dbgrid.Columns[2].readonly;
  203.   dbgrid.Columns[3].readonly := not dbgrid.Columns[3].readonly;
  204.   dbgrid.Columns[4].readonly := not dbgrid.Columns[4].readonly;
  205.   dbgrid.Columns[5].readonly := not dbgrid.Columns[5].readonly;
  206.   //辅助录入按钮的可见性切换
  207.   btn_gycj.visible := not btn_gycj.visible;
  208.   btn_cgr.visible := not btn_cgr.visible;
  209.   btn_zg.visible := not btn_zg.visible;
  210.   btn_zdr.visible := not btn_zdr.visible;
  211.   btn_ysr.visible := not btn_ysr.visible;
  212. end;
  213. procedure TfrmClsld.btn_editClick(Sender: TObject);
  214. begin
  215.   //先判断是否有记录可编辑
  216.   if DM.CDS_CLSLD.recordcount = 0 then
  217.   begin
  218.     application.MessageBox('没有记录不能编辑', '物资管理系统', mb_iconinformation + mb_defbutton1);
  219.     exit;
  220.   end;
  221.   //判断此单据是否已审核过了,如已审核,就不能修改
  222.   if DM.CDS_CLSLD.FieldByName('是否审核').value = true then
  223.   begin
  224.     application.messagebox('此单据已审核,不能编辑', '物资管理系统', mb_iconinformation + mb_defbutton1);
  225.     exit;
  226.   end;
  227.   //使数据集处于编辑状态
  228.   DM.CDS_CLSLD.edit;
  229.   edtSlzh.enabled := false;
  230.   //设置组件有效性
  231.   btn_valid;
  232.   cmbckmc.setfocus;
  233. end;
  234. procedure TfrmClsld.btn_cancelClick(Sender: TObject);
  235. begin
  236.   //撤消刚才的操作
  237.   DM.CDS_CLSLD.CancelUpdates;
  238.   //设置数据显示组件为不可用状态
  239.   btn_valid;
  240. end;
  241. procedure TfrmClsld.btn_saveClick(Sender: TObject);
  242. var
  243.   s_slzh: string;
  244. begin
  245.   //检查数据的有效性
  246.   if cmbCkmc.text = '' then
  247.   begin
  248.     application.MessageBox('仓库名称不能为空', '物资管理系统', mb_iconinformation + mb_defbutton1);
  249.     cmbCkmc.SetFocus;
  250.     exit;
  251.   end;
  252.   if length(trim(edtSlzh.text)) <> 9 then
  253.   begin
  254.     application.MessageBox('收料字号应为九位', '物资管理系统', mb_iconinformation + mb_defbutton1);
  255.     edtSlzh.SetFocus;
  256.     exit;
  257.   end;
  258.   //判断关键字是否重复
  259.   s_slzh := edtSlzh.Text;
  260.   DM.CDS_CLSLD_INDEX.IndexFieldNames := '收料字号';
  261.   DM.CDS_CLSLD_INDEX.Refresh;
  262.   if DM.CDS_CLSLD.state = dsinsert then
  263.   begin
  264.     if DM.CDS_CLSLD_INDEX.FindKey([s_slzh]) then
  265.     begin
  266.       application.MessageBox('收料字号已重复', '物资管理系统', mb_iconinformation + mb_defbutton1);
  267.       edtSlzh.SetFocus;
  268.       exit;
  269.     end;
  270.   end;
  271.   //提交、保存数据库
  272.   DM.CDS_CLSLD.Post;
  273.   DM.CDS_CLSLD.ApplyUpdates(0);
  274.   //设置数据显示组件为不可用状态
  275.   btn_valid;
  276. end;
  277. procedure TfrmClsld.btn_cgrClick(Sender: TObject);
  278. begin
  279.   DM.CDS_CLSLD.FieldByName('采购人').value := GetEmployeeName;
  280. end;
  281. procedure TfrmClsld.btn_zgClick(Sender: TObject);
  282. begin
  283.   DM.CDS_CLSLD.FieldByName('主管').value := GetEmployeeName;
  284. end;
  285. procedure TfrmClsld.btn_zdrClick(Sender: TObject);
  286. begin
  287.   DM.CDS_CLSLD.FieldByName('制单人').value := GetEmployeeName;
  288. end;
  289. procedure TfrmClsld.btn_ysrClick(Sender: TObject);
  290. begin
  291.   DM.CDS_CLSLD.FieldByName('验收人').value := GetEmployeeName;
  292. end;
  293. procedure TfrmClsld.btn_refreshClick(Sender: TObject);
  294. begin
  295.   DM.CDS_CLSLD.Refresh;
  296. end;
  297. procedure TfrmClsld.btn_findClick(Sender: TObject);
  298. var
  299.   GenQuery: TGenQ3;
  300. begin
  301.   GenQuery := TGenQ3.Create(self);
  302.   GenQuery.v_TableName := 'WZ_CLSLD_MAIN'; //设置表名
  303.   GenQuery.v_AppServName := frmMain.SocketConnection; //设置应用服务器连接
  304.   GenQuery.v_ProviderName := 'P_General'; //设置获取数据集的提供者
  305.   //==添加定位字段,“;”前表示实际字段名,‘;’后表示实际字段的别名
  306.   GenQuery.v_fieldsstrings.Add('收料字号;收料字号');
  307.   GenQuery.v_fieldsstrings.Add('仓库名称;仓库名称');
  308.   GenQuery.v_fieldsstrings.Add('制单日期;制单日期');
  309.   GenQuery.v_fieldsstrings.Add('供应厂家;供应厂家');
  310.   GenQuery.v_fieldsstrings.Add('物资来源;物资来源');
  311.   GenQuery.v_fieldsstrings.Add('采购人;采购人');
  312.   GenQuery.v_fieldsstrings.Add('合同编号;合同编号');
  313.   GenQuery.v_fieldsstrings.Add('发票金额;发票金额');
  314.   GenQuery.v_fieldsstrings.Add('主管;主管');
  315.   GenQuery.v_fieldsstrings.Add('制单人;制单人');
  316.   GenQuery.v_fieldsstrings.Add('验收人;验收人');
  317.   GenQuery.v_fieldsstrings.Add('审核人;审核人');
  318.   //打开窗口
  319.   if GenQuery.execute then
  320.   begin
  321.     //给CDS_CLSLD_CX的过滤条件赋值
  322.     DM.CDS_CLSLD.filter := GenQuery.V_filtervalue;
  323.     DM.CDS_CLSLD.filtered := true;
  324.   end;
  325. end;
  326. procedure TfrmClsld.btn_deleteClick(Sender: TObject);
  327. begin
  328.   //判断是否有记录可删除
  329.   if DM.CDS_CLSLD.recordcount = 0 then
  330.   begin
  331.     application.MessageBox('没有记录可删除', '物资管理系统', mb_iconinformation + mb_defbutton1);
  332.     exit;
  333.   end;
  334.   //确认删除
  335.   if application.messagebox('请确认是否要删除', '物资管理系统', mb_iconinformation + mb_yesno) = idyes then
  336.   begin
  337.     DM.CDS_CLSLD.delete;
  338.     DM.CDS_CLSLD.applyupdates(0);
  339.   end;
  340. end;
  341. procedure TfrmClsld.DBGridDblClick(Sender: TObject);
  342. begin
  343.   pmi_Insert.click;
  344. end;
  345. procedure TfrmClsld.Timer1Timer(Sender: TObject);
  346. begin
  347.   statusbar1.Panels[2].text := '共有:' + inttostr(DM.CDS_CLSLD.recordcount) + '条记录';
  348.   if DM.CDS_CLSLD.recordcount = 0 then
  349.     statusbar1.panels[1].text := ''
  350.   else if DM.CDS_CLSLD.fieldbyname('是否审核').value = true then
  351.     statusbar1.panels[1].text := '此单据已审核'
  352.   else if (DM.CDS_CLSLD.fieldbyname('是否审核').value = null) or (DM.CDS_CLSLD.fieldbyname('是否审核').value = false) then
  353.     statusbar1.panels[1].text := '此单据未审核';
  354.   statusbar1.refresh;
  355. end;
  356. procedure TfrmClsld.pmi_InsertClick(Sender: TObject);
  357. var
  358.   i: integer;
  359.   s_hint: string;
  360. begin
  361.   //判断是否在编辑状态下
  362.   if btn_edit.Enabled = true then
  363.   begin
  364.     application.MessageBox('请在编辑或添加状态下添加物资', '物资管理系统', mb_iconinformation + mb_defbutton1);
  365.     exit;
  366.   end;
  367.   //创建辅助录入窗口
  368.   application.createform(TfrmClbm_Fzlr, frmClbm_Fzlr);
  369.   try
  370.     frmClbm_Fzlr.showmodal;
  371.   finally
  372.     frmClbm_Fzlr.free;
  373.   //将选中的材料加到DBGrid中
  374.     for i := Low(ClbmRec) to High(clbmRec) do
  375.     begin
  376.       DM.CDS_CLSLD_DETAIL_INDEX.Active := True;
  377.       DM.CDS_CLSLD_DETAIL_INDEX.refresh;
  378.       DM.CDS_CLSLD_DETAIL_INDEX.Filter := '收料字号=' + '''' + DM.CDS_CLSLD.fieldbyname('收料字号').asstring + '''';
  379.       DM.CDS_CLSLD_DETAIL_INDEX.filtered := true;
  380.       DM.CDS_CLSLD_DETAIL_INDEX.IndexFieldNames := '材料编号';
  381.       //判断是否有重复的物资
  382.       if DM.CDS_CLSLD_DETAIL_INDEX.FindKey([clbmRec[i].clbm]) then
  383.       begin
  384.         s_hint := '已有材料编号为' + clbmRec[i].clbm + '的物资';
  385.         application.MessageBox(Pchar(s_hint), '物资管理系统', mb_iconinformation + mb_defbutton1);
  386.         continue;
  387.       end;
  388.       //添加进DM.CDS_CLSLD_DETAIL
  389.       DM.CDS_CLSLD_DETAIL.insert;
  390.       DM.CDS_CLSLD_DETAIL.fieldbyname('材料编号').value := ClbmRec[i].clbm;
  391.       DM.CDS_CLSLD_DETAIL.fieldbyname('材料名称').value := ClbmRec[i].clmc;
  392.       DM.CDS_CLSLD_DETAIL.fieldbyname('规格型号').value := ClbmRec[i].ggxh;
  393.       DM.CDS_CLSLD_DETAIL.fieldbyname('计量单位').value := ClbmRec[i].jldw;
  394.       DM.CDS_CLSLD_DETAIL.fieldbyname('计划单价').value := ClbmRec[i].jhdj;
  395.       DM.CDS_CLSLD_DETAIL.fieldbyname('单价单位').value := ClbmRec[i].djdw;
  396.       DM.CDS_CLSLD_DETAIL.fieldbyname('凭证数量').value := 0.0;
  397.       DM.CDS_CLSLD_DETAIL.fieldbyname('实收数量').value := 0.0;
  398.       DM.CDS_CLSLD_DETAIL.post;
  399.     end;
  400.   end;
  401.   dbgrid.Refresh;
  402. end;
  403. procedure TfrmClsld.pmi_DeleteClick(Sender: TObject);
  404. begin
  405.   //判断是否有记录可删除
  406.   if DM.CDS_CLSLD_DETAIL.recordcount = 0 then
  407.   begin
  408.     application.MessageBox('没有记录可删除', '物资管理系统', mb_iconinformation + mb_defbutton1);
  409.     exit;
  410.   end;
  411.   //判断是否在浏览状态下
  412.   if (btn_edit.enabled = false) then
  413.   begin
  414.     application.MessageBox('请在浏览状态下删除物资', '物资管理系统', mb_iconinformation + mb_defbutton1);
  415.     exit;
  416.   end;
  417.   if application.messagebox('请确认是否要删除', '物资管理系统', mb_iconinformation + mb_yesno) = idyes then
  418.   begin
  419.     DM.CDS_CLSLD_DETAIL.delete;
  420.   end;
  421.   DM.CDS_CLSLD.applyupdates(0);
  422. end;
  423. procedure TfrmClsld.btn_printClick(Sender: TObject);
  424. var
  425.   s_filter: string;
  426.   my_bookmark: Tbookmark;
  427. begin
  428.   s_filter := DM.CDS_CLSLD.Filter;
  429.   my_bookmark := DM.CDS_CLSLD.GetBookmark;
  430.   DM.CDS_CLSLD.Filter := '收料字号=' + '''' + DM.CDS_CLSLD.fieldbyname('收料字号').asstring + '''';
  431.   DM.CDS_CLSLD.Filtered := true;
  432.   quickrep.Preview;
  433.   DM.CDS_CLSLD.Filter := s_filter;
  434.   DM.CDS_CLSLD.Filtered := true;
  435.   DM.CDS_CLSLD.GotoBookmark(my_bookmark);
  436. end;
  437. procedure TfrmClsld.FormShow(Sender: TObject);
  438. var
  439.   s_value: string;
  440. begin
  441.   //激活仓库信息表
  442.   DM.CDS_CKXX_INDEX.Active := True;
  443.   DM.CDS_CKXX_INDEX.First;
  444.   cmbCkmc.Items.Clear ;
  445.   //循环向下拉框写入仓库名称
  446.   while not DM.CDS_CKXX_INDEX.eof do
  447.   begin
  448.     s_value := DM.CDS_CKXX_INDEX.fieldbyname('仓库名称').asstring;
  449.     cmbCkmc.Items.Add(s_value);
  450.     DM.CDS_CKXX_INDEX.next;
  451.   end;
  452.   with DM do
  453.   begin
  454.     CDS_CLSLD_DETAIL.Close;
  455.     CDS_CLSLD.Close;
  456.     CDS_CLSLD_INDEX.Close;
  457.     CDS_CLSLD_DETAIL_INDEX.Close;
  458.     CDS_CLSLD.Open;
  459.     CDS_CLSLD_DETAIL.Open;
  460.     CDS_CLSLD_INDEX.Open;
  461.     CDS_CLSLD_DETAIL.Open;
  462.   end;
  463. end;
  464. procedure TfrmClsld.N_PassedClick(Sender: TObject);
  465. begin
  466.   DM.CDS_CLSLD.DisableControls;
  467.   DM.CDS_CLSLD.Filtered := False;
  468.   DM.CDS_CLSLD.Filter := '是否审核=True';
  469.   DM.CDS_CLSLD.Filtered := True;
  470.   DM.CDS_CLSLD.EnableControls;
  471. end;
  472. procedure TfrmClsld.N_NotPassedClick(Sender: TObject);
  473. begin
  474.   DM.CDS_CLSLD.DisableControls;
  475.   DM.CDS_CLSLD.Filtered := False;
  476.   DM.CDS_CLSLD.Filter := '是否审核=False';
  477.   DM.CDS_CLSLD.Filtered := True;
  478.   DM.CDS_CLSLD.EnableControls;
  479. end;
  480. procedure TfrmClsld.N_AllClick(Sender: TObject);
  481. begin
  482.   DM.CDS_CLSLD.Filtered := False;
  483. end;
  484. end.