紡織印染業ERP設計實務
# PinToo 紡織印染業ERP設計實務
該文件將指導實現在PinToo中的單據相關功能。本次我們將在PinToo中實現業務系統的功能。
# 1. 系統組成
以下圖片描述本系統的模組組成,其中公司資料、客戶資料以及布種資料為對應的基礎資料,銷售訂單為引用以上基礎資料產生的單據。除公司資料外,其他的每個模組均包含查詢頁面以及編輯頁面。銷售訂單中還包括列印的相關設定內容。
本系統主要實現的功能為在建立公司資料、客戶資料、布種資料等基礎資料后,實現銷售訂單的單據的新增、編輯、審覈等相關單據功能,並實現單據的列印。
# 2. 主頁
點選PinToo設計器左上角的按鈕打開選項欄,選擇左側的模組設計
。
在打開的界面中點選新增
,在彈出的視窗中輸入模組資訊,如下圖所示,點選儲存
。
儲存完成後,選擇剛才建立的模組,點選上方的設計按鈕進入至設計頁面。
主頁頁面,其中主要包含主頁顯示的相關內容。
# 2.1. 功能簡述
主頁頁面將需要使用到的功能以功能表的形式展現出來,通過與各個對應的模組對接鏈接,點選功能圖示打開對應的功能界面。
# 2.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Height | 800 | 設定視窗控制元件的高度 |
Width | 400 | 設定視窗控制元件的寬度 |
# 2.3. 控制元件設定
各結構控制元件說明如下。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
fxLayout1 | TfxLayout | 佈局控制元件,用於對整個佈局進行居中控制Align :CenterHeight :800Width :400 |
fxRectangle2 | TfxRectangle | 方框控制元件,將所展示的控制元件包含于控制元件中Align :Client |
fxRectangle1 | TfxRectangle | 方框控制元件,作為標題展示使用Align :Top |
fxLabel1 | TfxLabel | 文字標題控制元件Align :ClientStyledSettings :所有屬性要全部清空設定為FalseText :愛招飛演示系統TextSettings.FontColor :#FF515151TextSettings.Font.Size :24TextSettings.Font.Style.fsBold :TrueTextSettings.HorzAlign :True |
fxShadowEffect1 | TfxShadowEffect | 陰影佈局控制元件,為fxRectangle1 提供陰影效果控制Opactiy :0.6 |
btnCompany | TfxSuperButton | 按鈕佈局控制元件ButtonType :TfxSvgButtonButtonType.AlgnType :aTopButtonType.Text :公司資料ButtonType.TextSettings.FontColor :#FF666666Height :140Width :120 |
fxShadowEffect2 | TfxShadowEffect | 陰影佈局控制元件,為btnCompany 提供陰影效果控制Opactiy :0.6 |
btnCust | TfxSuperButton | 按鈕佈局控制元件ButtonType :TfxSvgButtonButtonType.AlgnType :aTopButtonType.Text :客戶資料ButtonType.TextSettings.FontColor :#FF666666Height :140Width :120 |
fxShadowEffect3 | TfxShadowEffect | 陰影佈局控制元件,為btnCust 提供陰影效果控制Opactiy :0.6 |
btnItem | TfxSuperButton | 按鈕佈局控制元件ButtonType :TfxSvgButtonButtonType.AlgnType :aTopButtonType.Text :布種資料ButtonType.TextSettings.FontColor :#FF666666Height :140Width :120 |
fxShadowEffect4 | TfxShadowEffect | 陰影佈局控制元件,為btnItem 提供陰影效果控制Opactiy :0.6 |
btnSalOrder | TfxSuperButton | 按鈕佈局控制元件ButtonType :TfxSvgButtonButtonType.AlgnType :aTopButtonType.Text :銷售訂單ButtonType.TextSettings.FontColor :#FF666666Height :140Width :120 |
fxShadowEffect5 | TfxShadowEffect | 陰影佈局控制元件,為btnSalOrder 提供陰影效果控制Opactiy :0.6 |
fxTabControl1 | TfxTabControl | 頁面佈局控制元件,位於底部位置Align :MostBottomTabPosition :Bottom |
其中fxTabControl1
雙擊可打開頁面編輯器,新增五個專案。分別選擇每個標籤頁專案,修改Text
屬性為對應的專案。
# 2.4. 程式設計
- 初始設定:設定顯示初始化內容。
Begin
//對底部的專案進行多語言翻譯
fxTabControl1.Tabs[0].Text := self.GetMsgLang('TabItem1');
fxTabControl1.Tabs[1].Text := self.GetMsgLang('TabItem2');
fxTabControl1.Tabs[2].Text := self.GetMsgLang('TabItem3');
fxTabControl1.Tabs[3].Text := self.GetMsgLang('TabItem4');
fxTabControl1.Tabs[4].Text := self.GetMsgLang('TabItem5');
End.
2
3
4
5
6
7
8
- btnCompanyOnClick:
btnCompany
的OnClick
事件,打開公司資料主界面。
Procedure btnCompanyOnClick(Sender: TObject);
//打開公司資料主界面
var
Page: TfxRunFrame;
Begin
Page := fxOpenFrameToPage('Company');
End;
2
3
4
5
6
7
- btnCustOnClick:
btnCust
的OnClick
事件,打開客戶資料界面。
Procedure btnCustOnClick(Sender: TObject);
//打開客戶資料界面
var
Page: TfxRunFrame;
Begin
Page := fxOpenFrameToPage('CustList');
End;
2
3
4
5
6
7
- btnItemOnClick:
btnItem
的OnClick
時間,打開布種資料界面。
Procedure btnItemOnClick(Sender: TObject);
//打開布種資料界面
var
Page: TfxRunFrame;
Begin
Page := fxOpenFrameToPage('ItemList');
End;
2
3
4
5
6
7
- btnSalOrderOnClick:
btnSalOrder
的OnClick
事件,打開銷售訂單查詢界面。
Procedure btnSalOrderOnClick(Sender: TObject);
//打開銷售訂單查詢界面
var
Page: TfxRunFrame;
Begin
Page := fxOpenFrameToPage('SalOrderList');
End;
2
3
4
5
6
7
# 2.5. 多語言設定
在程式設計界面,點選界面右下側的按鈕展開界面,點選左側與右側按鈕切換至窗體語言設定界面,在此界面中設定多語言的相關資訊。對於絕大部分顯示的字幕型別,都可以點選對應的控制元件項,然後點選上側的修改按鈕修改顯示的字幕型別。
對於在程式中填寫的多語言專案,請使用Self.GetMsgLang()
來設定。比如上面程式中設定的幾項多語言專案:
//對底部的專案進行多語言翻譯
fxTabControl1.Tabs[0].Text := self.GetMsgLang('TabItem1');
fxTabControl1.Tabs[1].Text := self.GetMsgLang('TabItem2');
fxTabControl1.Tabs[2].Text := self.GetMsgLang('TabItem3');
fxTabControl1.Tabs[3].Text := self.GetMsgLang('TabItem4');
fxTabControl1.Tabs[4].Text := self.GetMsgLang('TabItem5');
2
3
4
5
6
填寫完成後,在窗體語言界面,點選下側的MsgLang
,在此頁面中新增標題資訊。
# 2.6. 運行結果
# 3. 公司資料-單筆數據表單
點選PinToo設計器左上角的按鈕打開選項欄,選擇左側的界面設定
。
在打開的界面中點選新增
,在彈出的視窗中輸入模組資訊,如下圖所示,點選儲存
。
儲存完成後,選擇剛才建立的模組,點選上方的設計按鈕進入至設計頁面。
公司資料界面用於對公司資料進行編輯。
# 3.1. 功能簡述
公司資料用於對公司資料的內容進行編輯,此頁面中包含了單筆數據的表單設計模式,資料庫圖片的展示與引用,圖片的對話方塊引入模式的設計說明。
# 3.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Height | 800 | 設定視窗控制元件的高度 |
Width | 400 | 設定視窗控制元件的寬度 |
# 3.3. 控制元件設定
- 控制元件說明
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
fxLayout1 | TfxLayout | 佈局控制元件,用於對整個佈局進行居中控制Align :CenterHeight :800Width :400 |
fxRectangle2 | TfxRectangle | 方框控制元件,將所展示的控制元件包含于控制元件中Align :Client |
fxRectangle1 | TfxRectangle | 方框控制元件,將所展示的控制元件包含于控制元件中Align :BottomHeight :40 |
fxShadowEffect1 | TfxShadowEffect | 陰影佈局控制元件,為fxRectangle1 提供陰影效果控制Opactiy :0.6 |
btnEdit | TfxSuperButton | 按鈕佈局控制元件ButtonType :TfxSvgButtonButtonType.Text :修改ButtonType.TextSettings.FontColor :#FF006633Height :35Width :75 |
btnSave | TfxSuperButton | 按鈕佈局控制元件ButtonType :TfxSvgButtonButtonType.Text :儲存ButtonType.TextSettings.FontColor :#FF006633Height :35Width :75 |
fxListBox1 | TfxListBox | 列表佈局控制元件,雙擊新增9個ListBoxItem以及2個ListBoxGroupHeader |
ListBoxGroupHeader1 | TListBoxGroupHeader | 組頭StyledSettings :清除所有的屬性,均設定為False Text :基本資訊TextSettings.FontColor :#FFCC9933TextSettings.Font.Size :14TextSettings.Font.Style.fsBold :True |
ListBoxItem1 | TListBoxItem | 列表項,放置公司編號資訊Height :40 |
fxLayout2 | TfxLayout | 佈局控制元件,用於對整個ListBoxItem 佈局進行控制Align :Client |
fxLabel1 | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :公司編號Height :40TextSettings.FontColor :#FF666666TextSettings.Font.Size :14TextSettings.HorzAlign :CenterWidth :80 |
edFCompanyID | TfxEdit | 編輯框,需清空原先的Text 屬性中的內容TextSettings.FontColor :#FF666666TextSettings.Font.Style.fsBold :True |
ListBoxItem2 | TListBoxItem | 列表項,放置公司代號資訊Height :40 |
fxLayout3 | TfxLayout | 佈局控制元件,用於對整個ListBoxItem 佈局進行控制Align :Client |
fxLabel2 | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :公司代號Height :40TextSettings.FontColor :#FF666666TextSettings.Font.Size :14TextSettings.HorzAlign :CenterWidth :80 |
edFCompanyCode | TfxEdit | 編輯框,需清空原先的Text 屬性中的內容TextSettings.FontColor :#FF666666TextSettings.Font.Style.fsBold :True |
ListBoxItem3 | TListBoxItem | 列表項,放置簡體名稱資訊Height :40 |
fxLayout4 | TfxLayout | 佈局控制元件,用於對整個ListBoxItem 佈局進行控制Align :Client |
fxLabel3 | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :簡體名稱Height :40TextSettings.FontColor :#FF666666TextSettings.Font.Size :14TextSettings.HorzAlign :CenterWidth :80 |
edFCompanyName | TfxEdit | 編輯框,需清空原先的Text 屬性中的內容TextSettings.FontColor :#FF666666TextSettings.Font.Style.fsBold :True |
ListBoxItem5 | TListBoxItem | 列表項,放置負責人資訊Height :40 |
fxLabel4 | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :負責人Height :40TextSettings.FontColor :#FF666666TextSettings.Font.Size :14TextSettings.HorzAlign :CenterWidth :80 |
edFContact | TfxEdit | 編輯框,需清空原先的Text 屬性中的內容TextSettings.FontColor :#FF666666TextSettings.Font.Style.fsBold :True |
ListBoxItem6 | TListBoxItem | 列表項,放置電話資訊Height :40 |
fxLabel5 | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :電話1Height :40TextSettings.FontColor :#FF666666TextSettings.Font.Size :14TextSettings.HorzAlign :CenterWidth :80 |
edFPhone1 | TfxEdit | 編輯框,需清空原先的Text 屬性中的內容TextSettings.FontColor :#FF666666TextSettings.Font.Style.fsBold :True |
ListBoxItem7 | TListBoxItem | 列表項,放置公司地址資訊Height :40 |
fxLabel6 | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :地址Height :40TextSettings.FontColor :#FF666666TextSettings.Font.Size :14TextSettings.HorzAlign :CenterWidth :80 |
edFCompanyAddr | TfxEdit | 編輯框,需清空原先的Text 屬性中的內容TextSettings.FontColor :#FF666666TextSettings.Font.Style.fsBold :True |
ListBoxItem8 | TListBoxItem | 列表項,放置開戶銀行資訊Height :40 |
fxLabel7 | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :開戶銀行Height :40TextSettings.FontColor :#FF666666TextSettings.Font.Size :14TextSettings.HorzAlign :CenterWidth :80 |
edFBank | TfxEdit | 編輯框,需清空原先的Text 屬性中的內容TextSettings.FontColor :#FF666666TextSettings.Font.Style.fsBold :True |
ListBoxItem9 | TListBoxItem | 列表項,放置開戶帳號資訊Height :40 |
fxLabel8 | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :開戶帳號Height :40TextSettings.FontColor :#FF666666TextSettings.Font.Size :14TextSettings.HorzAlign :CenterWidth :80 |
edFContact | TfxEdit | 編輯框,需清空原先的Text 屬性中的內容TextSettings.FontColor :#FF666666TextSettings.Font.Style.fsBold :True |
ListBoxGroupHeader2 | TListBoxGroupHeader | 組頭StyledSettings :清除所有的屬性,均設定為False Text :公司圖示TextSettings.FontColor :#FFCC9933TextSettings.Font.Size :14TextSettings.Font.Style.fsBold :True |
ListBoxItem4 | TListBoxItem | 列表項,放置公司圖示資訊Height :40 |
imFCompanyLogo | TfxImage | 圖片顯示控制元件Height :85MarginWarpMode :StretchWidth :85 |
btnUpload | TfxSuperButton | 按鈕佈局控制元件ButtonType :TfxSvgButtonButtonType.Text :相簿ButtonType.TextSettings.FontColor :#FF006633Height :35Width :75 |
btnClearPicture | TfxSuperButton | 按鈕佈局控制元件ButtonType :TfxSvgButtonButtonType.Text :清空ButtonType.TextSettings.FontColor :#FF006633Height :35Width :75 |
fxActionList1 | TfxActionList | 雙擊控制元件,打開動作列表,新增TakePhotoFromLibraryAction1 |
dts0 | TfxRFDataSet | 數據集控制元件 |
# 3.4. 程式設計
此功能程式需要引用公共單元FMXMedia
、FMXMediaLibrary
。在程式設計頁面點選右下角的按鈕展開,點選左側或者右側按鈕切換至Uses Unit
,在其中查詢FMXMedia
、FMXMediaLibrary
並勾選引用。
- 初始設定:設定顯示初始化內容。
Begin
dts0.Connection := fxdm.DBConnection;
dts0.SQL.Text := 'SELECT * FROM Basic_Company';
dts0.OpenData;
OpenToControl;
RefState(False);
End.
2
3
4
5
6
7
- OpenToControl:數據資訊顯示在對應的控制元件中。
procedure OpenToControl;
//數據集資訊顯示在對應的控制元件中
var
PicStream: TMemoryStream;
begin
//記憶體流控制元件建立
PicStream := TMemoryStream.Create;
try
//將數據集中讀取到的內容賦值給各控制元件
edFCompanyID.Text := dts0.FieldByName('FCompanyID').AsString;
edFCompanyCode.Text := dts0.FieldByName('FCompanyCode').AsString;
edFCompanyName.Text := dts0.FieldByName('FCompanyName').AsString;
//將數據集中的流讀取至記憶體中
TBlobField(dts0.FieldByName('FCompanyLogo')).SaveToStream(PicStream);
edFContact.Text := dts0.FieldByName('FContact').AsString;
edFPhone1.Text := dts0.FieldByName('FPhone1').AsString;
edFCompanyAddr.Text := dts0.FieldByName('FCompanyAddr').AsString;
edFBank.Text := dts0.FieldByName('FBank').AsString;
edFAccountNo.Text := dts0.FieldByName('FAccountNo').AsString;
//從流中載入圖片
imFCompanyLogo.Bitmap.LoadFromStream(PicStream);
Finally
//Except {ErrorMsg / RaiseMsg(Const Error:String)}
PicStream.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
- ControlToDB:將控制元件中顯示的內容儲存至數據集中。
//將控制元件中顯示的內容儲存至數據集中
procedure ControlToDB;
var
PicStream: TMemoryStream;
begin
//建立記憶體流
PicStream := TMemoryStream.Create;
try
//將控制元件中獲取的值回傳給數據集並儲存
dts0.Edit;
dts0.FieldByName('FCompanyID').AsString := edFCompanyID.Text;
dts0.FieldByName('FCompanyCode').AsString := edFCompanyCode.Text;
dts0.FieldByName('FCompanyName').AsString := edFCompanyName.Text;
imFCompanyLogo.Bitmap.SaveToStream(PicStream);
TBlobField(dts0.FieldByName('FCompanyLogo')).LoadFromStream(PicStream);
dts0.FieldByName('FContact').AsString := edFContact.Text;
dts0.FieldByName('FPhone1').AsString := edFPhone1.Text;
dts0.FieldByName('FCompanyAddr').AsString := edFCompanyAddr.Text;
dts0.FieldByName('FBank').AsString := edFBank.Text;
dts0.FieldByName('FAccountNo').AsString := edFAccountNo.Text;
dts0.Post;
Finally
//Except {ErrorMsg / RaiseMsg(Const Error:String)}
PicStream.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
- RefState:重新整理單據的顯示狀態。
procedure RefState(ABool: Boolean);
//重新整理單據的顯示狀態
begin
//設定為True時,處於瀏覽模式,大部分的按鈕將不啟用
if ABool Then
begin
btnEdit.HitTest := False;
btnSave.HitTest := True;
edFCompanyID.HitTest := True;
edFCompanyCode.HitTest := True;
edFCompanyName.HitTest := True;
btnUpload.HitTest := True;
btnClearPicture.HitTest := True;
End
else
//設定為False時,處於編輯模式,大部分的按鈕將啟用
begin
btnEdit.HitTest := True;
btnSave.HitTest := False;
edFCompanyID.HitTest := False;
edFCompanyCode.HitTest := False;
edFCompanyName.HitTest := False;
btnUpload.HitTest := False;
btnClearPicture.HitTest := False;
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
- btnUploadOnClick:
btnUpload
的OnClick
事件,執行相簿選擇。
//執行相簿選擇
Procedure btnUploadOnClick(Sender: TObject);
Begin
TakePhotoFromLibraryAction1.ExecuteTarget(nil);
End;
2
3
4
5
- btnClearPictureOnClick:
btnClearPicture
的OnClick
事件,清空圖片顯示,恢復成空白狀態。
//清空圖片顯示,恢復成空白狀態
Procedure btnClearPictureOnClick(Sender: TObject);
Begin
imFCompanyLogo.Bitmap.Assign(nil);
End;
2
3
4
5
- btnEditOnClick:
btnEdit
的OnClick
事件,點選編輯按鈕,以啟用界面的編輯狀態。
//編輯按鈕,點選以啟用界面的編輯狀態
Procedure btnEditOnClick(Sender: TObject);
Begin
RefState(True);
End;
2
3
4
5
- btnSaveOnClick:
btnSave
的OnClick
事件,將界面中收集的控制元件傳遞的資訊賦值給數據集,並儲存。
//儲存按鈕點選,將界面中收集的控制元件傳遞的資訊賦值給數據集,並儲存。
Procedure btnSaveOnClick(Sender: TObject);
Begin
ControlToDB;
dts0.ApplyUpdates(-1);
ToastMessage.ShowToastMessage(self.GetMsgLang('SaveSuccess'),2.0,100);
RefState(False);
End;
2
3
4
5
6
7
8
- TakePhotoFromLibraryAction1OnDidFinishTaking:
TakePhotoFromLibraryAction1
的OnDidFinishTaking
事件,點選從相簿中獲取圖片。
//打開相簿界面,從相簿中獲取圖片
Procedure TakePhotoFromLibraryAction1OnDidFinishTaking(Image: TBitmap);
Begin
imFCompanyLogo.Bitmap.Assign(Image);
End;
2
3
4
5
# 3.5. 多語言設定
在程式設計界面,點選界面右下側的按鈕展開界面,點選左側與右側按鈕切換至窗體語言設定界面,在此界面中設定多語言的相關資訊。對於絕大部分顯示的字幕型別,都可以點選對應的控制元件項,然後點選上側的修改按鈕修改顯示的字幕型別。
對於在程式中填寫的多語言專案,請使用Self.GetMsgLang()
來設定。比如上面程式中設定的幾項多語言專案:
ToastMessage.ShowToastMessage(self.GetMsgLang('SaveSuccess'),2.0,100);
填寫完成後,在窗體語言界面,點選下側的MsgLang
,在此頁面中新增標題資訊。
# 3.6. 運行結果
# 4. 客戶資料查詢-多筆數據表單
點選PinToo設計器左上角的按鈕打開選項欄,選擇左側的界面設定
。
在打開的界面中點選新增
,在彈出的視窗中輸入模組資訊,如下圖所示,點選儲存
。
儲存完成後,選擇剛才建立的模組,點選上方的設計按鈕進入至設計頁面。
# 4.1. 功能簡述
客戶資料的頁面按照客戶分類進行客戶資訊的分類展示,此頁面包含分組顯示錶單的模式設計,表格查詢等相關的模組設計內容。
# 4.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Height | 800 | 設定視窗控制元件的高度 |
Width | 400 | 設定視窗控制元件的寬度 |
# 4.3. 控制元件設定
各結構控制元件說明如下。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
fxLayout1 | TfxLayout | 佈局控制元件,用於對整個佈局進行居中控制Align :CenterHeight :800Width :400 |
fxRectangle2 | TfxRectangle | 方框控制元件,將所展示的控制元件包含于控制元件中Align :Client |
fxRectangle1 | TfxRectangle | 方框控制元件,將所展示的控制元件包含于控制元件中Align :TopHeight :60 |
fxLabel5 | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :客戶程式碼或名稱TextSettings.FontColor :#FF666666TextSettings.Font.Size :16TextSettings.Font.Style.fsBold :True |
edQuery | TfxEdit | 編輯框,需清空原先的Text 屬性中的內容TextSettings.FontColor :#FF666666TextSettings.Font.Size :16TextSettings.Font.Style.fsBold :True |
btnQuery | TfxSuperButton | 按鈕佈局控制元件ButtonType :TfxSvgButtonButtonType.Text :查詢ButtonType.TextSettings.FontColor :#FF006633Height :35Width :75 |
btnNew | TfxSuperButton | 按鈕佈局控制元件ButtonType :TfxSvgButtonButtonType.Text :新建ButtonType.TextSettings.FontColor :#FF006633Height :35Width :75 |
fxShadowEffect1 | TfxShadowEffect | 陰影佈局控制元件,為fxRectangle1 提供陰影效果控制Opactiy :0.6 |
CustList | TfxSuperListBox | 客戶資料列表展示頁面ItemStyle :CustListLayout |
CustListLayout | TfxLayout | 模組佈局控制元件Align :TopHeight :75 |
fxLayout2 | TfxLayout | 左側佈局Align :LeftWidth :335 |
fxLayout4 | TfxLayout | 頂部佈局,放置客戶代號資訊Align :Top |
FCustCode | TfxLabel | 位於fxLayout4 中,文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :FCustCodeTextSettings.FontColor :#FFCC9933TextSettings.Font.Size :16TextSettings.Font.Style.fsBold :True |
fxLine2 | TfxLine | 位於fxLayout4 中,LineLocation :BoundaryLineType :Bottom |
fxLayout6 | TfxLayout | 頂部佈局,放置業務員資訊Align :Top |
fxLabel3 | TfxLabel | 位於fxLayout6 中,文字標題控制元件Align :LeftStyledSettings :所有屬性要全部清空設定為FalseText :業務員TextSettings.FontColor :#FF666666TextSettings.Font.Size :16TextSettings.Font.Style.fsBold :TrueWidth :85 |
FEmpName | TfxLabel | 文字標題控制元件Align :ClientStyledSettings :所有屬性要全部清空設定為FalseText :FEmpNameTextSettings.FontColor :#FF666666TextSettings.Font.Size :16TextSettings.Font.Style.fsBold :True |
fxLayout7 | TfxLayout | 頂部佈局,放置業務員資訊Align :Top |
fxLabel3 | TfxLabel | 位於fxLayout7 中,文字標題控制元件Align :LeftStyledSettings :所有屬性要全部清空設定為FalseText :業務員TextSettings.FontColor :#FF666666TextSettings.Font.Size :16TextSettings.Font.Style.fsBold :TrueWidth :85 |
FEmpName | TfxLabel | 位於fxLayout7 中,文字標題控制元件Align :ClientStyledSettings :所有屬性要全部清空設定為FalseText :FEmpNameTextSettings.FontColor :#FF666666TextSettings.Font.Size :16TextSettings.Font.Style.fsBold :True |
fxLine1 | TfxLine | 位於fxLayout2 中,LineLocation :BoundaryLineType :Bottom |
fxLayout3 | TfxLayout | 位於fxLayout2 中,右側按鈕佈局Align :Client |
btnEdit | TfxSuperButton | 按鈕佈局控制元件Align :CenterButtonType :TfxSvgButtonButtonType.SvgData :查詢相關SVG圖形Height :35Width :75 |
# 4.4. 程式設計
此功能程式需要引用公共單元ufxSuperListBox
。在程式設計頁面點選右下角的按鈕展開,點選左側或者右側按鈕切換至Uses Unit
,在其中查詢ufxSuperListBox
並勾選引用。
- fxRunFrameAfterScriptRun:
fxRunFrame
的AfterScriptRun
事件,啟動頁面時進行查詢。
Procedure fxRunFrameAfterScriptRun(Sender: TObject);
//啟動頁面時執行查詢
Begin
CustListLayOut.Visible := False;
CustList.Initial;
btnQueryOnClick(sender);
End;
2
3
4
5
6
7
- OpenCustList:打開列表作為查詢內容呈現,從數據集中依次獲取數據,並動態建立于列表中。
procedure OpenCustList(ASQL:String);
//打開列表作為查詢內容呈現,從數據集中依次獲取數據,並動態建立于列表中
Var
iCds:TRFDataSet;
iLbi:TfxSuperListBoxItem;
iStream:TMemoryStream;
SqlText:String;
i:integer;
begin
CustList.Clear;
iCds := TRFDataSet.Create(nil);
CustList.BeginUpdate;
try
//打開數據集
SqlText := ASQL;
fxdm.DataExecSql(SqlText,iCds);
iCds.First;
//將獲取到的資訊動態建立于列表中
While Not iCds.Eof Do
Begin
iLbi:=CustList.AddItem;
iLbi.TagString := iCds.FieldByName('FInterID').AsString;
TfxLabel(iLbi.GetStyleFmxObject(FCustCode.StyleName)).Text:=
' (' + iCds.FieldByName('FCustCode').AsString + ')' + iCds.FieldByName('FCustName').AsString;
//TfxLabel(iLbi.GetStyleFmxObject(FCustName.StyleName)).Text:=iCds.FieldByName('FCustName').AsString;
TfxLabel(iLbi.GetStyleFmxObject(FEmpName.StyleName)).Text:=iCds.FieldByName('FEmpName').AsString;
TfxLabel(iLbi.GetStyleFmxObject(FSaleType.StyleName)).Text:=iCds.FieldByName('FSaleType').AsString;
//TfxSuperButton(iLbi.GetStyleFmxObject(btnEdit.StyleName)).TagSting:= iCds.FieldByName('FInterID').AsString;
//TfxLabel(iLbi.GetStyleFmxObject(ProcessText.StyleName)).Text:=IntToStr(i);
iCds.Next;
End;
Finally
//Except {ErrorMsg / RaiseMsg(Const Error:String)}
iCds.Free;
CustList.EndUpdate;
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
- btnEditOnClick:
btnEdit
的OnClick
事件,點選以打開編輯頁面。
Procedure btnEditOnClick(Sender: TObject);
//點選打開編輯頁面
var
Page: TfxRunFrame;
iLib: TfxSuperListBoxItem;
vInterID: String;
Begin
//編輯界面顯示,將數據集的參數進行傳遞,打開對應的數據
iLib:= TfxSuperListBoxItem(TfmxObject(sender).TagObject);
vInterID := StrToInt(iLib.TagString);
Page := fxOpenFrameToPage('CustEdit');
TRFDataSet(Page.FindComponent('dts0')).AddWhere('FInterID = ' + IntToStr(vInterID));
TRFDataSet(Page.FindComponent('dts0')).OpenData;
TfxTimer(Page.FindComponent('fxTimer')).Enabled := True;
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- btnNewOnClick:
btnNew
的OnClick
事件,點選新建界面,打開編輯窗體並新增行記錄。
Procedure btnNewOnClick(Sender: TObject);
//新建界面,打開編輯窗體並新增行記錄。
var
Page: TfxRunFrame;
iLib: TfxSuperListBoxItem;
vInterID: String;
Begin
//實體化,獲取詳細資訊
iLib:= TfxSuperListBoxItem(TfmxObject(sender).TagObject);
//vInterID := iLib.TagString;
Page := fxOpenFrameToPage('CustEdit');
vInterID := fxdm.GetNodeID;
Page.TagValue := IntToStr(vInterID);
TRFDataSet(Page.FindComponent('dts0')).AddWhere('FInterID = ' + IntToStr(vInterID));
TRFDataSet(Page.FindComponent('dts0')).OpenData;
//TfxTimer(Page.FindComponent('fxTimer')).Enabled := True;
TRFDataSet(Page.FindComponent('dts0')).Append;
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- btnQueryOnClick:
btnQuery
的OnClick
事件,點選查詢,根據界面進行分析。
Procedure btnQueryOnClick(Sender: TObject);
//查詢,根據界面進行分析查詢
var
vSQL: String;
Begin
if edQuery.Text = '' Then
vSQL := 'SELECT * FROM Basic_Cust'
else
vSQL := 'SELECT * FROM Basic_Cust WHERE FCustCode LIKE ''%' + edQuery.Text +
'%'' or FCustName LIKE ''%' + edQuery.Text + '%''';
OpenCustList(vSQL);
End;
2
3
4
5
6
7
8
9
10
11
12
# 4.5. 多語言設定
在程式設計界面,點選界面右下側的按鈕展開界面,點選左側與右側按鈕切換至窗體語言設定界面,在此界面中設定多語言的相關資訊。對於絕大部分顯示的字幕型別,都可以點選對應的控制元件項,然後點選上側的修改按鈕修改顯示的字幕型別。
# 4.6. 運行結果
# 5. 銷售訂單編輯-多筆數據主從表單
點選PinToo設計器左上角的按鈕打開選項欄,選擇左側的界面設定
。
在打開的界面中點選新增
,在彈出的視窗中輸入模組資訊,如下圖所示,點選儲存
。
儲存完成後,選擇剛才建立的模組,點選上方的設計按鈕進入至設計頁面。
# 5.1. 功能簡述
此頁面用於編輯銷售訂單的資訊,執行審覈、列印等操作,功能涉及到視窗數據集的數據匯入、查詢表數據的引入、審覈、消審功能的預存程序的引入、視窗列印與Flying列印的引入。
# 5.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Height | 800 | 設定視窗控制元件的高度 |
Width | 400 | 設定視窗控制元件的寬度 |
# 5.3. 控制元件設定
各結構控制元件說明如下。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
fxRectangle2 | TfxRectangle | 方框控制元件,將所展示的控制元件包含于控制元件中Align :Center |
fxListBox1 | TfxListBox | 列表佈局控制元件,雙擊新增7個ListBoxItem以及2個ListBoxGroupHeader |
ListBoxGroupHeader1 | TListBoxGroupHeader | 組頭StyledSettings :清除所有的屬性,均設定為False Text :基本資訊TextSettings.FontColor :#FFCC9933TextSettings.Font.Size :14TextSettings.Font.Style.fsBold :True |
ListBoxItem5 | TListBoxItem | 列表項,放置單據編號資訊Height :40 |
fxLabel4 | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :單據編號Height :40TextSettings.FontColor :#FF666666TextSettings.Font.Size :14Width :65 |
lbFBillNo | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseHeight :40TextSettings.FontColor :#FF666666TextSettings.Font.Size :14TextSettings.HorzAlign :TrailingWidth :295 |
fxLine3 | TfxLine | 位於ListBoxItem5 中,LineLocation :BoundaryLineType :Bottom |
ListBoxItem6 | TListBoxItem | 列表項,放置狀態資訊Height :40 |
fxLabel5 | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :狀態Height :40TextSettings.FontColor :#FF666666TextSettings.Font.Size :14Width :65 |
lbFBillNo | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseHeight :40TextSettings.FontColor :#FFCC9933TextSettings.Font.Size :18TextSettings.Font.Style.fsBold :TrueTextSettings.HorzAlign :TrailingWidth :295 |
fxLine4 | TfxLine | 位於ListBoxItem6 中,LineLocation :BoundaryLineType :Bottom |
ListBoxItem1 | TListBoxItem | 列表項,放置客戶名稱資訊Height :40 |
fxLabel1 | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :客戶名稱Height :40TextSettings.FontColor :#FF666666TextSettings.Font.Size :14Width :65 |
lbFCustName | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseHeight :40TextSettings.FontColor :#FFCC9933TextSettings.Font.Size :18TextSettings.Font.Style.fsBold :TrueTextSettings.HorzAlign :TrailingWidth :295 |
fxLine5 | TfxLine | 位於ListBoxItem1 中,LineLocation :BoundaryLineType :Bottom |
ListBoxItem3 | TListBoxItem | 列表項,放置單據日期資訊Height :40 |
fxLabel3 | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :單據日期Height :40TextSettings.FontColor :#FF666666TextSettings.Font.Size :14Width :65 |
dtpDate | TfxDateEdit | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseHeight :40TextSettings.FontColor :#FFCC9933TextSettings.Font.Size :18TextSettings.Font.Style.fsBold :TrueTextSettings.HorzAlign :TrailingWidth :295 |
fxLine6 | TfxLine | 位於ListBoxItem3 中,LineLocation :BoundaryLineType :Bottom |
ListBoxGroupHeader2 | TListBoxGroupHeader | 組頭StyledSettings :清除所有的屬性,均設定為False Text :訂單明細TextSettings.FontColor :#FFCC9933TextSettings.Font.Size :14TextSettings.Font.Style.fsBold :True |
ListBoxItem4 | TListBoxItem | 列表項,放置按鈕匯入布種Height :40 |
btnImport | TfxSuperButton | 按鈕佈局控制元件ButtonType :TfxSvgButtonButtonType.Text :匯入布種ButtonType.TextSettings.FontColor :#FF006633Height :40Width :80 |
fxLine2 | TfxLine | 位於ListBoxItem4 中,LineLocation :BoundaryLineType :Bottom |
ListBoxItem7 | TListBoxItem | 列表項,放置按鈕匯入布種Height :495 |
ItemList | TfxSuperListBox | ItemStyle :ItemListLayout |
ItemListLayout | TfxLayout | 模組佈局控制元件Align :TopHeight :75 |
fxLayout5 | TfxLayout | 位於ItemListLayout 中,模組佈局控制元件Height :75Width :305 |
fxLayout1 | TfxLayout | 位於fxLayout5 中,模組佈局控制元件Align :TopHeight :25 |
fxLabel7 | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :布種名稱Height :25TextSettings.FontColor :#FF666666TextSettings.Font.Size :14Width :65 |
FItemName | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseHeight :25TextSettings.FontColor :#FF666666TextSettings.Font.Size :14Width :226 |
FAuxQty | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseHeight :25TextSettings.FontColor :#FF666666TextSettings.Font.Size :14Width :71 |
fxLayout7 | TfxLayout | 位於fxLayout5 中,模組佈局控制元件Align :TopHeight :25 |
fxLabel7 | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :布種資訊Height :25TextSettings.FontColor :#FF666666TextSettings.Font.Size :14Width :65 |
FWidth | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseHeight :25TextSettings.FontColor :#FF666666TextSettings.Font.Size :14Width :226 |
FAmount | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseHeight :25TextSettings.FontColor :#FF666666TextSettings.Font.Size :14Width :71 |
fxLayout8 | TfxLayout | 位於fxLayout5 中,模組佈局控制元件Align :TopHeight :25 |
fxLabel9 | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseText :顏色名稱Height :25TextSettings.FontColor :#FF666666TextSettings.Font.Size :14Width :65 |
FColorName | TfxLabel | 文字標題控制元件StyledSettings :所有屬性要全部清空設定為FalseHeight :25TextSettings.FontColor :#FF666666TextSettings.Font.Size :14Width :226 |
btnDelete | TfxSuperButton | 按鈕佈局控制元件ButtonType :TfxSvgButtonButtonType.Text :刪除ButtonType.TextSettings.FontColor :#FF006633Height :25Width :71 |
ListBoxItem2 | TListBoxItem | 列表項,放置按鈕功能Height :495 |
btnPrint | TfxSuperButton | 按鈕佈局控制元件ButtonType :TfxSvgButtonButtonType.Text :移動列印ButtonType.TextSettings.FontColor :#FF006633Height :40Width :80 |
btnMore | TfxSuperButton | 按鈕佈局控制元件ButtonType :TfxSvgButtonButtonType.Text :更多功能ButtonType.TextSettings.FontColor :#FF006633Height :40Width :80 |
btnSave | TfxSuperButton | 按鈕佈局控制元件ButtonType :TfxSvgButtonButtonType.Text :儲存草稿ButtonType.TextSettings.FontColor :#FF006633Height :40Width :80 |
btnSaveCheck | TfxSuperButton | 按鈕佈局控制元件ButtonType :TfxSvgButtonButtonType.Text :儲存審覈ButtonType.TextSettings.FontColor :#FF006633Height :40Width :80 |
cbMore | TfxComboBox | 功能覈取方塊Visible :False |
cbPrinter | TfxComboBox | 列印列表覈取方塊Visible :False |
dts0 | TfxRFDataSet | 主數據集 |
dts1 | TfxRFDataSet | 明細數據集 |
dtsCompany | TfxRFDataSet | 公司資料 |
fxFlying1 | TfxFlying | Flying列印設定HttpHost :nas.isoface.cnHttpPort :8808ReportName :Sal_Order.fr3 |
# 5.4. 程式設計
此功能程式需要引用公共單元Flying
、ufxSuperListBox
。在程式設計頁面點選右下角的按鈕展開,點選左側或者右側按鈕切換至Uses Unit
,在其中查詢Flying
、ufxSuperListBox
並勾選引用。
- 初始設定:設定顯示初始化內容。
Begin
//初始化設定
cbMore.Items.CommaText := Self.GetMsgLang('審覈,消審,作廢,還原,刪除');
End.
2
3
4
- RefState:重新整理顯示狀態,根據單據狀態確定按鈕的顯示狀態。
procedure RefState(AStatus:Integer);
//重新整理顯示狀態,根據單據狀態確定
begin
//已作廢
if AStatus = 0 Then
begin
lbFCustName.HitTest := False;
dtpDate.HitTest := False;
btnImport.HitTest := False;
btnPrint.HitTest := False;
btnDelete.HitTest := False;
btnSave.HitTest := False;
btnSaveCheck.HitTest := False;
End;
//草稿
if AStatus = 1 Then
begin
lbFCustName.HitTest := True;
dtpDate.HitTest := True;
btnImport.HitTest := True;
btnPrint.HitTest := False;
btnDelete.HitTest := True;
btnSave.HitTest := True;
btnSaveCheck.HitTest := True;
End;
//已審覈
if AStatus = 2 Then
begin
lbFCustName.HitTest := False;
dtpDate.HitTest := False;
btnImport.HitTest := False;
btnPrint.HitTest := True;
btnDelete.HitTest := False;
btnSave.HitTest := False;
btnSaveCheck.HitTest := False;
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
- OpenSalOrder:打開銷售訂單主表,顯示對應的數據。
procedure OpenSalOrder;
//打開銷售訂單主表,顯示對應的數據
begin
//主表
lbFBillNo.Text := dts0.FieldByName('FBillNo').AsString;
if dts0.FieldByName('FStatus').AsInteger = 0 Then
lbStatus.Text := Self.GetMsgLang('已作廢');
if dts0.FieldByName('FStatus').AsInteger = 1 Then
lbStatus.Text := Self.GetMsgLang('草 稿');
if dts0.FieldByName('FStatus').AsInteger = 2 Then
lbStatus.Text := Self.GetMsgLang('已審覈');
lbFCustName.Text := dts0.FieldByName('FCustName').AsString;
dtpDate.DateTime := dts0.FieldByName('FDate').AsDateTime;
RefState(dts0.FieldByName('FStatus').AsInteger);
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- OpenSalOrderEntry:打開銷售訂單明細,顯示對應的數據。
procedure OpenSalOrderEntry;
//打開銷售訂單明細,顯示對應的數據
var
iLbi: TfxSuperListBoxItem;
begin
ItemList.Clear;
dts1.First;
ItemList.BeginUpdate;
//依次更新各行的明細數據資訊
while not dts1.Eof Do
begin
iLbi := ItemList.AddItem;
iLbi.TagString := dts1.FieldByName('FID').AsString;
TfxLabel(iLbi.GetStyleFmxObject('FItemName')).Text :=
dts1.FieldByName('FItemSpec').AsString + dts1.FieldByName('FItemName').AsString;
TfxLabel(iLbi.GetStyleFmxObject('FWidth')).Text :=
Self.GetMsgLang('門幅 ') + dts1.FieldByName('FWidth').AsString + Self.GetMsgLang('克重 ') +
dts1.FieldByName('FWeightOfLength').AsString;
TfxLabel(iLbi.GetStyleFmxObject('FColorName')).Text :=
dts1.FieldByName('FColorNo').AsString + dts1.FieldByName('FColorName').AsString;
TfxLabel(iLbi.GetStyleFmxObject('FAuxQty')).Text :=
dts1.FieldByName('FQtyPiece').AsString + dts1.FieldByName('FUnitPiece').AsString +
dts1.FieldByName('FAuxQty').AsString + dts1.FieldByName('FUnitName').AsString;
TfxLabel(iLbi.GetStyleFmxObject('FAmount')).Text :=
dts1.FieldByName('FAmount').AsString;
dts1.Next;
End;
ItemList.EndUpdate;
//重新整理顯示狀態
RefState(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
- fxRunFrameAfterScriptRun:初始化,設定初始查詢程式資訊。
Procedure fxRunFrameAfterScriptRun(Sender: TObject);
//初始化,設定初始查詢程式資訊
Begin
ItemListLayOut.Visible := False;
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';
dts1.SQL.Text := 'SELECT * FROM Sal_OrderEntry WHERE FInterID = :FInterID';
dtsCompany.SQL.Text := 'SELECT TOP 1 * FROM Basic_Company';
dtsCompany.OpenData;
End;
2
3
4
5
6
7
8
9
10
11
- fxTimer1OnTimer:
fxTimer1
的OnTimer
事件,重新整理顯示的主數據集與明細數據集。
Procedure fxTimer1OnTimer(Sender: TObject);
//重新整理顯示主數據集與明細數據集
Begin
fxTimer1.Enabled := False;
OpenSalOrder;
OpenSalOrderEntry;
End;
2
3
4
5
6
7
- cbMoreOnChange:
cbMore
的OnChange
事件,功能按鈕的選擇選擇對應的專案時更新執行預存程序。
Procedure cbMoreOnChange(Sender: TObject);
//功能按鈕的選擇選擇對應的專案時更新執行預存程序
var
vOption: String;
AStoredProc: TRFStoredProc;
vRAISEMSG,vMSG: String;
i, j: Integer;
Begin
//選擇預存程序的功能型別
if cbMore.ItemIndex = -1 Then
exit;
if cbMore.ItemIndex = 0 Then
vOption := 'Check';
if cbMore.ItemIndex = 1 Then
vOption := 'UnCheck';
if cbMore.ItemIndex = 2 Then
vOption := 'Revoke';
if cbMore.ItemIndex = 3 Then
vOption := 'Recover';
if cbMore.ItemIndex = 4 Then
vOption := 'Delete';
//設定預存程序,獲取參數
AStoredProc := TRFStoredProc.Create(nil);
AStoredProc.Connection := fxdm.DBConnection;
try
AStoredProc.StoredProcName := 'sp_Sal_Order';
AStoredProc.Prepare;
if AStoredProc.Prepared then
begin
//參數賦值
//AStoredProc.ParamByName('FDataID').AsString := dts0.FieldByName('FInterID').AsString;
//AStoredProc.ParamByName('Flag').AsString := 'Delete';
//AStoredProc.ParamByName('FUserCode').AsString := self.GetMsgLang('admin');
fxdm.SetStoredProcParam(AStoredProc,0,vOption);
fxdm.SetStoredProcParam(AStoredProc,1,dts0.FieldByName('FInterID').AsString);
fxdm.SetStoredProcParam(AStoredProc,2,self.GetMsgLang('admin'));
try
//執行預存程序
AStoredProc.ExecProc;
Except
vRAISEMSG:= ErrorMsg;
//格式化錯誤資訊提示
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;
//btnQueryClick(sender);
end;
finally
//重新整理狀態顯示與數據集顯示
AStoredProc.Free;
dts0.OpenData;
dts1.OpenData;
OpenSalOrder;
OpenSalOrderEntry;
cbMore.ItemIndex := -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
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
- lbFCustNameOnClick:
lbFCustName
的OnClick
事件,匯入選擇客戶資訊。
Procedure lbFCustNameOnClick(Sender: TObject);
//匯入選擇客戶資訊
var
Form: TfxRunFrame;
Begin
//打開選擇客戶資訊視窗
Form := fxOpenFrameToForm('ImportCustName',[syFree],'');
Form.TagObject := Self;
//if GetVirtualForm(Form).ModalResult = mrYes Then
// lbFCustName.Text := dts0.FieldByName('FCustName').AsString;
End;
2
3
4
5
6
7
8
9
10
11
- btnImportOnClick:
btnImport
的OnClick
事件,匯入布種資訊
Procedure btnImportOnClick(Sender: TObject);
//匯入布種
var
Form: TfxRunFrame;
Begin
Form := fxOpenFrameToForm('ImportItem',[syFree],'');
Form.TagObject := Self;
//if GetVirtualForm(Form).ModalResult = mrYes Then
// OpenSalOrderEntry;
End;
2
3
4
5
6
7
8
9
10
- dts1OnNewRecord:
dts1
的OnNewRecord
事件,新增時新增初始化資訊。
Procedure dts1OnNewRecord(DataSet: TDataSet);
//新增時新增初始化資訊
Begin
dts1.FieldByName('FID').AsInteger := FXDM.GetNodeID;
dts1.FieldByName('FInterID').AsString := dts0.FieldByName('FInterID').AsString;
dts1.FieldByName('FEntryID').AsString := dts1.RecordCount + 1;
End;
2
3
4
5
6
7
- fxTimer2OnTimer:
fxTimer2
的OnTimer
事件,重新整理顯示明細。
Procedure fxTimer2OnTimer(Sender: TObject);
//重新整理顯示明細
Begin
fxTimer2.Enabled := False;
OpenSalOrderEntry;
End;
2
3
4
5
6
- btnDeleteOnClick:
btnDelete
的OnClick
事件,刪除后重新整理明細資訊。
Procedure btnDeleteOnClick(Sender: TObject);
//刪除行,刪除后重新整理明細
var
iLbi: TfxSuperListBoxItem;
Begin
iLbi:= TfxSuperListBoxItem(TfmxObject(sender).TagObject);
dts1.First;
while not dts1.FieldByName('FInterID').AsString = iLbi.TagString Do
begin
dts1.Next;
End;
dts1.Delete;
fxTimer2.Enabled := True;
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
- btnSaveOnClick:
btnSave
的OnClick
事件,點選儲存數據。
Procedure btnSaveOnClick(Sender: TObject);
//儲存
var
vdts: TRFDataSet;
Begin
//檢查客戶明細是否為空
vdts := TRFDataSet.Create(nil);
try
if dts0.FieldByName('FCustName').AsString = '' Then
begin
ShowMessage(Self.GetMsgLang('客戶名稱不能為空!'));
exit;
End;
//檢查明細數據集是否為空
if dts1.RecordCount = 0 Then
begin
ShowMessage(Self.GetMsgLang('訂單明細不能為空!'));
exit;
End;
//更新
dts0.Edit;
fxdm.OpenSQL(vdts,'SELECT FInterID FROM Sal_Order WHERE FInterID = ''' + dts0.FieldByName('FInterID').AsString + '''','demo');
if vdts.RecordCount = 0 Then
dts0.FieldByName('FBillNo').AsString := fxdm.GetBillNo('12020002',now,False);
dts0.Post;
dts0.ApplyUpdates(-1);
dts1.Edit;
dts1.Post;
dts1.ApplyUpdates(-1);
Finally
//Except {ErrorMsg / RaiseMsg(Const Error:String)}
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
- dtpDateOnChange:
dtpDate
的OnChange
事件,修改單據日期。
Procedure dtpDateOnChange(Sender: TObject);
//修改時間
Begin
dts0.Edit;
dts0.FieldByName('FDate').AsDateTime := dtpDate.DateTime;
dts0.Post;
End;
2
3
4
5
6
7
- btnSaveCheckOnClick:
btnSaveCheck
的OnClick
事件,儲存審覈單據。
Procedure btnSaveCheckOnClick(Sender: TObject);
//儲存審覈
Begin
//儲存
btnSaveOnClick(Sender);
//審覈
cbMore.ItemIndex := 0;
cbMoreOnChange(Sender);
End;
2
3
4
5
6
7
8
9
- btnMoreOnClick:
btnMore
的OnClick
事件,點選引出功能下拉功能表。
Procedure btnMoreOnClick(Sender: TObject);
//引出下拉功能表
Begin
cbMore.DropDown;
End;
2
3
4
5
- fxFlying1OnReceived:
fxFlying1
的OnReceived
事件,接收穫取列印數據資訊。
Procedure fxFlying1OnReceived(ASender: TObject; AType: string; AContent: string);
//接收列印數據資訊
var
Form: TfxRunFrame;
begin
if AType='GetPrintList' then
begin
cbPrinter.Items.CommaText := AContent;
if cbPrinter.Items.Count <> 0 Then
cbPrinter.ItemIndex := 0;
fxTimer3.Enabled := True;
end
else if AType='GetFileUrl' then
begin
//fxShowFileView('PDF',AContent,'','','');
Form := fxOpenFrameToForm('HTMLView',[syFree],'');
Form.TagObject := Self;
Form.TagValue := AContent;
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
- btnPrintOnClick:
btnPrint
的OnClick
事件,點選引入列印數據資訊。
Procedure btnPrintOnClick(Sender: TObject);
//移動列印
Begin
fxFlying1.GetPrintList;
End;
2
3
4
5
- fxTimer3OnTimer:
fxTimer3
的OnTimer
事件,引入列印數據資訊。
Procedure fxTimer3OnTimer(Sender: TObject);
//引入列印數據集資訊
Begin
fxTimer3.Enabled := False;
fxFlying1.PrinterName := cbPrinter.Items.Strings[cbPrinter.ItemIndex];
fxFlying1.AddPrintData(dts0,'A');
fxFlying1.AddPrintData(dts1,'B');
fxFlying1.AddPrintData(dtsCompany,'C');
fxFlying1.ReportPreview;
End;
2
3
4
5
6
7
8
9
10
- dts0OnNewRecord:
dts0
的OnNewRecord
事件,主數據集更新時初始化部分內容資訊。
Procedure dts0OnNewRecord(DataSet: TDataSet);
//主數據集更新時初始化部分內容資訊
Begin
dts0.FieldByName('FInterID').AsString := self.TagValue;
dts0.FieldByName('FBillID').AsString := '12020002';
dts0.FieldByName('FBillNo').AsString := fxdm.GetBillNo('12020002',now,True);
dts0.FieldByName('FDate').AsDateTime := Date;
dts0.FieldByName('FSignDate').AsDateTime := Date;
dts0.FieldByName('FContractNo').AsString := dts0.FieldByName('FBillNo').AsString;
dts0.FieldByName('FExchangeRate').AsInteger := 1;
dts0.FieldByName('FStatus').AsInteger := 1;
dts0.FieldByName('FClosed').AsInteger := 0;
dts0.FieldByName('FBiller').AsString := Self.GetMsgLang('admin');
dts0.FieldByName('FCreateDate').AsDateTime := now;
dts0.Post;
OpenSalOrder;
OpenSalOrderEntry;
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 5.5. 多語言設定
在程式設計界面,點選界面右下側的按鈕展開界面,點選左側與右側按鈕切換至窗體語言設定界面,在此界面中設定多語言的相關資訊。對於絕大部分顯示的字幕型別,都可以點選對應的控制元件項,然後點選上側的修改按鈕修改顯示的字幕型別。
對於在程式中填寫的多語言專案,請使用Self.GetMsgLang()
來設定。比如上面程式中設定的幾項多語言專案:
ShowMessage(Self.GetMsgLang('客戶名稱不能為空!'));
填寫完成後,在窗體語言界面,點選下側的MsgLang
,在此頁面中新增標題資訊。
# 5.6. 報表設定
- 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
,打開報表設計界面進行設計。
設計完成後,PinToo端可直接使用指定的設定執行列印設定操作。