D10SZKaiXiYa/A09财务通用管理/U_ExpenseInput.pas
2026-03-09 12:49:21 +08:00

551 lines
15 KiB
ObjectPascal
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

unit U_ExpenseInput;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cxGraphics, cxCustomData, cxStyles, cxTL, cxMaskEdit, DB, ADODB,
cxInplaceContainer, cxDBTL, cxControls, cxTLData, ComCtrls, ToolWin, StdCtrls,
cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, DBClient,
cxGridCustomTableView, cxGridTableView, cxGridDBTableView, ExtCtrls,
cxSplitter, cxGridLevel, cxClasses, cxGridCustomView, cxGrid,
cxGridCustomPopupMenu, cxGridPopupMenu, RM_Dataset, RM_System, RM_Common,
RM_Class, RM_GridReport, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdFTP, ShellAPI, IniFiles, cxCheckBox, cxCalendar, cxButtonEdit,
cxTextEdit, cxDropDownEdit, BtnEdit, cxLookAndFeels, cxLookAndFeelPainters,
cxNavigator, dxDateRanges, dxBarBuiltInMenu, U_BaseList, cxContainer,
cxCurrencyEdit, dxSkinsCore, dxSkinsDefaultPainters, dxCore, cxDateUtils,
dxScrollbarAnnotations, Vcl.Menus,Clipbrd;
type
TfrmExpenseInput = class(TForm)
ToolBar1: TToolBar;
TBClose: TToolButton;
ADOQueryTemp: TADOQuery;
ADOQueryCmd: TADOQuery;
ADOQueryMain: TADOQuery;
ToolButton3: TToolButton;
ScrollBox1: TScrollBox;
Label7: TLabel;
FinanceNote: TMemo;
ReimburseType: TcxButtonEdit;
Label1: TLabel;
Currency: TcxComboBox;
TaxNumber: TcxTextEdit;
Label2: TLabel;
Label3: TLabel;
OppBankCardNo: TcxTextEdit;
Label5: TLabel;
Amount: TcxTextEdit;
Label6: TLabel;
Label8: TLabel;
Label10: TLabel;
OurBankCardNo: TcxTextEdit;
Label12: TLabel;
OurBankName: TcxButtonEdit;
OppBankName: TcxButtonEdit;
Label4: TLabel;
FFID: TcxTextEdit;
Label9: TLabel;
Use: TcxTextEdit;
OppCoName: TcxButtonEdit;
Label11: TLabel;
PayMent: TcxButtonEdit;
PayTime: TcxDateEdit;
Label13: TLabel;
Label14: TLabel;
BankSlipNumber: TcxTextEdit;
Panel1: TPanel;
Tv1: TcxGridDBTableView;
cxGrid1Level1: TcxGridLevel;
cxGrid1: TcxGrid;
DS_1: TDataSource;
CDS_1: TClientDataSet;
Tv1CoName: TcxGridDBColumn;
Tv1BankName: TcxGridDBColumn;
Tv1BankNo: TcxGridDBColumn;
Tv1ShuiNo: TcxGridDBColumn;
PM_1: TPopupMenu;
GPM_1: TcxGridPopupMenu;
N1: TMenuItem;
procedure FormDestroy(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure TBCloseClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure TBRafreshClick(Sender: TObject);
procedure ToolButton3Click(Sender: TObject);
procedure PayMentBtnDnClick(Sender: TObject);
procedure PayMentBtnUpClick(Sender: TObject);
procedure OppCoNameBtnUpClick(Sender: TObject);
procedure ReimburseTypePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
procedure OurBankNamePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
procedure OppBankNamePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
procedure OppCoNamePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
procedure PayMentPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
procedure AmountPropertiesEditValueChanged(Sender: TObject);
procedure TaxNumberPropertiesChange(Sender: TObject);
procedure Tv1DblClick(Sender: TObject);
procedure ScrollBox1Click(Sender: TObject);
procedure N1Click(Sender: TObject);
private
{ Private declarations }
procedure InitGrid();
function SaveData(): Boolean;
procedure InitGrid2();
public
{ Public declarations }
FFFID: string;
end;
var
frmExpenseInput: TfrmExpenseInput;
implementation
uses
U_DataLink, U_RTFun, U_ZDYHelp, U_CompanySel, U_BankSel, U_FinTradePlanSel,
U_FinTradeSalesContractSel, U_ZDYBankSel;
{$R *.dfm}
procedure TfrmExpenseInput.InitGrid();
begin
try
ADOQueryMain.DisableControls;
with ADOQueryMain do
begin
Filtered := False;
Close;
SQL.Clear;
sql.Add(' select * from Finance_Flow where FFID=''' + Trim(FFFID) + '''');
Open;
end;
if not ADOQueryMain.IsEmpty then
begin
SCSHData(ADOQueryMain, ScrollBox1, 2);
end
else
begin
// FFTime.DateTime := SGetServerDateTime(ADOQueryTemp);
end;
finally
ADOQueryMain.EnableControls;
end;
end;
procedure TfrmExpenseInput.InitGrid2();
begin
try
ADOQueryCmd.DisableControls;
with ADOQueryCmd do
begin
Close;
sql.Clear;
sql.Add('select A.* from BS_Company A where 1=1 ');
sql.Add(' and A.CoType=''<27><>Ӧ<EFBFBD><D3A6>'' ');
SQL.Add(' and ShuiNo like ''%' + TaxNumber.Text + '%'' ');
Open;
end;
SCreateCDS(ADOQueryCmd, CDS_1);
SInitCDSData(ADOQueryCmd, CDS_1);
finally
ADOQueryCmd.EnableControls;
TV1.DataController.Filter.Clear;
end;
end;
procedure TfrmExpenseInput.N1Click(Sender: TObject);
begin
Clipboard.SetTextBuf(PChar(Trim(CDS_1.fieldbyname(TV1.Controller.FocusedColumn.DataBinding.FilterFieldName).AsString)));
end;
procedure TfrmExpenseInput.OppBankNamePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
var
fsj: string;
FWZ: Integer;
begin
fsj := Trim(TcxButtonEdit(Sender).Hint);
FWZ := Pos('/', fsj);//<2F><>Ӣ<EFBFBD><D3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
try
frmZDYBankSel := TfrmZDYBankSel.Create(Application);
with frmZDYBankSel do
begin
MainType := '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>';
flag := Copy(fsj, 1, FWZ - 1);
flagname := Copy(fsj, FWZ + 1, Length(fsj) - FWZ);
if ShowModal = 1 then
begin
OppBankName.Text := Trim(ClientDataSet1.fieldbyname('ZDYName').AsString);
OppBankCardNo.Text := Trim(ClientDataSet1.fieldbyname('note').AsString);
end;
end;
finally
frmZDYBankSel.Free;
end;
end;
procedure TfrmExpenseInput.OppCoNameBtnUpClick(Sender: TObject);
begin
try
frmZDYHelp := TfrmZDYHelp.Create(Application);
with frmZDYHelp do
begin
flag := 'OppCoName';
flagname := '<27>Է<EFBFBD><D4B7><EFBFBD>λ';
if ShowModal = 1 then
begin
TEdit(Sender).Text := Trim(ClientDataSet1.fieldbyname('ZDYName').AsString);
end;
end;
finally
frmZDYHelp.Free;
end;
end;
procedure TfrmExpenseInput.OppCoNamePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
try
frmCompanySel := TfrmCompanySel.Create(Application);
with frmCompanySel do
begin
FCoType := '<27><>Ӧ<EFBFBD><D3A6>';
if ShowModal = 1 then
begin
OppCoName.Text := Trim(CDS_1.fieldbyname('CoName').AsString);
OppCoName.Properties.LookupItems.Text := Trim(CDS_1.fieldbyname('CoCode').AsString);
TaxNumber.Text := Trim(CDS_1.fieldbyname('ShuiNo').AsString);
OppBankName.Text := Trim(CDS_1.fieldbyname('BankName').AsString);
OppBankCardNo.Text := Trim(CDS_1.fieldbyname('BankNo').AsString);
end;
end;
Panel1.Visible := False;
finally
frmCompanySel.Free;
end;
end;
procedure TfrmExpenseInput.OurBankNamePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
var
fsj: string;
FWZ: Integer;
begin
fsj := Trim(TcxButtonEdit(Sender).Hint);
FWZ := Pos('/', fsj);//<2F><>Ӣ<EFBFBD><D3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
try
frmZDYBankSel := TfrmZDYBankSel.Create(Application);
with frmZDYBankSel do
begin
MainType := '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>';
flag := Copy(fsj, 1, FWZ - 1);
flagname := Copy(fsj, FWZ + 1, Length(fsj) - FWZ);
if ShowModal = 1 then
begin
OurBankName.Text := Trim(ClientDataSet1.fieldbyname('ZDYName').AsString);
OurBankCardNo.Text := Trim(ClientDataSet1.fieldbyname('note').AsString);
end;
end;
finally
frmZDYBankSel.Free;
end;
end;
procedure TfrmExpenseInput.FormDestroy(Sender: TObject);
begin
frmExpenseInput := nil;
end;
procedure TfrmExpenseInput.PayMentBtnDnClick(Sender: TObject);
begin
TBtnEditC(Sender).Text := '';
TBtnEditC(Sender).TxtCode := '';
end;
procedure TfrmExpenseInput.PayMentBtnUpClick(Sender: TObject);
var
fsj: string;
FWZ: Integer;
begin
fsj := Trim(TEdit(Sender).Hint);
FWZ := Pos('/', fsj);
try
frmZDYHelp := TfrmZDYHelp.Create(Application);
with frmZDYHelp do
begin
MainType := '<27><><EFBFBD><EFBFBD>';
flag := Copy(fsj, 1, FWZ - 1);
flagname := Copy(fsj, FWZ + 1, Length(fsj) - FWZ);
if ShowModal = 1 then
begin
TEdit(Sender).Text := Trim(ClientDataSet1.fieldbyname('ZDYName').AsString);
end;
end;
finally
frmZDYHelp.Free;
end;
end;
procedure TfrmExpenseInput.PayMentPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
var
fsj: string;
FWZ: Integer;
begin
fsj := Trim(TcxButtonEdit(Sender).Hint);
FWZ := Pos('/', fsj);//<2F><>Ӣ<EFBFBD><D3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
try
frmZDYHelp := TfrmZDYHelp.Create(Application);
with frmZDYHelp do
begin
MainType := Copy(fsj, FWZ + 1, Length(fsj) - FWZ);
flag := Copy(fsj, 1, FWZ - 1);
flagname := Copy(fsj, FWZ + 1, Length(fsj) - FWZ);
if ShowModal = 1 then
begin
TcxButtonEdit(Sender).Text := Trim(ClientDataSet1.fieldbyname('ZDYName').AsString);
end;
end;
finally
frmZDYHelp.Free;
end;
end;
procedure TfrmExpenseInput.ReimburseTypePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
var
fsj: string;
FWZ: Integer;
begin
fsj := Trim(TcxButtonEdit(Sender).Hint);
FWZ := Pos('/', fsj);//<2F><>Ӣ<EFBFBD><D3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
try
frmZDYHelp := TfrmZDYHelp.Create(Application);
with frmZDYHelp do
begin
MainType := Copy(fsj, FWZ + 1, Length(fsj) - FWZ);
flag := Copy(fsj, 1, FWZ - 1);
flagname := Copy(fsj, FWZ + 1, Length(fsj) - FWZ);
if ShowModal = 1 then
begin
TcxButtonEdit(Sender).Text := Trim(ClientDataSet1.fieldbyname('ZDYName').AsString);
end;
end;
finally
frmZDYHelp.Free;
end;
end;
//procedure TfrmExpenseInput.AmountPropertiesEditValueChanged(Sender: TObject);
//var
// n: Double;
// CleanText: string;
//begin
// // <20>Ƴ<EFBFBD>ǧ<EFBFBD><C7A7>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
// CleanText := StringReplace(Amount.Text, ',', '', [rfReplaceAll]);
//
// if TryStrToFloat(CleanText, n) then
// begin
// // <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
// Amount.Properties.OnEditValueChanged := nil; // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
// try
// Amount.Text := FormatFloat('#,##0', n);
// finally
// Amount.Properties.OnEditValueChanged := AmountPropertiesEditValueChanged;
// end;
// end;
//end;
procedure TfrmExpenseInput.AmountPropertiesEditValueChanged(Sender: TObject);
var
n: Double;
CleanText: string;
DecimalPos: Integer;
DecimalDigits: Integer;
FormatStr: string;
CaretPos: Integer;
TextBeforeCaret: string;
begin
// <20><>ס<EFBFBD><D7A1><EFBFBD><EFBFBD>λ<EFBFBD>ú͹<C3BA><CDB9><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ı<EFBFBD>
CaretPos := Amount.SelStart;
TextBeforeCaret := Copy(Amount.Text, 1, CaretPos);
// <20>Ƴ<EFBFBD>ǧ<EFBFBD><C7A7>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
CleanText := StringReplace(Amount.Text, ',', '', [rfReplaceAll]);
if TryStrToFloat(CleanText, n) then
begin
Amount.Properties.OnEditValueChanged := nil;
try
// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>λ<EFBFBD><CEBB>
DecimalPos := Pos('.', CleanText);
if DecimalPos > 0 then
DecimalDigits := Length(CleanText) - DecimalPos
else
DecimalDigits := 0;
// <20><>̬<EFBFBD><CCAC><EFBFBD>ɸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
if DecimalDigits = 0 then
FormatStr := '#,##0'
else
FormatStr := '#,##0.' + StringOfChar('0', DecimalDigits);
// Ӧ<>ø<EFBFBD>ʽ<EFBFBD><CABD>
Amount.Text := FormatFloat(FormatStr, n);
// <20><><EFBFBD>ָܻ<DCBB><D6B8><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
if CaretPos > 0 then
begin
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6>ź<EFBFBD><C5BA>Ĺ<EFBFBD><C4B9><EFBFBD>λ<EFBFBD><CEBB>ƫ<EFBFBD><C6AB>
CaretPos := Length(TextBeforeCaret) +
(StringReplace(Copy(Amount.Text, 1, Length(TextBeforeCaret)), ',', '', [rfReplaceAll])
.Length - TextBeforeCaret.Length);
if CaretPos <= Length(Amount.Text) then
Amount.SelStart := CaretPos;
end;
finally
Amount.Properties.OnEditValueChanged := AmountPropertiesEditValueChanged;
end;
end;
end;
procedure TfrmExpenseInput.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TfrmExpenseInput.TaxNumberPropertiesChange(Sender: TObject);
begin
InitGrid2();
Panel1.Visible := True;
end;
procedure TfrmExpenseInput.TBCloseClick(Sender: TObject);
begin
close;
end;
procedure TfrmExpenseInput.FormShow(Sender: TObject);
begin
InitGrid();
Panel1.Visible := False;
end;
procedure TfrmExpenseInput.TBRafreshClick(Sender: TObject);
begin
InitGrid();
end;
function TfrmExpenseInput.SaveData(): Boolean;
var
MaxId, MaxSubId, FCoCode, FCCID: string;
begin
try
ADOQueryCmd.Connection.BeginTrans;
if Trim(FFFID) = '' then
begin
if not GetLSNo(ADOQueryCmd, MaxId, 'FS', 'Finance_Flow', 4, 1) then
raise Exception.Create(<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>');
end
else
begin
MaxId := Trim(FFFID);
end;
FFID.Text := MaxId;
with ADOQueryCmd do
begin
Close;
SQL.Clear;
sql.Add('select * from Finance_Flow where FFID=''' + Trim(FFFID) + '''');
Open;
end;
with ADOQueryCmd do
begin
if Trim(FFFID) = '' then
begin
Append;
FieldByName('FillId').Value := Trim(DCode);
FieldByName('Filler').Value := Trim(DName);
FieldByName('Filltime').Value := SGetServerDateTime(ADOQueryTemp);
FieldByName('FFTime').Value := SGetServerDateTime(ADOQueryTemp);
FieldByName('FFFlag').Value := '<27><><EFBFBD><EFBFBD>';
FieldByName('FFType').Value := '<27><><EFBFBD>õǼ<C3B5>';
FieldByName('Checkstatus').Value := <><CEB4><EFBFBD><EFBFBD>';
FieldByName('PayStatus').Value := <><CEB4><EFBFBD><EFBFBD>';
FieldByName('PrintStatus').Value := <><CEB4>ӡ';
FieldByName('FFQtyFlag').Value := 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
end
else
begin
Edit;
FieldByName('EditId').Value := Trim(DCode);
FieldByName('Editer').Value := Trim(DName);
FieldByName('Edittime').Value := SGetServerDateTime(ADOQueryTemp);
end;
// FieldByName('OppCoNo').Value := Trim(OppCoName.TxtCode);
// FieldByName('OurCoNo').Value := Trim(OurCoName.TxtCode);
// FieldByName('OurBankID').Value := Trim(OurBankName.TxtCode);
// FieldByName('FFID').Value := Trim(MaxId);
FieldByName('OppCoNo').Value := OppCoName.Properties.LookupItems.Text;
RTSetsavedata(ADOQueryCmd, 'Finance_Flow', ScrollBox1, 2);
Post;
end;
ADOQueryCmd.Connection.CommitTrans;
FCCID := Trim(MaxSubId);
Result := True;
except
Result := false;
ADOQueryCmd.Connection.RollbackTrans;
application.MessageBox(PChar(Exception(ExceptObject).Message), '<27><>ʾ<EFBFBD><CABE>Ϣ', 0);
end;
end;
procedure TfrmExpenseInput.ScrollBox1Click(Sender: TObject);
begin
Panel1.Visible := False;
end;
procedure TfrmExpenseInput.ToolButton3Click(Sender: TObject);
begin
ToolBar1.SetFocus;
if Trim(OppCoName.Text) = '' then
begin
Application.MessageBox('<27>Է<EFBFBD><D4B7><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>!', '<27><>ʾ', 0);
Exit;
end;
if Trim(Currency.Text) = '' then
begin
Application.MessageBox('<27><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>Ϊ<EFBFBD><CEAA>!', '<27><>ʾ', 0);
Exit;
end;
if SaveData() then
begin
Application.MessageBox('<27><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>!', '<27><>ʾ', 0);
ModalResult := 1;
end;
end;
procedure TfrmExpenseInput.Tv1DblClick(Sender: TObject);
begin
OppCoName.Text := Trim(CDS_1.fieldbyname('CoName').AsString);
OppCoName.Properties.LookupItems.Text := Trim(CDS_1.fieldbyname('CoCode').AsString);
TaxNumber.Text := Trim(CDS_1.fieldbyname('ShuiNo').AsString);
OppBankName.Text := Trim(CDS_1.fieldbyname('BankName').AsString);
OppBankCardNo.Text := Trim(CDS_1.fieldbyname('BankNo').AsString);
Panel1.Visible := false;
end;
end.