unit U_WorkerDeptFeeInPut; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, cxGridLevel, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses, cxControls, cxGridCustomView, cxGrid, cxMemo, cxRichEdit, ComCtrls, cxContainer, cxTextEdit, cxMaskEdit, cxButtonEdit, StdCtrls, ToolWin, DBClient, ADODB, ExtCtrls, BtnEdit, cxDropDownEdit, cxCalendar, cxGridCustomPopupMenu, cxGridPopupMenu; type TfrmWorkerDeptFeeInPut = class(TForm) ToolBar1: TToolBar; TBSave: TToolButton; TBClose: TToolButton; ScrollBox1: TScrollBox; ToolBar2: TToolBar; ToolButton1: TToolButton; ToolButton2: TToolButton; cxGrid1: TcxGrid; Tv1: TcxGridDBTableView; cxGrid1Level1: TcxGridLevel; ADOTemp: TADOQuery; ADOCmd: TADOQuery; DataSource1: TDataSource; Order_Sub: TClientDataSet; ADOZDY: TADOQuery; ADOQuery1: TADOQuery; v1Column3: TcxGridDBColumn; v1Column9: TcxGridDBColumn; v1MSMoney: TcxGridDBColumn; cxGridPopupMenu1: TcxGridPopupMenu; v1Column5: TcxGridDBColumn; Panel1: TPanel; Label1: TLabel; Label2: TLabel; Label5: TLabel; Label9: TLabel; Label4: TLabel; WFDate: TDateTimePicker; Worker: TBtnEditA; Note: TEdit; Dept: TBtnEditA; v1Column1: TcxGridDBColumn; v1Column4: TcxGridDBColumn; v1Column6: TcxGridDBColumn; v1Column7: TcxGridDBColumn; v1Column8: TcxGridDBColumn; Label3: TLabel; WFTypeSub: TBtnEditA; Label6: TLabel; BZType: TComboBox; WFType: TComboBox; Label7: TLabel; WFPayType: TBtnEditA; Label8: TLabel; BankName: TEdit; Label10: TLabel; BankNo: TEdit; v1Column10: TcxGridDBColumn; v1Column11: TcxGridDBColumn; Label11: TLabel; FactoryName: TBtnEditA; procedure TBCloseClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure TBSaveClick(Sender: TObject); procedure ToolButton1Click(Sender: TObject); procedure ToolButton2Click(Sender: TObject); procedure WorkerBtnClick(Sender: TObject); procedure v1Column3PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure WFTypeBtnClick(Sender: TObject); procedure v1Column7PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure v1Column5PropertiesEditValueChanged(Sender: TObject); procedure DeptBtnClick(Sender: TObject); procedure WFTypeSubBtnClick(Sender: TObject); procedure WFPayTypeBtnClick(Sender: TObject); procedure FactoryNameBtnClick(Sender: TObject); private FXS:Integer; procedure InitData(); procedure ZDYHelp(FButn:TcxButtonEdit;LType:string); function SaveData():Boolean; procedure GetMaxConNO(); { Private declarations } public PState,PCopyInt:Integer; FMainId,FConNo,FConType:String; { Public declarations } end; var frmWorkerDeptFeeInPut: TfrmWorkerDeptFeeInPut; implementation uses U_DataLink,U_ZDYHelp,U_RTFun, U_ZdyAttachGYS; {$R *.dfm} procedure TfrmWorkerDeptFeeInPut.TBCloseClick(Sender: TObject); begin Close; WriteCxGrid('费用报销录入',Tv1,'费用管理'); end; procedure TfrmWorkerDeptFeeInPut.InitData(); begin with ADOQuery1 do begin Close; SQL.Clear; sql.Add('select * from Worker_Fee_Main'); sql.Add(' where WFID='''+Trim(FMainId)+''''); Open; end; SCSHDataNew(ADOQuery1,Panel1,0); with ADOQuery1 do begin Close; SQL.Clear; sql.Add('select * from Worker_Fee_Sub '); sql.Add(' where WFID='''+Trim(FMainId)+''''); Open; end; SCreateCDS20(ADOQuery1,Order_Sub); SInitCDSData20(ADOQuery1,Order_Sub); if PState=0 then begin WFDate.DateTime:=SGetServerDate(ADOTemp); // WFDate.Checked:=False; if Trim(DParameters1)<>'高权限' then begin Worker.Text:=Trim(DName); end; end; if PCopyInt=1 then begin FMainId:=''; Order_Sub.DisableControls; with Order_Sub do begin First; while not Eof do begin Edit; FieldByName('WFID').Value:=null; FieldByName('WSID').Value:=null; FieldByName('BXMoney').Value:=null; FieldByName('YiChongMoney').Value:=null; Post; Next; end; end; Order_Sub.EnableControls; end; end; procedure TfrmWorkerDeptFeeInPut.ZDYHelp(FButn:TcxButtonEdit;LType:string); begin end; procedure TfrmWorkerDeptFeeInPut.FormShow(Sender: TObject); begin ReadCxGrid('费用报销录入',Tv1,'费用管理'); InitData(); end; procedure TfrmWorkerDeptFeeInPut.GetMaxConNO(); begin end; function TfrmWorkerDeptFeeInPut.SaveData():Boolean; var maxno,maxSubNo:String; begin try Result:=False; ADOCmd.Connection.BeginTrans; //保存主表 if Trim(FMainId)='' then begin if GetLSNo(ADOCmd,maxno,'WF','Worker_Fee_Main',3,1)=False then begin ADOCmd.Connection.RollbackTrans; Application.MessageBox('取费用报销主流水号失败!','提示',0); Exit; end; end else begin maxno:=Trim(FMainId); end; with ADOCmd do begin Close; sql.Clear; SQL.Add('select * from Worker_Fee_Main where WFId='''+Trim(FMainId)+''''); Open; end; with ADOCmd do begin if Trim(FMainId)='' then begin Append; end else begin Edit; end; FieldByName('WFId').Value:=Trim(maxno); RTSetsavedata(ADOCmd,'Worker_Fee_Main',Panel1,0); FieldByName('BXNO').Value:='BX'+Trim(maxno); if Trim(FMainId)='' then begin FieldByName('Filler').Value:=Trim(DName); FieldByName('FillerCode').Value:=Trim(DCode); end else begin FieldByName('Editer').Value:=Trim(DName); FieldByName('EditerCode').Value:=Trim(DCode); FieldByName('EditTime').Value:=SGetServerDateTime(ADOTemp); end; Post; end; ///保存子表 with Order_Sub do begin First; while not Eof do begin if Trim(Order_Sub.fieldbyname('WSId').AsString)='' then begin if GetLSNo(ADOCmd,maxSubNo,'WS','Worker_Fee_Sub',4,1)=False then begin ADOCmd.Connection.RollbackTrans; Application.MessageBox('生成费用报销子表流水号异常!','提示',0); exit; end; end else begin maxSubNo:=Trim(Order_Sub.fieldbyname('WSId').AsString); end; with ADOCmd do begin Close; SQL.Clear; sql.Add('select * from Worker_Fee_Sub where '); sql.Add(' WSId='''+Trim(maxSubNo)+''''); Open; end; with ADOCmd do begin if Trim(Order_Sub.fieldbyname('WSId').AsString)='' then Append else Edit; FieldByName('WFID').Value:=Trim(maxno); FieldByName('WSId').Value:=Trim(maxSubNo); RTSetSaveDataCDS(ADOCmd,Tv1,Order_Sub,'Worker_Fee_Sub',0); if Trim(BZType.Text)='¥' then begin FieldByName('Money').Value:=Order_Sub.fieldbyname('YBMoney').Value; end else begin FieldByName('Money').Value:=0; end; Post; end; Order_Sub.Edit; Order_Sub.FieldByName('WSId').Value:=Trim(maxSubNo); Next; end; end; with ADOCmd do begin Close; sql.Clear; sql.Add('Update Worker_Fee_Main Set HZMoney='); sql.Add(' (select isnull(Sum(isnull(Money,0)),0) from Worker_Fee_Sub A where A.WFID=Worker_Fee_Main.WFID)'); sql.Add(' where WFID='''+Trim(maxno)+''''); ExecSQL; end; ADOCmd.Connection.CommitTrans; FMainId:=Trim(maxno); Result:=True; except Result:=False; ADOCmd.Connection.RollbackTrans; Application.MessageBox('保存失败!','提示',0); end; end; procedure TfrmWorkerDeptFeeInPut.TBSaveClick(Sender: TObject); var FReal:Double; FPPrice,PRTPrice,BCMoney,FPQty,ChaMoney,FOrderNo,FFacName:string; begin ToolBar1.SetFocus; if Trim(Worker.Text)='' then begin Application.MessageBox('报销人不能为空!','提示',0); Exit; end; if Trim(Dept.Text)='' then begin Application.MessageBox('部门分类不能为空!','提示',0); Exit; end; if Trim(WFType.Text)='' then begin Application.MessageBox('大类不能为空!','提示',0); Exit; end; if Trim(WFType.Text)='用款申请' then begin if Trim(WFPayType.Text)='' then begin Application.MessageBox('用款方式不能为空!','提示',0); Exit; end; if Trim(FactoryName.Text)='' then begin Application.MessageBox('供应商名称不能为空!','提示',0); Exit; end; { Order_Sub.DisableControls; FOrderNo:=''; with Order_Sub do begin First; while not Eof do begin if Trim(FOrderNo)<>'' then begin if Trim(FOrderNo)<>Trim(Order_Sub.fieldbyname('OrderNo').AsString) then begin Order_Sub.EnableControls; Application.MessageBox('订单号不同,不能保存!','提示',0); Exit; end; end; if Trim(Order_Sub.fieldbyname('OrderNo').AsString)<>'' then begin FOrderNo:=Trim(Order_Sub.fieldbyname('OrderNo').AsString); end; next; end; end; Order_Sub.EnableControls; Order_Sub.DisableControls; FFacName:=''; with Order_Sub do begin First; while not Eof do begin if Trim(FFacName)<>'' then begin if Trim(FFacName)<>Trim(Order_Sub.fieldbyname('FactoryName').AsString) then begin Order_Sub.EnableControls; Application.MessageBox('供应商不同,不能保存!','提示',0); Exit; end; end; if Trim(Order_Sub.fieldbyname('FactoryName').AsString)<>'' then begin FFacName:=Trim(Order_Sub.fieldbyname('FactoryName').AsString); end; next; end; end; Order_Sub.EnableControls; } end; if Order_Sub.Locate('HapDate',null,[])=True then begin Application.MessageBox('发生日期不能为空!','提示',0); Exit; end; // if WFDate.Checked=False then // begin // Application.MessageBox('日期没有选择!','提示',0); // Exit; // end; if Order_Sub.IsEmpty then begin Application.MessageBox('明细不能为空!','提示',0); exit; end; if Trim(BZType.Text)='' then begin Application.MessageBox('币种不能为空!','提示',0); Exit; end; if Order_Sub.Locate('YBMoney',Null,[])=True then begin Application.MessageBox('明细金额不能为空!','提示',0); Exit; end; // Order_Sub.DisableControls; // with Order_Sub do // begin // First; // while not Eof do // begin // if Trim(Order_Sub.fieldbyname('MoneyKP').AsString)<>'' then // begin // if Order_Sub.fieldbyname('MoneyKP').Value<>0 then // begin // if Trim(Order_Sub.fieldbyname('FactoryName').AsString)='' then // begin // Order_Sub.EnableControls; // Application.MessageBox('供应商不能为空!','提示',0); // Exit; // end; // end; // end; // next; // end; // end; // Order_Sub.EnableControls; if SaveData() then begin Application.MessageBox('保存成功!','提示',0); //ModalResult:=1; end; end; procedure TfrmWorkerDeptFeeInPut.ToolButton1Click(Sender: TObject); begin CopyAddRow(Tv1,Order_Sub); with Order_Sub do begin Edit; FieldByName('BillNum').Value:=null; FieldByName('Qty').Value:=null; FieldByName('QtyUnit').Value:=null; FieldByName('Price').Value:=null; FieldByName('YBMoney').Value:=null; FieldByName('MoneyKP').Value:=null; FieldByName('SNote').Value:=null; Post; end; end; procedure TfrmWorkerDeptFeeInPut.ToolButton2Click(Sender: TObject); begin if Order_Sub.IsEmpty then Exit; if Trim(Order_Sub.fieldbyname('WSId').AsString)<>'' then begin if Application.MessageBox('确定要删行吗?','提示',32+4)<>IDYES then Exit; end; Order_Sub.Delete; end; procedure TfrmWorkerDeptFeeInPut.WorkerBtnClick(Sender: TObject); begin try frmZDYHelp:=TfrmZDYHelp.Create(Application); with frmZDYHelp do begin flag:='BXWorker'; flagname:='报销人'; if ShowModal=1 then begin Worker.Text:=Trim(frmZDYHelp.ClientDataSet1.fieldbyname('ZdyName').AsString); end; end; finally frmZDYHelp.Free; end; end; procedure TfrmWorkerDeptFeeInPut.v1Column3PropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin try frmZDYHelp:=TfrmZDYHelp.Create(Application); with frmZDYHelp do begin flag:='KeMu'; flagname:='货物名称'; if ShowModal=1 then begin with Self.Order_Sub do begin Edit; FieldByName('KeMu').Value:=Trim(frmZDYHelp.ClientDataSet1.fieldbyname('ZdyName').AsString); // Post; end; end; end; finally frmZDYHelp.Free; end; end; procedure TfrmWorkerDeptFeeInPut.WFTypeBtnClick(Sender: TObject); var fsj:string; FWZ:Integer; begin fsj:=Trim(TBtnEditA(Sender).Hint); FWZ:=Pos('/',fsj); try frmZDYHelp:=TfrmZDYHelp.Create(Application); with frmZDYHelp do begin flag:=Copy(fsj,1,FWZ-1); flagname:=Copy(fsj,FWZ+1,Length(fsj)-fwz); MainType:=Trim(Self.Dept.Text); if Trim(flag)='WFType' then begin if Trim(DParameters1)<>'高权限' then begin TBAdd.Visible:=False; TBDel.Visible:=False; TBEdit.Visible:=False; end; end; if ShowModal=1 then begin TBtnEditA(Sender).Text:=Trim(frmZDYHelp.ClientDataSet1.fieldbyname('ZdyName').AsString); end; end; finally frmZDYHelp.Free; end; end; procedure TfrmWorkerDeptFeeInPut.v1Column7PropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin try frmZDYHelp:=TfrmZDYHelp.Create(Application); with frmZDYHelp do begin flag:='BXQtyUnit'; flagname:='数量单位'; if ShowModal=1 then begin with Self.Order_Sub do begin Edit; FieldByName('QtyUnit').Value:=Trim(frmZDYHelp.ClientDataSet1.fieldbyname('ZdyName').AsString); // Post; end; end; end; finally frmZDYHelp.Free; end; end; procedure TfrmWorkerDeptFeeInPut.v1Column5PropertiesEditValueChanged( Sender: TObject); var mvalue,FName,FQty,FPrice:String; begin FName:=Tv1.Controller.FocusedColumn.DataBinding.FilterFieldName; mvalue:=TcxTextEdit(Sender).EditingText; with Order_Sub do begin Edit; FieldByName(FName).Value:=mvalue; Post; end; FQty:=Trim(Order_Sub.fieldbyname('Qty').AsString); FPrice:=Trim(Order_Sub.fieldbyname('Price').AsString); if Trim(FQty)='' then FQty:='0'; if Trim(FPrice)='' then FPrice:='0'; with Order_Sub do begin edit; FieldByName('YBMoney').Value:=RoundFloat(StrToFloat(FQty)*StrToFloat(FPrice),2); //要改 end; end; procedure TfrmWorkerDeptFeeInPut.DeptBtnClick(Sender: TObject); begin try frmZDYHelp:=TfrmZDYHelp.Create(Application); with frmZDYHelp do begin flag:='BXDept'; flagname:='报销部门'; if ShowModal=1 then begin Dept.Text:=Trim(frmZDYHelp.ClientDataSet1.fieldbyname('ZdyName').AsString); end; end; finally frmZDYHelp.Free; end; end; procedure TfrmWorkerDeptFeeInPut.WFTypeSubBtnClick(Sender: TObject); begin try frmZDYHelp:=TfrmZDYHelp.Create(Application); with frmZDYHelp do begin flag:='WFTypeSubX'; flagname:='报销子类'; //MainType:=Trim(Dept.Text)+Trim(WFType.Text); // if Trim(DParameters1)<>'高权限' then // begin // TBAdd.Visible:=False; // TBDel.Visible:=False; // TBEdit.Visible:=False; // end; if ShowModal=1 then begin WFTypeSub.Text:=Trim(frmZDYHelp.ClientDataSet1.fieldbyname('ZdyName').AsString); end; end; finally frmZDYHelp.Free; end; end; procedure TfrmWorkerDeptFeeInPut.WFPayTypeBtnClick(Sender: TObject); begin try frmZDYHelp:=TfrmZDYHelp.Create(Application); with frmZDYHelp do begin flag:='WFPayType'; flagname:='用款方式'; if ShowModal=1 then begin WFPayType.Text:=Trim(frmZDYHelp.ClientDataSet1.fieldbyname('ZdyName').AsString); end; end; finally frmZDYHelp.Free; end; end; procedure TfrmWorkerDeptFeeInPut.FactoryNameBtnClick(Sender: TObject); begin if Trim(WFType.Text)='费用报销' then begin try frmZDYHelp:=TfrmZDYHelp.Create(Application); with frmZDYHelp do begin flag:='BXWorker'; flagname:='报销人'; if ShowModal=1 then begin with Self.Order_Sub do begin Edit; FactoryName.Text:=Trim(frmZDYHelp.ClientDataSet1.fieldbyname('ZdyName').AsString); end; end; end; finally frmZDYHelp.Free; end; end else begin try frmZdyAttachGYS:=TfrmZdyAttachGYS.Create(Application); with frmZdyAttachGYS do begin if ShowModal=1 then begin with Self.Order_Sub do begin Edit; FactoryName.Text:=Trim(frmZdyAttachGYS.CDS_HZ.fieldbyname('ZdyName').AsString); end; end; end; finally frmZdyAttachGYS.Free; end; end; with ADOTemp do begin Close; SQL.Clear; SQL.Add('select top 1 * from Worker_Fee_Main where FactoryName='+quotedstr(Trim(FactoryName.Text))); SQL.Add('order by FillTime DESC'); Open; end; if ADOTemp.IsEmpty then Exit; BankNo.Text:=Trim(ADOTemp.fieldbyname('BankNo').AsString); BankName.Text:=Trim(ADOTemp.fieldbyname('BankName').AsString); end; end.