D10SZKaiXiYa/A09财务通用管理/U_ExpenseInput.pas

675 lines
20 KiB
ObjectPascal
Raw Normal View History

2026-10-22 17:30:55 +08:00
unit U_ExpenseInput;
2025-03-01 10:55:52 +08:00
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,
2026-03-09 12:49:21 +08:00
cxNavigator, dxDateRanges, dxBarBuiltInMenu, U_BaseList, cxContainer,
cxCurrencyEdit, dxSkinsCore, dxSkinsDefaultPainters, dxCore, cxDateUtils,
2026-05-22 11:44:22 +08:00
dxScrollbarAnnotations, Vcl.Menus, Clipbrd, dxCoreGraphics, dxSkinWXI;
2025-03-01 10:55:52 +08:00
type
TfrmExpenseInput = class(TForm)
ToolBar1: TToolBar;
TBClose: TToolButton;
ADOQueryTemp: TADOQuery;
ADOQueryCmd: TADOQuery;
ADOQueryMain: TADOQuery;
ToolButton3: TToolButton;
ScrollBox1: TScrollBox;
Label7: TLabel;
2026-02-06 16:53:43 +08:00
FinanceNote: TMemo;
ReimburseType: TcxButtonEdit;
Label1: TLabel;
Currency: TcxComboBox;
Label2: TLabel;
2025-03-01 10:55:52 +08:00
Label3: TLabel;
2026-02-06 16:53:43 +08:00
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;
2026-03-09 12:49:21 +08:00
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;
2026-03-24 10:22:19 +08:00
Label15: TLabel;
IVNo: TcxButtonEdit;
oppShuiNo: TcxTextEdit;
2026-10-22 17:30:55 +08:00
Label16: TLabel;
IVDetailItem: TcxTextEdit;
2025-03-01 10:55:52 +08:00
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);
2026-03-09 12:49:21 +08:00
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);
2026-03-24 10:22:19 +08:00
procedure cxButtonEdit1PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
2025-03-01 10:55:52 +08:00
private
{ Private declarations }
procedure InitGrid();
function SaveData(): Boolean;
2026-03-09 12:49:21 +08:00
procedure InitGrid2();
2026-10-22 17:30:55 +08:00
procedure LoadIVDetailItem(const AIVIDs: string);
2025-03-01 10:55:52 +08:00
public
{ Public declarations }
FFFID: string;
2026-03-24 10:22:19 +08:00
FoppShuiNoChange: string;
2025-03-01 10:55:52 +08:00
end;
var
frmExpenseInput: TfrmExpenseInput;
implementation
uses
U_DataLink, U_RTFun, U_ZDYHelp, U_CompanySel, U_BankSel, U_FinTradePlanSel,
2026-03-24 10:22:19 +08:00
U_FinTradeSalesContractSel, U_ZDYBankSel, U_InvoiceSel;
2025-03-01 10:55:52 +08:00
{$R *.dfm}
procedure TfrmExpenseInput.InitGrid();
2026-05-22 11:44:22 +08:00
var
nAmount: Double;
2025-03-01 10:55:52 +08:00
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
2026-02-06 16:53:43 +08:00
SCSHData(ADOQueryMain, ScrollBox1, 2);
2026-07-21 14:22:39 +08:00
Self.IVNo.Properties.LookupItems.Text := ADOQueryMain.FieldByName('IVID').AsString;
2026-10-22 17:30:55 +08:00
LoadIVDetailItem(ADOQueryMain.FieldByName('IVID').AsString);
2026-05-22 11:44:22 +08:00
if ADOQueryMain.FieldByName('Amount').AsString <> '' then
begin
nAmount := ADOQueryMain.FieldByName('Amount').AsFloat;
2026-05-22 16:01:58 +08:00
Amount.Text := FormatFloat('#,##0.00', nAmount);
2026-05-22 11:44:22 +08:00
end;
2025-03-01 10:55:52 +08:00
end
else
begin
2026-02-06 16:53:43 +08:00
// FFTime.DateTime := SGetServerDateTime(ADOQueryTemp);
2025-03-01 10:55:52 +08:00
end;
finally
ADOQueryMain.EnableControls;
end;
end;
2026-03-09 12:49:21 +08:00
procedure TfrmExpenseInput.InitGrid2();
begin
2025-03-01 10:55:52 +08:00
2026-03-09 12:49:21 +08:00
try
ADOQueryCmd.DisableControls;
with ADOQueryCmd do
begin
Close;
sql.Clear;
sql.Add('select A.* from BS_Company A where 1=1 ');
2026-10-22 17:30:55 +08:00
sql.Add(' and A.CoType=''供应商'' ');
2026-03-24 10:22:19 +08:00
SQL.Add(' and ShuiNo like ''%' + oppShuiNo.Text + '%'' ');
2026-03-09 12:49:21 +08:00
Open;
end;
2026-02-06 16:53:43 +08:00
2026-03-09 12:49:21 +08:00
SCreateCDS(ADOQueryCmd, CDS_1);
SInitCDSData(ADOQueryCmd, CDS_1);
finally
ADOQueryCmd.EnableControls;
TV1.DataController.Filter.Clear;
end;
end;
2026-10-22 17:30:55 +08:00
procedure TfrmExpenseInput.LoadIVDetailItem(const AIVIDs: string);
begin
IVDetailItem.Text := '';
if Trim(AIVIDs) = '' then
Exit;
try
with ADOQueryTemp do
begin
Close;
SQL.Clear;
SQL.Add('select DetailItems=stuff((select '','' + B.detail_item from Finance_Invoice B');
SQL.Add(' where isnull(B.detail_item,'''')<>''''');
SQL.Add(' and charindex('','' + B.IVID + '','', '','' + ' + QuotedStr(Trim(AIVIDs)) + ' + '','')>0');
SQL.Add(' for xml path('''')),1,1,'''')');
Open;
IVDetailItem.Text := Trim(FieldByName('DetailItems').AsString);
Close;
end;
except
IVDetailItem.Text := '';
end;
end;
2026-03-09 12:49:21 +08:00
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);
2026-02-06 16:53:43 +08:00
var
fsj: string;
FWZ: Integer;
begin
fsj := Trim(TcxButtonEdit(Sender).Hint);
2026-10-22 17:30:55 +08:00
FWZ := Pos('/', fsj); //先英文再中文
2025-03-01 10:55:52 +08:00
try
2026-02-06 16:53:43 +08:00
frmZDYBankSel := TfrmZDYBankSel.Create(Application);
with frmZDYBankSel do
2025-03-01 10:55:52 +08:00
begin
2026-10-22 17:30:55 +08:00
MainType := '财务银行';
2026-02-06 16:53:43 +08:00
flag := Copy(fsj, 1, FWZ - 1);
flagname := Copy(fsj, FWZ + 1, Length(fsj) - FWZ);
2025-03-01 10:55:52 +08:00
if ShowModal = 1 then
begin
2026-02-06 16:53:43 +08:00
OppBankName.Text := Trim(ClientDataSet1.fieldbyname('ZDYName').AsString);
OppBankCardNo.Text := Trim(ClientDataSet1.fieldbyname('note').AsString);
2025-03-01 10:55:52 +08:00
end;
end;
finally
2026-02-06 16:53:43 +08:00
frmZDYBankSel.Free;
2025-03-01 10:55:52 +08:00
end;
end;
procedure TfrmExpenseInput.OppCoNameBtnUpClick(Sender: TObject);
begin
try
frmZDYHelp := TfrmZDYHelp.Create(Application);
with frmZDYHelp do
begin
flag := 'OppCoName';
2026-10-22 17:30:55 +08:00
flagname := '对方单位';
2025-03-01 10:55:52 +08:00
if ShowModal = 1 then
begin
TEdit(Sender).Text := Trim(ClientDataSet1.fieldbyname('ZDYName').AsString);
end;
end;
finally
frmZDYHelp.Free;
end;
end;
2026-03-09 12:49:21 +08:00
procedure TfrmExpenseInput.OppCoNamePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
try
frmCompanySel := TfrmCompanySel.Create(Application);
with frmCompanySel do
begin
2026-10-22 17:30:55 +08:00
FCoType := '供应商';
2026-03-09 12:49:21 +08:00
if ShowModal = 1 then
begin
2026-03-24 10:22:19 +08:00
OppCoName.Text := Trim(frmCompanySel.CDS_1.fieldbyname('CoName').AsString);
OppCoName.Properties.LookupItems.Text := Trim(frmCompanySel.CDS_1.fieldbyname('CoCode').AsString);
oppShuiNo.Text := Trim(frmCompanySel.CDS_1.fieldbyname('ShuiNo').AsString);
OppBankName.Text := Trim(frmCompanySel.CDS_1.fieldbyname('BankName').AsString);
OppBankCardNo.Text := Trim(frmCompanySel.CDS_1.fieldbyname('BankNo').AsString);
2026-03-09 12:49:21 +08:00
end;
end;
Panel1.Visible := False;
finally
frmCompanySel.Free;
end;
end;
procedure TfrmExpenseInput.OurBankNamePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
2026-02-06 16:53:43 +08:00
var
fsj: string;
FWZ: Integer;
2025-03-01 10:55:52 +08:00
begin
2026-02-06 16:53:43 +08:00
fsj := Trim(TcxButtonEdit(Sender).Hint);
2026-10-22 17:30:55 +08:00
FWZ := Pos('/', fsj); //先英文再中文
2025-03-01 10:55:52 +08:00
try
2026-02-06 16:53:43 +08:00
frmZDYBankSel := TfrmZDYBankSel.Create(Application);
with frmZDYBankSel do
2025-03-01 10:55:52 +08:00
begin
2026-10-22 17:30:55 +08:00
MainType := '财务银行';
2026-02-06 16:53:43 +08:00
flag := Copy(fsj, 1, FWZ - 1);
flagname := Copy(fsj, FWZ + 1, Length(fsj) - FWZ);
2025-03-01 10:55:52 +08:00
if ShowModal = 1 then
begin
2026-02-06 16:53:43 +08:00
OurBankName.Text := Trim(ClientDataSet1.fieldbyname('ZDYName').AsString);
OurBankCardNo.Text := Trim(ClientDataSet1.fieldbyname('note').AsString);
2025-03-01 10:55:52 +08:00
end;
end;
finally
2026-02-06 16:53:43 +08:00
frmZDYBankSel.Free;
2025-03-01 10:55:52 +08:00
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
2026-10-22 17:30:55 +08:00
MainType := '费用';
2025-03-01 10:55:52 +08:00
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;
2026-03-09 12:49:21 +08:00
procedure TfrmExpenseInput.PayMentPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
2026-02-06 16:53:43 +08:00
var
fsj: string;
FWZ: Integer;
2025-03-01 10:55:52 +08:00
begin
2026-02-06 16:53:43 +08:00
fsj := Trim(TcxButtonEdit(Sender).Hint);
2026-10-22 17:30:55 +08:00
FWZ := Pos('/', fsj); //先英文再中文
2025-03-01 10:55:52 +08:00
try
2026-02-06 16:53:43 +08:00
frmZDYHelp := TfrmZDYHelp.Create(Application);
with frmZDYHelp do
2025-03-01 10:55:52 +08:00
begin
2026-02-06 16:53:43 +08:00
MainType := Copy(fsj, FWZ + 1, Length(fsj) - FWZ);
flag := Copy(fsj, 1, FWZ - 1);
flagname := Copy(fsj, FWZ + 1, Length(fsj) - FWZ);
2025-03-01 10:55:52 +08:00
if ShowModal = 1 then
begin
2026-02-06 16:53:43 +08:00
TcxButtonEdit(Sender).Text := Trim(ClientDataSet1.fieldbyname('ZDYName').AsString);
2025-03-01 10:55:52 +08:00
end;
end;
finally
2026-02-06 16:53:43 +08:00
frmZDYHelp.Free;
2025-03-01 10:55:52 +08:00
end;
end;
2026-03-09 12:49:21 +08:00
procedure TfrmExpenseInput.ReimburseTypePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
var
fsj: string;
FWZ: Integer;
begin
fsj := Trim(TcxButtonEdit(Sender).Hint);
2026-10-22 17:30:55 +08:00
FWZ := Pos('/', fsj); //先英文再中文
2026-03-09 12:49:21 +08:00
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
2026-10-22 17:30:55 +08:00
// // 移除千分位逗号
2026-03-09 12:49:21 +08:00
// CleanText := StringReplace(Amount.Text, ',', '', [rfReplaceAll]);
//
// if TryStrToFloat(CleanText, n) then
// begin
2026-10-22 17:30:55 +08:00
// // 格式化显示,但避免重复触发事件
// Amount.Properties.OnEditValueChanged := nil; // 暂时禁用事件
2026-03-09 12:49:21 +08:00
// 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
2026-10-22 17:30:55 +08:00
// 记住光标位置和光标前的文本
2026-03-09 12:49:21 +08:00
CaretPos := Amount.SelStart;
TextBeforeCaret := Copy(Amount.Text, 1, CaretPos);
2026-10-22 17:30:55 +08:00
// 移除千分位逗号
2026-03-09 12:49:21 +08:00
CleanText := StringReplace(Amount.Text, ',', '', [rfReplaceAll]);
if TryStrToFloat(CleanText, n) then
begin
Amount.Properties.OnEditValueChanged := nil;
try
2026-10-22 17:30:55 +08:00
// 检测用户输入的小数位数
2026-03-09 12:49:21 +08:00
DecimalPos := Pos('.', CleanText);
if DecimalPos > 0 then
DecimalDigits := Length(CleanText) - DecimalPos
else
DecimalDigits := 0;
2026-02-06 16:53:43 +08:00
2026-10-22 17:30:55 +08:00
// 动态生成格式化字符串
2026-03-09 12:49:21 +08:00
if DecimalDigits = 0 then
FormatStr := '#,##0'
else
FormatStr := '#,##0.' + StringOfChar('0', DecimalDigits);
2026-10-22 17:30:55 +08:00
// 应用格式化
2026-03-09 12:49:21 +08:00
Amount.Text := FormatFloat(FormatStr, n);
2026-10-22 17:30:55 +08:00
// 智能恢复光标位置
2026-03-09 12:49:21 +08:00
if CaretPos > 0 then
begin
2026-10-22 17:30:55 +08:00
// 计算添加逗号后的光标位置偏移
2026-03-24 10:22:19 +08:00
CaretPos := Length(TextBeforeCaret) + (StringReplace(Copy(Amount.Text, 1, Length(TextBeforeCaret)), ',', '', [rfReplaceAll]).Length - TextBeforeCaret.Length);
2026-03-09 12:49:21 +08:00
if CaretPos <= Length(Amount.Text) then
Amount.SelStart := CaretPos;
end;
finally
Amount.Properties.OnEditValueChanged := AmountPropertiesEditValueChanged;
end;
end;
end;
2026-02-06 16:53:43 +08:00
2026-03-24 10:22:19 +08:00
procedure TfrmExpenseInput.cxButtonEdit1PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
2026-05-22 11:44:22 +08:00
var
CurrentAmount: Double;
TaxAmount: Double;
2026-10-22 17:30:55 +08:00
mDetailItem: string;
2026-03-24 10:22:19 +08:00
begin
try
frmInvoiceSel := TfrmInvoiceSel.Create(Application);
with frmInvoiceSel do
begin
if ShowModal = 1 then
begin
FoppShuiNoChange := '0';
2026-05-15 09:44:36 +08:00
Self.IVNo.Text := '';
2026-03-24 10:22:19 +08:00
2026-05-15 09:44:36 +08:00
Self.IVNo.Properties.LookupItems.Text := '';
Self.Amount.Text := '0';
2026-10-22 17:30:55 +08:00
Self.IVDetailItem.Text := '';
// ftype := '进项';
2026-05-15 09:44:36 +08:00
while CDS_Invoice.Locate('SSel', true, []) do
begin
2026-03-24 10:22:19 +08:00
2026-05-15 09:44:36 +08:00
with frmInvoiceSel.CDS_Invoice do
begin
2026-05-22 11:44:22 +08:00
CurrentAmount := StrToFloatDef(StringReplace(Self.Amount.Text, ',', '', [rfReplaceAll]), 0);
TaxAmount := FieldByName('TaxAmount').AsFloat;
2026-05-15 09:44:36 +08:00
if Self.IVNo.Text = '' then
begin
Self.IVNo.Text := frmInvoiceSel.CDS_Invoice.FieldByName('IVNo').AsString;
Self.IVNo.Properties.LookupItems.Text := frmInvoiceSel.CDS_Invoice.FieldByName('IVID').AsString;
2026-07-21 14:22:39 +08:00
2026-05-22 16:01:58 +08:00
Self.Amount.Text := FormatFloat('#,##0.00', TaxAmount);
2026-05-22 11:44:22 +08:00
// Self.Amount.Text := frmInvoiceSel.CDS_Invoice.FieldByName('TaxAmount').AsString;
2026-05-15 09:44:36 +08:00
end
else
begin
Self.IVNo.Text := Trim(Self.IVNo.Text) + ',' + Trim(frmInvoiceSel.CDS_Invoice.FieldByName('IVNo').AsString);
Self.IVNo.Properties.LookupItems.Text := trim(Self.IVNo.Properties.LookupItems.Text) + ',' + Trim(frmInvoiceSel.CDS_Invoice.FieldByName('IVID').AsString);
2026-05-22 16:01:58 +08:00
Self.Amount.Text := FormatFloat('#,##0.00', CurrentAmount + TaxAmount);
2026-05-22 11:44:22 +08:00
// Self.Amount.Text := FloatToStr(strtofloatdef(Self.Amount.Text, 0) + frmInvoiceSel.CDS_Invoice.FieldByName('TaxAmount').asfloat);
2026-05-15 09:44:36 +08:00
end;
2026-10-22 17:30:55 +08:00
//选发票号的同时把明细项带过来(多张发票累加、去重)
mDetailItem := Trim(FieldByName('detail_item').AsString);
if mDetailItem <> '' then
begin
if Pos(',' + mDetailItem + ',', ',' + Trim(Self.IVDetailItem.Text) + ',') = 0 then
begin
if Trim(Self.IVDetailItem.Text) = '' then
Self.IVDetailItem.Text := mDetailItem
else
Self.IVDetailItem.Text := Trim(Self.IVDetailItem.Text) + ',' + mDetailItem;
end;
end;
2026-05-15 09:44:36 +08:00
Self.OppCoName.Text := frmInvoiceSel.CDS_Invoice.FieldByName('Supplier').AsString;
Self.OppCoName.Properties.LookupItems.Text := frmInvoiceSel.CDS_Invoice.FieldByName('CoCode').AsString;
Self.oppShuiNo.Text := trim(frmInvoiceSel.CDS_Invoice.FieldByName('SupplierShuiNo').AsString);
Self.Currency.Text := frmInvoiceSel.CDS_Invoice.FieldByName('Currency').AsString;
Self.OppBankName.text := frmInvoiceSel.CDS_Invoice.FieldByName('BankName').AsString;
Self.OppBankCardNo.text := frmInvoiceSel.CDS_Invoice.FieldByName('BankNo').AsString;
OurBankName.Text := Trim(frmInvoiceSel.CDS_Invoice.fieldbyname('BankDeposit').AsString);
OurBankCardNo.Text := Trim(frmInvoiceSel.CDS_Invoice.fieldbyname('BankCardNo').AsString);
end;
CDS_Invoice.Delete;
2026-03-24 10:22:19 +08:00
end;
2026-05-15 09:44:36 +08:00
2026-03-24 10:22:19 +08:00
FoppShuiNoChange := '1';
end;
end;
finally
frmInvoiceSel.Free;
end;
end;
2025-03-01 10:55:52 +08:00
procedure TfrmExpenseInput.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
2026-03-09 12:49:21 +08:00
procedure TfrmExpenseInput.TaxNumberPropertiesChange(Sender: TObject);
begin
2026-03-24 10:22:19 +08:00
if FoppShuiNoChange <> '0' then
begin
InitGrid2();
Panel1.Visible := True;
end;
2026-03-09 12:49:21 +08:00
end;
2025-03-01 10:55:52 +08:00
procedure TfrmExpenseInput.TBCloseClick(Sender: TObject);
begin
close;
end;
procedure TfrmExpenseInput.FormShow(Sender: TObject);
begin
InitGrid();
2026-03-09 12:49:21 +08:00
Panel1.Visible := False;
2025-03-01 10:55:52 +08:00
end;
procedure TfrmExpenseInput.TBRafreshClick(Sender: TObject);
begin
InitGrid();
end;
function TfrmExpenseInput.SaveData(): Boolean;
var
MaxId, MaxSubId, FCoCode, FCCID: string;
2026-05-22 11:44:22 +08:00
CleanAmount: string;
2025-03-01 10:55:52 +08:00
begin
try
ADOQueryCmd.Connection.BeginTrans;
if Trim(FFFID) = '' then
begin
2026-02-06 16:53:43 +08:00
if not GetLSNo(ADOQueryCmd, MaxId, 'FS', 'Finance_Flow', 4, 1) then
2026-10-22 17:30:55 +08:00
raise Exception.Create('取最大号失败!');
2025-03-01 10:55:52 +08:00
end
else
begin
MaxId := Trim(FFFID);
end;
2026-02-06 16:53:43 +08:00
FFID.Text := MaxId;
2026-05-22 11:44:22 +08:00
CleanAmount := StringReplace(Amount.Text, ',', '', [rfReplaceAll]);
2026-02-06 16:53:43 +08:00
2025-03-01 10:55:52 +08:00
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);
2026-02-06 16:53:43 +08:00
FieldByName('Filltime').Value := SGetServerDateTime(ADOQueryTemp);
FieldByName('FFTime').Value := SGetServerDateTime(ADOQueryTemp);
2026-10-22 17:30:55 +08:00
FieldByName('FFFlag').Value := '费用';
FieldByName('FFType').Value := '费用登记';
FieldByName('Checkstatus').Value := '未审核';
FieldByName('PayStatus').Value := '未付款';
FieldByName('PrintStatus').Value := '未打印';
FieldByName('FFQtyFlag').Value := 1; //出入库标记
2025-03-01 10:55:52 +08:00
end
else
begin
Edit;
FieldByName('EditId').Value := Trim(DCode);
FieldByName('Editer').Value := Trim(DName);
FieldByName('Edittime').Value := SGetServerDateTime(ADOQueryTemp);
end;
2026-02-06 16:53:43 +08:00
// FieldByName('OppCoNo').Value := Trim(OppCoName.TxtCode);
// FieldByName('OurCoNo').Value := Trim(OurCoName.TxtCode);
// FieldByName('OurBankID').Value := Trim(OurBankName.TxtCode);
// FieldByName('FFID').Value := Trim(MaxId);
2026-03-24 10:22:19 +08:00
FieldByName('OppCoNo').Value := trim(OppCoName.Properties.LookupItems.Text);
FieldByName('IVID').Value := trim(IVNO.Properties.LookupItems.Text);
2026-05-22 11:44:22 +08:00
if CleanAmount <> '' then
FieldByName('Amount').AsFloat := StrToFloatDef(CleanAmount, 0);
2026-03-24 10:22:19 +08:00
2026-02-06 16:53:43 +08:00
RTSetsavedata(ADOQueryCmd, 'Finance_Flow', ScrollBox1, 2);
2025-03-01 10:55:52 +08:00
Post;
end;
ADOQueryCmd.Connection.CommitTrans;
FCCID := Trim(MaxSubId);
Result := True;
except
Result := false;
ADOQueryCmd.Connection.RollbackTrans;
2026-10-22 17:30:55 +08:00
application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0);
2025-03-01 10:55:52 +08:00
end;
end;
2026-03-09 12:49:21 +08:00
procedure TfrmExpenseInput.ScrollBox1Click(Sender: TObject);
begin
Panel1.Visible := False;
end;
2025-03-01 10:55:52 +08:00
procedure TfrmExpenseInput.ToolButton3Click(Sender: TObject);
begin
ToolBar1.SetFocus;
if Trim(OppCoName.Text) = '' then
begin
2026-10-22 17:30:55 +08:00
Application.MessageBox('对方单位不能为空!', '提示', 0);
2025-03-01 10:55:52 +08:00
Exit;
end;
2026-02-06 16:53:43 +08:00
2025-03-01 10:55:52 +08:00
if Trim(Currency.Text) = '' then
begin
2026-10-22 17:30:55 +08:00
Application.MessageBox('币种不能为空!', '提示', 0);
2025-03-01 10:55:52 +08:00
Exit;
end;
if SaveData() then
begin
2026-10-22 17:30:55 +08:00
Application.MessageBox('保存成功!', '提示', 0);
2025-03-01 10:55:52 +08:00
ModalResult := 1;
end;
end;
2026-03-09 12:49:21 +08:00
procedure TfrmExpenseInput.Tv1DblClick(Sender: TObject);
begin
OppCoName.Text := Trim(CDS_1.fieldbyname('CoName').AsString);
OppCoName.Properties.LookupItems.Text := Trim(CDS_1.fieldbyname('CoCode').AsString);
2026-03-24 10:22:19 +08:00
oppShuiNo.Text := Trim(CDS_1.fieldbyname('ShuiNo').AsString);
2026-03-09 12:49:21 +08:00
OppBankName.Text := Trim(CDS_1.fieldbyname('BankName').AsString);
OppBankCardNo.Text := Trim(CDS_1.fieldbyname('BankNo').AsString);
Panel1.Visible := false;
end;
2025-03-01 10:55:52 +08:00
end.