unit U_skHx; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, StdCtrls, ComCtrls, ToolWin, DBClient, ADODB, cxCurrencyEdit, cxCheckBox, ExtCtrls, cxTextEdit, cxLookAndFeels, cxLookAndFeelPainters, cxNavigator, dxSkinsCore, dxSkinsDefaultPainters, dxDateRanges, dxBarBuiltInMenu, cxGridCustomPopupMenu, cxGridPopupMenu, U_BaseInput, System.ImageList, Vcl.ImgList; type TfrmskHx = class(TFrmBaseInput) ToolBar1: TToolBar; TBSave: TToolButton; TBClose: TToolButton; GroupBox1: TGroupBox; Label1: TLabel; factoryName: TEdit; Label2: TLabel; Money: TEdit; Label3: TLabel; curHsNum: TEdit; Tv1: TcxGridDBTableView; cxGrid1Level1: TcxGridLevel; cxGrid1: TcxGrid; hxNum: TEdit; Label4: TLabel; NhxNum: TEdit; Label5: TLabel; ADOQueryCmd: TADOQuery; ADOQueryTmp: TADOQuery; DS_ysk: TDataSource; cdsYsk: TClientDataSet; ADOQueryYsk: TADOQuery; v1Column1: TcxGridDBColumn; v1Column3: TcxGridDBColumn; v1Column4: TcxGridDBColumn; v1Column5: TcxGridDBColumn; v1Column6: TcxGridDBColumn; v1Column7: TcxGridDBColumn; v1Column9: TcxGridDBColumn; CheckBox1: TCheckBox; VC_ORDERNO: TcxGridDBColumn; v1PBNote: TcxGridDBColumn; v1KPNO: TcxGridDBColumn; Panel1: TPanel; Label7: TLabel; KHConNo: TEdit; Label8: TLabel; Label9: TLabel; begdate: TDateTimePicker; Enddate: TDateTimePicker; v1Column8: TcxGridDBColumn; v1Column10: TcxGridDBColumn; v1Column11: TcxGridDBColumn; Label6: TLabel; P_CodeName: TEdit; Label10: TLabel; IVNO: TEdit; GPM_1: TcxGridPopupMenu; Label11: TLabel; TCMoney: TEdit; btn1: TButton; Button1: TButton; procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure TBCloseClick(Sender: TObject); procedure v1Column7PropertiesEditValueChanged(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure TBSaveClick(Sender: TObject); procedure KHConNoKeyPress(Sender: TObject; var Key: Char); procedure EnddateChange(Sender: TObject); procedure begdateChange(Sender: TObject); procedure btn1Click(Sender: TObject); procedure Button1Click(Sender: TObject); private procedure InitYsk(); procedure Initsk(); procedure SellRec(mFlag: integer); function savedata(mtype: integer): Boolean; { Private declarations } public fKeyNo: string; ffactoryNO, FKPNO, FComTaiTou: string; { Public declarations } end; var frmskHx: TfrmskHx; implementation uses U_DataLink, U_RTFun, U_ZDYHelp; {$R *.dfm} function TfrmskHx.savedata(mtype: integer): Boolean; var PZNo: string; begin result := false; if GetLSNo(ADOQueryCmd, PZNo, 'HX', 'YF_log', 4, 1) = False then begin Application.MessageBox('取最大号失败!', '提示', 0); Exit; end; with AdoqueryCmd do begin Close; SQL.Clear; SQL.Add('EXEC P_CW_HX_SK'); SQL.Add(' @ToID = ' + QuotedStr(Trim(cdsYsk.FieldByName('CWID').AsString))); SQL.Add(',@FromID = ' + QuotedStr(Trim(fkeyNO))); SQL.Add(',@hxMoney = ' + FloatToStr(cdsYsk.FieldByName('curHxNum').AsFloat)); SQL.Add(',@UserID = ' + QuotedStr(Trim(DName))); Open; if FieldByName('Result').AsInteger <> 0 then begin Application.MessageBox(PChar(FieldByName('ShowMsg').AsString), '提示', MB_ICONSTOP); end else begin Result := True; end; end; end; procedure TfrmskHx.SellRec(mFlag: integer); var tmpSum: double; begin tmpSum := 0.0; try cdsYsk.DisableControls; with cdsYsk do begin first; while not eof do begin tmpSum := tmpSum + FieldByName('NHxNum').asFloat; edit; if mFlag = 0 then begin FieldByName('ssel').value := False; FieldByName('curHxNum').value := 0; end else begin FieldByName('ssel').value := True; if (tmpSum - StrToFloatDef(curHsNum.Text, 0)) > 0 then FieldByName('curHxNum').value := FieldByName('NHxNum').asFloat - (tmpSum - StrToFloatDef(curHsNum.Text, 0)) else FieldByName('curHxNum').value := FieldByName('NHxNum').asFloat; end; post; ////////////// if (mFlag = 1) and ((tmpSum - StrToFloatDef(curHsNum.Text, 0)) > 0) then break; ///////////////////// next; end; end; cdsYsk.EnableControls; except cdsYsk.EnableControls; end; end; procedure TfrmskHx.InitYsk(); begin try ADOQueryTmp.DisableControls; with ADOQueryTmp do begin Close; SQL.Clear; Filtered := False; sql.Add('select *,NhxNum=Money-isnull(hxNum,0),curHxNum=0.00 '); sql.Add('from CW_Money_CR A '); sql.Add('where factoryNo=' + quotedstr(trim(ffactoryNo))); sql.Add('and ComTaiTou=' + quotedstr(trim(FComTaiTou))); sql.Add(' and CRType=' + quotedstr(trim('应收款登记'))); sql.Add(' and Money-isnull(hxNum,0)<>0'); sql.Add(' and A.status=''1'' '); if trim(KHConNo.Text) <> '' then sql.Add(' and KHConNo like ''%' + trim(KHConNo.Text) + '%'' '); if trim(P_CodeName.Text) <> '' then sql.Add(' and P_CodeName like ''%' + trim(P_CodeName.Text) + '%'' '); if trim(IVNO.Text) <> '' then sql.Add(' and IVNO like ''%' + trim(IVNO.Text) + '%'' '); // sql.Add('and A.CRTime>=''' + FormatDateTime('yyyy-MM-dd', begdate.DateTime) + ''' '); // sql.Add(' and CRTime<''' + FormatDateTime('yyyy-MM-dd', Enddate.DateTime + 1) + ''' '); sql.Add(' order by CRTime,CWID '); // ShowMessage(SQL.Text); Open; end; SCreateCDS(ADOQueryTmp, cdsYsk); SInitCDSData(ADOQueryTmp, cdsYsk); finally ; ADOQueryTmp.EnableControls; end; end; procedure TfrmskHx.Initsk(); begin try ADOQueryTmp.DisableControls; with ADOQueryTmp do begin Close; SQL.Clear; Filtered := False; sql.Add('select *,NhxNum=Money-isnull(hxNum,0) from CW_Money_CR A '); sql.Add('where CWID=' + quotedstr(trim(fkeyNO))); sql.Add(' and A.status=''1'' '); Open; end; if not ADOQueryTmp.IsEmpty then begin factoryName.Text := trim(ADOQueryTmp.fieldbyname('factoryName').AsString); money.Text := trim(ADOQueryTmp.fieldbyname('Money').AsString); hxNUm.Text := trim(ADOQueryTmp.fieldbyname('hxNUm').AsString); NhxNUm.Text := trim(ADOQueryTmp.fieldbyname('NhxNUm').AsString); curHsNum.Text := NhxNUm.Text; end; finally ADOQueryTmp.EnableControls; end; end; procedure TfrmskHx.FormDestroy(Sender: TObject); begin inherited; frmskHx := nil; end; procedure TfrmskHx.FormCreate(Sender: TObject); begin inherited; cxGrid1.Align := alclient; end; procedure TfrmskHx.FormShow(Sender: TObject); begin inherited; ReadCxGrid(self.Caption, Tv1, '财务管理'); Enddate.DateTime := SGetServerDate(ADOQueryTmp); begdate.DateTime := Enddate.DateTime - 30; initsk(); initysk(); end; procedure TfrmskHx.TBCloseClick(Sender: TObject); begin WriteCxGrid(self.Caption, Tv1, '财务管理'); close; end; procedure TfrmskHx.v1Column7PropertiesEditValueChanged(Sender: TObject); begin try cdsYsk.DisableControls; if TcxCurrencyEdit(Sender).EditValue > cdsYsk.FieldByName('NHxNum').AsFloat then begin Application.MessageBox('本次核销数不能不大于未核销金额!', '提示信息', 0); TcxCurrencyEdit(Sender).EditValue := null; with cdsYsk do begin edit; FieldByName('ssel').value := False; FieldByName('curHxNum').value := 0; Post; end; Exit; end; with cdsYsk do begin edit; if TcxCurrencyEdit(Sender).EditValue = 0 then FieldByName('ssel').value := False else FieldByName('ssel').value := True; FieldByName('curHxNum').value := TcxCurrencyEdit(Sender).EditValue; Post; end; finally cdsYsk.EnableControls; end; end; procedure TfrmskHx.btn1Click(Sender: TObject); begin TCMoney.Text := FloatToStr(StrToFloatDef(TCMoney.Text, 0)); try ADOQueryCmd.Connection.BeginTrans; with ADOQueryCmd do begin Close; SQL.Clear; sql.Add(' update CW_Money_CR SET TCMoney=' + TCMoney.Text); sql.Add(' ,Money=ISNULL(SDMoney,0)+' + TCMoney.Text); sql.Add(' where ISNULL(SDMoney,0)<>0 and CWID=' + quotedstr(trim(fkeyNo))); sql.Add(' and ISNULL(hxNum,0)< ISNULL(SDMoney,0)+' + TCMoney.Text); // ShowMessage(sql.Text); execsql; end; ADOQueryCmd.Connection.CommitTrans; except ADOQueryCmd.Connection.RollbackTrans; Application.MessageBox('调整失败!', '提示', 0); end; Initysk(); initsk(); end; procedure TfrmskHx.Button1Click(Sender: TObject); var tmpSum: double; begin tmpSum := 0.0; try cdsYsk.DisableControls; with cdsYsk do begin first; while not eof do begin if FieldByName('ssel').AsBoolean then begin tmpSum := tmpSum + FieldByName('NHxNum').asFloat; edit; if (tmpSum - StrToFloatDef(curHsNum.Text, 0)) > 0 then begin FieldByName('curHxNum').value := FieldByName('NHxNum').asFloat - (tmpSum - StrToFloatDef(curHsNum.Text, 0)) end else begin FieldByName('curHxNum').value := FieldByName('NHxNum').asFloat; end; end else begin edit; FieldByName('curHxNum').value := 0; end; post; if FieldByName('ssel').AsBoolean and ((tmpSum - StrToFloatDef(curHsNum.Text, 0)) > 0) then break; next; end; end; cdsYsk.Locate('SSel', True, []); cdsYsk.EnableControls; except cdsYsk.EnableControls; end; end; procedure TfrmskHx.CheckBox1Click(Sender: TObject); begin if checkBox1.Checked then SellRec(1) else SellRec(0); end; procedure TfrmskHx.TBSaveClick(Sender: TObject); begin if cdsYsk.IsEmpty then begin Application.MessageBox('没有对应的应收款记录!', '提示信息', 0); Exit; end; if Abs((tv1.DataController.Summary.FooterSummaryValues[3])) <= 0.000001 then begin Application.MessageBox('未选择当前需核销的应收款记录!', '警告信息', 0); Exit; end; if (tv1.DataController.Summary.FooterSummaryValues[3] - StrToFloatDef(curHsNum.Text, 0)) > 0.0 then begin Application.MessageBox('本次核销金额大于当前可核销收款总金额!', '警告信息', 0); Exit; end; ADOQueryCmd.Connection.BeginTrans; try cdsYsk.First; while not cdsYsk.Eof do begin if cdsYsk.FieldByName('ssel').AsBoolean and (Abs(cdsYsk.FieldByName('curHxNum').AsFloat) > 0.001) then begin if not savedata(1) then begin ADOQueryCmd.Connection.RollbackTrans; Exit; end; end; cdsYsk.Next; end; ADOQueryCmd.Connection.CommitTrans; finally Initysk(); initsk(); end; end; procedure TfrmskHx.KHConNoKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin InitYsk(); end; end; procedure TfrmskHx.EnddateChange(Sender: TObject); begin InitYsk(); end; procedure TfrmskHx.begdateChange(Sender: TObject); begin InitYsk(); end; end.