紡織印染業ERP設計實務
# Smart 紡織印染業ERP設計實務
該文件將指導實現在Smart中的單據相關功能。本次我們將在Smart中實現業務系統的功能。
# 1. 系統組成
以下圖片描述本系統的模組組成,其中公司資料、客戶資料以及布種資料為對應的基礎資料,銷售訂單為引用以上基礎資料產生的單據。除公司資料外,其他的每個模組均包含查詢頁面以及編輯頁面。銷售訂單中還包括列印的相關設定內容。
本系統主要實現的功能為在建立公司資料、客戶資料、布種資料等基礎資料后,實現銷售訂單的單據的新增、編輯、審覈等相關單據功能,並實現單據的列印。
# 2. 主頁
主頁頁面,其中主要包含主頁顯示的相關內容。
# 2.1. 功能簡述
主頁頁面將需要使用到的功能以功能表的形式展現出來,通過與各個對應的模組對接鏈接,點選功能圖示打開對應的功能界面。
# 2.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
BorderStyle | bsDialog | 設定窗體邊框的型別 |
Caption | 系統展示 | 主窗體的標題名稱 |
Height | 768 | 主窗體的高度(畫素) |
Name | Main | 主窗體模組的名稱 |
Width | 1024 | 主窗體的寬度(畫素) |
# 2.3. 控制元件設定
各結構控制元件說明如下,所有涉及到文字顯示的控制元件的Font.Size
修改爲12
,TPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
Panel1 | TPanel | 頂部面板佈局控制元件。Caption :歡迎使用愛招飛演示系統 Color :clGradientInactiveCaption |
Panel2 | TPanel | 左側面板佈局控制元件。作為按鈕的容器 |
BitBtn6 | TBitBtn | 圖片按鈕控制元件。Align :對齊方式alTop Caption :快捷入口Glyph : 圖片選擇 |
BitBtn5 | TBitBtn | 圖片按鈕控制元件。Align :對齊方式alTop Caption :基礎資料Glyph : 圖片選擇 |
BitBtn4 | TBitBtn | 圖片按鈕控制元件。Align :對齊方式alTop Caption :銷售管理Glyph : 圖片選擇 |
BitBtn3 | TBitBtn | 圖片按鈕控制元件。Align :對齊方式alTop Caption :採購管理Glyph : 圖片選擇 |
BitBtn2 | TBitBtn | 圖片按鈕控制元件。Align :對齊方式alTop Caption :生產管理Glyph : 圖片選擇 |
BitBtn1 | TBitBtn | 圖片按鈕控制元件。Align :對齊方式alTop Caption :財務管理Glyph : 圖片選擇 |
pnCompany | TPanel | 面板控制元件,存放公司資料圖片按鈕 |
imgbtnCompany | TImage | 圖片控制元件,顯示公司資料圖片。Picture :點選打開圖片選擇對話方塊。 |
Label2 | TLabel | 顯示標籤(公司資料)Caption :公司資料 |
pnCust | TPanel | 面板控制元件,存放客戶資料圖片按鈕 |
imgbtnCust | TImage | 圖片控制元件,顯示客戶資料圖片。Picture :點選打開圖片選擇對話方塊。 |
Label3 | TLabel | 顯示標籤(客戶資料)Caption :客戶資料 |
pnItem | TPanel | 面板控制元件,存放布種資料圖片按鈕 |
imgbtnItem | TImage | 圖片控制元件,顯示布種資料圖片。Picture :點選打開圖片選擇對話方塊。 |
Label4 | TLabel | 顯示標籤(布種資料)Caption :布種資料 |
pnSalOrder | TPanel | 面板控制元件,存放銷售訂單圖片按鈕 |
imgbtnSalOrder | TImage | 圖片控制元件,顯示銷售訂單資料圖片。Picture :點選打開圖片選擇對話方塊。 |
Label5 | TLabel | 顯示標籤(銷售訂單)Caption :銷售訂單 |
# 2.4. 指令碼設計
type
TMyHandler = class(TForm)
private
FThis:TBaseForm;
Public
constructor Create(AOwner: TComponent); override;
{模組聲明 MODULE-DECLARE}
procedure imgbtnCompanyClick(Sender: TObject);
procedure imgbtnCustClick(Sender: TObject);
procedure imgbtnItemClick(Sender: TObject);
procedure imgbtnSalOrderClick(Sender: TObject);
end;
//...
var
FMyHandler:TMyHandler;
begin
FMyHandler := TMyHandler.Create(this);
{事件繫結 MODULE-BIND}
this.imgbtnCompany.OnClick := FMyHandler.imgbtnCompanyClick;
this.imgbtnCust.OnClick := FMyHandler.imgbtnCustClick;
this.imgbtnItem.OnClick := FMyHandler.imgbtnItemClick;
this.imgbtnSalOrder.OnClick := FMyHandler.imgbtnSalOrderClick;
end.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
程式模組名稱 | 說明 |
---|---|
Create | 構造器,啟動后運行需初始化設定的內容 |
imgbtnCompanyClick | 公司資料按鈕點選 |
imgbtnCustClick | 客戶資料按鈕點選 |
imgbtnItemClick | 布種資料按鈕點選 |
imgbtnSalOrderClick | 銷售訂單資料點選 |
- Create:構造器,啟動后運行需初始化設定的內容。
constructor TMyHandler.Create(AOwner: TComponent);
begin
FThis :=TBaseForm(AOwner);
end;
2
3
4
- imgbtnCompanyClick:公司資料按鈕點選。
procedure TMyHandler.imgbtnCompanyClick;
//點選打開公司資料模組頁面
var
//定義一個基類窗體
F: TBaseForm;
begin
//打開窗體名稱為Company的視窗
F := paxfunc.OpenForm('Company');
//打開的視窗與目前視窗建立鏈接
F.TagObject := FThis;
end;
2
3
4
5
6
7
8
9
10
11
- imgbtnCustClick:客戶資料按鈕點選。
procedure TMyHandler.imgbtnCustClick;
//打開客戶資料
var
F: TBaseForm;
begin
F := paxfunc.OpenForm('Cust');
F.TagObject := FThis;
end;
2
3
4
5
6
7
8
- imgbtnItemClick:布種資料按鈕點選。
procedure TMyHandler.imgbtnItemClick;
//打開布種資料
var
F: TBaseForm;
begin
F := paxfunc.OpenForm('Item');
F.TagObject := FThis;
end;
2
3
4
5
6
7
8
- imgbtnSalOrderClick: 銷售訂單資料點選。
procedure TMyHandler.imgbtnSalOrderClick;
//打開銷售訂單
var
F: TBaseForm;
begin
F := paxfunc.OpenForm('SalOrder');
F.TagObject := FThis;
end;
2
3
4
5
6
7
8
# 2.5. 多語言設定
在功能表欄點選語言
-語言設定
,打開多語言設定對話方塊,根據提示進行多語言的設定。
# 2.6. 運行效果
# 3. 基礎資料頁面設定
基礎資料的頁面,除公司資料僅包含編輯頁面,其餘的模組均包含查詢頁面以及編輯頁面。
# 3.1. 公司資料編輯-單筆數據表單
公司資料編輯頁面設定如下。
# 3.1.1. 功能簡述
公司資料用於對公司資料的內容進行編輯,此頁面中包含了單筆數據的表單設計模式,資料庫圖片的展示與引用,圖片的對話方塊引入模式的設計說明。
# 3.1.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Caption | 公司資料 | 主窗體的標題名稱 |
Height | 768 | 主窗體的高度(畫素) |
Name | Company | 主窗體模組的名稱 |
Width | 1024 | 主窗體的寬度(畫素) |
# 3.1.3. 控制元件設定
各表結構欄位及對應的數據感知控制元件名稱如下:
- 非數據控制元件說明
所有涉及到文字顯示的控制元件的Font.Size
修改爲12
,TPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
Panel1 | TPanel | 用於頂部的佈局,放置單據的操作按鈕(儲存、修改、退出) |
GroupBox1 | TGroupBox | 左下側的佈局控制元件,作為公司資料中公司資訊部分的數據感知控制元件的容器 |
GroupBox2 | TGroupBox | 右下側的佈局控制元件,作為公司資料中公司圖示的數據感知控制元件以及配套控制元件的容器 |
btnSave | TBitBtn | 儲存按鈕,點選此按鈕以執行數據集儲存程式Caption :儲存 |
btnEdit | TBitBtn | 修改按鈕,用於啟用單據編輯模式Caption :修改 |
btnExit | TBitBtn | 退出按鈕,用於退出目前單據頁面Caption :退出 |
btnUpload | TBitBtn | 上傳按鈕,用於打開圖片上傳對話方塊頁面Caption :上傳圖片 |
btnClearPicture | TBitBtn | 清除按鈕,用於清除數據集中的圖片Caption :清除 |
OpenPictureDialog | TOpenPictureDialog | 對話方塊控制元件,用於打開圖片選擇對話方塊 |
dts0 | TRFDataSet | Basic_Company 表對應的數據集 |
ds0 | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dts0 |
- 數據控制元件說明
Basic_Company
以下數據感知控制元件在設定時需將DataSource
控制元件指定為ds0
,所有涉及到文字顯示的控制元件的Font.Size
修改爲12
。由於數據感知控制元件不包含標籤顯示,故每放置一個字元編輯型別的數據感知控制元件前,需要先放置一個TLabel
控制元件,並將其Caption
屬性設定為數據欄位對應的中文名稱,同樣也需要將其 Font.Size
修改爲12
。
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FCompanyID | 公司編號 | TDBEdit | edtFCompanyID | |
FCompanyCode | 公司代號 | TDBEdit | edtFCompanyCode | |
FComanyName | 簡體名稱 | TDBEdit | edtFCompanyName | |
FComanyNameTW | 繁體名稱 | TDBEdit | edtFCompanyNameTW | |
FCompanyNameEn | 英文名稱 | TDBEdit | edtFCompanyNameEn | |
FContact | 負責人 | TDBEdit | edtFContact | |
FCurrenty | 本位幣 | TDBComboBox | cbFCurrenty | |
FPhone1 | 電話1 | TDBEdit | edtFPhone1 | |
FRemovedDate | 結帳日期 | TDBEdit | edtFRemovedDate | |
FPhone2 | 電話2 | TDBEdit | edtFPhone2 | |
FTaxType | 稅率類別 | TDBComboBox | cbFTaxType | |
FFax | 傳真號碼 | TDBEdit | edtFFax | |
FTaxRate | 稅率 | TDBEdit | edtFTaxRate | |
FEmail | 郵箱 | TDBEdit | edtFEmail | |
FCompanyAddr | 簡體地址 | TDBEdit | edtFCompanyAddr | |
FCompanyAddrTW | 繁體地址 | TDBEdit | edtFCompanyAddrTW | |
FCompanyAddrEn | 英文地址 | TDBEdit | edtFCompanyAddrEn | |
FUrl | 公司主頁 | TDBEdit | edtFUrl | |
FBank | 開戶銀行 | TDBEdit | edtFBank | |
FAccountNo | 開戶帳號 | TDBEdit | edtFAccountNo | |
FZip | 郵編號碼 | TDBEdit | edtFZip | |
FTaxID | 稅號 | TDBEdit | edtFTaxID | |
FCompanyLogo | 公司圖示 | TDBImage | CompanyLogo |
其中需要注意的是FCompanyLogo
,需額外設定其Font
屬性,將其顏色修改爲白色,並將其Color
屬性設定為clWhite
以掩蓋控制元件名稱的標識。
# 3.1.4. 指令碼設計
type
TMyHandler = class(TForm)
private
FThis:TBaseForm;
Public
constructor Create(AOwner: TComponent); override;
procedure RefState(Bool: Boolean);
{模組聲明 MODULE-DECLARE}
procedure btnSaveClick(Sender: TObject);
procedure btnEditClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure btnUploadClick(Sender: TObject);
procedure btnClearPictureClick(Sender: TObject);
end;
//...
var
FMyHandler:TMyHandler;
begin
FMyHandler := TMyHandler.Create(this);
{事件繫結 MODULE-BIND}
this.btnSave.OnClick := FMyHandler.btnSaveClick;
this.btnEdit.OnClick := FMyHandler.btnEditClick;
this.btnExit.OnClick := FMyHandler.btnExitClick;
this.btnUpload.OnClick := FMyHandler.btnUploadClick;
this.btnClearPicture.OnClick := FMyHandler.btnClearPictureClick;
end.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- 程式模組列表
程式模組名稱 | 說明 |
---|---|
Create | 構造器,啟動后運行需初始化設定的內容 |
RefState | 用於更新單據頁面按鈕的狀態 |
btnSaveClick | 儲存按鈕的點選事件 |
btnEditClick | 編輯按鈕的點選事件 |
btnExitClick | 退出按鈕的點選事件 |
btnUploadClick | 上傳圖片按鈕的點選事件 |
btnClearPictureClick | 清除按鈕的點選事件 |
- Create:構造器,啟動后運行需初始化設定的內容。
constructor TMyHandler.Create(AOwner: TComponent);
begin
FThis :=TBaseForm(AOwner);
//指定使用帳套設定中的連線設定
FThis.dts0.Connection := dm.DBConnection;
//數據集SQL賦值
FThis.dts0.SQL.Text := 'SELECT * FROM Basic_Company';
//打開數據集
FThis.dts0.Open;
//初始化,設定覈取方塊多語言的設定選項(貨幣型別)
FThis.cbFCurrenty.Items.CommaText := FThis.siLang1.GetTextW('人民幣,美元,新臺幣,港幣');
//初始化,設定覈取方塊多語言的設定選項(稅收型別)
FThis.cbFTaxType.Items.CommaText := FThis.siLang1.GetTextW('增值稅,營業稅,免稅');
//更新頁面狀態
RefState(False);
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- RefState:更新單據頁面按鈕的狀態。
procedure TMyHandler.RefState(Bool: Boolean);
//更新頁面狀態,當頁面設定為True時啟用頁面的編輯模式,按鈕根據編輯模式調整禁用或啟用。
begin
//數據集、儲存、上傳圖片、清除按鈕在編輯模式下啟用
FThis.ds0.AutoEdit := Bool;
FThis.btnEdit.Enabled := not Bool;
FThis.btnSave.Enabled := Bool;
FThis.btnUpload.Enabled := Bool;
FThis.btnClearPicture.Enabled := Bool;
end;
2
3
4
5
6
7
8
9
10
- btnSaveClick:儲存按鈕的點選事件。
procedure TMyHandler.btnSaveClick;
//儲存
begin
//儲存
FThis.dts0.Edit;
FThis.dts0.Post;
FThis.dts0.ApplyUpdates(-1);
//重新整理狀態
RefState(False);
end;
2
3
4
5
6
7
8
9
10
- btnEditClick:編輯按鈕的點選事件。
procedure TMyHandler.btnEditClick;
//修改
begin
RefState(True);
end;
2
3
4
5
- btnExitClick:退出按鈕的點選事件。
procedure TMyHandler.btnExitClick;
//退出
begin
FThis.Close;
end;
2
3
4
5
- btnUploadClick:上傳圖片按鈕的點選事件。
procedure TMyHandler.btnUploadClick;
//上傳圖片
begin
//呼叫打開圖片的對話方塊,選擇圖片后執行下面的指令碼
if FThis.OpenPictureDialog.Execute(0) then
begin
//數據集編輯,將圖片載入至數據集中
FThis.dts0.Edit;
TBlobField(FThis.dts0.FieldByName('FCompanyLogo')).Clear;
TBlobField(FThis.dts0.FieldByName('FCompanyLogo')).LoadFromFile(FThis.OpenPictureDialog.FileName);
FThis.dts0.Post;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
- btnClearPictureClick:清除按鈕的點選事件。
procedure TMyHandler.btnClearPictureClick;
//清空圖片
begin
//數據集開啟編輯,將圖片所在的欄位清空並提交。
FThis.dts0.Edit;
TBlobField(FThis.dts0.FieldByName('FCompanyLogo')).Clear;
FThis.dts0.Post;
end;
2
3
4
5
6
7
8
# 3.1.5. 多語言設定
在功能表欄點選語言
-語言設定
,打開多語言設定對話方塊,根據提示進行多語言的設定。
# 3.1.6. 運行效果
# 3.2. 客戶資料查詢-多筆數據表單
客戶資料查詢頁面設定如下:
# 3.2.1. 功能簡述
客戶資料的頁面按照客戶分類進行客戶資訊的分類展示,此頁面包含分組顯示錶單的模式設計,表格查詢等相關的模組設計內容。
# 3.2.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Caption | 客戶資料 | 主窗體的標題名稱 |
Height | 768 | 主窗體的高度(畫素) |
Name | Cust | 主窗體模組的名稱 |
Width | 1024 | 主窗體的寬度(畫素) |
# 3.2.3. 控制元件設定
各表結構欄位及對應的數據感知控制元件名稱如下,其中的TBitBtn
、TLabeledEdit
型別的控制元件需修改Font.Size
為12
,TPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
- 控制元件說明
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
Panel1 | TPanel | 頂部面板顯示,用於放置控制元件容器 |
edQuery | TLabeledEdit | 查詢輸入框,用於輸入客戶程式碼與名稱TextHint :輸入客戶程式碼或名稱EditLabel.Caption :客戶程式碼或名稱 |
btnQuery | TBitBtn | 查詢按鈕,點選以根據條件進行查詢。Caption :查詢 |
btnClear | TBitBtn | 清除按鈕,點選以清除查詢內容恢復至初始狀態。Caption :清除 |
btnAppend | TBitBtn | 新建按鈕,點選以新建單據。Caption :新建 |
btnDelete | TBitBtn | 刪除按鈕,點選以刪除。Caption :刪除 |
btnEditor | TBitBtn | 編輯按鈕,點選以進入編輯模式。Caption :編輯 |
btnRefresh | TBitBtn | 重新整理按鈕,點選以重新整理顯示。Caption :重新整理 |
btnShowAll | TBitBtn | 顯示全部按鈕,點選以顯示全部內容。Caption :顯示全部 |
btnExit | TBitBtn | 退出按鈕,點選以退出目前窗體。Caption :退出 |
dts0 | TRFDataSet | 數據集控制元件,展示客戶分類 Basic_CustGroup |
dts1 | TRFDataSet | 數據集控制元件,展示客戶資訊 Basic_Cust |
ds0 | TDataSource | 數據源控制元件,繫結數據集DataSet :dts0 |
ds1 | TDataSource | 數據源控制元件,繫結數據集DataSet :dts1 |
Spliter1 | TSpliter | 分隔控制元件,用於分隔數據表格控制元件 |
DBGrid1 | TDBGrid | 客戶分組數據表格DataSource :ds0 |
DBGrid2 | TDBGrid | 客戶資訊數據表格DataSource :ds1 |
- DBGrid1數據表格說明
在設定表格列之前,使用滑鼠右鍵點選表格,在選項中選擇Custom Columns
,轉換為自定義表格後進行設定。點選Columns
屬性打開對話方塊,在此處新增欄位。選擇新增的欄位進行屬性的更改。
FieldName 欄位名 | Font.Size 字型大小 | Title.Caption 標題文字 | Title.Font.Size 標題字型大小 | Width 列寬度 |
---|---|---|---|---|
FGroupName | 10 | 分組名稱 | 12 | 90 |
FGroupCode | 10 | 分組程式碼 | 12 | 80 |
- DBGrid2數據表格說明
在設定表格列之前,使用滑鼠右鍵點選表格,在選項中選擇Custom Columns
,轉換為自定義表格後進行設定。點選Columns
屬性打開對話方塊,在此處新增欄位。選擇新增的欄位進行屬性的更改。
FieldName 欄位名 | Font.Size 字型大小 | Title.Caption 標題文字 | Title.Font.Size 標題字型大小 | Width 列寬度 |
---|---|---|---|---|
FCustCode | 10 | 客戶程式碼 | 12 | 80 |
FCustName | 10 | 客戶名稱 | 12 | 140 |
FShortName | 10 | 客戶簡稱 | 12 | 80 |
FDeptName | 10 | 部門名稱 | 12 | 80 |
FEmpName | 10 | 業務員 | 12 | 80 |
FforzenFor | 10 | 凍結 | 12 | 60 |
FCreater | 10 | 建立使用者 | 12 | 90 |
FLstModDate | 10 | 最後修改日期 | 12 | 130 |
# 3.2.4. 指令碼設計
type
TMyHandler = class(TForm)
private
FThis:TBaseForm;
Public
constructor Create(AOwner: TComponent); override;
{模組聲明 MODULE-DECLARE}
procedure btnQueryClick(Sender: TObject);
procedure btnClearClick(Sender: TObject);
procedure btnAppendClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
procedure btnEditorClick(Sender: TObject);
procedure btnRefreshClick(Sender: TObject);
procedure btnShowAllClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
end;
//....
var
FMyHandler:TMyHandler;
begin
FMyHandler := TMyHandler.Create(this);
{事件繫結 MODULE-BIND}
this.btnQuery.OnClick := FMyHandler.btnQueryClick;
this.btnClear.OnClick := FMyHandler.btnClearClick;
this.btnAppend.OnClick := FMyHandler.btnAppendClick;
this.btnDelete.OnClick := FMyHandler.btnDeleteClick;
this.btnEditor.OnClick := FMyHandler.btnEditorClick;
this.btnRefresh.OnClick := FMyHandler.btnRefreshClick;
this.btnShowAll.OnClick := FMyHandler.btnShowAllClick;
this.btnExit.OnClick := FMyHandler.btnExitClick;
this.DBGrid1.OnCellClick := FMyHandler.DBGrid1CellClick;
end.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
- 程式模組列表
程式模組名稱 | 說明 |
---|---|
Create | 構造器,啟動后運行需初始化設定的內容 |
btnQueryClick | 查詢按鈕的點選事件,根據查詢的內容顯示結果 |
btnClearClick | 清除按鈕的點選事件,清除查詢內容並恢復至初始查詢狀態 |
btnAppendClick | 新建按鈕的點選事件,新建基礎資料單據 |
btnDeleteClick | 刪除按鈕的點選事件,刪除基礎資料單據 |
btnEditorClick | 編輯按鈕的點選事件,編輯基礎資料單據 |
btnRefreshClick | 重新整理按鈕的點選事件,重新整理基礎資料頁面的顯示 |
btnShowAllClick | 顯示全部的點選事件,去除所有分類顯示條目 |
btnExitClick | 退出的點選事件,退出並關閉目前視窗 |
DBGrid1CellClick | 表格單元的點選事件,點選以按目前分類進行顯示 |
- Create:構造器,啟動后運行需初始化設定的內容。
constructor TMyHandler.Create(AOwner: TComponent);
//構造器
begin
FThis :=TBaseForm(AOwner);
//客戶分類與客戶資料數據集設定連線型別為帳套設定
FThis.dts0.Connection := dm.DBConnection;
FThis.dts1.Connection := dm.DBConnection;
//客戶資料分類數據集SQL賦值
FThis.dts0.SQL.Text := 'Select FInterID,FGroupCode,FGroupName,FNote,FTreeKeyID,' +
'FTreeParenteID,FAbsoluteIndex From Basic_CustGroup Order by FGroupCode';
//客戶資料分類數據集打開
FThis.dts0.Open;
//客戶資料分類數據集定位至第一條記錄
FThis.dts0.First;
//客戶資料數據集SQL賦值
FThis.dts1.SQL.Text := 'SELECT * FROM Basic_Cust';
//客戶資料數據集打開
FThis.dts1.Open;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- btnQueryClick:查詢按鈕的點選事件,根據查詢的內容顯示結果。
procedure TMyHandler.btnQueryClick;
//查詢
begin
//客戶資料數據集關閉
FThis.dts1.Close;
//客戶資料數據集SQL重新賦值,引入查詢視窗的內容
FThis.dts1.SQL.Text := 'SELECT * FROM Basic_Cust WHERE FCustCode LIKE ''%' +
FThis.edQuery.Text + '%'' or FCustName LIKE ''%' + FThis.edQuery.Text +
'%'' Order by FCustCode';
//客戶資料數據集打開
FThis.dts1.Open;
end;
2
3
4
5
6
7
8
9
10
11
12
- btnClearClick:清除按鈕的點選事件,清除查詢內容並恢復至初始查詢狀態。
procedure TMyHandler.btnClearClick;
//清除,清除查詢視窗中的內容,並重新為客戶資料數據集SQL賦值
begin
FThis.edQuery.Text := '';
FThis.dts1.SQL.Text := 'SELECT * FROM Basic_Cust';
FThis.dts1.Open;
end;
2
3
4
5
6
7
- btnAppendClick:新建按鈕的點選事件,新建基礎資料單據。
procedure TMyHandler.btnAppendClick;
//新建,在新的視窗中打開此頁面
var
F: TBaseForm;
vInterID: Integer;
begin
//獲取產生唯一ID,並存入變數中
vInterID := dm.GetNodeID;
//客戶資料編輯視窗打開
F := paxfunc.OpenForm('CustEdit');
//新打開的視窗建立鏈接
F.TagObject := FThis;
//客戶資料數據集參數賦值並打開
TRFDataSet(F.FindComponent('dtsGeneral')).ParamByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dtsGeneral')).Open;
//客戶地址數據集參數賦值並打開
TRFDataSet(F.FindComponent('dtsCustAddrs')).ParamByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dtsCustAddrs')).Open;
//客戶關係數據集參數賦值並打開
TRFDataSet(F.FindComponent('dtsCustRelation')).ParamByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dtsCustRelation')).Open;
//客戶物料數據集參數賦值並打開
TRFDataSet(F.FindComponent('dtsCustMaterial')).ParamByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dtsCustMaterial')).Open;
//客戶資料數據集新增行
TRFDataSet(F.FindComponent('dtsGeneral')).Append;
//初始內容新增賦值。FInterID,FGroupID,FCreater欄位賦值
TRFDataSet(F.FindComponent('dtsGeneral')).FieldByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dtsGeneral')).FieldByName('FGroupID').AsString := FThis.dts0.FieldByName('FInterID').AsString;
TRFDataSet(F.FindComponent('dtsGeneral')).FieldByName('FCreater').AsString := FThis.siLang1.GetTextW('admin');
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
- btnDeleteClick:刪除按鈕的點選事件,刪除基礎資料單據。
procedure TMyHandler.btnDeleteClick;
//刪除
var
AStoredProc: TRFStoredProc;
vRAISEMSG,vMSG: String;
i, j: Integer;
begin
//呼叫選擇視窗提示刪除客戶資訊
if paxfunc.YesNoMsg(FThis.siLang1.GetTextW('是否刪除該客戶?'),FThis.siLang1.GetTextW('提示')) then
begin
//預存程序控制元件建立並設定帳套連線
AStoredProc := TRFStoredProc.Create(nil);
AStoredProc.Connection := dm.DBConnection;
try
//呼叫預存程序sp_Basic_Cust
AStoredProc.StoredProcName := 'sp_Basic_Cust';
//預存程序準備以載入所需參數
AStoredProc.Prepare;
if AStoredProc.Prepared then
begin
//參數賦值
AStoredProc.ParamByName('FDataID').AsString := FThis.dts1.FieldByName('FInterID').AsString;
AStoredProc.ParamByName('Flag').AsString := 'Delete';
AStoredProc.ParamByName('FUserCode').AsString := FThis.siLang1.GetTextW('admin');
//輸出參數,確認
if AStoredProc.FindParam('FMsg') <> nil then
AStoredProc.ParamByName('FMsg').AsString := '';
try
//運行執行預存程序
AStoredProc.ExecProc;
//如果有意外情況,此處收集意外資訊
Except on ExceptionMessage:Exception do
begin
//獲取預存程序執行意外的資訊內容
vRAISEMSG:=ExceptionMessage.Message;
//文字資訊處理以獲取意外資訊的主幹內容
i := Pos('SQMESSAGE', vRAISEMSG);
j := Pos('[SQL Server]', vRAISEMSG);
vMSG := Copy(vRAISEMSG, i, Length(vRAISEMSG) - i + 1);
// 非格式化訊息提示
if i = 0 then
begin
ShowMessage(Copy(vRAISEMSG, j + 12, Length(vRAISEMSG) - j + 1));
Exit;
end;
end;
end;
//預存程序執行成功後重新執行查詢點選事件以重新整理表格
btnQueryClick(sender);
end;
finally
AStoredProc.Free;
end;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
- btnEditorClick:編輯按鈕的點選事件,編輯基礎資料單據。
procedure TMyHandler.btnEditorClick;
//編輯客戶
var
F: TBaseForm;
vInterID: Integer;
begin
//獲取客戶記錄的唯一ID
vInterID := FThis.dts1.FieldByName('FInterID').AsInteger;
//客戶資料編輯視窗打開
F := paxfunc.OpenForm('CustEdit');
//與目前視窗建立鏈接
F.TagObject := FThis;
//客戶資料數據集參數賦值並打開
TRFDataSet(F.FindComponent('dtsGeneral')).ParamByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dtsGeneral')).Open;
//客戶地址數據集參數賦值並打開
TRFDataSet(F.FindComponent('dtsCustAddrs')).ParamByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dtsCustAddrs')).Open;
//客戶關係數據集參數賦值並打開
TRFDataSet(F.FindComponent('dtsCustRelation')).ParamByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dtsCustRelation')).Open;
//客戶物料數據集參數賦值並打開
TRFDataSet(F.FindComponent('dtsCustMaterial')).ParamByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dtsCustMaterial')).Open;
//客戶列表定位,查詢目前唯一ID在列表中的位置,並進行循環移動定位
TRFDataSet(F.FindComponent('dtsList')).First;
While TRFDataSet(F.FindComponent('dtsList')).FieldByName('FInterID').AsString <> FThis.dts1.FieldByName('FInterID').AsString do
begin
TRFDataSet(F.FindComponent('dtsList')).Next;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
- btnRefreshClick:重新整理按鈕的點選事件,重新整理基礎資料頁面的顯示
procedure TMyHandler.btnRefreshClick;
//重新整理
begin
//重新整理狀態顯示,功能與初次打開類似
FThis.dts0.SQL.Text := 'Select FInterID,FGroupCode,FGroupName,FNote,FTreeKeyID,FTreeParenteID,FAbsoluteIndex From Basic_CustGroup Order by FGroupCode';
FThis.dts0.Open;
FThis.dts0.First;
FThis.dts1.SQL.Text := 'SELECT * FROM Basic_Cust';
FThis.dts1.Open;
end;
2
3
4
5
6
7
8
9
10
- btnShowAllClick:顯示全部的點選事件,去除所有分類顯示條目。
procedure TMyHandler.btnShowAllClick;
//設定數據集篩選,取消篩選條件
begin
FThis.dts1.Filtered := False;
end;
2
3
4
5
- btnExitClick:退出的點選事件,退出並關閉目前視窗。
procedure TMyHandler.btnExitClick;
//退出
begin
FThis.Close;
end;
2
3
4
5
- DBGrid1CellClick:表格單元的點選事件,點選以按目前分類進行顯示。
procedure TMyHandler.DBGrid1CellClick;
//分類檢視,新增篩選條件,並開啟篩選功能
begin
FThis.dts1.Filtered := False;
FThis.dts1.Filter := 'FGroupID = ' + FThis.dts0.FieldByName('FInterID').AsString;
FThis.dts1.Filtered := True;
end;
2
3
4
5
6
7
# 3.2.5. 多語言設定
在功能表欄點選語言
-語言設定
,打開多語言設定對話方塊,根據提示進行多語言的設定。
# 3.2.6. 運行效果
# 3.3. 客戶資料編輯-多筆數據表單
客戶資料編輯頁面設定如下:
# 3.3.1. 功能簡述
客戶資料編輯用於對客戶資料的資訊進行詳細設定,其中引用了部分查詢表需要使用的業務員資料、幣種資料、客戶分組、布種資料等數據集資訊,也包括了資料庫圖片的上傳與修改,清除等設定方式。
# 3.3.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Caption | 客戶資料編輯 | 主窗體的標題名稱 |
Height | 768 | 主窗體的高度(畫素) |
Name | CustEdit | 主窗體模組的名稱 |
Width | 1024 | 主窗體的寬度(畫素) |
# 3.3.3. 控制元件設定
各表結構欄位及對應的控制元件名稱如下:
- 非數據感知控制元件說明
頁面中注意修改TBitBtn
、TGroupBox
型別的控制元件的文字大小Font.Size
屬性為12
,TPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
Panel1 | TPanel | 面板控制元件,作為佈局容器使用,位於頂部位置 |
GroupBox1 | TGroupBox | 分組框控制元件,作為佈局容器使用,位於Panel下方的置頂位置 |
PageControl1 | TPageControl | 頁面控制元件,佔據除頂部空間外所有的位置 在頁面空白處右鍵單擊選擇 New Page 新增標籤頁TabSheet |
TabSheet1 | TTabSheet | PageControl1 中的標籤頁面1Caption :概覽 |
TabSheet2 | TTabSheet | PageControl1 中的標籤頁面2Caption :客戶收貨地址 |
TabSheet3 | TTabSheet | PageControl1 中的標籤頁面3Caption :關係人員 |
TabSheet4 | TTabSheet | PageControl1 中的標籤頁面3Caption :客戶產品 |
btnFirst | TBitBtn | 首項按鈕,點選跳轉至記錄的首頁Caption :首項 |
btnPrior | TBitBtn | 前項按鈕,點選跳轉至記錄的前項Caption :前項 |
btnNext | TBitBtn | 後項按鈕,點選跳轉至記錄的後項Caption :後項 |
btnLast | TBitBtn | 末項按鈕,點選跳轉至記錄的末項Caption :末項 |
btnNew | TBitBtn | 新建按鈕,點選以新建客戶資料Caption :新建 |
btnSave | TBitBtn | 儲存按鈕,點選以儲存資料的更改Caption :儲存 |
btnDelete | TBitBtn | 刪除按鈕,點選以刪除目前的客戶資料Caption :刪除 |
btnUpdate | TBitBtn | 更新按鈕,點選以更新單據中的客戶資料Caption :更新 |
btnExit | TBitBtn | 退出按鈕,點選以退出視窗Caption :退出 |
btnUpload | TBitBtn | 上傳圖片按鈕,點選以打開圖片選擇對話方塊Caption :上傳圖片 |
btnClearPicyure | TBitBtn | 刪除圖片按鈕,點選清除圖片Caption :清除 |
OpenPictureDialog | TOpenPictureDialog | 打開圖片對話方塊 |
dtsGeneral | TRFDataSet | 客戶資料資訊數據集 |
dsGeneral | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsGeneral |
dtsCustGroup | TRFDataSet | 客戶分組資訊數據集 |
dsCustGroup | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsCustGroup |
dtsInvoiceCust | TRFDataSet | 結帳客戶資訊數據集 |
dsInvoiceCust | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsInvoiceCust |
dtsFDistrict | TRFDataSet | 區域資訊數據集 |
dsFDistrict | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFDistrict |
dtsList | TRFDataSet | 客戶資訊唯一ID列表 |
- GroupBox1數據感知控制元件說明
此頁面中首頁繫結的數據源DataSource
為dsGeneral
,所有涉及到文字顯示的控制元件的文字大小屬性Font.Size
修改爲12
。由於數據感知控制元件不包含標籤顯示,故每放置一個字元編輯型別的數據感知控制元件前,需要先放置一個TLabel
控制元件,並將其Caption
屬性設定為數據欄位對應的中文名稱,同樣也需要將其 Font.Size
修改爲12
。
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FGroupID | 分組 | TDBLookupComboBox | lkupGroupID | 列表繫結的數據源ListSource :dsCustGroup列表顯示的欄位名 ListField :FGroupName列表對應返回的欄位值 KeyField : FGroupID |
FCustCode | 客戶程式碼 | TDBEdit | edtFCustCode | |
FShortName | 客戶簡稱 | TDBEdit | edtFShortName | |
FCustName | 客戶簡稱 | TDBEdit | edtFCustName | |
FCorporation | 法人代表 | TDBEdit | edtFCorporation | |
FInvoiceCustName | 結帳客戶 | TDBLookupComboBox | lkupFInvoiceCustName | 列表繫結的數據源ListSource :dsInvoiceCust列表顯示的欄位名 ListField :FInvoiceCustName列表對應返回的欄位值 KeyField : FInvoiceCustName |
FDistrict | 區域 | TDBLookupComboBox | lkupFDistrict | 列表繫結的數據源ListSource :dsFDistrict列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField : FName |
FForeignName | 外語描述 | TDBEdit | edtFForeignName | |
FCustLogo | 公司圖示 | TDBImage | CustLogo | |
FCustomerType | 客戶型別 | TDBRadioGroup | rgFCustomerType | 設定選項Items.CommaText := '國內客戶,國外客戶' |
其中需要注意的是FCustLogo
,需額外設定其Font
屬性,將其顏色修改爲白色,並將其Color
屬性設定為clWhite
以掩蓋控制元件名稱的標識。
- TTabSheet1非數據感知控制元件說明
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
dtsFCurrency | TRFDataSet | 貨幣資料資訊數據集 |
dsFCurrency | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFCurrency |
dtsEmp | TRFDataSet | 員工資料資訊數據集 |
dsEmp | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsEmp |
dtsInvoiceType | TRFDataSet | 發票型別資訊數據集 |
dsInvoiceType | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsInvoiceType |
dtsSaleType | TRFDataSet | 發票型別資訊數據集 |
dsSaleType | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsSaleType |
dtsPayItem | TRFDataSet | 付款方式資訊數據集 |
dsPayItem | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsPayItem |
dtsSettleName | TRFDataSet | 結算方式資訊數據集 |
dsSettleName | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsSettleName |
- TTabSheet1數據感知控制元件說明
此頁面中首頁繫結的數據源DataSource
為dsGeneral
,所有涉及到文字顯示的控制元件的文字大小屬性Font.Size
修改爲12
。由於數據感知控制元件不包含標籤顯示,故每放置一個字元編輯型別的數據感知控制元件前,需要先放置一個TLabel
控制元件,並將其Caption
屬性設定為數據欄位對應的中文名稱,同樣也需要將其 Font.Size
修改爲12
。
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FCurrencyID | 幣別 | TDBLookupComboBox | lkupFCurrencyID | 列表繫結的數據源ListSource :dsFCurrency列表顯示的欄位名 ListField :FCurrencyName列表對應返回的欄位值 KeyField : FCurrencyID |
FExchangeRate | 匯率 | TDBEdit | edtFExchangeRate | |
FEmpName | 業務員 | TDBLookupComboBox | lkupFEmpName | 列表繫結的數據源ListSource :dsEmp列表顯示的欄位名 ListField :FEmpName列表對應返回的欄位值 KeyField : FEmpName |
FDeptName | 部門名稱 | TDBEdit | edtFDeptName | 設定此控制元件為只讀ReadOnly :True |
FPhone1 | 電話1 | TDBEdit | edtFPhone1 | |
FPhone2 | 電話2 | TDBEdit | edtFPhone2 | |
FContacts | 聯繫人 | TDBEdit | edtFContacts | |
FFax | 傳真 | TDBEdit | edtFFax | |
FTel | 行動電話 | TDBEdit | edtFTel | |
FZipCode | 郵政編碼 | TDBEdit | edtFZipCode | |
FEmail | 電子郵箱 | TDBEdit | edtFEmail | |
FSaleType | 銷售型別 | TDBLookupComboBox | lkupFSaleType | 列表繫結的數據源ListSource :dsSaleType列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField : FName |
FInvoiceType | 發票型別 | TDBLookupComboBox | lkupFInvoiceType | 列表繫結的數據源ListSource :dsInvoiceType列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField : FName |
FCreditLine | 信用額度 | TDBEdit | edtFCreditLine | |
FCreditLineDay | 信用天數 | TDBEdit | edtFCreditLineDay | |
FAddress | 地址 | TDBEdit | edtFAddress | |
FHouseBank | 開戶銀行 | TDBEdit | edtFHouseBank | |
FHouseBnkAct | 開戶帳號 | TDBEdit | edtFHouseBnkAct | |
FTaxCode | 稅號 | TDBEdit | edtFTaxCode | |
FPayItemName | 付款方式 | TDBLookupComboBox | lkupFPayItemName | 列表繫結的數據源ListSource :dsPayItem列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField : FName |
FSettleName | 結算方式 | TDBLookupComboBox | lkupFPayItemName | 列表繫結的數據源ListSource :dsSettle列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField : FName |
FNote | 備註 | TDBMemo | mmFNote | |
FCreater | 建立使用者 | TDBText | lbCreater | |
FLstModDate | 最後修改日期 | TDBText | lbLstModDate |
- TTabSheet2控制元件說明
頁面中注意修改TBitBtn
型別的控制元件的文字大小Font.Size
屬性為12
,TPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
dtsFCustAddrs | TRFDataSet | 客戶收貨地址資料資訊數據集 |
dsFCustAddrs | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFCustAddrs |
Panel2 | TPanel | 頁面中置頂的佈局控制元件容器,用於放置按鈕 |
btnCustAddrsAppendRow | TBitBtn | 新增行按鈕Caption :新增行 |
btnCustAddrsDelRow | TBitBtn | 刪除行按鈕Caption :刪除行 |
DBGrid1 | TDBGrid | 客戶收貨地址表格DataSource :dsCustAddrs |
- DBGrid1數據表格說明
在設定表格列之前,使用滑鼠右鍵點選表格,在選項中選擇Custom Columns
,轉換為自定義表格後進行設定。點選Columns
屬性打開對話方塊,在此處新增欄位。選擇新增的欄位進行屬性的更改。
FieldName 欄位名 | Font.Size 字型大小 | Title.Caption 標題文字 | Title.Font.Size 標題字型大小 | Width 列寬度 |
---|---|---|---|---|
FCompany | 10 | 收貨公司 | 12 | 128 |
FAddress | 10 | 收貨地址 | 12 | 256 |
FPerson | 10 | 收貨人 | 12 | 64 |
FEmail | 10 | 郵箱 | 12 | 128 |
FPhone | 10 | 電話 | 12 | 128 |
FFax | 10 | 傳真 | 12 | 128 |
- TTabSheet3控制元件說明
頁面中注意修改TBitBtn
型別的控制元件的文字大小Font.Size
屬性為12
,TPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
dtsFCustRelation | TRFDataSet | 關係人員資訊數據集 |
dsFCustRelation | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFCustRelation |
Panel3 | TPanel | 頁面中置頂的佈局控制元件容器,用於放置按鈕 |
btnCustRelationAppendRow | TBitBtn | 新增行按鈕Caption :新增行 |
btnCustRelationDelRow | TBitBtn | 刪除行按鈕Caption :刪除行 |
DBGrid2 | TDBGrid | 關係人員表格DataSource :dsCustRelation |
- DBGrid2數據表格說明
在設定表格列之前,使用滑鼠右鍵點選表格,在選項中選擇Custom Columns
,轉換為自定義表格後進行設定。點選Columns
屬性打開對話方塊,在此處新增欄位。選擇新增的欄位進行屬性的更改。
FieldName 欄位名 | Font.Size 字型大小 | Title.Caption 標題文字 | Title.Font.Size 標題字型大小 | Width 列寬度 |
---|---|---|---|---|
FEmpName | 10 | 姓名 | 12 | 78 |
FDeptName | 10 | 部門 | 12 | 128 |
FPosition | 10 | 職務 | 12 | 78 |
FTel | 10 | 行動電話 | 12 | 128 |
- TTabSheet4控制元件說明
頁面中注意修改TBitBtn
型別的控制元件的文字大小Font.Size
屬性為12
,TPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
dtsFCustMaterial | TRFDataSet | 客戶產品資訊數據集 |
dsFCustMaterial | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFCustMaterial |
Panel4 | TPanel | 頁面中置頂的佈局控制元件容器,用於放置按鈕 |
btnCustMaterialAppendRow | TBitBtn | 新增行按鈕Caption :新增行 |
btnCustMaterialDelRow | TBitBtn | 刪除行按鈕Caption :刪除行 |
DBGrid3 | TDBGrid | 關係人員表格DataSource :dsCustRelation |
- DBGrid3數據表格說明
在設定表格列之前,使用滑鼠右鍵點選表格,在選項中選擇Custom Columns
,轉換為自定義表格後進行設定。點選Columns
屬性打開對話方塊,在此處新增欄位。選擇新增的欄位進行屬性的更改。
FieldName 欄位名 | Font.Size 字型大小 | Title.Caption 標題文字 | Title.Font.Size 標題字型大小 | Width 列寬度 |
---|---|---|---|---|
FItemCode | 10 | 物料程式碼 | 12 | 80 |
FItemName | 10 | 物料名稱 | 12 | 80 |
FCustItemCode | 10 | 客戶物料程式碼 | 12 | 100 |
FCustItemName | 10 | 客戶物料名稱 | 12 | 100 |
# 3.3.4. 指令碼設計
type
TMyHandler = class(TForm)
private
FThis:TBaseForm;
Public
constructor Create(AOwner: TComponent); override;
{模組聲明 MODULE-DECLARE}
procedure btnFirstClick(Sender: TObject);
procedure PageSwitch;
procedure btnPriorClick(Sender: TObject);
procedure btnNextClick(Sender: TObject);
procedure btnLastClick(Sender: TObject);
procedure btnNewClick(Sender: TObject);
procedure dtsGeneralNewRecord(DataSet: TDataSet);
procedure btnSaveClick(Sender: TObject);
Procedure UpdateCustDetail;
procedure btnDeleteClick(Sender: TObject);
procedure btnUpdateClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure btnCustAddrsAppendRowClick(Sender: TObject);
procedure dtsCustAddrsNewRecord(DataSet: TDataSet);
procedure btnCustAddrsDelRowClick(Sender: TObject);
procedure btnCustRelationAppendRowClick(Sender: TObject);
procedure btnCustRelationDelRowClick(Sender: TObject);
procedure btnCustMaterialAppendRowClick(Sender: TObject);
procedure btnCustMaterialDelRowClick(Sender: TObject);
procedure dtsCustRelationNewRecord(DataSet: TDataSet);
procedure dtsCustMaterialNewRecord(DataSet: TDataSet);
procedure lkupFEmpNameClick(Sender: TObject);
procedure lkupFInvoiceCustNameClick(Sender: TObject);
procedure btnUploadClick(Sender: TObject);
procedure btnClearPictureClick(Sender: TObject);
end;
//...
var
FMyHandler:TMyHandler;
begin
FMyHandler := TMyHandler.Create(this);
{事件繫結 MODULE-BIND}
this.btnFirst.OnClick := FMyHandler.btnFirstClick;
this.btnPrior.OnClick := FMyHandler.btnPriorClick;
this.btnNext.OnClick := FMyHandler.btnNextClick;
this.btnLast.OnClick := FMyHandler.btnLastClick;
this.btnNew.OnClick := FMyHandler.btnNewClick;
this.dtsGeneral.OnNewRecord := FMyHandler.dtsGeneralNewRecord;
this.btnSave.OnClick := FMyHandler.btnSaveClick;
this.btnDelete.OnClick := FMyHandler.btnDeleteClick;
this.btnUpdate.OnClick := FMyHandler.btnUpdateClick;
this.btnExit.OnClick := FMyHandler.btnExitClick;
this.btnCustAddrsAppendRow.OnClick := FMyHandler.btnCustAddrsAppendRowClick;
this.dtsCustAddrs.OnNewRecord := FMyHandler.dtsCustAddrsNewRecord;
this.btnCustAddrsDelRow.OnClick := FMyHandler.btnCustAddrsDelRowClick;
this.btnCustRelationAppendRow.OnClick := FMyHandler.btnCustRelationAppendRowClick;
this.btnCustRelationDelRow.OnClick := FMyHandler.btnCustRelationDelRowClick;
this.btnCustMaterialAppendRow.OnClick := FMyHandler.btnCustMaterialAppendRowClick;
this.btnCustMaterialDelRow.OnClick := FMyHandler.btnCustMaterialDelRowClick;
this.dtsCustRelation.OnNewRecord := FMyHandler.dtsCustRelationNewRecord;
this.dtsCustMaterial.OnNewRecord := FMyHandler.dtsCustMaterialNewRecord;
this.lkupFEmpName.OnClick := FMyHandler.lkupFEmpNameClick;
this.lkupFInvoiceCustName.OnClick := FMyHandler.lkupFInvoiceCustNameClick;
this.btnUpload.OnClick := FMyHandler.btnUploadClick;
this.btnClearPicture.OnClick := FMyHandler.btnClearPictureClick;
end.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
- 程式模組列表
程式模組名稱 | 說明 |
---|---|
Create | 構造器,啟動后運行需初始化設定的內容 |
UpdateCustDetail | 更新客戶資料明細的相關內容 |
PageSwitch | 頁面編輯狀態切換的子程式 |
btnFirstClick | 首項按鈕,點選以切換數據集至首項 |
btnPriorClick | 前項按鈕,點選以切換數據集至前項 |
btnNextClick | 後項按鈕,點選以切換數據集至後項 |
btnLastClick | 末項按鈕,點選以切換數據集至末項 |
btnNewClick | 新建按鈕 |
btnSaveClick | 儲存數據 |
btnDeleteClick | 刪除目前顯示的客戶資料 |
btnUpdateClick | 更新客戶資料 |
btnExitClick | 退出目前視窗 |
btnCustAddrsAppendRowClick | 客戶收貨地址新增行 |
dtsCustAddrsNewRecord | 客戶收貨地址新增數據初始化 |
btnCustAddrsDelRowClick | 客戶收貨地址刪除目前選擇行 |
btnCustRelationAppendRowClick | 客戶關係人員新增行 |
btnCustRelationDelRowClick | 客戶關係人人員刪除行 |
btnCustMaterialAppendRowClick | 客戶產品新增行 |
btnCustMaterialDelRowClick | 客戶產品刪除行 |
dtsCustRelationNewRecord | 客戶關係人員新增數據初始化 |
dtsCustMaterialNewRecord | 客戶產品新增數據初始化 |
lkupFEmpNameClick | 業務員變更時傳遞事件 |
lkupFInvoiceCustNameClick | 結帳客戶變更時傳遞數據 |
btnUploadClick | 上傳圖片按鈕 |
btnClearPictureClick | 清空圖片 |
- Create:構造器,啟動后運行需初始化設定的內容
constructor TMyHandler.Create(AOwner: TComponent);
begin
FThis :=TBaseForm(AOwner);
//客戶分類查詢數據集初始化
FThis.dtsCustGroup.Connection := dm.DBConnection;
FThis.dtsCustGroup.SQL.Text := 'SELECT FInterID AS FGroupID,FGroupName FROM Basic_CustGroup';
FThis.dtsCustGroup.Open;
//主表數據集初始化,在呼叫視窗時打開
FThis.dtsGeneral.Connection := dm.DBConnection;
FThis.dtsGeneral.SQL.Text := 'SELECT * FROM Basic_Cust WHERE FInterID = :FInterID';
//客戶地址數據集初始化
FThis.dtsCustAddrs.Connection := dm.DBConnection;
FThis.dtsCustAddrs.SQL.Text := 'SELECT * FROM Basic_CustAddrs WHERE FInterID = :FInterID';
//客戶關係數據集初始化
FThis.dtsCustRelation.Connection := dm.DBConnection;
FThis.dtsCustRelation.SQL.Text := 'SELECT * FROM Basic_CustRelation WHERE FInterID = :FInterID';
//客戶物料數據集初始化
FThis.dtsCustMaterial.Connection := dm.DBConnection;
FThis.dtsCustMaterial.SQL.Text := 'SELECT * FROM Basic_CustMaterial WHERE FInterID = :FInterID';
//結帳客戶查詢數據集表初始化
FThis.dtsInvoiceCust.Connection := dm.DBConnection;
FThis.dtsInvoiceCust.SQL.Text := 'SELECT FInterID AS FInVoiceCustID,FCustCode AS ' +
'FInvoiceCustCode,FCustName AS FInvoiceCustName FROM Basic_Cust';
FThis.dtsInvoiceCust.Open;
//區域資訊數據集初始化
FThis.dtsFDistrict.Connection := dm.DBConnection;
FThis.dtsFDistrict.SQL.Text := 'SELECT a.FName,a.FCode '
+ 'FROM dbo.Basic_CommonData A '
+ 'INNER JOIN Basic_CommonDataType b ON a.FTypeID = b.FInterID '
+ 'WHERE b.FDataName = ''' + FThis.siLang1.GetTextW('地區') + '''';
FThis.dtsFDistrict.Open;
//業務員查詢數據集初始化
FThis.dtsEmp.Connection := dm.DBConnection;
FThis.dtsEmp.SQL.Text := 'SELECT FInterID AS FEmpID,FEmpCode,FEmpName,FDeptID,FDeptCode,' +
'FDeptName FROM Basic_Employee';
FThis.dtsEmp.Open;
//幣種資料查詢數據集初始化
FThis.dtsFCurrency.Connection := dm.DBConnection;
FThis.dtsFCurrency.SQL.Text := 'SELECT FCode as FCurrencyCode,FName as FCurrencyName,FInterID ' +
'AS FCurrencyID,FExRate AS FExchangeRate FROM Basic_Currency';
FThis.dtsFCurrency.Open;
//銷售型別查詢數據集初始化
FThis.dtsSaleType.Connection := dm.DBConnection;
FThis.dtsSaleType.SQL.Text := 'SELECT a.FName,a.FInterID '
+ 'FROM dbo.Basic_CommonData A '
+ 'INNER JOIN Basic_CommonDataType b ON a.FTypeID = b.FInterID '
+ 'WHERE b.FDataName = ''' + FThis.siLang1.GetTextW('銷售型別') + '''';
FThis.dtsSaleType.Open;
//發票型別查詢數據集初始化
FThis.dtsInvoiceType.Connection := dm.DBConnection;
FThis.dtsInvoiceType.SQL.Text := 'SELECT a.FName,a.FInterID '
+ 'FROM dbo.Basic_CommonData A '
+ 'INNER JOIN Basic_CommonDataType b ON a.FTypeID = b.FInterID '
+ 'WHERE b.FDataName = ''' + FThis.siLang1.GetTextW('發票型別') + '''';
FThis.dtsInvoiceType.Open;
//付款方式查詢數據集初始化
FThis.dtsPayItem.Connection := dm.DBConnection;
FThis.dtsPayItem.SQL.Text := 'SELECT a.FName,a.FInterID '
+ 'FROM dbo.Basic_CommonData A '
+ 'INNER JOIN Basic_CommonDataType b ON a.FTypeID = b.FInterID '
+ 'WHERE b.FDataName = ''' + FThis.siLang1.GetTextW('付款方式') + '''';
FThis.dtsPayItem.Open;
//結算方式查詢數據集初始化
FThis.dtsSettle.Connection := dm.DBConnection;
FThis.dtsSettle.SQL.Text := 'SELECT a.FName,a.FInterID '
+ 'FROM dbo.Basic_CommonData A '
+ 'INNER JOIN Basic_CommonDataType b ON a.FTypeID = b.FInterID '
+ 'WHERE b.FDataName = ''' + FThis.siLang1.GetTextW('結算方式') + '''';
FThis.dtsSettle.Open;
//列表查詢數據集初始化
FThis.dtsList.Connection := dm.DBConnection;
FThis.dtsList.SQL.Text := 'SELECT FInterID FROM Basic_Cust';
FThis.dtsList.Open;
//RadioGroup控制元件初始設定
FThis.rgFCustomerType.Items.CommaText := FThis.siLang1.GetTextW('國內客戶,國外客戶');
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
- UpdateCustDetail:更新客戶資料明細的相關內容。
//更新客戶資料的其他明細資訊
Procedure TMyHandler.UpdateCustDetail;
Begin
//客戶地址數據集不為空的話則檢查更新
if FThis.dtsCustAddrs.RowCount > 0 Then
Begin
FThis.dtsCustAddrs.Edit;
FThis.dtsCustAddrs.Post;
FThis.dtsCustAddrs.ApplyUpdates(-1);
End;
//客戶關係數據集不為空的話則檢查更新
if FThis.dtsCustRelation.RowCount > 0 Then
Begin
FThis.dtsCustRelation.Edit;
FThis.dtsCustRelation.Post;
FThis.dtsCustRelation.ApplyUpdates(-1);
End;
//客戶材料數據集不為空的話則檢查更新
if FThis.dtsCustMaterial.RowCount > 0 Then
Begin
FThis.dtsCustMaterial.Edit;
FThis.dtsCustMaterial.Post;
FThis.dtsCustMaterial.ApplyUpdates(-1);
End;
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
- PageSwitch:頁面編輯狀態切換的子程式。
procedure TMyHandler.PageSwitch;
//切換頁面使用的子程式,客戶資料,客戶地址,客戶關係,客戶物料數據集參數重新從客戶ID列表數據集中獲取。
begin
FThis.dtsGeneral.Close;
FThis.dtsGeneral.ParamByName('FInterID').AsString := FThis.dtsList.FieldByName('FInterID').AsString;
FThis.dtsGeneral.Open;
FThis.dtsCustAddrs.Close;
FThis.dtsCustAddrs.ParamByName('FInterID').AsString := FThis.dtsList.FieldByName('FInterID').AsString;
FThis.dtsCustAddrs.Open;
FThis.dtsCustRelation.Close;
FThis.dtsCustRelation.ParamByName('FInterID').AsString := FThis.dtsList.FieldByName('FInterID').AsString;
FThis.dtsCustRelation.Open;
FThis.dtsCustMaterial.Close;
FThis.dtsCustMaterial.ParamByName('FInterID').AsString := FThis.dtsList.FieldByName('FInterID').AsString;
FThis.dtsCustMaterial.Open;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- btnFirstClick:首項按鈕,點選以切換數據集至首項。
//切換首項
procedure TMyHandler.btnFirstClick;
begin
FThis.dtsList.First;
PageSwitch;
end;
2
3
4
5
6
- btnPriorClick:前項按鈕,點選以切換數據集至前項
//切換前項
procedure TMyHandler.btnPriorClick;
begin
FThis.dtsList.Prior;
PageSwitch;
end;
2
3
4
5
6
- btnNextClick:後項按鈕,點選以切換數據集至後項。
//切換後項
procedure TMyHandler.btnNextClick;
begin
FThis.dtsList.Next;
PageSwitch;
end;
2
3
4
5
6
- btnLastClick:末項按鈕,點選以切換數據集至末項 。
//切換末項
procedure TMyHandler.btnLastClick;
begin
FThis.dtsList.Last;
PageSwitch;
end;
2
3
4
5
6
- **btnNewClick **:新建按鈕。
procedure TMyHandler.btnNewClick;
//新增專案
var
vGroupID: String;
begin
//獲取目前分組的資訊
vGroupID := FThis.dtsGeneral.FieldByName('FGroupID').AsString;
//主表數據集新增併爲特殊欄位FInterID,FGroupID,FCreater初始賦值
FThis.dtsGeneral.Append;
FThis.dtsGeneral.FieldByName('FInterID').AsInteger := dm.GetNodeID;
FThis.dtsGeneral.FieldByName('FGroupID').AsString := vGroupID;
FThis.dtsGeneral.FieldByName('FCreater').AsString := FThis.siLang1.GetTextW('admin');
FThis.dtsGeneral.Post;
//明細數據集重新獲取參數並打開
FThis.dtsCustAddrs.Close;
FThis.dtsCustRelation.Close;
FThis.dtsCustMaterial.Close;
FThis.dtsCustAddrs.ParamByName('FInterID').AsString := FThis.dtsGeneral.FieldByName('FInterID').AsString;
FThis.dtsCustRelation.ParamByName('FInterID').AsString := FThis.dtsGeneral.FieldByName('FInterID').AsString;
FThis.dtsCustMaterial.ParamByName('FInterID').AsString := FThis.dtsGeneral.FieldByName('FInterID').AsString;
FThis.dtsCustAddrs.Open;
FThis.dtsCustRelation.Open;
FThis.dtsCustMaterial.Open;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
- btnSaveClick:儲存數據。
procedure TMyHandler.btnSaveClick;
//儲存
Var
vdts: TRFDataSet;
t: TDateTime;
begin
t := now;
vdts := TRFDataSet.Create(Nil);
vdts.Connection := dm.DBConnection;
try
//檢查客戶資料中的部分必填欄位是否為空。
if (FThis.dtsGeneral.FieldByName('FCustCode').AsString = '')
or (FThis.dtsGeneral.FieldByName('FCustName').AsString = '')
Then
Begin
ShowMessage(FThis.siLang1.GetTextW('客戶程式碼或者客戶名稱不能為空!'));
exit;
end;
if (FThis.dtsGeneral.FieldByName('FEmpName').AsString = '')
or (FThis.dtsGeneral.FieldByName('FSaleType').AsString = '')
Then
Begin
ShowMessage(FThis.siLang1.GetTextW('業務員名稱或銷售型別不能為空!'));
exit;
End;
//檢查新增的客戶資料中填寫的客戶程式碼是否與資料庫中的客戶程式碼重複,如果重複則提示並退出儲存流程,修改的流程則不受影響
vdts.Close;
vdts.SQL.Text := 'SELECT FInterID FROM Basic_Cust WHERE FCustCode = ''' + FThis.dtsGeneral.FieldByName('FCustCode').AsString + '''';
vdts.Open;
if (vdts.RecordCount > 0) and (vdts.FieldByName('FInterID').AsString <> FThis.dtsGeneral.FieldByName('FInterID').AsString) Then
Begin
ShowMessage(FThis.siLang1.GetTextW('客戶程式碼重複,請重新選擇客戶程式碼輸入!'));
Exit;
end;
//檢查主表是否有進行修改,被修改的主表客戶是否已經在系統內產生了單據,如有則不允許修改
vdts.Close;
vdts.SQL.Text := 'SELECT 1 FROM Basic_Cust WHERE FInterID = ' + FThis.dtsGeneral.FieldByName('FInterID').AsString;
vdts.Open;
if vdts.RecordCount > 0 Then
Begin
vdts.Close;
//查詢客戶ID在業務單據的表中是否存在
vdts.SQL.Text := ' if exists(select 1 from Sal_Order where FCustID = ' + FThis.dtsGeneral.FieldByName('FInterID').AsString +') '
+' select 1 as FInterID '
+' else if exists(select 1 from Inv_CLstockBill where FCustID = ' + FThis.dtsGeneral.FieldByName('FInterID').AsString +') '
+' select 1 as FInterID '
+' else if exists(select 1 from Inv_CLInvBal where FCustID = ' + FThis.dtsGeneral.FieldByName('FInterID').AsString +') '
+' select 1 as FInterID '
+' else if exists(select 1 from Man_Mo where FCustID = ' + FThis.dtsGeneral.FieldByName('FInterID').AsString +') '
+' select 1 as FInterID '
+' else if exists(select 1 from Man_Contact where FCustID = ' + FThis.dtsGeneral.FieldByName('FInterID').AsString +') '
+' select 1 as FInterID '
+'else '
+' select 0 as FInterID ';
vdts.Open;
IF vdts.FieldByName('FInterID').AsInteger > 0 Then
Begin
//不儲存客戶資料,僅更新明細表中的相關資訊
if paxfunc.YesNoMsg(FThis.siLang1.GetTextW('檢測到該客戶資料概覽部分已被單據引用,' +
'是否僅更新收貨地址,關係和產品資訊?'),FThis.siLang1.GetTextW('提示')) then
begin
UpdateCustDetail;
ShowMessage(FThis.siLang1.GetTextW('僅更新送貨地址,關係和產品資訊成功。'));
end
End
Else
Begin
//未被引用的直接進行儲存
FThis.dtsGeneral.Edit;
FThis.dtsGeneral.FieldByName('FLstModDate').AsDateTime := t;
//數據集是否處於編輯模式,提交
if DM.DataSetIsEdit(FThis.dtsGeneral) Then
FThis.dtsGeneral.Post;
FThis.dtsGeneral.ApplyUpdates(-1);
UpdateCustDetail;
ShowMessage(FThis.siLang1.GetTextW('數據儲存成功!'));
End;
End
Else
//新增的直接進行儲存
Begin
FThis.dtsGeneral.Edit;
FThis.dtsGeneral.FieldByName('FLstModDate').AsDateTime := t;
FThis.dtsGeneral.Post;
FThis.dtsGeneral.ApplyUpdates(-1);
UpdateCustDetail;
ShowMessage(FThis.siLang1.GetTextW('數據儲存成功!'));
End;
//btnAppend.Enabled := True;
//btnSave.Enabled := False;
Finally
vdts.Free;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
- btnDeleteClick:刪除目前顯示的客戶資料。
procedure TMyHandler.btnDeleteClick;
//刪除
Var
AStoredProc: TRFStoredProc;
vRAISEMSG,vMSG: String;
i, j: Integer;
begin
//確認對話方塊彈出
if paxfunc.YesNoMsg(FThis.siLang1.GetTextW('確認要刪除此客戶資料嗎?'),FThis.siLang1.GetTextW('提示')) then
begin
//預存程序控制元件建立
AStoredProc := TRFStoredProc.Create(nil);
AStoredProc.Connection := dm.DBConnection;
try
//預存程序指定並準備獲取參數
AStoredProc.StoredProcName := 'sp_Basic_Cust';
AStoredProc.Prepare;
if AStoredProc.Prepared then
begin
//參數賦值
AStoredProc.ParamByName('FDataID').AsString := FThis.dtsGeneral.FieldByName('FInterID').AsString;
AStoredProc.ParamByName('Flag').AsString := 'Delete';
AStoredProc.ParamByName('FUserCode').AsString := FThis.siLang1.GetTextW('admin');
if AStoredProc.FindParam('FMsg') <> nil then
AStoredProc.ParamByName('FMsg').AsString := '';
try
AStoredProc.ExecProc;
//獲取異常資訊並處理顯示
Except on ExceptionMessage:Exception do
begin
vRAISEMSG:=ExceptionMessage.Message;
i := Pos('SQMESSAGE', vRAISEMSG);
j := Pos('[SQL Server]', vRAISEMSG);
vMSG := Copy(vRAISEMSG, i, Length(vRAISEMSG) - i + 1);
// 非格式化訊息提示
if i = 0 then
begin
ShowMessage(Copy(vRAISEMSG, j + 12, Length(vRAISEMSG) - j + 1));
Exit;
end;
end;
end;
end;
finally
AStoredProc.Free;
end;
//所有數據集重新整理顯示
FThis.dtsGeneral.Open;
FThis.dtsCustAddrs.Open;
FThis.dtsCustRelation.Open;
FThis.dtsCustMaterial.Open;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
- btnUpdateClick:更新客戶資料。
procedure TMyHandler.btnUpdateClick;
//更新
Var
AStoredProc: TRFStoredProc;
vRAISEMSG,vMSG: String;
i, j: Integer;
begin
//彈出視窗確認
if paxfunc.YesNoMsg(FThis.siLang1.GetTextW('確認要更新此客戶資料嗎?'),FThis.siLang1.GetTextW('提示')) then
begin
AStoredProc := TRFStoredProc.Create(nil);
AStoredProc.Connection := dm.DBConnection;
try
//預存程序準備
AStoredProc.StoredProcName := 'sp_Basic_Cust';
AStoredProc.Prepare;
if AStoredProc.Prepared then
begin
//參數賦值
AStoredProc.ParamByName('FDataID').AsString := FThis.dtsGeneral.FieldByName('FInterID').AsString;
AStoredProc.ParamByName('Flag').AsString := 'Update';
AStoredProc.ParamByName('FUserCode').AsString := FThis.siLang1.GetTextW('admin');
if AStoredProc.FindParam('FMsg') <> nil then
AStoredProc.ParamByName('FMsg').AsString := '';
try
//執行預存程序
AStoredProc.ExecProc;
//意外情況的文書處理
Except on ExceptionMessage:Exception do
begin
vRAISEMSG:=ExceptionMessage.Message;
i := Pos('SQMESSAGE', vRAISEMSG);
j := Pos('[SQL Server]', vRAISEMSG);
vMSG := Copy(vRAISEMSG, i, Length(vRAISEMSG) - i + 1);
// 非格式化訊息提示
if i = 0 then
begin
ShowMessage(Copy(vRAISEMSG, j + 12, Length(vRAISEMSG) - j + 1));
Exit;
end;
end;
end;
end;
finally
AStoredProc.Free;
end;
//數據集重新整理
FThis.dtsGeneral.Open;
FThis.dtsCustAddrs.Open;
FThis.dtsCustRelation.Open;
FThis.dtsCustMaterial.Open;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
- btnExitClick:退出目前視窗。
procedure TMyHandler.btnExitClick;
//退出視窗
begin
FThis.Close;
end;
2
3
4
5
- btnCustAddrsAppendRowClick:客戶收貨地址新增行。
procedure TMyHandler.btnCustAddrsAppendRowClick;
//新增行
begin
FThis.dtsCustAddrs.Append;
end;
2
3
4
5
- dtsCustAddrsNewRecord: 客戶收貨地址新增數據初始化。
procedure TMyHandler.dtsCustAddrsNewRecord;
//客戶資料地址新增行
begin
FThis.dtsCustAddrs.FieldByName('FInterID').AsString := FThis.dtsGeneral.FieldByName('FInterID').AsString;
FThis.dtsCustAddrs.FieldByName('FentryID').AsInteger := FThis.dtsCustAddrs.RecordCount + 1;
FThis.dtsCustAddrs.Post;
end;
2
3
4
5
6
7
- btnCustAddrsDelRowClick:客戶收貨地址刪除目前選擇行。
procedure TMyHandler.btnCustAddrsDelRowClick;
//刪除
begin
FThis.dtsCustAddrs.Delete;
end;
2
3
4
5
- btnCustRelationAppendRowClick:客戶關係人員新增行。
procedure TMyHandler.btnCustRelationAppendRowClick;
//客戶關係新增行
begin
FThis.dtsCustRelation.Append;
end;
2
3
4
5
- btnCustRelationDelRowClick:客戶關係人人員刪除行。
procedure TMyHandler.btnCustRelationDelRowClick;
//客戶關係刪除行
begin
FThis.dtsCustRelation.Delete;
end;
2
3
4
5
- btnCustMaterialAppendRowClick:客戶產品新增行。
procedure TMyHandler.btnCustMaterialAppendRowClick;
//客戶物料新增行
begin
FThis.dtsCustMaterial.Append;
end;
2
3
4
5
- btnCustMaterialDelRowClick:客戶產品刪除行。
procedure TMyHandler.btnCustMaterialDelRowClick;
//客戶物料刪除行
begin
FThis.dtsCustMaterial.Delete;
end;
2
3
4
5
- dtsCustRelationNewRecord:客戶關係人員新增數據初始化。
procedure TMyHandler.dtsCustRelationNewRecord;
//客戶關係新增行時初始化欄位資訊
begin
FThis.dtsCustRelation.FieldByName('FInterID').AsString := FThis.dtsGeneral.FieldByName('FInterID').AsString;
FThis.dtsCustRelation.FieldByName('FentryID').AsInteger := FThis.dtsCustRelation.RecordCount + 1;
FThis.dtsCustRelation.Post;
end;
2
3
4
5
6
7
- dtsCustMaterialNewRecord:客戶產品新增數據初始化。
procedure TMyHandler.dtsCustMaterialNewRecord;
//客戶物料新增行時初始化欄位資訊
begin
FThis.dtsCustMaterial.FieldByName('FInterID').AsString := FThis.dtsGeneral.FieldByName('FInterID').AsString;
FThis.dtsCustMaterial.FieldByName('FentryID').AsInteger := FThis.dtsCustMaterial.RecordCount + 1;
FThis.dtsCustMaterial.Post;
end;
2
3
4
5
6
7
- lkupFEmpNameClick:業務員變更時傳遞事件。
procedure TMyHandler.lkupFEmpNameClick;
//變更業務員資訊時變更關聯欄位資訊
begin
FThis.dtsGeneral.Edit;
FThis.dtsGeneral.FieldByName('FEmpID').AsString := FThis.dtsEmp.FieldByName('FEmpID').AsString;
FThis.dtsGeneral.FieldByName('FEmpCode').AsString := FThis.dtsEmp.FieldByName('FEmpCode').AsString;
FThis.dtsGeneral.FieldByName('FDeptID').AsString := FThis.dtsEmp.FieldByName('FDeptID').AsString;
FThis.dtsGeneral.FieldByName('FDeptCode').AsString := FThis.dtsEmp.FieldByName('FDeptCode').AsString;
FThis.dtsGeneral.FieldByName('FDeptName').AsString := FThis.dtsEmp.FieldByName('FDeptName').AsString;
end;
2
3
4
5
6
7
8
9
10
- lkupFInvoiceCustNameClick:結帳客戶變更時傳遞數據。
//變更結帳客戶時更新相關資訊
procedure TMyHandler.lkupFInvoiceCustNameClick;
begin
FThis.dtsGeneral.Edit;
FThis.dtsGeneral.FieldByName('FInvoiceCustID').AsString := FThis.dtsInvoiceCust.FieldByName('FInVoiceCustID').AsString;
FThis.dtsGeneral.FieldByName('FInvoiceCustCode').AsString := FThis.dtsInvoiceCust.FieldByName('FInVoiceCustCode').AsString;
end;
2
3
4
5
6
7
- btnUploadClick:上傳圖片按鈕。
//上傳圖片
procedure TMyHandler.btnUploadClick;
begin
if FThis.OpenPictureDialog.Execute(0) then
begin
FThis.dtsGeneral.Edit;
TBlobField(FThis.dtsGeneral.FieldByName('FCustLogo')).LoadFromFile(FThis.OpenPictureDialog.FileName);
FThis.dtsGeneral.Post;
end;
end;
2
3
4
5
6
7
8
9
10
- btnClearPictureClick:清空圖片。
procedure TMyHandler.btnClearPictureClick;
//清空圖片
begin
FThis.dtsGeneral.Edit;
TBlobField(FThis.dtsGeneral.FieldByName('FCustLogo')).Clear;
FThis.dtsGeneral.Post;
end;
2
3
4
5
6
7
# 3.3.5. 多語言設定
在功能表欄點選語言
-語言設定
,打開多語言設定對話方塊,根據提示進行多語言的設定。
# 3.3.6. 運行效果
# 3.4. 布種資料查詢-多筆數據表單
布種資料頁面設定如下:
# 3.4.1. 功能簡述
布種資料的頁面按照布種分類進行資訊的分類展示,此頁面包含分組顯示錶單的模式設計,表格查詢等相關的模組設計內容。
# 3.4.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Caption | 布種資料 | 主窗體的標題名稱 |
Height | 768 | 主窗體的高度(畫素) |
Name | Item | 主窗體模組的名稱 |
Width | 1024 | 主窗體的寬度(畫素) |
# 3.4.3. 控制元件設定
各表結構欄位及對應的數據感知控制元件名稱如下,其中的TBitBtn
、TLabeledEdit
型別的控制元件需修改Font.Size
為12
,TPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
- 控制元件說明
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
Panel1 | TPanel | 頂部面板顯示,用於放置控制元件容器 |
edQuery | TLabeledEdit | 查詢輸入框,用於輸入布種程式碼與名稱TextHint :輸入布種程式碼或名稱EditLabel.Caption :布種程式碼或名稱 |
btnQuery | TBitBtn | 查詢按鈕,點選以根據條件進行查詢。Caption :查詢 |
btnClear | TBitBtn | 清除按鈕,點選以清除查詢內容恢復至初始狀態。Caption :清除 |
btnAppend | TBitBtn | 新建按鈕,點選以新建單據。Caption :新建 |
btnDelete | TBitBtn | 刪除按鈕,點選以刪除。Caption :刪除 |
btnEditor | TBitBtn | 編輯按鈕,點選以進入編輯模式。Caption :編輯 |
btnRefresh | TBitBtn | 重新整理按鈕,點選以重新整理顯示。Caption :重新整理 |
btnShowAll | TBitBtn | 顯示全部按鈕,點選以顯示全部內容。Caption :顯示全部 |
btnExit | TBitBtn | 退出按鈕,點選以退出目前窗體。Caption :退出 |
dts0 | TRFDataSet | 數據集控制元件,展示布種分類 Basic_ItemGroup |
dts1 | TRFDataSet | 數據集控制元件,展示布種資料 Basic_Item |
ds0 | TDataSource | 數據源控制元件,繫結數據集DataSet :dts0 |
ds1 | TDataSource | 數據源控制元件,繫結數據集DataSet :dts1 |
Spliter1 | TSpliter | 分隔控制元件,用於分隔數據表格控制元件 |
DBGrid1 | TDBGrid | 布種分組數據表格DataSource :ds0 |
DBGrid2 | TDBGrid | 布種資訊數據表格DataSource :ds1 |
- DBGrid1數據表格說明
在設定表格列之前,使用滑鼠右鍵點選表格,在選項中選擇Custom Columns
,轉換為自定義表格後進行設定。點選Columns
屬性打開對話方塊,在此處新增欄位。選擇新增的欄位進行屬性的更改。
FieldName 欄位名 | Font.Size 字型大小 | Title.Caption 標題文字 | Title.Font.Size 標題字型大小 | Width 列寬度 |
---|---|---|---|---|
FGroupName | 10 | 分組名稱 | 12 | 90 |
FGroupCode | 10 | 分組程式碼 | 12 | 80 |
- DBGrid2數據表格說明
在設定表格列之前,使用滑鼠右鍵點選表格,在選項中選擇Custom Columns
,轉換為自定義表格後進行設定。點選Columns
屬性打開對話方塊,在此處新增欄位。選擇新增的欄位進行屬性的更改。
FieldName 欄位名 | Font.Size 字型大小 | Title.Caption 標題文字 | Title.Font.Size 標題字型大小 | Width 列寬度 |
---|---|---|---|---|
FItemCode | 10 | 物料程式碼 | 12 | 80 |
FItemName | 10 | 物料名稱 | 12 | 140 |
FItemSpec | 10 | 規格 | 12 | 80 |
FUnitName | 10 | 單位 | 12 | 80 |
FUnitPiece | 10 | 件單位 | 12 | 64 |
FforzenFor | 10 | 凍結 | 12 | 64 |
# 3.4.4. 指令碼設計
type
TMyHandler = class(TForm)
private
FThis:TBaseForm;
Public
constructor Create(AOwner: TComponent); override;
{模組聲明 MODULE-DECLARE}
procedure btnQueryClick(Sender: TObject);
procedure btnClearClick(Sender: TObject);
procedure btnAppendClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
procedure btnEditorClick(Sender: TObject);
procedure btnRefreshClick(Sender: TObject);
procedure btnShowAllClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
end;
//...
var
FMyHandler:TMyHandler;
begin
FMyHandler := TMyHandler.Create(this);
{事件繫結 MODULE-BIND}
this.btnQuery.OnClick := FMyHandler.btnQueryClick;
this.btnClear.OnClick := FMyHandler.btnClearClick;
this.btnAppend.OnClick := FMyHandler.btnAppendClick;
this.btnDelete.OnClick := FMyHandler.btnDeleteClick;
this.btnEditor.OnClick := FMyHandler.btnEditorClick;
this.btnRefresh.OnClick := FMyHandler.btnRefreshClick;
this.btnShowAll.OnClick := FMyHandler.btnShowAllClick;
this.btnExit.OnClick := FMyHandler.btnExitClick;
this.DBGrid1.OnCellClick := FMyHandler.DBGrid1CellClick;
end.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
- 程式模組列表
程式模組名稱 | 說明 |
---|---|
Create | 構造器,啟動后運行需初始化設定的內容 |
btnQueryClick | 查詢按鈕的點選事件,根據查詢的內容顯示結果 |
btnClearClick | 清除按鈕的點選事件,清除查詢內容並恢復至初始查詢狀態 |
btnAppendClick | 新建按鈕的點選事件,新建基礎資料單據 |
btnDeleteClick | 刪除按鈕的點選事件,刪除基礎資料單據 |
btnEditorClick | 編輯按鈕的點選事件,編輯基礎資料單據 |
btnRefreshClick | 重新整理按鈕的點選事件,重新整理基礎資料頁面的顯示 |
btnShowAllClick | 顯示全部的點選事件,去除所有分類顯示條目 |
btnExitClick | 退出的點選事件,退出並關閉目前視窗 |
DBGrid1CellClick | 表格單元的點選事件,點選以按目前分類進行顯示 |
- Create:構造器,啟動后運行需初始化設定的內容。
constructor TMyHandler.Create(AOwner: TComponent);
//物料分類、物料資訊數據集初始賦值
begin
FThis :=TBaseForm(AOwner);
FThis.dts0.Connection := dm.DBConnection;
FThis.dts1.Connection := dm.DBConnection;
FThis.dts0.SQL.Text := 'Select FInterID,FGroupCode,FGroupName,FNote,FTreeKeyID,FTreeParenteID,' +
'FAbsoluteIndex From Basic_ItemGroup WHERE FTypeID = 1 Order by FGroupCode';
FThis.dts0.Open;
FThis.dts0.First;
FThis.dts1.SQL.Text := 'SELECT * FROM Basic_Item WHERE FTypeID = 1';
FThis.dts1.Open;
end;
2
3
4
5
6
7
8
9
10
11
12
13
- btnQueryClick:查詢按鈕的點選事件,根據查詢的內容顯示結果。
procedure TMyHandler.btnQueryClick;
//查詢,獲取查詢編輯庫中資訊並進行查詢
begin
FThis.dts1.Close;
FThis.dts1.SQL.Text := 'SELECT * FROM Basic_Item WHERE FTypeID = 1 AND (FItemCode LIKE ''%' + FThis.edQuery.Text +
'%'' or FItemName LIKE ''%' + FThis.edQuery.Text + '%'') Order by FItemCode';
FThis.dts1.Open;
end;
2
3
4
5
6
7
8
- btnClearClick:清除按鈕的點選事件,清除查詢內容並恢復至初始查詢狀態。
procedure TMyHandler.btnClearClick;
//清除編輯框中的內容並初始化查詢
begin
FThis.edQuery.Text := '';
FThis.dts1.SQL.Text := 'SELECT * FROM Basic_Item WHERE FTypeID = 1';
FThis.dts1.Open;
end;
2
3
4
5
6
7
- btnAppendClick:新建按鈕的點選事件,新建基礎資料單據。
procedure TMyHandler.btnAppendClick;
//新建單據
var
F: TBaseForm;
vInterID: Integer;
begin
//獲取唯一ID
vInterID := dm.GetNodeID;
//打開物料編輯頁面
F := paxfunc.OpenForm('ItemEdit');
//與主視窗建立連線
F.TagObject := FThis;
//目標視窗數據集初始賦值並新增記錄
TRFDataSet(F.FindComponent('dts0')).ParamByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dts0')).Open;
TRFDataSet(F.FindComponent('dts1')).ParamByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dts1')).Open;
TRFDataSet(F.FindComponent('dts0')).Append;
//新增記錄並初始賦值
TRFDataSet(F.FindComponent('dts0')).FieldByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dts0')).FieldByName('FGroupID').AsString := FThis.dts0.FieldByName('FInterID').AsString;
TRFDataSet(F.FindComponent('dts0')).FieldByName('FTypeID').AsString := '1';//FThis.dts0.FieldByName('FTypeID').AsString;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
- btnDeleteClick:刪除按鈕的點選事件,刪除基礎資料單據。
procedure TMyHandler.btnDeleteClick;
//刪除
var
AStoredProc: TRFStoredProc;
vRAISEMSG,vMSG: String;
i, j: Integer;
begin
//彈出視窗確認是否進行刪除
if paxfunc.YesNoMsg(FThis.siLang1.GetTextW('是否刪除該資料?'),FThis.siLang1.GetTextW('提示')) then
begin
//預存程序控制元件建立
AStoredProc := TRFStoredProc.Create(nil);
AStoredProc.Connection := dm.DBConnection;
try
//預存程序準備
AStoredProc.StoredProcName := 'sp_Basic_Item';
AStoredProc.Prepare;
if AStoredProc.Prepared then
begin
//預存程序參數賦值
AStoredProc.ParamByName('FDataID').AsString := FThis.dts1.FieldByName('FInterID').AsString;
AStoredProc.ParamByName('Flag').AsString := 'Delete';
AStoredProc.ParamByName('FUserCode').AsString := FThis.siLang1.GetTextW('admin');
if AStoredProc.FindParam('FMsg') <> nil then
AStoredProc.ParamByName('FMsg').AsString := '';
try
//執行預存程序
AStoredProc.ExecProc;
//意外情況字串處理
Except on ExceptionMessage:Exception do
begin
vRAISEMSG:=ExceptionMessage.Message;
i := Pos('SQMESSAGE', vRAISEMSG);
j := Pos('[SQL Server]', vRAISEMSG);
vMSG := Copy(vRAISEMSG, i, Length(vRAISEMSG) - i + 1);
// 非格式化訊息提示
if i = 0 then
begin
ShowMessage(Copy(vRAISEMSG, j + 12, Length(vRAISEMSG) - j + 1));
Exit;
end;
end;
end;
//重新整理表格顯示
btnQueryClick(sender);
end;
finally
AStoredProc.Free;
end;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
- btnEditorClick:編輯按鈕的點選事件,編輯基礎資料單據。
procedure TMyHandler.btnEditorClick;
//編輯資料
var
F: TBaseForm;
vInterID: Integer;
begin
//獲取目前選擇的物料唯一ID
vInterID := FThis.dts1.FieldByName('FInterID').AsInteger;
//打開物料編輯視窗
F := paxfunc.OpenForm('ItemEdit');
//打開視窗與主視窗建立連線
F.TagObject := FThis;
//為視窗中的數據集賦值
TRFDataSet(F.FindComponent('dts0')).ParamByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dts0')).Open;
TRFDataSet(F.FindComponent('dts1')).ParamByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dts1')).Open;
//列表數據集打開並根據唯一ID進行定位
TRFDataSet(F.FindComponent('dtsList')).First;
While TRFDataSet(F.FindComponent('dtsList')).FieldByName('FInterID').AsString <> FThis.dts1.FieldByName('FInterID').AsString do
begin
TRFDataSet(F.FindComponent('dtsList')).Next;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
- btnRefreshClick:重新整理按鈕的點選事件,重新整理基礎資料頁面的顯示。
procedure TMyHandler.btnRefreshClick;
//重新整理顯示
begin
FThis.dts0.SQL.Text := 'Select FInterID,FGroupCode,FGroupName,FNote,FTreeKeyID,FTreeParenteID,' +
'FAbsoluteIndex From Basic_ItemGroup WHERE FTypeID = 1 Order by FGroupCode';
FThis.dts0.Open;
FThis.dts0.First;
FThis.dts1.SQL.Text := 'SELECT * FROM Basic_Item WHERE FTypeID = 1';
FThis.dts1.Open;
end;
2
3
4
5
6
7
8
9
10
- btnShowAllClick:顯示全部的點選事件,去除所有分類顯示條目。
procedure TMyHandler.btnShowAllClick;
//顯示全部
begin
FThis.dts1.Filtered := False;
end;
2
3
4
5
- btnExitClick:退出的點選事件,退出並關閉目前視窗。
procedure TMyHandler.btnExitClick;
//退出視窗
begin
FThis.Close;
end;
2
3
4
5
- DBGrid1CellClick:表格單元的點選事件,點選以按目前分類進行顯示。
procedure TMyHandler.DBGrid1CellClick;
//分類檢視
begin
FThis.dts1.Filtered := False;
FThis.dts1.Filter := 'FGroupID = ' + FThis.dts0.FieldByName('FInterID').AsString;
FThis.dts1.Filtered := True;
end;
2
3
4
5
6
7
# 3.4.5. 多語言設定
在功能表欄點選語言
-語言設定
,打開多語言設定對話方塊,根據提示進行多語言的設定。
# 3.4.6. 運行效果
# 3.5. 布種資料編輯-多筆數據表單
布種資料頁面設定如下。
# 3.5.1. 功能簡述
布種資料編輯用於對布種資料的資訊進行詳細設定,其中引用了部分查詢表需要使用的計量單位,布種分類,倉庫等數據集資訊。
# 3.5.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Caption | 布種資料編輯 | 主窗體的標題名稱 |
Height | 768 | 主窗體的高度(畫素) |
Name | ItemEdit | 主窗體模組的名稱 |
Width | 1024 | 主窗體的寬度(畫素) |
# 3.5.3. 控制元件設定
- 控制元件說明
頁面中注意修改TBitBtn
型別的控制元件的文字大小Font.Size
屬性為12
,TPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
Panel1 | TPanel | 面板控制元件,作為佈局容器使用,位於頂部位置 |
Panel2 | TPanel | 面板控制元件,作為佈局容器使用,位於第二個頂部位置,放置布種資料的主要數據感知控制元件 |
Panel3 | TPanel | 面板控制元件,作為佈局容器使用,佔據居頂控制元件之後的所有位置,放置數據表格與備註欄 |
Panel4 | TPanel | 面板控制元件,位於Panel3中居左位置,用於放置表格及按鈕 |
Panel5 | TPanel | 面板控制元件,位於Panel4中頂部位置,用於放置按鈕 |
Panel6 | TPanel | 面板控制元件,位於Panel3中居右位置,用於放置備註的數據感知控制元件 |
Panel7 | TPanel | 面板控制元件,位於Panel6中居頂位置,用於放置備註標籤 |
btnFirst | TBitBtn | 首項按鈕,點選跳轉至記錄的首頁Caption :首項 |
btnPrior | TBitBtn | 前項按鈕,點選跳轉至記錄的前項Caption :前項 |
btnNext | TBitBtn | 後項按鈕,點選跳轉至記錄的後項Caption :後項 |
btnLast | TBitBtn | 末項按鈕,點選跳轉至記錄的末項Caption :末項 |
btnNew | TBitBtn | 新建按鈕,點選以新建客戶資料Caption :新建 |
btnSave | TBitBtn | 儲存按鈕,點選以儲存資料的更改Caption :儲存 |
btnDelete | TBitBtn | 刪除按鈕,點選以刪除目前的客戶資料Caption :刪除 |
btnExit | TBitBtn | 退出按鈕,點選以退出視窗Caption :退出 |
btnItemSpecAppendRow | TBitBtn | 新增行按鈕,用於新增規格 |
btnItemSpecDelRow | TBitBtn | 刪除行按鈕,用於刪除規格 |
dts0 | TRFDataSet | 主數據集,顯示布種資訊 |
ds0 | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dts0 |
dts0FGroup | TRFDataSet | 布種分類數據集 |
ds0FGroup | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dts0FGroup |
dts0FStockID | TRFDataSet | 倉庫資訊數據集 |
ds0FStockID | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dts0FStockID |
dts0FPackUnit | TRFDataSet | 倉庫資訊數據集 |
ds0FPackUnit | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dts0FPackUnit |
dts0FUnit | TRFDataSet | 倉庫資訊數據集 |
ds0FUnit | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dts0FUnit |
dts1 | TRFDataSet | 明細數據集,顯示布種規格 |
ds1 | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dts1 |
dtsList | TRFDataSet | 數據列表,用於顯示數據資訊唯一ID |
DBGrid1 | TDBGrid | 布種規格數據表格DataSource :ds0 |
- 數據感知控制元件說明
此頁面中首頁繫結的數據源DataSource
為ds0
,所有涉及到文字顯示的控制元件的文字大小屬性Font.Size
修改爲12
。由於數據感知控制元件不包含標籤顯示,故每放置一個字元編輯型別的數據感知控制元件前,需要先放置一個TLabel
控制元件,並將其Caption
屬性設定為數據欄位對應的中文名稱,同樣也需要將其 Font.Size
修改爲12
。
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FGroupID | 布種分類 | TDBLookupComboBox | lkupGroupID | 列表繫結的數據源ListSource :ds0FGroup列表顯示的欄位名 ListField :FGroupName列表對應返回的欄位值 KeyField : FGroupID |
FfrozenFor | 凍結 | TDBCheckBox | chkFforzenFor | |
FItemCode | 布種程式碼 | TDBEdit | edFItemCode | |
FMax | 最大安全庫存 | TDBEdit | edFMax | |
FItemName | 布種名稱 | TDBEdit | edFItemName | |
FMin | 最小安全庫存 | TDBEdit | edFMin | |
FItemSpec | 規格 | TDBEdit | edFItemSpec | |
FStockID | 預設倉庫 | TDBLookupComboBox | lkupFStockID | 列表繫結的數據源ListSource :ds0FStockID列表顯示的欄位名 ListField :FWHSName列表對應返回的欄位值 KeyField : FStockID |
FWidth | 門幅 | TDBEdit | edFWidth | |
FWeightOflength | 克重 | TDBEdit | edFWeightOflength | |
FColorName | 顏色名稱 | TDBEdit | edFColorName | |
FPackQty | 包裝數量 | TDBEdit | edFPackQty | |
FPackUnit | 包裝單位 | TDBLookupComboBox | lkupFPackUnit | 列表繫結的數據源ListSource :ds0FPackUnit列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField : FName |
FUnitPiece | 件單位 | TDBLookupComboBox | lkupFUnitPiece | 列表繫結的數據源ListSource :ds0FPackUnit列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField : FName |
FUnitName | 計量單位 | TDBLookupComboBox | lkupFUnitName | 列表繫結的數據源ListSource :ds0FUnit列表顯示的欄位名 ListField :FUnitName列表對應返回的欄位值 KeyField : FUnitName |
FStandPrice | 標準價 | TDBEdit | edFStandPrice | |
FPurPrice | 採購價 | TDBEdit | edFPurPrice | |
FYarn | 紗支 | TDBEdit | edFYarn | |
FSalePrice | 銷售價 | TDBEdit | edFSalePrice | |
FMachine | 機臺 | TDBEdit | edFMachine | |
FYarnLine | 線長 | TDBEdit | edFYarnLine | |
FNote | 備註 | TDBMemo | mmFNote |
- DBGrid1數據表格說明
在設定表格列之前,使用滑鼠右鍵點選表格,在選項中選擇Custom Columns
,轉換為自定義表格後進行設定。點選Columns
屬性打開對話方塊,在此處新增欄位。選擇新增的欄位進行屬性的更改。
FieldName 欄位名 | Font.Size 字型大小 | Title.Caption 標題文字 | Title.Font.Size 標題字型大小 | Width 列寬度 |
---|---|---|---|---|
FEntryID | 10 | 序 | 12 | 64 |
FItemSpec | 10 | 規格 | 12 | 400 |
# 3.5.4. 指令碼設計
type
TMyHandler = class(TForm)
private
FThis:TBaseForm;
Public
constructor Create(AOwner: TComponent); override;
{模組聲明 MODULE-DECLARE}
procedure btnFirstClick(Sender: TObject);
procedure PageSwitch;
procedure btnPriorClick(Sender: TObject);
procedure btnNextClick(Sender: TObject);
procedure btnLastClick(Sender: TObject);
procedure btnNewClick(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure btnItemSpecAppendRowClick(Sender: TObject);
procedure dts1NewRecord(DataSet: TDataSet);
procedure btnItemSpecDelRowClick(Sender: TObject);
procedure lkupFUnitNameClick(Sender: TObject);
end;
//...
var
FMyHandler:TMyHandler;
begin
FMyHandler := TMyHandler.Create(this);
{事件繫結 MODULE-BIND}
this.btnFirst.OnClick := FMyHandler.btnFirstClick;
this.btnPrior.OnClick := FMyHandler.btnPriorClick;
this.btnNext.OnClick := FMyHandler.btnNextClick;
this.btnLast.OnClick := FMyHandler.btnLastClick;
this.btnNew.OnClick := FMyHandler.btnNewClick;
this.btnSave.OnClick := FMyHandler.btnSaveClick;
this.btnDelete.OnClick := FMyHandler.btnDeleteClick;
this.btnExit.OnClick := FMyHandler.btnExitClick;
this.btnItemSpecAppendRow.OnClick := FMyHandler.btnItemSpecAppendRowClick;
this.dts1.OnNewRecord := FMyHandler.dts1NewRecord;
this.btnItemSpecDelRow.OnClick := FMyHandler.btnItemSpecDelRowClick;
this.lkupFUnitName.OnClick := FMyHandler.lkupFUnitNameClick;
end.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
- 程式模組列表
程式模組名稱 | 說明 |
---|---|
Create | 構造器,啟動后運行需初始化設定的內容 |
PageSwitch | 頁面編輯狀態切換的子程式 |
btnFirstClick | 首項按鈕,點選以切換數據集至首項 |
btnPriorClick | 前項按鈕,點選以切換數據集至前項 |
btnNextClick | 後項按鈕,點選以切換數據集至後項 |
btnLastClick | 末項按鈕,點選以切換數據集至末項 |
btnNewClick | 新建按鈕 |
btnSaveClick | 儲存數據 |
btnDeleteClick | 刪除目前顯示的客戶資料 |
btnUpdateClick | 更新客戶資料 |
btnExitClick | 退出目前視窗 |
btnItemSpecAppendRowClick | 規格明細欄新增行 |
dts1NewRecord | 規格明細欄新增行初始化 |
btnItemSpecDelRowClick | 規格明細欄刪除行 |
lkupFUnitNameClick | 計量單位更新 |
- Create:構造器,啟動后運行需初始化設定的內容。
constructor TMyHandler.Create(AOwner: TComponent);
begin
FThis :=TBaseForm(AOwner);
//主數據與明細數據初始賦值
FThis.dts0.Connection :=dm.DBConnection;
FThis.dts0.SQL.Text := 'SELECT * FROM Basic_Item WHERE FInterID = :FInterID';
FThis.dts1.Connection := DM.DBConnection;
FThis.dts1.SQL.Text := 'SELECT * FROM Basic_ItemSpec WHERE FInterID = :FInterID';
//分組資訊數據集初始化
FThis.dts0FGroup.Connection := dm.DBConnection;
FThis.dts0FGroup.Close;
FThis.dts0FGroup.SQL.Text := 'Select FGroupCode + '' '' + FGroupName as FGroupName,FInterID as FGroupID from Basic_ItemGroup where FTypeID = 1';
FThis.dts0FGroup.Open;
//包裝單位數據集初始化
FThis.dts0FPackUnit.Connection := dm.DBConnection;
FThis.dts0FPackUnit.Close;
FThis.dts0FPackUnit.SQL.Text := 'SELECT a.FName,A.FInterID '
+ 'FROM dbo.Basic_CommonData A '
+ 'INNER JOIN Basic_CommonDataType b ON a.FTypeID = b.FInterID '
+ 'WHERE b.FDataName = ''' + FThis.siLang1.GetTextW('件單位') + '''';
FThis.dts0FPackUnit.Open;
//預設倉庫數據集初始化
FThis.dts0FStockID.Connection := dm.DBConnection;
FThis.dts0FStockID.Close;
FThis.dts0FStockID.SQL.Text := 'select FWhsName,FInterID as FStockID from Basic_WHS WHERE isnull(FIsSWH,0)=0';
FThis.dts0FStockID.Open;
//計量單位數據集初始化
FThis.dts0FUnit.Connection := dm.DBConnection;
FThis.dts0FUnit.Close;
FThis.dts0FUnit.SQL.Text := 'Select FInterID as FUnitID,FUnitCode,FUnitName,FCoefficient from Basic_Unit';
FThis.dts0FUnit.Open;
//列表數據集初始化
FThis.dtsList.Connection := dm.DBConnection;
FThis.dtsList.Close;
FThis.dtsList.SQL.Text := 'Select FInterID from Basic_Item';
FThis.dtsList.Open;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
- PageSwitch:頁面編輯狀態切換的子程式。
procedure TMyHandler.PageSWitch;
//頁面切換子程式
begin
FThis.dts0.Close;
FThis.dts0.ParamByName('FInterID').AsString := FThis.dtsList.FieldByName('FInterID').AsString;
FThis.dts0.Open;
FThis.dts1.Close;
FThis.dts1.ParamByName('FInterID').AsString := FThis.dtsList.FieldByName('FInterID').AsString;
FThis.dts1.Open;
end;
2
3
4
5
6
7
8
9
10
11
- btnFirstClick:首項按鈕,點選以切換數據集至首項。
procedure TMyHandler.btnFirstClick;
//首項
begin
FThis.dtsList.First;
PageSwitch;
end;
2
3
4
5
6
- btnPriorClick:前項按鈕,點選以切換數據集至前項。
procedure TMyHandler.btnPriorClick;
//前項
begin
FThis.dtsList.Prior;
PageSwitch;
end;
2
3
4
5
6
- btnNextClick:後項按鈕,點選以切換數據集至後項。
procedure TMyHandler.btnNextClick;
//後項
begin
FThis.dtsList.Next;
PageSwitch;
end;
2
3
4
5
6
- btnLastClick:末項按鈕,點選以切換數據集至末項。
procedure TMyHandler.btnLastClick;
//末項
begin
FThis.dtsList.Last;
PageSwitch;
end;
2
3
4
5
6
- btnNewClick:新建按鈕。
procedure TMyHandler.btnNewClick;
//新增
var
vGroupID: String;
begin
//獲取分組ID並賦值
vGroupID := FThis.dts0.FieldByName('FGroupID').AsString;
FThis.dts0.Append;
FThis.dts0.FieldByName('FInterID').AsInteger := dm.GetNodeID;
FThis.dts0.FieldByName('FGroupID').AsString := vGroupID;
FThis.dts0.Post;
FThis.dts1.Close;
FThis.dts1.ParamByName('FInterID').AsString := FThis.dts0.FieldByName('FInterID').AsString;
FThis.dts1.Open;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- btnSaveClick:儲存數據。
procedure TMyHandler.btnSaveClick;
//儲存
Var
vdts: TRFDataSet;
begin
vdts := TRFDataSet.Create(Nil);
vdts.Connection := dm.DBConnection;
try
//檢查物料資訊必填欄位是否為空
if (Trim(FThis.dts0.FieldByName('FItemCode').AsString) = '')
or (Trim(FThis.dts0.FieldByName('FItemName').AsString) = '')
Then
Begin
ShowMessage(FThis.siLang1.GetTextW('物料程式碼或者物料名稱不能為空!'));
exit;
end;
if (Trim(FThis.dts0.FieldByName('FUnitName').AsString) = '')
or (Trim(FThis.dts0.FieldByName('FUnitID').AsString) = '')
or (Trim(FThis.dts0.FieldByName('FUnitCode').AsString) = '')
or (Trim(FThis.dts0.FieldByName('FUnitPiece').AsString) = '')
Then
Begin
ShowMessage(FThis.siLang1.GetTextW('計量單位或者件單位不能為空,請重新選擇計量單位。'));
exit;
end;
//檢查物料程式碼是否有重複
vdts.Close;
vdts.SQL.Text := 'SELECT FInterID FROM Basic_Item WHERE FTypeID = 1 AND FItemCode = ' + '''' + FThis.dts0.FieldByName('FItemCode').AsString + '''';
vdts.Open;
if (vdts.RecordCount > 0) and (vdts.FieldByName('FInterID').AsInteger <> FThis.dts0.FieldByName('FInterID').AsInteger) Then
Begin
ShowMessage(FThis.siLang1.GetTextW('物料程式碼重複,請對物料程式碼重新編號。'));
exit;
end;
//檢查無誤后執行儲存
if FThis.dts1.RecordCount > 0 Then
Begin
FThis.dts1.Edit;
FThis.dts1.Post;
FThis.dts1.ApplyUpdates(-1);
End;
FThis.dts0.Edit;
FThis.dts0.Post;
FThis.dts0.ApplyUpdates(-1);
ShowMessage(FThis.siLang1.GetTextW('數據儲存成功!'));
Finally
vdts.Free;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
- btnDeleteClick:刪除目前顯示的客戶資料。
procedure TMyHandler.btnDeleteClick;
//刪除
var
AStoredProc: TRFStoredProc;
vRAISEMSG,vMSG: String;
i, j: Integer;
begin
//彈出視窗提示是否刪除
if paxfunc.YesNoMsg(FThis.siLang1.GetTextW('是否刪除該資料?'),FThis.siLang1.GetTextW('提示')) then
begin
AStoredProc := TRFStoredProc.Create(nil);
AStoredProc.Connection := dm.DBConnection;
try
//預存程序初始化
AStoredProc.StoredProcName := 'sp_Basic_Item';
AStoredProc.Prepare;
if AStoredProc.Prepared then
begin
//參數賦值
AStoredProc.ParamByName('FDataID').AsString := FThis.dts0.FieldByName('FInterID').AsString;
AStoredProc.ParamByName('Flag').AsString := 'Delete';
AStoredProc.ParamByName('FUserCode').AsString := FThis.siLang1.GetTextW('admin');
if AStoredProc.FindParam('FMsg') <> nil then
AStoredProc.ParamByName('FMsg').AsString := '';
try
//執行預存程序
AStoredProc.ExecProc;
//意外情況的資訊處理並顯示
Except on ExceptionMessage:Exception do
begin
vRAISEMSG:=ExceptionMessage.Message;
i := Pos('SQMESSAGE', vRAISEMSG);
j := Pos('[SQL Server]', vRAISEMSG);
vMSG := Copy(vRAISEMSG, i, Length(vRAISEMSG) - i + 1);
// 非格式化訊息提示
if i = 0 then
begin
ShowMessage(Copy(vRAISEMSG, j + 12, Length(vRAISEMSG) - j + 1));
Exit;
end;
end;
end;
//處理完成後重新打開數據集
FThis.dts0.Open;
FThis.dts1.Open;
end;
finally
AStoredProc.Free;
end;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
- btnExitClick:退出目前視窗。
procedure TMyHandler.btnExitClick;
//退出
begin
FThis.Close;
end;
2
3
4
5
- btnItemSpecAppendRowClick:規格明細欄新增行。
procedure TMyHandler.btnItemSpecAppendRowClick;
//新增行
begin
FThis.dts1.Append;
end;
2
3
4
5
- dts1NewRecord:規格明細欄新增行初始化。
procedure TMyHandler.dts1NewRecord;
//新增行初始化資訊FInterID,FEntryID賦值
begin
//FThis.dts1.Edit;
FThis.dts1.FieldByName('FInterID').AsString := FThis.dts0.FieldByName('FInterID').AsString;
FThis.dts1.FieldByName('FEntryID').AsInteger := FThis.dts1.RecordCount + 1;
FThis.dts1.Post;
end;
2
3
4
5
6
7
8
- btnItemSpecDelRowClick:規格明細欄刪除行。
procedure TMyHandler.btnItemSpecDelRowClick;
//刪除行
begin
if FThis.dts1.RecordCount > 0 Then
FThis.dts1.Delete;
end;
2
3
4
5
6
- lkupFUnitNameClick:計量單位更新。
procedure TMyHandler.lkupFUnitNameClick;
//計量單位切換時更新相應欄位資訊
begin
FThis.dts0.Edit;
FThis.dts0.FieldByName('FUnitID').AsString := FThis.dts0FUnit.FieldByName('FUnitID').AsString;
FThis.dts0.FieldByName('FUnitCode').AsString := FThis.dts0FUnit.FieldByName('FUnitCode').AsString;
FThis.dts0.Post;
end;
2
3
4
5
6
7
8
# 3.5.5. 多語言設定
在功能表欄點選語言
-語言設定
,打開多語言設定對話方塊,根據提示進行多語言的設定。
# 3.5.6. 運行效果
# 4. 業務單據頁面設定
# 4.1. 銷售訂單查詢-多筆數據主從表單
銷售訂單頁面設定如下。
# 4.1.1. 功能簡述
此頁面用於查詢銷售訂單資訊,功能涉及到查詢條件的引入,初始化單據等。
# 4.1.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Caption | 銷售訂單 | 主窗體的標題名稱 |
Height | 768 | 主窗體的高度(畫素) |
Name | SalOrder | 主窗體模組的名稱 |
Width | 1024 | 主窗體的寬度(畫素) |
# 4.1.3. 控制元件設定
各表結構欄位及對應的數據感知控制元件名稱如下:
- 控制元件說明
其中的TBitBtn
、TDateTimePicker
型別的控制元件需修改Font.Size
為12
。其中的部分查詢條件需配備對應的TLabel
控制元件,設定其Caption
屬性,同時設定Font.Size
為12
,TPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
Panel1 | TPanel | 面板控制元件,控制元件置於左側,用於放置查詢條件使用的控制元件以及按鈕 |
dtpBegin | TDateTimePicker | 設定訂單的起始日期 |
dtpEnd | TDateTimePicker | 設定訂單的截止日期 |
edQuery | TEdit | 編輯查詢條件客戶程式碼或名稱 |
edFBillNo | TEdit | 編輯查詢條件,單據編號 |
ComboBox1 | TComboBox | 覈取方塊,單據狀態 |
btnQuery | TBitBtn | 查詢按鈕Caption :查詢 |
btnClear | TBitBtn | 清除按鈕Caption :清除 |
btnEditor | TBitBtn | 編輯按鈕Caption :編輯 |
btnNew | TBitBtn | 新建按鈕Caption :新建 |
dts1 | TRFDataSet | 查詢表數據集 |
ds1 | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dts1 |
DBGrid1 | TDBGrid | 銷售訂單數據表格DataSource :ds1 |
- DBGrid1數據表格說明
在設定表格列之前,使用滑鼠右鍵點選表格,在選項中選擇Custom Columns
,轉換為自定義表格後進行設定。點選Columns
屬性打開對話方塊,在此處新增欄位。選擇新增的欄位進行屬性的更改。
FieldName 欄位名 | Font.Size 字型大小 | Title.Caption 標題文字 | Title.Font.Size 標題字型大小 | Width 列寬度 |
---|---|---|---|---|
FStatus | 10 | 狀態 | 12 | 60 |
FBillNo | 10 | 單據編號 | 12 | 100 |
FDate | 10 | 訂單日期 | 12 | 80 |
FSignDate | 10 | 簽訂日期 | 12 | 80 |
FCustCode | 10 | 客戶程式碼 | 12 | 80 |
FCustName | 10 | 客戶名稱 | 12 | 140 |
FDeptName | 10 | 部門名稱 | 12 | 80 |
FEmpName | 10 | 業務員 | 12 | 80 |
FItemCode | 10 | 布種程式碼 | 12 | 80 |
FItemName | 10 | 布種名稱 | 12 | 100 |
FItemSpec | 10 | 規格 | 12 | 80 |
FAuxQty | 10 | 數量 | 12 | 64 |
FUnitName | 10 | 計量單位 | 12 | 80 |
FContractNo | 10 | 合同號 | 12 | 80 |
FBiller | 10 | 制單人 | 12 | 80 |
FCreateDate | 10 | 制單日期 | 12 | 140 |
FChecker | 10 | 審覈人 | 12 | 80 |
FCheckDate | 10 | 審覈日期 | 12 | 140 |
FAuxPrice | 10 | 單價 | 12 | 80 |
FAmount | 10 | 金額 | 12 | 80 |
FDeliverDate | 10 | 交貨日期 | 12 | 100 |
# 4.1.4. 指令碼設計
type
TMyHandler = class(TForm)
private
FThis:TBaseForm;
Public
constructor Create(AOwner: TComponent); override;
procedure resume;
procedure ComboBoxSelect;
{模組聲明 MODULE-DECLARE}
procedure btnQueryClick(Sender: TObject);
procedure btnClearClick(Sender: TObject);
procedure btnNewClick(Sender: TObject);
procedure btnEditorClick(Sender: TObject);
end;
//...
var
FMyHandler:TMyHandler;
begin
FMyHandler := TMyHandler.Create(this);
{事件繫結 MODULE-BIND}
this.btnQuery.OnContextPopup := FMyHandler.btnQueryContextPopup;
this.btnQuery.OnClick := FMyHandler.btnQueryClick;
this.btnClear.OnClick := FMyHandler.btnClearClick;
this.btnNew.OnClick := FMyHandler.btnNewClick;
this.btnEditor.OnClick := FMyHandler.btnEditorClick;
end.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- 程式模組列表
程式模組名稱 | 說明 |
---|---|
Create | 構造器,啟動后運行需初始化設定的內容 |
resume | 恢復查詢條件 |
ComboBoxSelect | 選擇單據狀態 |
btnQueryClick | 查詢按鈕點選,新增查詢條件視窗的資訊執行查詢 |
btnClearClick | 清除按鈕點選,清除查詢條件視窗,並執行查詢 |
btnNewClick | 新建按鈕點選,打開新視窗 |
btnEditorClick | 編輯按鈕點選 |
- Create:構造器,啟動后運行需初始化設定的內容。
constructor TMyHandler.Create(AOwner: TComponent);
//設定查詢數據集資訊
begin
FThis :=TBaseForm(AOwner);
FThis.dts1.Connection := dm.DBConnection;
resume;
FThis.dts1.Open;
end;
2
3
4
5
6
7
8
- resume:恢復查詢條件。
procedure TMyHandler.resume;
//設定數據集SQL,新增查詢條件
begin
FThis.dts1.SQL.Text := 'select b.FID,b.FInterID,a.FBillID,a.FBillNo,a.FDate,a.FSignDate,' +
'a.FCustCode,a.FCustName,a.FDeptName,a.FEmpName,FProductItemCode,FProductItemName,' +
'b.FItemCode,b.FItemName,b.FItemSpec,b.FUnitName,b.FAuxQty,a.FContractNo,FSeason,' +
'a.FBiller,a.FCreateDate,a.FChecker,a.FCheckDate, case a.FStatus WHEN 0 THEN ''' + FThis.siLang1.GetTextW('已作廢') +
''' WHEN 1 THEN ''' + FThis.siLang1.GetTextW('草 稿') + ''' WHEN 2 THEN ''' + FThis.siLang1.GetTextW('已審覈') +
''' END AS FStatus,a.FClosed,' +
'b.FAuxPrice,b.FAmount,FDeliverRemark as FDeliverDate,c.FPrintCount ' +
'from SAL_Order a(NOLOCK) ' +
'inner join SAL_OrderEntry b(NOLOCK) on a.FInterID = b.FInterID ' +
'Left join (select FDataID,isnull(COUNT(1),0) as FPrintCount from Dict_PrintRecord Group By FDataID) C ' +
'on b.FInterID = c.FDataID ' +
'Where 1 = 1 ' +
'Order by a.FDate desc';
FThis.dts1.AddWhere('a.FDate between ''' + DateToStr(FThis.dtpBegin.DateTime) + ''' and ''' +
DateToStr(FThis.dtpEnd.DateTime) + '''');
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- ComboBoxSelect:選擇單據狀態。
procedure TMyHandler.ComboBoxSelect;
//選擇單據狀態
begin
if FThis.ComboBox1.ItemIndex = 0 then
FThis.dts1.AddWhere('a.FStatus IN (0,1,2)');
IF FThis.ComboBox1.ItemIndex = 1 Then
FThis.dts1.AddWhere('a.FStatus = 2' );
If FThis.ComboBox1.ItemIndex = 2 Then
FThis.dts1.AddWhere('a.FStatus = 1');
If FThis.ComboBox1.ItemIndex = 3 Then
FThis.dts1.AddWhere('a.FStatus = 0');
end;
2
3
4
5
6
7
8
9
10
11
12
- btnQueryClick:查詢按鈕點選,新增查詢條件視窗的資訊執行查詢。
procedure TMyHandler.btnQueryClick;
//新增查詢條件視窗的資訊執行查詢
begin
FThis.dts1.Close;
resume;
if FThis.edQuery.Text <> '' Then
FThis.dts1.AddWhere('a.FCustCode LIKE ''%' + FThis.edQuery.Text + '%'' or a.FCustName LIKE ''%' + FThis.edQuery.Text + '%''');
if FThis.edFBillNo.Text <> '' Then
FThis.dts1.AddWhere('a.FBillNo LIKE ''%' + FThis.edFBillNo.Text + '%''');
ComboBoxSelect;
FThis.dts1.Open;
end;
2
3
4
5
6
7
8
9
10
11
12
- btnClearClick:清除按鈕點選,清除查詢條件視窗,並執行查詢。
procedure TMyHandler.btnClearClick;
//清除查詢條件資訊並初始化查詢
begin
FThis.edQuery.Text := '';
FThis.edFBillNo.Text := '';
FThis.dts1.Close;
resume;
ComboBoxSelect;
FThis.dts1.Open;
end;
2
3
4
5
6
7
8
9
10
- btnNewClick:新建按鈕點選,打開新視窗。
procedure TMyHandler.btnNewClick;
//新建
var
F: TBaseForm;
vInterID: Integer;
begin
//打開編輯視窗
F := paxfunc.OpenForm('SalOrderEdit');
//與目前視窗建立連線
F.TagObject := FThis;
//設定初始狀態為草稿編輯狀態
F.Tag := -1;
//啟用目標視窗的定時器功能
TTimer(F.FindComponent('Timer1')).Enabled := True;
//獲取唯一ID
vInterID := dm.GetNodeID;
//打開目標視窗數據集
TRFDataSet(F.FindComponent('dts0')).ParamByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dts0')).Open;
TRFDataSet(F.FindComponent('dts0')).Append;
//初始賦值
TRFDataSet(F.FindComponent('dts0')).FieldByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dts0')).FieldByName('FBillID').AsInteger := 12020002;
TRFDataSet(F.FindComponent('dts0')).FieldByName('FBillNo').AsString := dm.GetBillNo('12020002',now,True);
TRFDataSet(F.FindComponent('dts0')).FieldByName('FDate').AsDateTime := Date;
TRFDataSet(F.FindComponent('dts0')).FieldByName('FSignDate').AsDateTime := Date;
TRFDataSet(F.FindComponent('dts0')).FieldByName('FContractNo').AsString := TRFDataSet(F.FindComponent('dts0')).FieldByName('FBillNo').AsString;
TRFDataSet(F.FindComponent('dts0')).FieldByName('FExchangeRate').AsInteger := 1;
TRFDataSet(F.FindComponent('dts0')).FieldByName('FStatus').AsInteger := 1;
TRFDataSet(F.FindComponent('dts0')).FieldByName('FClosed').AsInteger := 0;
TRFDataSet(F.FindComponent('dts0')).FieldByName('FBiller').AsString := FThis.siLang1.GetTextW('admin');
TRFDataSet(F.FindComponent('dts0')).FieldByName('FCreateDate').AsDateTime := now;
//明細數據集初始賦值
TRFDataSet(F.FindComponent('dts1')).ParamByName('FInterID').AsInteger := vInterID;
TRFDataSet(F.FindComponent('dts1')).Open;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
- btnEditorClick:編輯按鈕點選。
procedure TMyHandler.btnEditorClick;
//編輯
var
F: TBaseForm;
vInterID: Integer;
begin
//打開編輯視窗
F := paxfunc.OpenForm('SalOrderEdit');
//與目前視窗建立連線
F.TagObject := FThis;
//數據集初始賦值
TRFDataSet(F.FindComponent('dts0')).ParamByName('FInterID').AsInteger := FThis.dts1.FieldByName('FInterID').AsInteger;
TRFDataSet(F.FindComponent('dts0')).Open;
//獲取單據狀態,根據狀態設定視窗的編輯模式
F.Tag := TRFDataSet(F.FindComponent('dts0')).FieldByName('FStatus').AsInteger;
TTimer(F.FindComponent('Timer1')).Enabled := True;
//數據集獲取
TRFDataSet(F.FindComponent('dts1')).ParamByName('FInterID').AsInteger := FThis.dts1.FieldByName('FInterID').AsInteger;
TRFDataSet(F.FindComponent('dts1')).Open;
//獲取單據列表資訊並定位單據位置
While TRFDataSet(F.FindComponent('dtsList')).FieldByName('FInterID').AsString <> FThis.dts1.FieldByName('FInterID').AsString do
begin
TRFDataSet(F.FindComponent('dtsList')).Next;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 4.1.5. 多語言設定
在功能表欄點選語言
-語言設定
,打開多語言設定對話方塊,根據提示進行多語言的設定。
# 4.1.6. 運行效果
# 4.2. 銷售訂單編輯-多筆數據主從表單
銷售訂單編輯頁面設定如下。
# 4.2.1. 功能簡述
此頁面用於編輯銷售訂單的資訊,執行審覈、列印等操作,功能涉及到視窗數據集的數據匯入、查詢表數據的引入、審覈、消審功能的預存程序的引入、視窗列印與Flying列印的引入。
# 4.2.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Caption | 銷售訂單編輯 | 主窗體的標題名稱 |
Height | 768 | 主窗體的高度(畫素) |
Name | SalOrderEdit | 主窗體模組的名稱 |
Width | 1024 | 主窗體的寬度(畫素) |
# 4.2.3. 控制元件設定
各表結構欄位及對應的控制元件名稱如下:
- 主視窗控制元件說明
其中的TBitBtn
、TGroupBox
、TComboBox
、TDateTimePicker
型別的控制元件需修改Font.Size
為12
,TPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
MainMenu1 | TMainMenu | 功能表控制元件,用於建立功能表欄目 |
Panel1 | TPanel | 面板控制元件,頂部按鈕佈局容器 |
Panle2 | TPanel | 面板控制元件,訂單資訊佈局容器 |
Panel3 | TPanel | 面板控制元件,頂部佈局,顯示訂單日期,狀態資訊等控制元件的佈局容器 |
GroupBox1 | TGroupBox | 分組框控制元件,設定顯示訂單資訊的數據感知控制元件 |
PageControl1 | TPageControl | 標籤頁面分組控制元件,設定頁面訂單的資訊在頁面空白處右鍵單擊選擇New Page 新增標籤頁TabSheet |
TabSheet1 | TTabSheet | PageControl1 中的標籤頁面1Caption :訂單明細 |
TabSheet2 | TTabSheet | PageControl1 中的標籤頁面2Caption :訂單要求 |
TabSheet3 | TTabSheet | PageControl1 中的標籤頁面3Caption :裝運及包裝要求 |
TabSheet4 | TTabSheet | PageControl1 中的標籤頁面4Caption :附件 |
btnNew | TBitBtn | 新建按鈕,點選以新建銷售訂單Caption :新建 |
btnFirst | TBitBtn | 首項按鈕,點選跳轉至記錄的首頁Caption :首項 |
btnPrior | TBitBtn | 前項按鈕,點選跳轉至記錄的前項Caption :前項 |
btnNext | TBitBtn | 後項按鈕,點選跳轉至記錄的後項Caption :後項 |
btnLast | TBitBtn | 末項按鈕,點選跳轉至記錄的末項Caption :末項 |
btnSave | TBitBtn | 儲存按鈕,點選以儲存單據的更改Caption :儲存 |
btnExit | TBitBtn | 退出按鈕,點選以退出視窗Caption :退出 |
ComboBoxPrinter | TComboBox | 用於顯示印表機列表Visible :控制元件是否可見,設定為False |
btnNew | TBitBtn | 新建按鈕,點選以新建客戶資料Caption :新建 |
dtpdts0FDate | TDateTimePicker | 顯示訂單日期 |
dts0 | TRFDataSet | 銷售訂單主表數據集 |
ds0 | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dts0 |
dtsFStatus | TRFDataSet | 狀態表數據集 |
dsFStatus | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFStatus |
dtsFStatus | TRFDataSet | 狀態表數據集 |
dsFStatus | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFStatus |
dtsFSaleType | TRFDataSet | 銷售型別數據集 |
dsFSaleType | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFSaleType |
dtsFCustID | TRFDataSet | 客戶名稱數據集 |
dsFCustID | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFCustID |
dtsFCurrencyID | TRFDataSet | 幣種資料數據集 |
dsFCurrencyID | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFCurrencyID |
dtsFDeptID | TRFDataSet | 部門名稱數據集 |
dsFDpetID | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFDeptID |
dtsFEmpID | TRFDataSet | 業務員名稱數據集 |
dsFEmpID | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFDeptEmpID |
dtsList | TRFDataSet | 銷售訂單單據資訊數據集 |
dtsCompany | TRFDataSet | 公司資料數據集資訊 |
Timer1 | TTimer | 定時器 |
Timer2 | TTimer | 定時器 |
- MainMenu1設計內容
選擇功能表控制元件,右鍵點選選擇Edit
,打開視窗設計頁面。在此頁面中,點選功能表項,然後點選+
按鈕,會在選擇的功能表目錄下方新增一個功能表專案。最終新增的功能表專案如下圖所示。每新增一個功能表專案后,可選擇此功能表專案,在左側的屬性檢視器中修改控制元件的Caption
屬性。
控制元件名稱 | 功能表名稱 | 說明 |
---|---|---|
MenuItem1 | 功能 | 功能分組功能表欄 |
miCheck | 審覈 | 審覈功能表欄 |
miUnCheck | 消審 | 消審功能表欄 |
miRevoke | 作廢 | 作廢功能表欄 |
miRecover | 還原 | 還原功能表欄 |
miDelete | 刪除 | 刪除功能表欄 |
FlyingPrint | Flying列印 | 執行Flying列印 |
miReportDesign | 設計列印格式 | 列印格式設計 |
miReportPrint | 列印 | 列印 |
- 主視窗數據感知控制元件說明
此頁面中首頁繫結的數據源DataSource
為ds0
,所有涉及到文字顯示的控制元件的文字大小屬性Font.Size
修改爲12
。由於數據感知控制元件不包含標籤顯示,故每放置一個字元編輯型別的數據感知控制元件前,需要先放置一個TLabel
控制元件,並將其Caption
屬性設定為數據欄位對應的中文名稱,同樣也需要將其 Font.Size
修改爲12
。
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FSaleType | 銷售型別 | TDBLookupComboBox | lkupdts0FSaleType | 列表繫結的數據源ListSource :dsFSaleType列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField : FName |
FStatus | 狀態 | TDBLookupComboBox | lkupdts0FSaleType | 列表繫結的數據源ListSource :dsFStatus列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField : FID |
FBillNo | 單據編號 | TDBEdit | eddts0FBillNo | ReadOnly :False |
FCustID | 客戶名稱 | TDBLookupComboBox | lkupdts0FCustID | 列表繫結的數據源ListSource :dsFCustID列表顯示的欄位名 ListField :FCustName列表對應返回的欄位值 KeyField :FCustID |
FContractNo | 合同號 | TDBEdit | eddts0FContractNo | |
FCurrencyID | 幣種 | TDBLookupComboBox | lkupdts0FCurrencyID | 列表繫結的數據源ListSource :dsFCurrencyID列表顯示的欄位名 ListField :FCurrencyName列表對應返回的欄位值 KeyField :FCurrencyID |
FDeptID | 部門名稱 | TDBLookupComboBox | lkupdts0FDeptID | 列表繫結的數據源ListSource :dsFDeptID列表顯示的欄位名 ListField :FDeptName列表對應返回的欄位值 KeyField :FDeptID |
FEmpID | 部門名稱 | TDBLookupComboBox | lkupdts0FEmpID | 列表繫結的數據源ListSource :dsFEmpID列表顯示的欄位名 ListField :FEmpName列表對應返回的欄位值 KeyField :FEmpID |
FExchangeRate | 匯率 | TDBEdit | eddts0FExchangeRate | |
FNote | 備註 | TDBMemo | mmdts0FNote |
- TabSheet1控制元件說明
其中的TBitBtn
型別的控制元件需修改Font.Size
為12
。TPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
Panel4 | TPanel | 佈局控制元件,佈局于頂部位置,放置按鈕 |
btnDelRow | TBitBtn | 刪除行 |
btnCopyRow | TBitBtn | 複製行 |
btnImportItem | TBitBtn | 匯入物料 |
dts1 | TRFDataSet | 銷售訂單明細數據集 |
ds1 | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dts1 |
DBGrid1 | TDBGrid | 銷售訂單明細數據表格DataSource :ds1 |
- DBGrid1數據表格說明
在設定表格列之前,使用滑鼠右鍵點選表格,在選項中選擇Custom Columns
,轉換為自定義表格後進行設定。點選Columns
屬性打開對話方塊,在此處新增欄位。選擇新增的欄位進行屬性的更改。
FieldName 欄位名 | Font.Size 字型大小 | Title.Caption 標題文字 | Title.Font.Size 標題字型大小 | Width 列寬度 |
---|---|---|---|---|
FEntryID | 10 | 序號 | 12 | 64 |
FItemCode | 10 | 布種程式碼 | 12 | 80 |
FItemName | 10 | 布種名稱 | 12 | 100 |
FItemSpec | 10 | 規格 | 12 | 100 |
FUnitName | 10 | 計量單位 | 12 | 64 |
FColorName | 10 | 顏色名稱 | 12 | 80 |
FColorNo | 10 | 色號 | 12 | 80 |
FWidth | 10 | 門幅 | 12 | 80 |
FWidthInfo | 10 | 門幅說明 | 12 | 80 |
FWeightOfLength | 10 | 克重 | 12 | 80 |
FQtyPiece | 10 | 件數 | 12 | 80 |
FUnitPiece | 10 | 件單位 | 12 | 64 |
FAuxQty | 10 | 數量 | 12 | 80 |
FAuxPrice | 10 | 單價 | 12 | 80 |
FAmount | 10 | 金額 | 12 | 80 |
FNote | 10 | 備註 | 12 | 80 |
FDeliverDate | 10 | 交貨日期 | 12 | 100 |
- TabSheet2控制元件說明
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
Panel5 | TPanel | 佈局控制元件,佈局于頂部位置,放置說明資訊Caotion ;訂單要求Alignment (對齊方式):taLeftJustify |
- TabSheet2數據感知控制元件說明
此頁面中首頁繫結的數據源DataSource
為ds0
,控制元件的文字大小屬性Font.Size
修改爲12
。由於數據感知控制元件不包含標籤顯示,需要先放置一個TLabel
控制元件,並將其Caption
屬性設定為數據欄位對應的中文名稱,同樣也需要將其 Font.Size
修改爲12
。
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FOrderRequest | 訂單要求 | TDBMemo | mmdts0FOrderRequest |
- TabSheet3控制元件說明
TDateTimePicker
控制元件需設定顯示的文字大小屬性Font.Size
為12
。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
dtsPort | TRFDataSet | 港口資訊數據集 |
dsPort | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsPort |
dtpdts0FSignDate | TDateTimePicker | 簽訂日期的設定 |
- TabSheet3數據感知控制元件說明
此頁面中首頁繫結的數據源DataSource
為ds0
,控制元件的文字大小屬性Font.Size
修改爲12
。由於數據感知控制元件不包含標籤顯示,需要先放置一個TLabel
控制元件,並將其Caption
屬性設定為數據欄位對應的中文名稱,同樣也需要將其 Font.Size
修改爲12
。
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FSignAddr | 簽訂地點 | TDBEdit | eddts0FSignAddr | |
FBeginPort | 出發港口 | TDBLookupComboBox | lkupdtts0FBeginPort | 列表繫結的數據源ListSource :dsPort列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField :FName |
FEndPort | 目的港口 | TDBLookupComboBox | lkupdts0FEndPort | 列表繫結的數據源ListSource :dsPort列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField :FName |
FTrafficType | 運輸方式 | TDBEdit | eddts0FTrafficType | |
FPacket | 包裝方式 | TDBMemo | mmFPacket |
- TabSheet4控制元件說明
TBitBtn
型別的控制元件需設定按鈕文字大小Font.Size
為12
。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
btnUpload | TBitBtn | 上傳按鈕 |
btnClear | TBitBtn | 清除圖片 |
OpenPictureDialog | TOpenPictureDialog | 打開圖片對話方塊 |
- TabSheet4數據感知控制元件說明
此頁面中首頁繫結的數據源DataSource
為ds0
。
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FImage | 訂單圖片 | TDBImage | DBImage1 |
其中需要注意的是DBImage1
,需額外設定其Font
屬性,將其顏色修改爲白色,並將其Color
屬性設定為clWhite
以掩蓋控制元件名稱的標識。
# 4.2.4. 指令碼設計
type
TMyHandler = class(TForm)
private
FThis:TBaseForm;
Public
constructor Create(AOwner: TComponent); override;
{模組聲明 MODULE-DECLARE}
procedure RefState(aState: Integer);
procedure DataSetRowCopy(QDataSet: TRFDataSet);
procedure PageSwitch;
procedure ManuRefresh;
procedure DoBillBusness(aFlag: String);
procedure btnNewClick(Sender: TObject);
procedure btnFirstClick(Sender: TObject);
procedure btnPriorClick(Sender: TObject);
procedure btnNextClick(Sender: TObject);
procedure btnLastClick(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure miCheckClick(Sender: TObject);
procedure miUnCheckClick(Sender: TObject);
procedure miRevokeClick(Sender: TObject);
procedure miRecoverClick(Sender: TObject);
procedure miDeleteClick(Sender: TObject);
procedure FlyingPrintClick(Sender: TObject);
procedure btnDelRowClick(Sender: TObject);
procedure btnCopyRowClick(Sender: TObject);
procedure btnImportItemClick(Sender: TObject);
procedure miReportDesignClick(Sender: TObject);
procedure miReportPrintClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure dts0BeforeEdit(DataSet: TDataSet);
procedure dts1BeforeEdit(DataSet: TDataSet);
procedure lkupdts0FCustIDClick(Sender: TObject);
procedure dtpdts0FDateChange(Sender: TObject);
procedure dtpdts0FSignDateChange(Sender: TObject);
procedure dts1NewRecord(DataSet: TDataSet);
procedure FlyingReceived(ASender: TObject; AType: string; AContent: string);
procedure Timer2Timer(Sender: TObject);
procedure btnUploadClick(Sender: TObject);
procedure btnClearClick(Sender: TObject);
end;
//....
var
FMyHandler:TMyHandler;
begin
FMyHandler := TMyHandler.Create(this);
{事件繫結 MODULE-BIND}
this.btnNew.OnClick := FMyHandler.btnNewClick;
this.btnFirst.OnClick := FMyHandler.btnFirstClick;
this.btnPrior.OnClick := FMyHandler.btnPriorClick;
this.btnNext.OnClick := FMyHandler.btnNextClick;
this.btnLast.OnClick := FMyHandler.btnLastClick;
this.btnSave.OnClick := FMyHandler.btnSaveClick;
this.btnExit.OnClick := FMyHandler.btnExitClick;
this.miCheck.OnClick := FMyHandler.miCheckClick;
this.miUnCheck.OnClick := FMyHandler.miUnCheckClick;
this.miRevoke.OnClick := FMyHandler.miRevokeClick;
this.miRecover.OnClick := FMyHandler.miRecoverClick;
this.miDelete.OnClick := FMyHandler.miDeleteClick;
this.FlyingPrint.OnClick := FMyHandler.FlyingPrintClick;
this.btnDelRow.OnClick := FMyHandler.btnDelRowClick;
this.btnCopyRow.OnClick := FMyHandler.btnCopyRowClick;
this.btnImportItem.OnClick := FMyHandler.btnImportItemClick;
this.miReportDesign.OnClick := FMyHandler.miReportDesignClick;
this.miReportPrint.OnClick := FMyHandler.miReportPrintClick;
this.Timer1.OnTimer := FMyHandler.Timer1Timer;
this.dts0.BeforeEdit := FMyHandler.dts0BeforeEdit;
this.dts1.BeforeEdit := FMyHandler.dts1BeforeEdit;
this.lkupdts0FCustID.OnClick := FMyHandler.lkupdts0FCustIDClick;
this.dtpdts0FDate.OnChange := FMyHandler.dtpdts0FDateChange;
this.dtpdts0FSignDate.OnChange := FMyHandler.dtpdts0FSignDateChange;
this.dts1.OnNewRecord := FMyHandler.dts1NewRecord;
this.Flying.OnReceived := FMyHandler.FlyingReceived;
this.Timer2.OnTimer := FMyHandler.Timer2Timer;
this.btnUpload.OnClick := FMyHandler.btnUploadClick;
this.btnClear.OnClick := FMyHandler.btnClearClick;
end.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
- 程式模組列表
程式模組名稱 | 說明 |
---|---|
Create | 構造器,啟動后運行需初始化設定的內容 |
RefState | 重新整理單據的按鈕狀態顯示 |
DataSetRowCopy | 數據集複製行 |
PageSwitch | 頁面切換子程式 |
ManuRefresh | 重新整理顯示 |
DoBillBusness | 執行功能,比如審覈、消審等操作 |
btnNewClick | 新建銷售訂單 |
btnFirstClick | 返回單據首項 |
btnPriorClick | 返回單據的前一項 |
btnNextClick | 返回單據的后一項 |
btnLastClick | 返回單據的末項 |
btnSaveClick | 儲存單據 |
btnExitClick | 退出目前視窗 |
miCheckClick | 審覈功能表項的點選觸發事件 |
miUnCheckClick | 消審功能表項的點選觸發事件 |
miRevokeClick | 作廢功能表項的點選觸發事件 |
miRecoverClick | 還原功能表項的點選觸發事件 |
miDeleteClick | 刪除功能表項的點選觸發事件 |
FlyingPrintClick | Flying列印功能表項的點選觸發事件 |
btnDelRowClick | 刪除行點選觸發事件 |
btnCopyRowClick | 數據集複製行 |
btnImportItemClick | 數據集匯入物料 |
miReportDesignClick | 視窗數據集設計頁面 |
miReportPrintClick | 視窗數據集列印 |
Timer1Timer | 定時器觸發事件,重新整理頁面顯示狀態 |
dts0BeforeEdit | 主數據集啟用編輯前,設定頁面為編輯狀態 |
dts1BeforeEdit | 明細數據集啟用編輯前,設定頁面為編輯狀態 |
lkupdts0FCustIDClick | 客戶名稱在選擇時更新對應的數據集資訊 |
dtpdts0FDateChange | 單據日期變動時變更對應的數據集欄位資訊 |
dtpdts0FSignDateChange | 單據簽訂日期變動時變更對應的數據集欄位資訊 |
dts1NewRecord | 明細數據集新增時進行基礎資料設定 |
FlyingReceived | 當Flying接收到資訊時執行操作 |
Timer2Timer | 定時器觸發事件,執行列印相關的操作 |
btnUploadClick | 上傳圖片按鈕點選事件 |
btnClearClick | 清除圖片按鈕點選事件 |
- Create:構造器,啟動后運行需初始化設定的內容。
constructor TMyHandler.Create(AOwner: TComponent);
//數據集初始化
begin
FThis :=TBaseForm(AOwner);
//主數據集初始化
FThis.dts0.Connection := dm.DBConnection;
FThis.dts0.SQL.Text := 'select a.*,b.FCustName as FCustFullName,b.FAddress,b.FPhone1,' +
'b.FHousebank,b.FHouseBnkAct from Sal_Order a(NOLOCK) LEFT JOIN Basic_Cust B ON ' +
'A.FCustID = B.FInterID where a.FInterID =:FInterID';
//明細數據集初始化
FThis.dts1.Connection := dm.DBConnection;
FThis.dts1.SQL.Text := 'select a.*,b.FBillNo as FTechnicsNo from Sal_OrderEntry a(NOLOCK) ' +
'left join Tex_Technics B on a.FTechnicsID = b.FInterID where a.FInterID =:FInterID ' +
'order by a.FEntryID';
//單據列表數據集初始化(從主視窗中獲取)
FThis.dtsList.Connection := dm.DBConnection;
FThis.dtsList.SQL.Text := 'select FInterID FROM Sal_Order where 1=1';
FThis.dtsList.Open;
//銷售型別數據集初始化
FThis.dtsFSaleType.Connection := dm.DBConnection;
FThis.dtsFSaleType.SQL.Text := 'SELECT a.FName,a.FInterID FROM dbo.Basic_CommonData A ' +
'INNER JOIN Basic_CommonDataType b ON a.FTypeID = b.FInterID WHERE b.FDataName = ''' +
FThis.siLang1.GetTextW('銷售型別') + '''';
FThis.dtsFSaleType.Open;
//狀態數據集初始化
FThis.dtsFStatus.Connection := dm.DBConnection;
FThis.dtsFStatus.SQL.Text := 'Select FName=''' + FThis.siLang1.GetTextW('已作廢') +
''',FID = 0 union Select FName=''' + FThis.siLang1.GetTextW('草 稿') +
''',FID = 1 union Select FName=''' + FThis.siLang1.GetTextW('已審覈') +
''',FID = 2 ORDER BY FID desc';
FThis.dtsFStatus.Open;
//客戶資料數據集初始化
FThis.dtsFCustID.Connection := dm.DBConnection;
FThis.dtsFCustID.SQL.Text := 'select a.FCustCode,a.FShortName as FCustName,a.FCustName ' +
'as FCustFullName,a.FEmpCode,a.FEmpName,a.FAddress,a.FPhone1,a.FPhone2,a.FTel,a.FContacts,' +
'a.FHouseBank,a.FHouseBnkAct, A.FDeptCode,A.FDeptName,a.FInterID as FCustID,a.FEmpID,a.FDeptID, ' +
'A.FSettleID,A.FSettleName,A.FPayItemID,A.FPayItemName,A.FSaleType, a.FSaleType as FOrderType ' +
'from Basic_Cust A left join Basic_employee b on a.FEmpID = b.FInterID where isnull(a.FfrozenFor,0) = 0 ' +
'order by FCustCode';
FThis.dtsFCustID.Open;
//部門數據集初始化
FThis.dtsFDeptID.Connection := dm.DBConnection;
FThis.dtsFDeptID.SQL.Text := 'SELECT FGroupID as FDeptID,FGroupCode as FDeptCode,FGroupName as FDeptName ' +
'FROM Dict_GroupInfo';
FThis.dtsFDeptID.Open;
//業務員數據集初始化
FThis.dtsFEmpID.Connection := dm.DBConnection;
FThis.dtsFEmpID.SQL.Text := 'SELECT FInterID as FEmpID,FEmpCode,FEmpName FROM Basic_Employee';
FThis.dtsFEmpID.Open;
//幣種數據集初始化
FThis.dtsFCurrencyID.Connection := dm.DBConnection;
FThis.dtsFCurrencyID.SQL.Text := 'SELECT FCode as FCurrencyCode,FName as FCurrencyName,FInterID AS ' +
'FCurrencyID,FExRate AS FExchangeRate FROM Basic_Currency';
FThis.dtsFCurrencyID.Open;
//港口數據集初始化
FThis.dtsPort.Connection := dm.DBConnection;
FThis.dtsPort.SQL.Text := 'SELECT a.FName,a.FInterID FROM dbo.Basic_CommonData A INNER JOIN Basic_CommonDataType ' +
'b ON a.FTypeID = b.FInterID WHERE b.FDataName = ''' + FThis.siLang1.GetTextW('港口') + '''';
FThis.dtsPort.Open;
//公司資料初始化
FThis.dtsCompany.Connection := dm.DBConnection;
FThis.dtsCompany.SQL.Text := 'select top 1 * FROM Basic_Company';
FThis.dtsCompany.Open;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
- RefState:重新整理單據的按鈕狀態顯示。
//單據狀態發生變化時,啟用或者禁用部分按鈕
procedure TMyHandler.RefState(aState: Integer);
begin
FThis.Tag := aState;
if aState = -1 then
//草稿編輯狀態
begin
FThis.btnFirst.Enabled := False;
FThis.btnPrior.Enabled := False;
FThis.btnNext.Enabled := False;
FThis.btnLast.Enabled := False;
FThis.btnNew.Enabled := False;
FThis.btnSave.Enabled := True;
FThis.btnUpload.Enabled := True;
FThis.btnDelRow.Enabled := True;
FThis.btnCopyRow.Enabled := True;
FThis.btnImportItem.Enabled := True;
FThis.btnClear.Enabled := True;
//控制元件控制
FThis.ds0.AutoEdit := True;
FThis.ds1.AutoEdit := True;
end;
if aState = 1 then
//草稿狀態
begin
FThis.btnFirst.Enabled := True;
FThis.btnPrior.Enabled := True;
FThis.btnNext.Enabled := True;
FThis.btnLast.Enabled := True;
FThis.btnNew.Enabled := True;
FThis.btnSave.Enabled := False;
FThis.btnUpload.Enabled := True;
FThis.btnDelRow.Enabled := True;
FThis.btnCopyRow.Enabled := True;
FThis.btnImportItem.Enabled := True;
FThis.btnClear.Enabled := True;
//控制元件控制
FThis.ds0.AutoEdit := True;
FThis.ds1.AutoEdit := True;
end;
if aState = 2 then
//審覈狀態
begin
FThis.btnFirst.Enabled := True;
FThis.btnPrior.Enabled := True;
FThis.btnNext.Enabled := True;
FThis.btnLast.Enabled := True;
FThis.btnNew.Enabled := True;
FThis.btnSave.Enabled := False;
FThis.btnUpload.Enabled := False;
FThis.btnDelRow.Enabled := False;
FThis.btnCopyRow.Enabled := False;
FThis.btnImportItem.Enabled := False;
FThis.btnClear.Enabled := False;
//控制元件控制
FThis.ds0.AutoEdit := False;
FThis.ds1.AutoEdit := False;
end;
if aState = 0 then
//作廢狀態
begin
FThis.btnFirst.Enabled := True;
FThis.btnPrior.Enabled := True;
FThis.btnNext.Enabled := True;
FThis.btnLast.Enabled := True;
FThis.btnNew.Enabled := True;
FThis.btnSave.Enabled := False;
FThis.btnUpload.Enabled := False;
FThis.btnDelRow.Enabled := False;
FThis.btnCopyRow.Enabled := False;
FThis.btnImportItem.Enabled := False;
FThis.btnClear.Enabled := False;
//控制元件控制
FThis.ds0.AutoEdit := False;
FThis.ds1.AutoEdit := False;
end;
ManuRefresh;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
- DataSetRowCopy:數據集複製行。
//複製行功能
procedure TMyHandler.DataSetRowCopy(QDataSet: TRFDataSet);
var
curRec: array of Variant;
i: Integer;
begin
if QDataSet.IsEmpty then
Exit;
//設定長度
SetLength(curRec, QDataSet.FieldCount);
for i := 0 to length(curRec)-1 do
curRec[i] := QDataSet.Fields[i].value;
QDataSet.Edit;
try
QDataSet.Append;
for i := 0 to length(curRec)-1 do
begin
QDataSet.Edit;
if (curRec[i] <> null) and (QDataSet.Fields[i].IsNull) then
QDataSet.Fields[i].value := curRec[i];
end;
QDataSet.Post;
finally
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
- PageSwitch:頁面切換子程式。
procedure TMyHandler.PageSwitch;
//切換頁面的相關準備
begin
FThis.dts0.Close;
FThis.dts0.ParamByName('FInterID').AsString := FThis.dtsList.FieldByName('FInterID').AsString;
FThis.dts0.Open;
FThis.dts1.Close;
FThis.dts1.ParamByName('FInterID').AsString := FThis.dtsList.FieldByName('FInterID').AsString;
FThis.dts1.Open;
ManuRefresh;
RefState(FThis.dts0.FieldByName('FStatus').AsInteger);
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
- ManuRefresh:重新整理顯示。
//未設定數據感知的控制元件顯示資料庫數據資訊。
procedure TMyHandler.ManuRefresh;
begin
FThis.dtpdts0FDate.DateTime := FThis.dts0.FieldByName('FDate').AsDateTime;
FThis.dtpdts0FSignDate.DateTime := FThis.dts0.FieldByName('FDate').AsDateTime;
end;
2
3
4
5
6
- DoBillBusness:執行功能,比如審覈、消審等操作。
//審覈、消審等操作
procedure TMyHandler.DoBillBusness(aFlag: String);
var
ADataSet: TRFDataSet;
AStoredProc: TRFStoredProc;
sOptName: String;
strSQL: String;
iReturnFlag: Integer;
iReturnMsg: String;
i, j: Integer;
vRAISEMSG: string;
vMSG: string;
Field: TField;
begin
{ 執行預存程序 sp_XXXX }
{ sp_XXXX @ProcID, @DataID, @UserID }
sOptName := AFlag;
AStoredProc := TRFStoredProc.Create(nil);
AStoredProc.Connection := dm.DBConnection;
try
//預存程序準備
AStoredProc.StoredProcName := 'sp_Sal_Order';
AStoredProc.Prepare;
if AStoredProc.Prepared then
begin
//參數賦值
AStoredProc.ParamByName('ProcID').AsString := sOptName;
AStoredProc.ParamByName('DataID').AsString := FThis.dts0.FieldByName('FInterID').AsString;
AStoredProc.ParamByName('UserID').AsString := FThis.siLang1.GetTextW('admin');
if AStoredProc.FindParam('SQResult') <> nil then
AStoredProc.ParamByName('SQResult').AsString := '';
try
//執行預存程序
AStoredProc.ExecProc;
//意外情況資訊反饋的字串處理
Except on ExceptionMessage: Exception do
begin
vRAISEMSG:=ExceptionMessage.Message;
i := Pos('SQMESSAGE', vRAISEMSG);
j := Pos('[SQL Server]', vRAISEMSG);
vMSG := Copy(vRAISEMSG, i, Length(vRAISEMSG) - i + 1);
// 非格式化訊息提示
if i = 0 then
begin
ShowMessage(Copy(vRAISEMSG, j + 12, Length(vRAISEMSG) - j + 1));
Exit;
end;
end;
end;
end;
finally
AStoredProc.Free;
end;
//重新整理數據集顯示,更新單據編輯狀態
FThis.dts0.Open;
FThis.dts1.Open;
RefState(FThis.dts0.FieldByName('FStatus').AsInteger);
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
- btnNewClick:新建銷售訂單。
procedure TMyHandler.btnNewClick;
//新建單據
Var
FInterID: Integer;
begin
//預留區,如果單據處於編輯狀態,新建按鈕會變成灰色
FInterID := DM.GetNodeID;
FThis.dts0.Close;
FThis.dts0.ParamByName('FInterID').AsInteger := FInterID;
FThis.dts0.Open;
FThis.dts0.Append;
//產生單據號初始賦值
FThis.dts0.FieldByName('FInterID').AsInteger := FInterID;
FThis.dts0.FieldByName('FBillID').AsInteger := 12020002;
FThis.dts0.FieldByName('FBillNo').AsString := dm.GetBillNo('12020002',now,True);
FThis.dts0.FieldByName('FDate').AsDateTime := Date;
FThis.dts0.FieldByName('FSignDate').AsDateTime := Date;
FThis.dts0.FieldByName('FContractNo').AsString := FThis.dts0.FieldByName('FBillNo').AsString;
FThis.dts0.FieldByName('FExchangeRate').AsInteger := 1;
FThis.dts0.FieldByName('FStatus').AsInteger := 1;
FThis.dts0.FieldByName('FClosed').AsInteger := 0;
FThis.dts0.FieldByName('FBiller').AsString := FThis.siLang1.GetTextW('admin');
FThis.dts0.FieldByName('FCreateDate').AsDateTime := now;
FThis.dts0.Post;
//明細數據集賦值
FThis.dts1.Close;
FThis.dts1.ParamByName('FInterID').AsString := FThis.dts0.FieldByName('FInterID').AsString;
FThis.dts1.Open;
//更新編輯狀態
RefState(-1);
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
- btnFirstClick:返回單據首項。
procedure TMyHandler.btnFirstClick;
//首頁
begin
FThis.dtsList.First;
PageSwitch;
end;
2
3
4
5
6
- btnPriorClick:返回單據的前一項。
//前項
procedure TMyHandler.btnPriorClick;
begin
FThis.dtsList.Prior;
PageSwitch;
end;
2
3
4
5
6
- btnNextClick:返回單據的后一項。
//後項
procedure TMyHandler.btnNextClick;
begin
FThis.dtsList.Next;
PageSwitch;
end;
2
3
4
5
6
- btnLastClick:返回單據的末項。
//末項
procedure TMyHandler.btnLastClick;
begin
FThis.dtsList.Last;
PageSwitch;
end;
2
3
4
5
6
- btnSaveClick:儲存單據。
//儲存
procedure TMyHandler.btnSaveClick;
//儲存
Var
vdts: TRFDataSet;
vSQL: String;
Begin
//檢查明細數據集是否為空,以及必填欄位資訊是否為空
FThis.dts1.Edit;
FThis.dts1.Post;
if FThis.dts1.RecordCount = 0 Then
Begin
ShowMessage(FThis.siLang1.GetTextW('明細數據不能為空!'));
Exit;
End;
if (Trim(FThis.dts0.FieldByName('FCustID').AsString) = '')
or (Trim(FThis.dts0.FieldByName('FDeptID').AsString) = '')
Then
Begin
ShowMessage(FThis.siLang1.GetTextW('客戶名稱不能為空!'));
exit;
end;
//檢查明細數據集中的各記錄的必填欄位是否為空
FThis.dts1.First;
While not FThis.dts1.Eof Do
Begin
if (Trim(FThis.dts1.FieldByName('FItemID').AsString)='')
or (Trim(FThis.dts1.FieldByName('FAmount').AsString)='')
Then
Begin
ShowMessage(FThis.siLang1.GetTextW('物料資訊不能為空!'));
Exit;
End;
FThis.dts1.Next;
End;
//執行儲存,檢查是否有重複單據存在
vdts :=TRFDataSet.Create(Nil);
try
vdts.Connection := dm.DBConnection;
vdts.SQL.Text := 'SELECT FInterID FROM Sal_Order WHERE FInterID =' + FThis.dts0.FieldByName('FInterID').AsString;
vdts.Open;
if vdts.RecordCount = 0 Then
FThis.dts0.FieldByName('FBillNo').AsString := dm.GetBillNo('12020002',now,False);
DataSetSort(FThis.dts1,'FEntryID');
//儲存明細資訊
if FThis.dts1.RecordCount > 0 Then
Begin
FThis.dts1.Edit;
FThis.dts1.Post;
FThis.dts1.ApplyUpdates(-1);
End;
//儲存主數據集資訊
FThis.dts0.Edit;
FThis.dts0.Post;
FThis.dts0.ApplyUpdates(-1);
ShowMessage(FThis.siLang1.GetTextW('數據儲存成功!'));
RefState(1);
Finally
vdts.Free;
End;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
- btnExitClick:退出目前視窗。
//退出視窗
procedure TMyHandler.btnExitClick;
begin
FThis.Close;
end;
2
3
4
5
- miCheckClick:審覈功能表項的點選觸發事件。
//審覈
procedure TMyHandler.miCheckClick;
begin
DoBillBusness('Check');
end;
2
3
4
5
- miUnCheckClick:消審功能表項的點選觸發事件。
//消審
procedure TMyHandler.miUnCheckClick;
begin
DoBillBusness('UnCheck');
end;
2
3
4
5
- miRevokeClick:作廢功能表項的點選觸發事件。
//作廢
procedure TMyHandler.miRevokeClick;
begin
DoBillBusness('Revoke');
end;
2
3
4
5
- miRecoverClick:還原功能表項的點選觸發事件。
//還原
procedure TMyHandler.miRecoverClick;
begin
DoBillBusness('Recover');
end;
2
3
4
5
- miDeleteClick:刪除功能表項的點選觸發事件。
procedure TMyHandler.miDeleteClick;
begin
//刪除
DoBillBusness('Delete');
end;
2
3
4
5
- FlyingPrintClick:Flying列印功能表項的點選觸發事件。
//執行Flying列印,獲取列印列表
procedure TMyHandler.FlyingPrintClick;
begin
FThis.Flying.GetPrintList;
end;
2
3
4
5
- btnDelRowClick:刪除行點選觸發事件。
//刪除行
procedure TMyHandler.btnDelRowClick;
begin
//啟用編輯狀態
RefState(-1);
if FThis.dts1.RecordCount = 0 then
Begin
ShowMessage(FThis.siLang1.GetTextW('無可刪除的明細數據!'));
Exit;
End;
FThis.dts1.Delete;
end;
2
3
4
5
6
7
8
9
10
11
12
- btnCopyRowClick:數據集複製行。
//複製行
procedure TMyHandler.btnCopyRowClick;
begin
//啟用編輯狀態
RefState(-1);
DataSetRowCopy(FThis.dts1);
end;
2
3
4
5
6
7
- btnImportItemClick:數據集匯入物料。
procedure TMyHandler.btnImportItemClick;
//匯入窗體設定
var
F: TBaseForm;
begin
//打開匯入物料編輯頁面
F := paxfunc.OpenForm('ImportItem');
//建立連線
F.TagObject := FThis;
end;
2
3
4
5
6
7
8
9
10
- miReportDesignClick:視窗數據集設計頁面。
procedure TMyHandler.miReportDesignClick;
//設計列印格式
begin
paxfunc.ShowReport('Smart',FThis,'','',False,False);
end;
2
3
4
5
- miReportPrintClick:視窗數據集列印。
procedure TMyHandler.miReportPrintClick;
//執行列印預覽
begin
paxfunc.ShowReport('Smart',FThis,'','786BFF0A-2E61-48D3-8E19-8AAE86660B21',False,True);
end;
2
3
4
5
- Timer1Timer:定時器觸發事件,重新整理頁面顯示狀態。
//設定打開時的模式
procedure TMyHandler.Timer1Timer;
begin
FThis.Timer1.Enabled := False;
RefState(FThis.Tag);
end;
2
3
4
5
6
- dts0BeforeEdit:主數據集啟用編輯前,設定頁面為編輯狀態。
//啟用主數據集編輯模式前設定窗體為編輯模式
procedure TMyHandler.dts0BeforeEdit;
begin
RefState(-1);
end;
2
3
4
5
- dts1BeforeEdit:明細數據集啟用編輯前,設定頁面為編輯狀態。
//啟用明細數據集編輯模式前設定窗體為編輯模式
procedure TMyHandler.dts1BeforeEdit;
begin
RefState(-1);
end;
2
3
4
5
- lkupdts0FCustIDClick:客戶名稱在選擇時更新對應的數據集資訊。
procedure TMyHandler.lkupdts0FCustIDClick;
//客戶資訊更新時更新相關聯的欄位,比如部門,業務員,銷售型別等資訊
begin
if FThis.ds0.AutoEdit then
begin
FThis.dts0.Edit;
FThis.dts0.FieldByName('FCustCode').AsString := FThis.dtsFCustID.FieldByName('FCustCode').AsString;
FThis.dts0.FieldByName('FCustName').AsString := FThis.dtsFCustID.FieldByName('FCustName').AsString;
FThis.dts0.FieldByName('FDeptID').AsString := FThis.dtsFCustID.FieldByName('FDeptID').AsString;
FThis.dts0.FieldByName('FDeptCode').AsString := FThis.dtsFCustID.FieldByName('FDeptCode').AsString;
FThis.dts0.FieldByName('FDeptName').AsString := FThis.dtsFCustID.FieldByName('FDeptName').AsString;
FThis.dts0.FieldByName('FEmpID').AsString := FThis.dtsFCustID.FieldByName('FEmpID').AsString;
FThis.dts0.FieldByName('FEmpCode').AsString := FThis.dtsFCustID.FieldByName('FEmpCode').AsString;
FThis.dts0.FieldByName('FEmpName').AsString := FThis.dtsFCustID.FieldByName('FEmpName').AsString;
FThis.dts0.FieldByName('FSaleType').AsString := FThis.dtsFCustID.FieldByName('FSaleType').AsString;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- dtpdts0FDateChange:單據日期變動時變更對應的數據集欄位資訊。
procedure TMyHandler.dtpdts0FDateChange;
//將日期資訊更新至數據集中
begin
if FThis.ds0.AutoEdit then
begin
FThis.dts0.FieldByName('FDate').AsDateTime := FThis.dtpdts0FDate.DateTime;
end;
end;
2
3
4
5
6
7
8
- dtpdts0FSignDateChange:單據簽訂日期變動時變更對應的數據集欄位資訊。
procedure TMyHandler.dtpdts0FSignDateChange;
//將日期資訊更新至數據集中
begin
if FThis.ds0.AutoEdit then
begin
FThis.dts0.FieldByName('FSignDate').AsDateTime := FThis.dtpdts0FSignDate.DateTime;
end;
end;
2
3
4
5
6
7
8
- dts1NewRecord:明細數據集新增時進行基礎資料設定。
procedure TMyHandler.dts1NewRecord;
//新增行時進行初始化賦值
begin
FThis.dts1.FieldByName('FID').AsInteger := dm.GetNodeID;
FThis.dts1.FieldByName('FInterID').AsInteger := FThis.dts0.FieldByName('FInterID').AsInteger;
FThis.dts1.FieldByName('FEntryID').AsInteger := FThis.dts1.RecordCount + 1;
FThis.dts1.FieldByName('FClosed').AsInteger := 0;
FThis.dts1.FieldByName('FState').AsInteger := 0;
end;
2
3
4
5
6
7
8
9
- FlyingReceived:當Flying接收到資訊時執行操作。
procedure TMyHandler.FlyingReceived;
//Flying接收資訊並執行
var
F: TBaseForm;
begin
//獲取列印列表
if AType='GetPrintList' then
begin
FThis.ComboBoxPrinter.Items.CommaText := AContent;
if FThis.ComboBoxPrinter.Items.Count <> 0 Then
FThis.ComboBoxPrinter.ItemIndex := 0;
//FThis.ComboBoxPrinter.DroppedDown := True;
FThis.Timer2.Enabled := True;
end
//獲取檔案的地址資訊
else if AType='GetFileUrl' then
begin
paxfunc.DownLoadFile(AContent,'report.pdf');
F := paxfunc.OpenForm('PDFViewer');
F.TagObject := FThis;
TPDFViewer(F.FindComponent('PDFViewer')).LoadFromFile('report.pdf');
end
//返回錯誤資訊
else if AType='Error' then
Showmessage(AContent);
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
- Timer2Timer:定時器觸發事件,執行列印相關的操作。
procedure TMyHandler.Timer2Timer;
//定時器事件,用於載入數據集併發送至Flying執行列印預覽
begin
FThis.Timer2.Enabled := False;
FThis.Flying.PrinterName := FThis.ComboBoxPrinter.Items.Strings[FThis.ComboBoxPrinter.ItemIndex];
FThis.Flying.AddPrintData(FThis.dts0,'A');
FThis.Flying.AddPrintData(FThis.dts1,'B');
FThis.Flying.AddPrintData(FThis.dtsCompany,'C');
FThis.Flying.ReportPreview;
end;
2
3
4
5
6
7
8
9
10
- btnUploadClick:上傳圖片按鈕點選事件。
procedure TMyHandler.btnUploadClick;
//上傳圖片
begin
if FThis.OpenPictureDialog.Execute(0) then
begin
FThis.dts0.Edit;
TBlobField(FThis.dts0.FieldByName('FImage')).LoadFromFile(FThis.OpenPictureDialog.FileName);
FThis.dts0.Post;
end;
end;
2
3
4
5
6
7
8
9
10
- btnClearClick:清除圖片按鈕點選事件。
procedure TMyHandler.btnClearClick;
//清空圖片
begin
FThis.dts0.Edit;
TBlobField(FThis.dts0.FieldByName('FImage')).Clear;
FThis.dts0.Post;
end;
2
3
4
5
6
7
# 4.2.5. 多語言設定
在功能表欄點選語言
-語言設定
,打開多語言設定對話方塊,根據提示進行多語言的設定。
# 4.2.6. 報表設定
Smart中使用兩種方式來實現報表的引入。
- 窗體引入:使用Smart的自定程式
paxfunc.ShowReport
來匯入視窗。如果是要打開設計模式的視窗,在指令碼中引入如下所示的指令碼即可打開列印格式管理界面。
paxfunc.ShowReport('Smart',FThis,'','',False,False);
使用以上方式打開對應的界面。
在界面中會顯示目前頁面對應的可用列印格式的資訊,如需要新增列印格式,點選新建
按鈕新增一行,新增的行中修改報表的名稱,修改後點選儲存
按鈕。然後點選設計
格式進入到報表設計頁面中進行報表設計。
如需要引用設計的列印格式執行列印或列印預覽操作,在設計完成後返回至報表設計的界面,複製報表的報表ID欄位,在指令碼中執行如下的程式碼。以下程式碼以列印預覽為例。
paxfunc.ShowReport('Smart',FThis,'','786BFF0A-2E61-48D3-8E19-8AAE86660B21',False,True);
- Flying引入
單據支援Flying引入,實體中已經介紹過指令碼中的使用方式,在Flying服務端需要引入列印格式進行設計。
打開Flying服務端,點選列印設定
-HTTP列印
,檢查設定是否與客戶端的保持一致,點選應用
儲存設定。
點選列印設定
-報表設計
按鈕,在右側的報表列表中右鍵單擊,選擇新建報表
。
在對話方塊中輸入報表的名稱,此處輸入Sal_Order
,然後點選OK
按鈕。
在列表中選擇剛才建立的報表項,右鍵點選,在選項中選擇數據構造
,打開數據構造界面。首先設定好連線設定,點選連線
按鈕。
待連線按鈕變成灰色后,在SQL中輸入使用的數據集的SQL指令碼。
--dts0
select TOP 1 a.*,b.FCustName as FCustFullName,
b.FAddress,b.FPhone1,
b.FHousebank,b.FHouseBnkAct
from Sal_Order a(NOLOCK)
LEFT JOIN Basic_Cust B ON
A.FCustID = B.FInterID
--dts1
SELECT TOP 1 * FROM Sal_OrderEntry
--dtsCompany
SELECT TOP 1 * FROM Basic_Company
2
3
4
5
6
7
8
9
10
11
12
13
14
輸入完成後,點選執行SQL
,等待下方的編輯框中出現欄位資訊后,點選應用
返回至上一界面,在界面中點選儲存數據
。
在報表設計界面中雙擊Sal_Order
,打開報表設計界面進行設計。
設計完成後,Smart端可直接使用指定的設定執行列印設定操作。
# 4.2.7. 運行效果
# 5. 匯入窗體設定
# 5.1. 匯入布種資料-多筆數據表單
此頁面為匯入窗體,由其他窗體來呼叫打開。
# 5.1.1. 功能簡述
此匯入視窗頁面顯示布種資料的相關資訊,該頁面涉及到主從表的設計相關的資訊以及選擇
按鈕點選后的數據傳遞方式的設計說明。
# 5.1.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Caption | 匯入布種資料 | 主窗體的標題名稱 |
Height | 600 | 主窗體的高度(畫素) |
Name | ImportItem | 主窗體模組的名稱 |
Width | 800 | 主窗體的寬度(畫素) |
各表結構欄位及對應的數據感知控制元件名稱如下,其中的TBitBtn
、TLabeledEdit
型別的控制元件需修改Font.Size
為12
,TPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
# 5.1.3. 控制元件設定
- 控制元件說明
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
Panel1 | TPanel | 頂部面板顯示,用於放置控制元件容器 |
edQuery | TLabeledEdit | 查詢輸入框,用於輸入布種程式碼與名稱TextHint :輸入布種程式碼或名稱EditLabel.Caption :布種程式碼或名稱 |
btnQuery | TBitBtn | 查詢按鈕,點選以根據條件進行查詢。Caption :查詢 |
btnClear | TBitBtn | 清除按鈕,點選以清除查詢內容恢復至初始狀態。Caption :清除 |
btnRefresh | TBitBtn | 重新整理按鈕,點選以重新整理顯示。Caption :重新整理 |
btnShowAll | TBitBtn | 顯示全部按鈕,點選以顯示全部內容。Caption :顯示全部 |
btnExit | TBitBtn | 退出按鈕,點選以退出目前窗體。Caption :退出 |
dts0 | TRFDataSet | 數據集控制元件,展示布種分類 Basic_ItemGroup |
dts1 | TRFDataSet | 數據集控制元件,展示布種資料 Basic_Item |
ds0 | TDataSource | 數據源控制元件,繫結數據集DataSet :dts0 |
ds1 | TDataSource | 數據源控制元件,繫結數據集DataSet :dts1 |
Spliter1 | TSpliter | 分隔控制元件,用於分隔數據表格控制元件 |
DBGrid1 | TDBGrid | 布種分組數據表格DataSource :ds0 |
DBGrid2 | TDBGrid | 布種資訊數據表格DataSource :ds1 |
- DBGrid1數據表格說明
在設定表格列之前,使用滑鼠右鍵點選表格,在選項中選擇Custom Columns
,轉換為自定義表格後進行設定。點選Columns
屬性打開對話方塊,在此處新增欄位。選擇新增的欄位進行屬性的更改。
FieldName 欄位名 | Font.Size 字型大小 | Title.Caption 標題文字 | Title.Font.Size 標題字型大小 | Width 列寬度 |
---|---|---|---|---|
FGroupName | 10 | 分組名稱 | 12 | 90 |
FGroupCode | 10 | 分組程式碼 | 12 | 80 |
- DBGrid2數據表格說明
在設定表格列之前,使用滑鼠右鍵點選表格,在選項中選擇Custom Columns
,轉換為自定義表格後進行設定。點選Columns
屬性打開對話方塊,在此處新增欄位。選擇新增的欄位進行屬性的更改。
FieldName 欄位名 | Font.Size 字型大小 | Title.Caption 標題文字 | Title.Font.Size 標題字型大小 | Width 列寬度 |
---|---|---|---|---|
FItemCode | 10 | 物料程式碼 | 12 | 80 |
FItemName | 10 | 物料名稱 | 12 | 140 |
FItemSpec | 10 | 規格 | 12 | 80 |
FUnitName | 10 | 單位 | 12 | 80 |
FUnitPiece | 10 | 件單位 | 12 | 64 |
FforzenFor | 10 | 凍結 | 12 | 64 |
# 5.1.4. 指令碼設計
type
TMyHandler = class(TForm)
private
FThis:TBaseForm;
Public
constructor Create(AOwner: TComponent); override;
{模組聲明 MODULE-DECLARE}
procedure btnSelectClick(Sender: TObject);
procedure btnQueryClick(Sender: TObject);
procedure btnClearClick(Sender: TObject);
procedure btnRefreshClick(Sender: TObject);
procedure btnShowAllClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
end;
//...
var
FMyHandler:TMyHandler;
begin
FMyHandler := TMyHandler.Create(this);
{事件繫結 MODULE-BIND}
this.btnSelect.OnClick := FMyHandler.btnSelectClick;
this.btnQuery.OnClick := FMyHandler.btnQueryClick;
this.btnClear.OnClick := FMyHandler.btnClearClick;
this.btnRefresh.OnClick := FMyHandler.btnRefreshClick;
this.btnShowAll.OnClick := FMyHandler.btnShowAllClick;
this.btnExit.OnClick := FMyHandler.btnExitClick;
this.DBGrid1.OnCellClick := FMyHandler.DBGrid1CellClick;
end.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
- 程式模組列表
程式模組名稱 | 說明 |
---|---|
Create | 構造器,啟動后運行需初始化設定的內容 |
btnSelectClick | 選擇按鈕點選 |
btnQueryClick | 查詢按鈕點選 |
btnClearClick | 清除按鈕點選 |
btnRefershClick | 重新整理按鈕點選 |
btnShowAll | 顯示全部按鈕點選 |
btnExitClick | 退出按鈕點選 |
DBGrid1CellClick | 點選切換分類顯示 |
- Create:構造器,啟動后運行需初始化設定的內容。
constructor TMyHandler.Create(AOwner: TComponent);
//初始化數據集(物料分類與物料資訊)
begin
FThis :=TBaseForm(AOwner);
FThis.dts0.Connection := dm.DBConnection;
FThis.dts1.Connection := dm.DBConnection;
FThis.dts0.SQL.Text := 'Select FInterID,FGroupCode,FGroupName,FNote,FTreeKeyID,FTreeParenteID,' +
'FAbsoluteIndex From Basic_ItemGroup WHERE FTypeID = 1 Order by FGroupCode';
FThis.dts0.Open;
FThis.dts0.First;
FThis.dts1.SQL.Text := 'SELECT * FROM Basic_Item WHERE FTypeID = 1';
FThis.dts1.Open;
end;
2
3
4
5
6
7
8
9
10
11
12
13
- btnSelectClick:選擇按鈕點選。
//選擇
procedure TMyHandler.btnSelectClick;
//選擇后將選項中的欄位資訊傳遞至主視窗的數據集中
var
i: Integer;
begin
//數據集不能為空
if FThis.dts1.RecordCount = 0 then
exit;
//目標數據集新增記錄並進行數據集資訊傳遞
TRFDataSet(TBaseForm(FThis.TagObject).FindComponent('dts1')).Append;
TRFDataSet(TBaseForm(FThis.TagObject).FindComponent('dts1')).FieldByName('FItemID').AsString := FThis.dts1.FieldByName('FInterID').AsString;
TRFDataSet(TBaseForm(FThis.TagObject).FindComponent('dts1')).FieldByName('FItemCode').AsString := FThis.dts1.FieldByName('FItemCode').AsString;
TRFDataSet(TBaseForm(FThis.TagObject).FindComponent('dts1')).FieldByName('FItemName').AsString := FThis.dts1.FieldByName('FItemName').AsString;
TRFDataSet(TBaseForm(FThis.TagObject).FindComponent('dts1')).FieldByName('FItemSpec').AsString := FThis.dts1.FieldByName('FItemSpec').AsString;
TRFDataSet(TBaseForm(FThis.TagObject).FindComponent('dts1')).FieldByName('FUnitID').AsString := FThis.dts1.FieldByName('FUnitID').AsString;
TRFDataSet(TBaseForm(FThis.TagObject).FindComponent('dts1')).FieldByName('FUnitCode').AsString := FThis.dts1.FieldByName('FUnitCode').AsString;
TRFDataSet(TBaseForm(FThis.TagObject).FindComponent('dts1')).FieldByName('FUnitName').AsString := FThis.dts1.FieldByName('FUnitName').AsString;
TRFDataSet(TBaseForm(FThis.TagObject).FindComponent('dts1')).Post;
//現視窗中將已選擇的記錄刪除
FThis.dts1.Delete;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- btnQueryClick:查詢按鈕點選。
//查詢,將編輯框中輸入的內容作為查詢條件進行查詢
procedure TMyHandler.btnQueryClick;
begin
FThis.dts1.Close;
FThis.dts1.SQL.Text := 'SELECT * FROM Basic_Item WHERE (FItemCode LIKE ''%' +
FThis.edQuery.Text + '%'' or FItemName LIKE ''%' + FThis.edQuery.Text +
'%'') AND FTypeID = 1 Order by FItemCode';
FThis.dts1.Open;
end;
2
3
4
5
6
7
8
9
- btnClearClick:清除按鈕點選。
//清除查詢條件資訊
procedure TMyHandler.btnClearClick;
begin
FThis.edQuery.Text := '';
FThis.dts1.SQL.Text := 'SELECT * FROM Basic_Item WHERE FTypeID = 1';
FThis.dts1.Open;
end;
2
3
4
5
6
7
- btnRefershClick:重新整理按鈕點選。
//重新整理顯示,功能與初次查詢的功能類似
procedure TMyHandler.btnRefreshClick;
begin
FThis.dts0.SQL.Text := 'Select FInterID,FGroupCode,FGroupName,FNote,FTreeKeyID,FTreeParenteID,' +
'FAbsoluteIndex From Basic_ItemGroup WHERE FTypeID = 1 Order by FGroupCode';
FThis.dts0.Open;
FThis.dts0.First;
FThis.dts1.SQL.Text := 'SELECT * FROM Basic_Item WHERE FTypeID = 1';
FThis.dts1.Open;
end;
2
3
4
5
6
7
8
9
10
- btnShowAll:顯示全部按鈕點選。
//顯示全部記錄,取消篩選
procedure TMyHandler.btnShowAllClick;
begin
FThis.dts1.Filtered := False;
end;
2
3
4
5
- btnExitClick:退出按鈕點選。
//退出視窗
procedure TMyHandler.btnExitClick;
begin
FThis.Close;
end;
2
3
4
5
6
- DBGrid1CellClick:切換分類顯示。
procedure TMyHandler.DBGrid1CellClick;
begin
//分類檢視
FThis.dts1.Filtered := False;
FThis.dts1.Filter := 'FGroupID = ' + FThis.dts0.FieldByName('FInterID').AsString;
FThis.dts1.Filtered := True;
end;
2
3
4
5
6
7
# 5.1.5. 多語言設定
在功能表欄點選語言
-語言設定
,打開多語言設定對話方塊,根據提示進行多語言的設定。
# 5.1.6. 運行效果
# 5.2. 文件檢視
該頁面用於顯示文件內容。
# 5.2.1. 功能簡述
此頁面不能單獨運行,需要由其他視窗呼叫並傳遞PDF的相關參數才可以正常運行。
# 5.2.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Caption | 文件檢視 | 主窗體的標題名稱 |
Height | 768 | 主窗體的高度(畫素) |
Name | PDFViewer | 主窗體模組的名稱 |
Width | 1024 | 主窗體的寬度(畫素) |
# 5.2.3. 控制元件設定
- 控制元件說明
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
PDFViewer | TPDFViewer | 設定PDF檢視Align :alClient |
# 5.2.4. 指令碼設計
目前視窗無額外指令碼設計內容。
# 5.2.5. 多語言設定
在功能表欄點選語言
-語言設定
,打開多語言設定對話方塊,根據提示進行多語言的設定。