紡織印染業ERP設計實務
# FastWeb 紡織印染業ERP設計實務
- 適用平臺: WEB(桌面)
該文件將指導實現在FastWeb中的單據相關功能。本次我們將在FastWeb中實現業務系統的功能。
# 1. 系統組成
以下圖片描述本系統的模組組成,其中公司資料、客戶資料以及布種資料、廠商資料等為對應的基礎資料,銷售訂單、採購訂單、生產訂單為引用以上基礎資料產生的單據。除公司資料外,其他的每個模組均包含查詢頁面以及編輯頁面。銷售訂單、採購訂單與生產訂單中還包括列印的相關設定內容。圖片以銷售訂單,採購訂單與生產訂單為主線分為以下三個流程圖。
# 2. 基礎資料頁面設定
# 2.1. 公司資料編輯-單筆數據表單
點選功能表導航欄中的模組列表(WEB)
,在打開的模組列表中點選新增
按鈕,新增標題為公司資料
的模組,新增的內容樣式如下,主要填寫組別
、編號
、標題
、開發使用者
等內容,使用PasScript的使用者編號請填寫為 W-EQ-MOD-2129-1
,使用JScript的使用者編號請填寫 W-EQ-MOD-2129-2
。填寫完成後,點選儲存
按鈕。
選擇剛才建立的標題為公司資料
的模組,點選上方的模組設計
按鈕,進入模組設計界面。
公司資料的頁面設定如下圖。
# 2.1.1. 功能簡述
公司資料用於對公司資料的內容進行編輯,此頁面中包含了單筆數據的表單設計模式,資料庫圖片的展示與引用,圖片的對話方塊引入模式的設計說明。
# 2.1.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Height | 600 | 主窗體的高度(畫素) |
Width | 800 | 主窗體的寬度(畫素) |
# 2.1.3. 控制元件設定
- 控制元件說明
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
UgContainerPanel01 | TUgContainerPanel | 頂部佈局控制元件,作為按鈕容器 |
UgGroupBox01 | TUgGroupBox | 分組佈局控制元件,用於放置影象顯示控制元件Align :alRightCaption :公司圖示(雙擊影象處以上傳) |
UgGroupBox02 | TUgGroupBox | 分組佈局控制元件,用於放置數據感知控制元件Align :alClient |
UgPanel01 | TUgPanel | 面板控制元件,用於放置圖片控制元件 |
btSave | TUgButton | 儲存按鈕Caption :儲存 |
btEdit | TUgButton | 修改按鈕Caption :修改 |
btExit | TUgButton | 退出按鈕Caption :退出 |
UgSweetAlertClose | TUgSweetAlert | 對話方塊控制元件 |
UgFileUpload | TUgFileUpload | 圖片上傳控制元件 |
dtsData | TUgRFDataSet | 數據集控制元件公司資料 |
dsData | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsData |
- 數據感知控制元件說明
以下數據感知控制元件需修改每一個控制元件的以下屬性。TUgDBImage
控制元件型別的除外。
屬性 | 取值 | 說明 |
---|---|---|
FieldLabel | 取值對應為數據欄位的中文名稱,作為控制元件顯示的標籤 | |
FieldLabelWidth | 80 | 設定標籤顯示欄位的寬度 |
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FCompanyID | 公司編號 | TUgDBEdit | edtFCompanyID | |
FCompanyCode | 公司代號 | TUgDBEdit | edtFCompanyCode | |
FComanyName | 簡體名稱 | TUgDBEdit | edtFCompanyName | |
FComanyNameTW | 繁體名稱 | TUgDBEdit | edtFCompanyNameTW | |
FCompanyNameEn | 英文名稱 | TUgDBEdit | edtFCompanyNameEn | |
FContact | 負責人 | TUgDBEdit | edtFContact | |
FCurrenty | 本位幣 | TUgDBComboBox | cbFCurrenty | |
FPhone1 | 電話1 | TUgDBEdit | edtFPhone1 | |
FRemovedDate | 結帳日期 | TUgDBFormattedNumberEdit | edtFRemovedDate | |
FPhone2 | 電話2 | TUgDBEdit | edtFPhone2 | |
FTaxType | 稅率類別 | TUgDBComboBox | cbFTaxType | |
FFax | 傳真號碼 | TUgDBEdit | edtFFax | |
FTaxRate | 稅率 | TUgDBFormattedNumberEdit | edtFTaxRate | |
FEmail | 郵箱 | TUgDBEdit | edtFEmail | |
FCompanyAddr | 簡體地址 | TUgDBEdit | edtFCompanyAddr | |
FCompanyAddrTW | 繁體地址 | TUgDBEdit | edtFCompanyAddrTW | |
FCompanyAddrEn | 英文地址 | TUgDBEdit | edtFCompanyAddrEn | |
FUrl | 公司主頁 | TUgDBEdit | edtFUrl | |
FBank | 開戶銀行 | TUgDBEdit | edtFBank | |
FAccountNo | 開戶帳號 | TUgDBEdit | edtFAccountNo | |
FZip | 郵編號碼 | TUgDBEdit | edtFZip | |
FTaxID | 稅號 | TUgDBEdit | edtFTaxID | |
FCompanyLogo | 公司圖示 | TUgDBImage | imgCompanyLogo |
# 2.1.4. 程式設計
在初始設定程式時,使用JScript使用者需勾選pub_js_tarslink
與pub_js_messageinfo
單元,使用PasScript的使用者請勾選pub_pas_tarslink
與pub_pas_messageinfo
單元。
- 初始設定:設定顯示數據集的初始化內容。(僅限PascaScript使用)。
Begin
//初始化設定,SQL賦值以及覈取方塊預設選項的設定
dtsData.SQL.Text := 'select * from Basic_Company';
dtsData.Connection := GetRFERP;
dtsData.Open;
cbFCurrenty.Items.CommaText := UGMM.LT('人民幣') + ',' + UGMM.LT('美元') + ',' + UGMM.LT('新臺幣') + ',' + UGMM.LT('港幣');
cbFTaxType.Items.CommaText := UGMM.LT('增值稅') + ',' + UGMM.LT('營業稅') + ',' + UGMM.LT('免稅');
End.
2
3
4
5
6
7
8
9
- UgWebRunFrameOnAfterRunScript:
UgWebRunFrame
的OnAfterRunScript
事件,執行初始運行狀態下的設定。
//JScript
function UgWebRunFrameOnAfterRunScript(sender)
{
//翻譯界面
UGMM.LC(Self);
//驗證模組許可權
UGMM.VerifyRunFramePerm(Self);
RefState(False);
//初始化設定,SQL賦值以及覈取方塊預設選項的設定
dtsData.SQL.Text = "select * from Basic_Company";
dtsData.Connection = GetRFERP;
dtsData.Open;
cbFCurrenty.Items.CommaText = UGMM.LT("人民幣") + "," + UGMM.LT("美元") + "," + UGMM.LT("新臺幣") + "," + UGMM.LT("港幣");
cbFTaxType.Items.CommaText = UGMM.LT("增值稅") + "," + UGMM.LT("營業稅") + "," + UGMM.LT("免稅");
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//PasScript
procedure UgWebRunFrameOnAfterRunScript(const sender: tobject);
begin
//翻譯界面
UGMM.LC(Self);
//驗證模組許可權
UGMM.VerifyRunFramePerm(Self);
RefState(False);
end;
2
3
4
5
6
7
8
9
// Make sure to add code blocks to your code group
- btExitOnClick:
btnExit
的OnClick
事件,用於退出視窗,如單據處於編輯狀態則會出現提示。
//JScript
function btExitOnClick(sender)
//退出視窗,如單據處於編輯狀態則會出現提示
{
var p = Self.Parent;
if (dsData.AutoEdit)
{
UgSweetAlertClose.CancelButtonText = UGMM.LT("取消");
UgSweetAlertClose.ConfirmButtonText = UGMM.LT("確定");
UgSweetAlertClose.Title = UGMM.LT("提示");
UgSweetAlertClose.Text = UGMM.LT("修改尚未儲存,是否退出?");
UgSweetAlertClose.Show;
}
else{
TUgWebForm(p).Close;
}
if (p is TUniTabSheet)
UniSession.AddJS("document.getElementById(\"" + TUniTabSheet(p).jsid + "_tab-closeEl\").click();");
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//PasScript
procedure btExitOnClick(sender: tobject);
//退出視窗,如單據處於編輯狀態則會出現提示
Var
p:TComponent;
Begin
p:=Self.Parent;
if dsData.AutoEdit then
begin
UgSweetAlertClose.CancelButtonText := UGMM.LT('取消');
UgSweetAlertClose.ConfirmButtonText := UGMM.LT('確定');
UgSweetAlertClose.Title := UGMM.LT('提示');
UgSweetAlertClose.Text := UGMM.LT('修改尚未儲存,是否退出?');
UgSweetAlertClose.Show;
end
else
TUgWebForm(p).Close;
if p is TUniTabSheet then
UniSession.AddJS('document.getElementById("' + TUniTabSheet(p).jsid + '_tab-closeEl").click();');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Make sure to add code blocks to your code group
- RefState:重新整理單據編輯狀態的顯示。
//JScript
function RefState(bool)
//重新整理編輯狀態,處於不同的編輯狀態時將啟用或禁用部分按鈕。
{
if (bool)
//編輯狀態
{
cbFCurrenty.AutoEdit = True;
cbFTaxType.AutoEdit = True;
btSave.Enabled = True;
btEdit.Enabled = False;
dsData.AutoEdit = True;
dtsData.Edit;
}
else
//儲存狀態
{
cbFCurrenty.AutoEdit = False;
cbFTaxType.AutoEdit = False;
btSave.Enabled = False;
btEdit.Enabled = True;
dsData.AutoEdit = False;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//PasScript
procedure RefState(bool:Boolean;);
//重新整理編輯狀態,處於不同的編輯狀態時將啟用或禁用部分按鈕。
Begin
if bool Then
//編輯狀態
Begin
cbFCurrenty.AutoEdit := True;
cbFTaxType.AutoEdit := True;
btSave.Enabled := True;
btEdit.Enabled := False;
dsData.AutoEdit := True;
dtsData.Edit;
End
Else
//儲存狀態
Begin
cbFCurrenty.AutoEdit := False;
cbFTaxType.AutoEdit := False;
btSave.Enabled := False;
btEdit.Enabled := True;
dsData.AutoEdit := 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
// Make sure to add code blocks to your code group
- btEditOnClick:
btnEdit
的OnClick
事件,修改後,頁面切換為修改模式。
//JScript
function btEditOnClick(sender)
//修改
{
RefState(True);
}
2
3
4
5
6
//PasScript
procedure btEditOnClick(sender: tobject);
//修改
begin
RefState(True);
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- btSaveOnClick:
btnSave
的OnClick
事件,儲存按鈕,儲存修改。
//JScript
function btSaveOnClick(sender)
//儲存
{
dtsData.Post;
dtsData.ApplyUpdates(-1);
RefState(False);
}
2
3
4
5
6
7
8
//PasScript
procedure btSaveOnClick(sender: tobject);
//儲存
begin
dtsData.Post;
dtsData.ApplyUpdates(-1);
RefState(False);
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
# 2.1.5. 多語言設定
點選FastWeb低程式碼開發平臺功能表導航項中的系統管理
-翻譯
-詞條維護
。
收集此頁面視窗中所有需要進行翻譯的詞條(包括程式中設定的多語言專案),點選新增
按鈕,根據提示填寫維護。
# 2.1.6. 運行效果
# 2.2. 客戶資料查詢-多筆數據表單
點選功能表導航欄中的模組列表(WEB)
,在打開的模組列表中點選新增
按鈕,新增標題為客戶資料
的模組,新增的內容樣式如下,主要填寫組別
、編號
、標題
、開發使用者
等內容,使用PasScript的使用者編號請填寫為 W-EQ-MOD-2130-1
,使用JScript的使用者編號請填寫 W-EQ-MOD-2130-2
。填寫完成後,點選儲存
按鈕。
選擇剛才建立的標題為客戶資料
的模組,點選上方的模組設計
按鈕,進入模組設計界面。
客戶資料的頁面設定如下圖。
# 2.2.1. 功能簡述
客戶資料的頁面按照客戶分類進行客戶資訊的分類展示,此頁面包含分組顯示錶單的模式設計,表格查詢等相關的模組設計內容。
# 2.2.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Align | alClient | 佈局填滿整個客戶端 |
# 2.2.3. 控制元件設定
- 控制元件說明
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
UgContainerPanel01 | TUgContainerPanel | 容器面板控制元件,用於放置查詢內容,按鈕控制元件Align :alTop |
edQuery | TUgEdit | 用於輸入查詢條件EmptyText :輸入客戶程式碼或名稱FieldLabel :客戶程式碼或名稱FieldLabelAlign :laTop |
btnQuery | TUgButton | 查詢按鈕Caption :查詢 |
btnClear | TUgButton | 清除按鈕Caption :清除 |
UgVerticalLine01 | TUgVerticalLine | 佈局按鈕,用於區隔不同功能型別的按鈕 |
btnAppend | TUgButton | 新建按鈕Caption :新建 |
btnDelete | TUgButton | 刪除按鈕Caption :刪除 |
btnEditor | TUgButton | 編輯按鈕Caption :編輯 |
UgVerticalLine02 | TUgVerticalLine | 佈局按鈕,用於區隔不同功能型別的按鈕 |
btnRefresh | TUgButton | 重新整理按鈕Caption :重新整理 |
btnShowAll | TUgButton | 顯示全部按鈕Caption :顯示全部 |
btnExit | TUgButton | 退出按鈕Caption :退出 |
UgRFDataSet01 | TUgRFDataSet | 客戶數據集 |
UgDataSource01 | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為UgRFDataSet01 |
UgRFDataSet02 | TUgRFDataSet | 客戶分組數據集 |
UgDataSource02 | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為UgRFDataSet02 |
UgDBTreeGrid01 | TUgDBTreeGrid | 樹形表格數據集Align :alLeftDataSource :UgDataSource02IdField :FTreeKeyIDIdParentField :FTreeParentID |
UgDBGrid01 | TUgDBGrid | 表格數據集Align :alClientDataSource :UgDataSource01 |
UgSweetAlert | TUgSweetAlert | 訊息提示控制元件 |
- UgDBTreeGrid01欄位設定
選擇並雙擊UgDBTreeGrid01
控制元件,打開欄位編輯器,根據下圖顯示的內容進行編輯。點選左上角的+
或者-
進行新增行或刪除行操作。雙擊FieldName
或者Caption
可修改對應行的欄位名稱或者顯示標題內容。ReadOnly
用於設定欄位是否為可讀屬性。
- UgDBGrid01欄位設定
選擇並雙擊UgDBGrid01
控制元件,打開欄位編輯器,根據下圖顯示的內容進行編輯。點選左上角的+
或者-
進行新增行或刪除行操作。雙擊FieldName
或者Caption
可修改對應行的欄位名稱或者顯示標題內容。ReadOnly
用於設定欄位是否為可讀屬性。
# 2.2.4. 程式設計
在初始設定程式時,使用JScript使用者需勾選pub_js_tarslink
與pub_js_messageinfo
單元,使用PasScript的使用者請勾選pub_pas_tarslink
與pub_pas_messageinfo
單元。
- 初始設定:設定顯示數據集的初始化內容(僅限PasScript)。
Begin
//數據集資訊顯示
UgRFDataSet01.Connection := GetRFERP;
UgRFDataSet02.Connection := GetRFERP;
UgRFDataSet02.SQL.Text := 'Select FInterID,FGroupCode,FGroupName,FNote,FTreeKeyID,FTreeParenteID,FAbsoluteIndex ' +
' From Basic_CustGroup Order by FGroupCode';
UgRFDataSet02.Open;
UgRFDataSet02.First;
UgRFDataSet01.SQL.Text := 'SELECT * FROM Basic_Cust';
UgRFDataSet01.Open;
End.
2
3
4
5
6
7
8
9
10
11
- UgWebRunFrameOnAfterRunScript:
UgWebRunFram
的OnAfterRunScript
事件,用於界面初始設定,設定翻譯和模組許可權。
//JScript
function UgWebRunFrameOnAfterRunScript(sender)
{
//翻譯界面
UGMM.LC(Self);
//驗證模組許可權
UGMM.VerifyRunFramePerm(Self);
//數據集資訊顯示
UgRFDataSet01.Connection = GetRFERP;
UgRFDataSet02.Connection = GetRFERP;
UgRFDataSet02.SQL.Text = "Select FInterID,FGroupCode,FGroupName,FNote,FTreeKeyID,FTreeParenteID,FAbsoluteIndex " +
" From Basic_CustGroup Order by FGroupCode";
UgRFDataSet02.Open;
UgRFDataSet02.First;
UgRFDataSet01.SQL.Text = "SELECT * FROM Basic_Cust";
UgRFDataSet01.Open;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//PasScript
procedure UgWebRunFrameOnAfterRunScript(const sender: tobject);
begin
//翻譯界面
UGMM.LC(Self);
//驗證模組許可權
UGMM.VerifyRunFramePerm(Self);
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
- UgDBTreeGrid01OnCellClick:
UgDBTreeGrid01
的OnCellClick
事件,分組按鈕點選切換目前分組顯示。
//JScript
function UgDBTreeGrid01OnCellClick(column)
//分組按鈕點選切換目前分組顯示
{
UgRFDataSet01.Filtered = False;
UgRFDataSet01.Filter = "FGroupID = " + UgRFDataSet02.FieldByName("FInterID").AsString;
UgRFDataSet01.Filtered = True;
}
2
3
4
5
6
7
8
9
//PasScript
procedure UgDBTreeGrid01OnCellClick(column: tunidbgridcolumn);
//分組按鈕點選切換目前分組顯示
begin
UgRFDataSet01.Filtered := False;
UgRFDataSet01.Filter := 'FGroupID = ' + UgRFDataSet02.FieldByName('FInterID').AsString;
UgRFDataSet01.Filtered := True;
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
- btnQueryOnClick:
btnQuery
的OnClick
事件,點選查詢按鈕,根據查詢編輯框中的內容進行查詢。
//JScript
//查詢
function btnQueryOnClick(sender)
{
UgRFDataSet01.SQL.Text = "SELECT * FROM Basic_Cust WHERE FCustCode LIKE '%" + edQuery.Text +
"%' or FCustName LIKE '%" + edQuery.Text + "%' Order by FCustCode";
UgRFDataSet01.Open;
}
2
3
4
5
6
7
8
9
//PasScript
//查詢
procedure btnQueryOnClick(sender: tobject);
begin
UgRFDataSet01.SQL.Text := 'SELECT * FROM Basic_Cust WHERE FCustCode LIKE ''%' + edQuery.Text +
'%'' or FCustName LIKE ''%' + edQuery.Text + '%'' Order by FCustCode';
UgRFDataSet01.Open;
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
- btnClearOnClick:
btnClear
的OnClick
事件,清除按鈕的點選事件,清除查詢條件編輯框中的內容。
//JScript
//清除
function btnClearOnClick(sender)
{
edQuery.Text = "";
UgRFDataSet01.SQL.Text = "SELECT * FROM Basic_Cust";
UgRFDataSet01.Open;
}
2
3
4
5
6
7
8
//PasScript
//清除
procedure btnClearOnClick(sender: tobject);
begin
edQuery.Text := '';
UgRFDataSet01.SQL.Text := 'SELECT * FROM Basic_Cust';
UgRFDataSet01.Open;
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
- btnAppendOnClick:
btnAppend
的OnClick
事件,新增按鈕,打開客戶資料編輯頁面,新增單據資訊。
//JScript
//新增
function btnAppendOnClick(sender)
{
var F,t;
//打開客戶資料編輯界面W-EQ-MOD-2131-2
F = UGMM.GetWebSubForm("W-EQ-MOD-2131-2");
F.Caption = UGMM.LT("編輯客戶資料");
UGMM.LC(F);
//主數據集連線
t = now;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).Connection = GetRFERP;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).Close;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).SQL.Text = "SELECT * FROM Basic_Cust";
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).Open;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).Append;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).FieldByName("FInterID").AsInteger = GetNodeID;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).FieldByName("FGroupID").AsString = UgRFDataSet02.FieldByName("FInterID").AsString;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).FieldByName("FCreater").AsString = UGMM.Informations.Values["UserFullName"];
//客戶收貨地址
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustAddrs")).Connection = GetRFERP;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustAddrs")).Close;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustAddrs")).SQL.Text = "SELECT * FROM Basic_CustAddrs WHERE FInterID = "
+ TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).FieldByName("FInterID").AsString;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustAddrs")).Open;
//客戶關係人員
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustRelation")).Connection = GetRFERP;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustRelation")).Close;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustRelation")).SQL.Text = "SELECT * FROM Basic_CustRelation WHERE FInterID = "
+ TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).FieldByName("FInterID").AsString;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustRelation")).Open;
//客戶產品
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustMaterial")).Connection = GetRFERP;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustMaterial")).Close;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustMaterial")).SQL.Text = "SELECT * FROM Basic_CustMaterial WHERE FInterID = "
+ TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).FieldByName("FInterID").AsString;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustMaterial")).Open;
if (F.ShowModal == mrOK)
{
}
//關閉視窗后從記憶體釋放視窗W-EQ-MOD-2131-2
UGMM.DelWebSubForm("W-EQ-MOD-2131-2");
btnQueryOnClick(sender);
}
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
//PasScript
//新增
procedure btnAppendOnClick(sender: tobject);
Var
F:TUniForm;
D:TUgRFDataSet;
t:TDateTime;
begin
//打開客戶資料編輯界面W-EQ-MOD-2131-1
F := UGMM.GetWebSubForm('W-EQ-MOD-2131-1');
F.Caption := UGMM.LT('編輯客戶資料');
UGMM.LC(F);
//主數據集連線
t := now;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).Connection := GetRFERP;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).Close;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).SQL.Text := 'SELECT * FROM Basic_Cust';
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).Open;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).Append;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).FieldByName('FInterID').AsInteger := GetNodeID;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).FieldByName('FGroupID').AsString := UgRFDataSet02.FieldByName('FInterID').AsString;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).FieldByName('FCreater').AsString := UGMM.Informations.Values['UserFullName'];
//客戶收貨地址
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustAddrs')).Connection := GetRFERP;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustAddrs')).Close;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustAddrs')).SQL.Text := 'SELECT * FROM Basic_CustAddrs WHERE FInterID = '
+ TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).FieldByName('FInterID').AsString;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustAddrs')).Open;
//客戶關係人員
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustRelation')).Connection := GetRFERP;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustRelation')).Close;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustRelation')).SQL.Text := 'SELECT * FROM Basic_CustRelation WHERE FInterID = '
+ TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).FieldByName('FInterID').AsString;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustRelation')).Open;
//客戶產品
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustMaterial')).Connection := GetRFERP;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustMaterial')).Close;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustMaterial')).SQL.Text := 'SELECT * FROM Basic_CustMaterial WHERE FInterID = '
+ TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).FieldByName('FInterID').AsString;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustMaterial')).Open;
if F.ShowModal = mrOK then
Begin
End;
//關閉視窗后從記憶體釋放視窗W-EQ-MOD-2131-1
UGMM.DelWebSubForm('W-EQ-MOD-2131-1');
btnQueryOnClick(sender);
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
// Make sure to add code blocks to your code group
- btnDeleteOnClick:
btnDelete
的OnClick
事件,打開刪除確認對話方塊。
//JScript
//刪除,確認對話方塊
function btnDeleteOnClick(sender)
{
UgSweetAlert.CancelButtonText = UGMM.LT("取消");
UgSweetAlert.ConfirmButtonText = UGMM.LT("確定");
UgSweetAlert.Title = UGMM.LT("提示");
UgSweetAlert.Text = UGMM.LT("是否刪除該客戶?");
UgSweetAlert.Show;
}
2
3
4
5
6
7
8
9
10
//PasScript
//刪除,確認對話方塊
procedure btnDeleteOnClick(sender: tobject);
Begin
UgSweetAlert.CancelButtonText := UGMM.LT('取消');
UgSweetAlert.ConfirmButtonText := UGMM.LT('確定');
UgSweetAlert.Title := UGMM.LT('提示');
UgSweetAlert.Text := UGMM.LT('是否刪除該客戶?');
UgSweetAlert.Show;
End;
2
3
4
5
6
7
8
9
10
// Make sure to add code blocks to your code group
- btnEditorOnClick:
btnEditor
的OnClick
事件,用於打開客戶資料編輯頁面,編輯客戶基礎資料資訊。
//JScript
//修改編輯
function btnEditorOnClick(sender)
{
var F,t;
//打開客戶資料編輯界面W-EQ-MOD-2131-2
F = UGMM.GetWebSubForm("W-EQ-MOD-2131-2");
F.Caption = UGMM.LT("編輯客戶資料");
UGMM.LC(F);
//主數據集連線
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).Connection = GetRFERP;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).Close;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).SQL.Text = "SELECT * FROM Basic_Cust";
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).Open;
while (TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).FieldByName("FInterID").AsString !=
UgRFDataSet01.FieldByName("FInterID").AsString)
{
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).Next;
}
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).Edit;
//客戶收貨地址
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustAddrs")).Connection = GetRFERP;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustAddrs")).Close;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustAddrs")).SQL.Text = "SELECT * FROM Basic_CustAddrs WHERE FInterID = "
+ TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).FieldByName("FInterID").AsString;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustAddrs")).Open;
//客戶關係人員
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustRelation")).Connection = GetRFERP;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustRelation")).Close;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustRelation")).SQL.Text = "SELECT * FROM Basic_CustRelation WHERE FInterID = "
+ TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).FieldByName("FInterID").AsString;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustRelation")).Open;
//客戶產品
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustMaterial")).Connection = GetRFERP;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustMaterial")).Close;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustMaterial")).SQL.Text = "SELECT * FROM Basic_CustMaterial WHERE FInterID = "
+ TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsGeneral")).FieldByName("FInterID").AsString;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsCustMaterial")).Open;
if (F.ShowModal == mrOK)
{
}
//關閉視窗后釋放視窗W-EQ-MOD-2131-2
UGMM.DelWebSubForm("W-EQ-MOD-2131-2");
btnQueryOnClick(sender);
}
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
//PasScript
//修改編輯
procedure btnEditorOnClick(sender: tobject);
Var
F:TUniForm;
begin
//打開客戶資料編輯界面W-EQ-MOD-2131-1
F := UGMM.GetWebSubForm('W-EQ-MOD-2131-1');
F.Caption := UGMM.LT('編輯客戶資料');
UGMM.LC(F);
//主數據集連線
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).Connection := GetRFERP;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).Close;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).SQL.Text := 'SELECT * FROM Basic_Cust';
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).Open;
while (TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).FieldByName('FInterID').AsString <>
UgRFDataSet01.FieldByName('FInterID').AsString) do
begin
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).Next;
end;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).Edit;
//客戶收貨地址
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustAddrs')).Connection := GetRFERP;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustAddrs')).Close;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustAddrs')).SQL.Text := 'SELECT * FROM Basic_CustAddrs WHERE FInterID = '
+ TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).FieldByName('FInterID').AsString;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustAddrs')).Open;
//客戶關係人員
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustRelation')).Connection := GetRFERP;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustRelation')).Close;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustRelation')).SQL.Text := 'SELECT * FROM Basic_CustRelation WHERE FInterID = '
+ TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).FieldByName('FInterID').AsString;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustRelation')).Open;
//客戶產品
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustMaterial')).Connection := GetRFERP;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustMaterial')).Close;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustMaterial')).SQL.Text := 'SELECT * FROM Basic_CustMaterial WHERE FInterID = '
+ TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsGeneral')).FieldByName('FInterID').AsString;
TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsCustMaterial')).Open;
if F.ShowModal = mrOK then
Begin
End;
//關閉視窗后釋放視窗W-EQ-MOD-2131-1
UGMM.DelWebSubForm('W-EQ-MOD-2131-1');
btnQueryOnClick(sender);
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
// Make sure to add code blocks to your code group
- btnExitOnClick:
btnExit
的OnClick
事件,退出目前視窗。
//JScript
//退出
function btnExitOnClick(sender)
{
var p = Self.Parent;
if (p is TUgWebForm)
{
TUgWebForm(p).Close;
}
if (p is TUniTabSheet)
UniSession.AddJS("document.getElementById(\"" + TUniTabSheet(p).jsid + "_tab-closeEl\").click();");
}
2
3
4
5
6
7
8
9
10
11
12
//PasScript
//退出
procedure btnExitOnClick(sender: tobject);
Var
p:TComponent;
Begin
p:=Self.Parent;
if p is TUgWebForm then
Begin
TUgWebForm(p).Close;
End;
if p is TUniTabSheet then
UniSession.AddJS('document.getElementById("' + TUniTabSheet(p).jsid + '_tab-closeEl").click();');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
// Make sure to add code blocks to your code group
- btnRefreshOnClick:
btnRefresh
的OnClick
事件,重新整理頁面顯示。
//JScript
//重新整理頁面顯示
function btnRefreshOnClick(sender)
{
//重新更新數據集
UgRFDataSet01.Connection = GetRFERP;
UgRFDataSet02.Connection = GetRFERP;
UgRFDataSet02.SQL.Text = "Select FInterID,FGroupCode,FGroupName,FNote,FTreeKeyID,FTreeParenteID,FAbsoluteIndex From " +
" Basic_CustGroup Order by FGroupCode";
UgRFDataSet02.Open;
UgRFDataSet02.First;
UgRFDataSet01.SQL.Text = "SELECT * FROM Basic_Cust";
UgRFDataSet01.Open;
//UgDBGrid01.Refresh;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//PasScript
//重新整理頁面顯示
procedure btnRefreshOnClick(sender: tobject);
begin
//重新更新數據集
UgRFDataSet01.Connection := GetRFERP;
UgRFDataSet02.Connection := GetRFERP;
UgRFDataSet02.SQL.Text := 'Select FInterID,FGroupCode,FGroupName,FNote,FTreeKeyID,FTreeParenteID,FAbsoluteIndex From ' +
' Basic_CustGroup Order by FGroupCode';
UgRFDataSet02.Open;
UgRFDataSet02.First;
UgRFDataSet01.SQL.Text := 'SELECT * FROM Basic_Cust';
UgRFDataSet01.Open;
//UgDBGrid01.Refresh;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Make sure to add code blocks to your code group
- btnShowAllOnClick:
btnShowAll
的OnClick
事件,顯示全部記錄。
//JScript
//顯示全部
function btnShowAllOnClick(sender)
{
UgRFDataSet01.Filtered = False;
}
2
3
4
5
6
//PasScript
//顯示全部
procedure btnShowAllOnClick(sender: tobject);
begin
UgRFDataSet01.Filtered := False;
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- UgSweetAlertOnConfirm:
UgSweetAlert
的OnConfirm
事件,用於確認執行刪除客戶資料的操作。
//JScript
function UgSweetAlertOnConfirm(sender)
//刪除客戶資料
{
var AStoredProc,vRAISEMSG,vMSG,i,j;
//預存程序獲取,準備參數
AStoredProc = new TUgRFStroedProc(nil);
AStoredProc.Connection = GETRFERP;
try{
AStoredProc.StoredProcName = "sp_Basic_Cust";
AStoredProc.Prepare;
if (AStoredProc.Prepared)
{
//參數賦值
AStoredProc.ParamByName("FDataID").AsString = UgRFDataSet01.FieldByName("FInterID").AsString;
AStoredProc.ParamByName("Flag").AsString = "Delete";
AStoredProc.ParamByName("FUserCode").AsString = UGMM.Informations.Values["UserFullName"];
if (AStoredProc.FindParam("FMsg") != nil)
AStoredProc.ParamByName("FMsg").AsString = "";
try{
//執行預存程序
AStoredProc.ExecProc;
}
Except{
vRAISEMSG=ExceptionMessage;
//資訊顯示
i = Pos("SQMESSAGE", vRAISEMSG);
j = Pos("[SQL Server]", vRAISEMSG);
vMSG = Copy(vRAISEMSG, i, Length(vRAISEMSG) - i + 1);
// 非格式化訊息提示
if (i == 0)
{
ShowSweetAlert(atError,UGMM.LT("提示"),Copy(vRAISEMSG, j + 12, Length(vRAISEMSG) - j + 1));
//Exit;
return;
}
}
btnQueryOnClick(sender);
}
}
finally{
AStoredProc.Free;
}
}
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
//PasScript
procedure UgSweetAlertOnConfirm(sender: tobject);
//刪除客戶資料
Var
AStoredProc: TUgRFStroedProc;
vRAISEMSG,vMSG: String;
i, j: Integer;
begin
//預存程序獲取,準備參數
AStoredProc := TUgRFStroedProc.Create(nil);
AStoredProc.Connection := GETRFERP;
try
AStoredProc.StoredProcName := 'sp_Basic_Cust';
AStoredProc.Prepare;
if AStoredProc.Prepared then
begin
//參數賦值
AStoredProc.ParamByName('FDataID').AsString := UgRFDataSet01.FieldByName('FInterID').AsString;
AStoredProc.ParamByName('Flag').AsString := 'Delete';
AStoredProc.ParamByName('FUserCode').AsString := UGMM.Informations.Values['UserFullName'];
if AStoredProc.FindParam('FMsg') <> nil then
AStoredProc.ParamByName('FMsg').AsString := '';
try
//執行預存程序
AStoredProc.ExecProc;
Except{ExceptionMessage}
vRAISEMSG:=ExceptionMessage;
//資訊顯示
i := Pos('SQMESSAGE', vRAISEMSG);
j := Pos('[SQL Server]', vRAISEMSG);
vMSG := Copy(vRAISEMSG, i, Length(vRAISEMSG) - i + 1);
// 非格式化訊息提示
if i = 0 then
begin
ShowSweetAlert(atError,UGMM.LT('提示'),Copy(vRAISEMSG, j + 12, Length(vRAISEMSG) - j + 1));
Exit;
end;
end;
btnQueryOnClick(sender);
end;
finally
AStoredProc.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
// Make sure to add code blocks to your code group
# 2.2.5. 多語言設定
點選FastWeb低程式碼開發平臺功能表導航項中的系統管理
-翻譯
-詞條維護
。
收集此頁面視窗中所有需要進行翻譯的詞條(包括程式中設定的多語言專案),點選新增
按鈕,根據提示填寫維護。
# 2.2.6. 運行效果
# 2.3. 客戶資料編輯-多筆數據表單
點選功能表導航欄中的模組列表(WEB)
,在打開的模組列表中點選新增
按鈕,新增標題為客戶資料編輯
的模組,新增的內容樣式如下,主要填寫組別
、編號
、標題
、開發使用者
等內容,使用PasScript的使用者編號請填寫為 W-EQ-MOD-2131-1
,使用JScript的使用者編號請填寫 W-EQ-MOD-2131-2
。填寫完成後,點選儲存
按鈕。
選擇剛才建立的標題為客戶資料編輯
的模組,點選上方的模組設計
按鈕,進入模組設計界面。
客戶資料編輯的頁面設定如下圖。
# 2.3.1. 功能簡述
客戶資料編輯用於對客戶資料的資訊進行詳細設定,其中引用了部分查詢表需要使用的業務員資料、幣種資料、客戶分組、布種資料等數據集資訊,也包括了資料庫圖片的上傳與修改,清除等設定方式。
# 2.3.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Height | 607 | 主窗體的高度(畫素) |
Width | 850 | 主窗體的寬度(畫素) |
# 2.3.3. 控制元件設定
- 非數據感知控制元件說明
頁面中注意TUgPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
UgPanel01 | TUgPanel | 面板控制元件,作為佈局容器使用,位於頂部位置 |
UgGroupBox01 | TUgGroupBox | 分組框控制元件,作為佈局容器使用,位於Panel下方的置頂位置Caption :基本資訊 |
PageControl01 | TUgPageControl | 頁面控制元件,佔據除頂部空間外所有的位置 在窗體結構與檢視器中單擊選擇 UgPageControl01 ,點選檢視器上方的新增按鈕新增標籤頁TUniabSheet 新增四個標籤頁面 |
tsGeneral | TUniTabSheet | UgPageControl01 中的標籤頁面1Caption :概覽 |
tsCustAddrs | TUniTabSheet | UgPageControl01 中的標籤頁面2Caption :客戶收貨地址 |
tsCustRelation | TUniTabSheet | UgPageControl01 中的標籤頁面3Caption :關係人員 |
tsCustMaterial | TUniTabSheet | UgPageControl01 中的標籤頁面3Caption :客戶產品 |
btnFirst | TUgBitBtn | 首項按鈕,點選跳轉至記錄的首頁Caption :首項 |
btnPrior | TUgBitBtn | 前項按鈕,點選跳轉至記錄的前項Caption :前項 |
btnNext | TUgBitBtn | 後項按鈕,點選跳轉至記錄的後項Caption :後項 |
btnLast | TUgBitBtn | 末項按鈕,點選跳轉至記錄的末項Caption :末項 |
btnNew | TUgBitBtn | 新建按鈕,點選以新建客戶資料Caption :新建 |
btnSave | TUgBitBtn | 儲存按鈕,點選以儲存資料的更改Caption :儲存 |
btnDelete | TUgBitBtn | 刪除按鈕,點選以刪除目前的客戶資料Caption :刪除 |
btnUpdate | TUgBitBtn | 更新按鈕,點選以更新單據中的客戶資料Caption :更新 |
btnExit | TUgBitBtn | 退出按鈕,點選以退出視窗Caption :退出 |
UgFileUpload01 | TUgUgFileUpload | 打開上傳對話方塊 |
dtsGeneral | TUgRFDataSet | 客戶資料資訊數據集 |
dsGeneral | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsGeneral |
dtsCustGroup | TUgRFDataSet | 客戶分組資訊數據集 |
dsCustGroup | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsCustGroup |
dtsInvoiceCust | TUgRFDataSet | 結帳客戶資訊數據集 |
dsInvoiceCust | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsInvoiceCust |
dtsFDistrict | TUgRFDataSet | 區域資訊數據集 |
dsFDistrict | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFDistrict |
UgSweetAlert | TUgSweetAlert | 提示控制元件,根據實際情況使用 |
UgSweetAlert1 | TUgSweetAlert | 提示控制元件,根據實際情況使用 |
UgSweetAlert2 | TUgSweetAlert | 提示控制元件,根據實際情況使用 |
- UgGroupBox01數據感知控制元件說明
此頁面中首頁繫結的數據源DataSource
為dsGeneral
。以下數據感知控制元件需修改每一個控制元件的以下屬性。TUgDBImage
、TUgDBCheckBox
控制元件型別的除外。
屬性 | 取值 | 說明 |
---|---|---|
FieldLabel | 取值對應為數據欄位的中文名稱,作為控制元件顯示的標籤 | |
FieldLabelWidth | 60 | 設定標籤顯示欄位的寬度 |
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FGroupID | 分組 | TUgDBLookupComboBox | lkupGroupID | 列表繫結的數據源ListSource :dsCustGroup列表顯示的欄位名 ListField :FGroupName列表對應返回的欄位值 KeyField : FGroupID |
FCustCode | 客戶程式碼 | TUgDBEdit | edFCustCode | |
FShortName | 客戶簡稱 | TUgDBEdit | edFShortName | |
FCustName | 客戶簡稱 | TUgDBEdit | edFCustName | |
FCorporation | 法人代表 | TUgDBEdit | edFCorporation | |
FInvoiceCustName | 結帳客戶 | TUgDBLookupComboBox | lkupFInvoiceCustName | 列表繫結的數據源ListSource :dsInvoiceCust列表顯示的欄位名 ListField :FInvoiceCustName列表對應返回的欄位值 KeyField : FInvoiceCustName |
FDistrict | 區域 | TUgDBLookupComboBox | lkupFDistrict | 列表繫結的數據源ListSource :dsFDistrict列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField : FName |
FForeignName | 外語描述 | TUgDBEdit | edFForeignName | |
FCustLogo | 公司圖示 | TUgDBImage | CustLogo | |
FCustomerType | 客戶型別 | TUgDBRadioGroup | rgFCustomerType | 設定選項Items.CommaText := '國內客戶,國外客戶' |
FfrozenFor | 凍結 | TUgDBCheckBox | chkFforzenFor | Caption :凍結 |
- tsGeneral非數據感知控制元件說明
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
dtsFCurrency | TUgRFDataSet | 貨幣資料資訊數據集 |
dsFCurrency | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFCurrency |
dtsEmp | TUgRFDataSet | 員工資料資訊數據集 |
dsEmp | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsEmp |
dtsInvoiceType | TUgRFDataSet | 發票型別資訊數據集 |
dsInvoiceType | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsInvoiceType |
dtsSaleType | TUgRFDataSet | 發票型別資訊數據集 |
dsSaleType | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsSaleType |
dtsPayItem | TUgRFDataSet | 付款方式資訊數據集 |
dsPayItem | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsPayItem |
dtsSettleName | TUgRFDataSet | 結算方式資訊數據集 |
dsSettleName | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsSettleName |
- tsGeneral數據感知控制元件說明
此頁面中首頁繫結的數據源DataSource
為dsGeneral
,以下數據感知控制元件需修改每一個控制元件的以下屬性。TUgDBImage
、TUgDBCheckBox
控制元件型別的除外。
屬性 | 取值 | 說明 |
---|---|---|
FieldLabel | 取值對應為數據欄位的中文名稱,作為控制元件顯示的標籤 | |
FieldLabelWidth | 60 | 設定標籤顯示欄位的寬度 |
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FCurrencyID | 幣別 | TUgDBLookupComboBox | lkupFCurrencyID | 列表繫結的數據源ListSource :dsFCurrency列表顯示的欄位名 ListField :FCurrencyName列表對應返回的欄位值 KeyField : FCurrencyID |
FExchangeRate | 匯率 | TUgDBEdit | edFExchangeRate | |
FEmpName | 業務員 | TUgDBLookupComboBox | lkupFEmpName | 列表繫結的數據源ListSource :dsEmp列表顯示的欄位名 ListField :FEmpName列表對應返回的欄位值 KeyField : FEmpName |
FDeptName | 部門名稱 | TUgDBEdit | edFDeptName | 設定此控制元件為只讀ReadOnly :True |
FPhone1 | 電話1 | TUgDBEdit | edFPhone1 | |
FPhone2 | 電話2 | TUgDBEdit | edFPhone2 | |
FContacts | 聯繫人 | TUgDBEdit | edFContacts | |
FFax | 傳真 | TUgDBEdit | edFFax | |
FTel | 行動電話 | TUgDBEdit | edFTel | |
FZipCode | 郵政編碼 | TUgDBEdit | edFZipCode | |
FEmail | 電子郵箱 | TUgDBEdit | edFEmail | |
FSaleType | 銷售型別 | TUgDBLookupComboBox | lkupFSaleType | 列表繫結的數據源ListSource :dsSaleType列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField : FName |
FInvoiceType | 發票型別 | TUgDBLookupComboBox | lkupFInvoiceType | 列表繫結的數據源ListSource :dsInvoiceType列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField : FName |
FCreditLine | 信用額度 | TUgDBEdit | edFCreditLine | |
FCreditLineDay | 信用天數 | TUgDBEdit | edFCreditLineDay | |
FAddress | 地址 | TUgDBEdit | edFAddress | |
FHouseBank | 開戶銀行 | TUgDBEdit | edFHouseBank | |
FHouseBnkAct | 開戶帳號 | TUgDBEdit | edFHouseBnkAct | |
FTaxCode | 稅號 | TUgDBEdit | edFTaxCode | |
FPayItemName | 付款方式 | TUgDBLookupComboBox | lkupFPayItemName | 列表繫結的數據源ListSource :dsPayItem列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField : FName |
FSettleName | 結算方式 | TUgDBLookupComboBox | lkupFPayItemName | 列表繫結的數據源ListSource :dsSettle列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField : FName |
FNote | 備註 | TUgDBMemo | mmFNote | |
FCreater | 建立使用者 | TUgDBEdit | edCreater | |
FLstModDate | 最後修改日期 | TUgDBEdit | edLstModDate | 此控制元件需設定FieldLabelWidth 請保持預設值100,如改為60文字顯示內容狹小 |
- tsCustAddrs控制元件說明
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
dtsCustAddrs | TUgRFDataSet | 客戶收貨地址資料資訊數據集 |
dsCustAddrs | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsCustAddrs |
UgContainerPanel01 | TUgContainerPanel | 頁面中置頂的佈局控制元件容器,用於放置按鈕 |
UgPanel02 | TUgPanel | 頁面中置右的佈局控制元件容器,用於放置數據感知控制元件 |
btnCustAddrsAppendRow | TUgBitBtn | 新增行按鈕Caption :新增行 |
btnCustAddrsDelRow | TUgBitBtn | 刪除行按鈕Caption :刪除行 |
dgCustAddress | TUgDBGrid | 客戶收貨地址表格DataSource :dsCustAddrs |
- tsCutsAddrs數據控制元件說明
此頁面中首頁繫結的數據源DataSource
為dsCustAddrs
,以下數據感知控制元件需修改每一個控制元件的以下屬性。
屬性 | 取值 | 說明 |
---|---|---|
FieldLabel | 取值對應為數據欄位的中文名稱,作為控制元件顯示的標籤 | |
FieldLabelWidth | 60 | 設定標籤顯示欄位的寬度 |
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FCompany | 收貨公司 | TUgDBEdit | edCustAddressFCompany | |
FAddress | 公司地址 | TUgDBEdit | edCustAddressFAddress | |
FPerson | 收貨人 | TUgDBEdit | edFPerson | |
FFax | 傳真 | TUgDBEdit | edCustAddressFFax | |
FPhone | 電話 | TUgDBEdit | edCustAddressFPhone | |
FEMail | 郵箱 | TUgDBEdit | edCustAddressFEMail |
- dgCustAddress欄位設定
選擇並雙擊dgCustAddress
控制元件,打開欄位編輯器,根據下圖顯示的內容進行編輯。點選左上角的+
或者-
進行新增行或刪除行操作。雙擊FieldName
或者Caption
可修改對應行的欄位名稱或者顯示標題內容。ReadOnly
用於設定欄位是否為可讀屬性。
- tsCustRelation控制元件說明
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
dtsCustRelation | TUgRFDataSet | 關係人員資訊數據集 |
dsCustRelation | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsCustRelation |
UgContainerPanel03 | TUgPanel | 頁面中置頂的佈局控制元件容器,用於放置按鈕 |
btnCustRelationAppendRow | TUgBitBtn | 新增行按鈕Caption :新增行 |
btnCustRelationDelRow | TUgBitBtn | 刪除行按鈕Caption :刪除行 |
dgCustRelation | TUgDBGrid | 關係人員表格DataSource :dsCustRelation |
- tsCustRelation數據控制元件說明
此頁面中首頁繫結的數據源DataSource
為dsCustRelation
,以下數據感知控制元件需修改每一個控制元件的以下屬性。
屬性 | 取值 | 說明 |
---|---|---|
FieldLabel | 取值對應為數據欄位的中文名稱,作為控制元件顯示的標籤 | |
FieldLabelWidth | 60 | 設定標籤顯示欄位的寬度 |
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FEmpName | 姓名 | TUgDBEdit | edCustRelationFEmpName | |
FSex | 性別 | TUgDBComboBox | cbCustRealtionFSex | |
FBirthDate | 出生日期 | TUgDBDateTimePicker | dtpCustRelationFBirthdate | |
FWeddingDate | 結婚日期 | TUgDBDateTimePicker | dtpCustRelationFWeddingDate | |
FNativePlace | 籍貫 | TUgDBEdit | edCustRelationFNativePlace | |
FDeptName | 部門 | TUgDBEdit | edCustRelationFDeptName | |
FPosition | 部門 | TUgDBEdit | edCustRelationFPosition | |
FInfluence | 影響力 | TUgDBEdit | edCustRelationFInfluence | |
FTel | 行動電話 | TUgDBEdit | edCustRelationFTel | |
FFax | 傳真號碼 | TUgDBEdit | edCustRelationFFax | |
FPhone | 電話號碼 | TUgDBEdit | edCustRelationFPhone | |
FEMail | 郵箱 | TUgDBEdit | edCustRelationFEMail | |
FCharacter | 性格 | TUgDBEdit | edCustRelationFCharacter |
- dgCustRelation欄位設定
選擇並雙擊dgCustRelation
控制元件,打開欄位編輯器,根據下圖顯示的內容進行編輯。點選左上角的+
或者-
進行新增行或刪除行操作。雙擊FieldName
或者Caption
可修改對應行的欄位名稱或者顯示標題內容。ReadOnly
用於設定欄位是否為可讀屬性。
- tsCustMaterial控制元件說明
頁面中注意修改TBitBtn
型別的控制元件的文字大小Font.Size
屬性為12
,TPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
dtsCustMaterial | TUgRFDataSet | 客戶產品資訊數據集 |
dsCustMaterial | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsCustMaterial |
UgContainerPanel04 | TUgPanel | 頁面中置頂的佈局控制元件容器,用於放置按鈕 |
UgContainerPanel05 | TUgPanel | 頁面中置右的佈局控制元件容器,用於放置數據感知控制元件 |
btnCustMaterialAppendRow | TUgBitBtn | 新增行按鈕Caption :新增行 |
btnCustMaterialDelRow | TUgBitBtn | 刪除行按鈕Caption :刪除行 |
dgCustMaterial | TUgDBGrid | 關係人員表格DataSource :dsCustMaterial |
dtsItem | TUgRFDataSet | 物料資訊數據集 |
dsItem | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsItem |
- tsCustRelation數據控制元件說明
此頁面中首頁繫結的數據源DataSource
為dsCustMaterial
,以下數據感知控制元件需修改每一個控制元件的以下屬性。
屬性 | 取值 | 說明 |
---|---|---|
FieldLabel | 取值對應為數據欄位的中文名稱,作為控制元件顯示的標籤 | |
FieldLabelWidth | 85 | 設定標籤顯示欄位的寬度 |
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FCustItemCode | 客戶物料程式碼 | TUgDBEdit | edCustMaterialFCustItemCode | |
FCustItemName | 客戶物料名稱 | TUgDBEdit | edCustMaterialFCustItemName | |
FItemCode | 物料程式碼 | TUgDBLookupComboBox | lkupCustMaterialFItemCode | 列表繫結的數據源ListSource :dsItem列表顯示的欄位名 ListField :FItemCode列表對應返回的欄位值 KeyField : FItemCode |
FItemName | 物料名稱 | TUgDBLookupComboBox | lkupCustMaterialFItemName | 列表繫結的數據源ListSource :dsItem列表顯示的欄位名 ListField :FItemName列表對應返回的欄位值 KeyField : FItemName |
FItemSpec | 規格 | TUgDBEdit | edCustMaterialFItemSpec | |
FStandPrice | 標準價 | TUgDBEdit | edCustMaterialFStandPrice | |
FSalePrice | 銷售價 | TUgDBEdit | edCustMaterialFSalePrice | |
FWhUnit | 庫存單位 | TUgDBEdit | edCustMaterialFWhUnit | |
FPackMethod | 包裝方式 | TUgEdit | edMaterialCustFPackMethod | |
FPackQty | 包裝數量 | TUgEdit | edCustMaterialFPackQty | |
FPackUnit | 包裝單位 | TUgEdit | edCustMaterialFPackUnit | |
FNote | 備註 | TMemo | edCustMaterialFPackUnit |
- dgCustMaterial欄位設定
選擇並雙擊dgCustMaterial
控制元件,打開欄位編輯器,根據下圖顯示的內容進行編輯。點選左上角的+
或者-
進行新增行或刪除行操作。雙擊FieldName
或者Caption
可修改對應行的欄位名稱或者顯示標題內容。ReadOnly
用於設定欄位是否為可讀屬性。
# 2.3.4. 程式設計
在初始設定程式時,使用JScript使用者需勾選pub_js_tarslink
與pub_js_messageinfo
單元,使用PasScript的使用者請勾選pub_pas_tarslink
與pub_pas_messageinfo
單元。
- 初始設定:設定顯示數據集的初始化內容。(僅限PasScript)
Begin
//客戶分類查詢表
dtsCustGroup.Connection := GetRFERP;
dtsCustGroup.SQL.Text := 'SELECT FInterID AS FGroupID,FGroupName FROM Basic_CustGroup';
dtsCustGroup.Open;
//結帳客戶查詢表
dtsInvoiceCust.Connection := GetRFERP;
dtsInvoiceCust.SQL.Text := 'SELECT FInterID AS FInVoiceCustID,FCustCode AS FInvoiceCustCode,FCustName AS ' +
'FInvoiceCustName FROM Basic_Cust';
dtsInvoiceCust.Open;
//區域
dtsFDistrict.Connection := GetRFERP;
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 = ''' + UGMM.LT('地區') + '''';
dtsFDistrict.Open;
//業務員
dtsEmp.Connection := GetRFERP;
dtsEmp.SQL.Text := 'SELECT FInterID AS FEmpID,FEmpCode,FEmpName,FDeptID,FDeptCode,FDeptName FROM Basic_Employee';
dtsEmp.Open;
//幣種資料
dtsCurrency.Connection := GetRFERP;
dtsCurrency.SQL.Text := 'SELECT FCode as FCurrencyCode,FName as FCurrencyName,FInterID AS FCurrencyID,FExRate AS '+
'FExchangeRate FROM Basic_Currency';
dtsCurrency.Open;
//銷售型別
dtsSaleType.Connection := GetRFERP;
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 = ''' + UGMM.LT('銷售型別') + '''';
dtsSaleType.Open;
//發票型別
dtsInvoiceType.Connection := GetRFERP;
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 = ''' + UGMM.LT('發票型別') + '''';
dtsInvoiceType.Open;
//付款方式
dtsPayItem.Connection := GetRFERP;
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 = ''' + UGMM.LT('付款方式') + '''';
dtsPayItem.Open;
//結算方式
dtsSettle.Connection := GetRFERP;
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 = ''' + UGMM.LT('結算方式') + '''';
dtsSettle.Open;
//物料資訊
dtsItem.Connection := GetRFERP;
dtsItem.SQL.Text := 'select A.FInterID as FItemID,A.FItemCode,A.FItemName,A.FItemSpec,A.FUnitID,A.FUnitCode,A.FUnitName, '
+ 'b.FCoefficient,dbo.fun_GetPY(A.FItemName) as PY from Basic_Item A '
+ 'left join basic_Unit B on a.FUnitID = b.FInterID '
+ 'left join Basic_ItemGroup c on a.FGroupID = c.FInterID '
+ 'where A.FTypeID=1 and isnull(FfrozenFor,0) = 0 '
+ 'Order by FItemCode';
dtsItem.Open;
//分組型別的初始化設定
rgFCustomerType.Items.CommaText := UGMM.LT('國內客戶,國外客戶');
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
- UpdateCustDetail:用於更新客戶資料的明細資訊。
//JScript
//更新客戶資料的其他明細資訊
function UpdateCustDetail()
{
//客戶收貨地址更新
if (dtsCustAddrs.RowCount > 0)
{
dtsCustAddrs.Edit;
dtsCustAddrs.Post;
dtsCustAddrs.ApplyUpdates(-1);
}
//客戶關係更新
if (dtsCustRelation.RowCount > 0)
{
dtsCustRelation.Edit;
dtsCustRelation.Post;
dtsCustRelation.ApplyUpdates(-1);
}
//客產品更新
if (dtsCustMaterial.RowCount > 0)
{
dtsCustMaterial.Edit;
dtsCustMaterial.Post;
dtsCustMaterial.ApplyUpdates(-1);
}
}
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
//PasScript
//更新客戶資料的其他明細資訊
Procedure UpdateCustDetail;
Begin
//客戶收貨地址更新
if dtsCustAddrs.RowCount > 0 Then
Begin
dtsCustAddrs.Edit;
dtsCustAddrs.Post;
dtsCustAddrs.ApplyUpdates(-1);
End;
//客戶關係更新
if dtsCustRelation.RowCount > 0 Then
Begin
dtsCustRelation.Edit;
dtsCustRelation.Post;
dtsCustRelation.ApplyUpdates(-1);
End;
//客產品更新
if dtsCustMaterial.RowCount > 0 Then
Begin
dtsCustMaterial.Edit;
dtsCustMaterial.Post;
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
26
// Make sure to add code blocks to your code group
- GetVarNo:用於更新序號計數資訊。
//JScript
//更新序號計數
function GetvarNo(AUgRFDataSet)
{
if (AUgRFDataSet.IsEmpty)
{
Result = 0;
return;
//Exit;
}
AUgRFDataSet.Last;
Result = AUgRFDataSet.FieldByName("FEntryID").AsInteger;
}
2
3
4
5
6
7
8
9
10
11
12
13
//PasScript
//更新序號計數
Function GetVarNo(AUgRFDataSet: TUgRFDataSet):Integer;
Begin
if AUgRFDataSet.IsEmpty Then
Begin
Result := 0;
Exit;
End;
AUgRFDataSet.Last;
Result := AUgRFDataSet.FieldByName('FEntryID').AsInteger;
End;
2
3
4
5
6
7
8
9
10
11
12
// Make sure to add code blocks to your code group
- btnCloseOnClick:
btnClose
的OnClick
事件,點選以關閉目前視窗頁面。
//JScript
//關閉視窗
function btnCloseOnClick(sender)
{
var p;
p = Self.Parent;
if (p is TUgWebForm){
TUgWebForm(p).Close;
}
if (p is TUniTabSheet)
UniSession.AddJS("document.getElementById(\"" + TUniTabSheet(p).jsid + "_tab-closeEl\").click();");
}
2
3
4
5
6
7
8
9
10
11
12
//PasScript
//關閉視窗
procedure btnCloseOnClick(sender: tobject);
Var
p:TComponent;
Begin
p:=Self.Parent;
if p is TUgWebForm then
TUgWebForm(p).Close;
if p is TUniTabSheet then
UniSession.AddJS('document.getElementById("' + TUniTabSheet(p).jsid + '_tab-closeEl").click();');
End;
2
3
4
5
6
7
8
9
10
11
12
// Make sure to add code blocks to your code group
- lkupFInvoiceCustNameOnChange:
lkupFInvoiceCustName
的OnChange
事件,修改結帳客戶名稱的時候變更對應關聯的欄位。
//JScript
//修改結帳客戶名稱時同時更新結帳客戶的ID與代號
function lkupFInvoiceCustNameOnChange(sender)
{
dtsGeneral.Edit;
dtsGeneral.FieldByName("FInvoiceCustID").AsString = dtsInvoiceCust.FieldByName("FInVoiceCustID").AsString;
dtsGeneral.FieldByName("FInvoiceCustCode").AsString = dtsInvoiceCust.FieldByName("FInVoiceCustCode").AsString;
}
2
3
4
5
6
7
8
//PasScript
//修改結帳客戶名稱時同時更新結帳客戶的ID與代號
procedure lkupFInvoiceCustNameOnChange(sender: tobject);
begin
dtsGeneral.Edit;
dtsGeneral.FieldByName('FInvoiceCustID').AsString := dtsInvoiceCust.FieldByName('FInVoiceCustID').AsString;
dtsGeneral.FieldByName('FInvoiceCustCode').AsString := dtsInvoiceCust.FieldByName('FInVoiceCustCode').AsString;
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
- lkupFEmpNameOnChange:
lkupFEmpName
的OnChange
事件,修改業務員同時更新ID,程式碼,部門ID,程式碼與名稱。
//JScript
//修改業務員同時更新ID,程式碼,部門ID,程式碼與名稱
function lkupFEmpNameOnChange(sender)
{
dtsGeneral.Edit;
dtsGeneral.FieldByName("FEmpID").AsString = dtsEmp.FieldByName("FEmpID").AsString;
dtsGeneral.FieldByName("FEmpCode").AsString = dtsEmp.FieldByName("FEmpCode").AsString;
dtsGeneral.FieldByName("FDeptID").AsString = dtsEmp.FieldByName("FDeptID").AsString;
dtsGeneral.FieldByName("FDeptCode").AsString = dtsEmp.FieldByName("FDeptCode").AsString;
dtsGeneral.FieldByName("FDeptName").AsString = dtsEmp.FieldByName("FDeptName").AsString;
}
2
3
4
5
6
7
8
9
10
11
//PasScript
//修改業務員同時更新ID,程式碼,部門ID,程式碼與名稱
procedure lkupFEmpNameOnChange(sender: tobject);
begin
dtsGeneral.Edit;
dtsGeneral.FieldByName('FEmpID').AsString := dtsEmp.FieldByName('FEmpID').AsString;
dtsGeneral.FieldByName('FEmpCode').AsString := dtsEmp.FieldByName('FEmpCode').AsString;
dtsGeneral.FieldByName('FDeptID').AsString := dtsEmp.FieldByName('FDeptID').AsString;
dtsGeneral.FieldByName('FDeptCode').AsString := dtsEmp.FieldByName('FDeptCode').AsString;
dtsGeneral.FieldByName('FDeptName').AsString := dtsEmp.FieldByName('FDeptName').AsString;
end;
2
3
4
5
6
7
8
9
10
11
// Make sure to add code blocks to your code group
- lkupFExchangeRateOnChange:
lkupFExchangeRate
的OnChange
事件,修改幣種時更新對應的ID與程式碼。
//JScript
//修改幣種時更新對應的ID與程式碼
function lkupFExchangeRateOnChange(sender)
{
dtsGeneral.Edit;
dtsGeneral.FieldByName("FCurrencyCode").AsString = dtsEmp.FieldByName("FEmpID").AsString;
dtsGeneral.FieldByName("FCurrencyName").AsString = dtsEmp.FieldByName("FEmpCode").AsString;
}
2
3
4
5
6
7
8
//PasScript
//修改幣種時更新對應的ID與程式碼
procedure lkupFExchangeRateOnChange(sender: tobject);
begin
dtsGeneral.Edit;
dtsGeneral.FieldByName('FCurrencyCode').AsString := dtsEmp.FieldByName('FEmpID').AsString;
dtsGeneral.FieldByName('FCurrencyName').AsString := dtsEmp.FieldByName('FEmpCode').AsString;
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
- lkupCustMaterialFItemCodeOnChange:
lkupCustMaterialFItemCode
的OnChange
事件,用於選擇布種時更新對應的布種資料資訊。
//JScript
//更新布種資料
function lkupCustMaterialFItemCodeOnChange(sender)
{
dtsCustMaterial.Edit;
dtsCustMaterial.FieldByName("FItemID").AsString = dtsItem.FieldByName("FItemID").AsString;
dtsCustMaterial.FieldByName("FItemCode").AsString = dtsItem.FieldByName("FItemCode").AsString;
dtsCustMaterial.FieldByName("FItemName").AsString = dtsItem.FieldByName("FItemName").AsString;
}
2
3
4
5
6
7
8
9
//PasScript
//更新布種資料
procedure lkupCustMaterialFItemCodeOnChange(sender: tobject);
begin
dtsCustMaterial.Edit;
dtsCustMaterial.FieldByName('FItemID').AsString := dtsItem.FieldByName('FItemID').AsString;
dtsCustMaterial.FieldByName('FItemCode').AsString := dtsItem.FieldByName('FItemCode').AsString;
dtsCustMaterial.FieldByName('FItemName').AsString := dtsItem.FieldByName('FItemName').AsString;
end;
2
3
4
5
6
7
8
9
// Make sure to add code blocks to your code group
- lkupCustMaterialFItemNameOnChange:
lkupCustMaterialFItemName
的OnChange
事件,用於選擇時更新布種資料。
//JScript
//更新布種資料
function lkupCustMaterialFItemNameOnChange(sender)
{
dtsCustMaterial.Edit;
dtsCustMaterial.FieldByName("FItemID").AsString = dtsItem.FieldByName("FItemID").AsString;
dtsCustMaterial.FieldByName("FItemCode").AsString = dtsItem.FieldByName("FItemCode").AsString;
dtsCustMaterial.FieldByName("FItemName").AsString = dtsItem.FieldByName("FItemName").AsString;
}
2
3
4
5
6
7
8
9
//PasScript
//更新布種資料
procedure lkupCustMaterialFItemNameOnChange(sender: tobject);
begin
dtsCustMaterial.Edit;
dtsCustMaterial.FieldByName('FItemID').AsString := dtsItem.FieldByName('FItemID').AsString;
dtsCustMaterial.FieldByName('FItemCode').AsString := dtsItem.FieldByName('FItemCode').AsString;
dtsCustMaterial.FieldByName('FItemName').AsString := dtsItem.FieldByName('FItemName').AsString;
end;
2
3
4
5
6
7
8
9
// Make sure to add code blocks to your code group
- btnCustAddressAppendRowOnClick:
btnCustAddressAppendRow
的OnClick
事件,客戶地址新增,產生ID。
//JScript
//客戶地址新增,產生ID
function btnCustAddressAppendRowOnClick(sender)
{
var vcount;
vcount = GetvarNo(dtsCustAddrs);
dtsCustAddrs.Append;
dtsCustAddrs.FieldByName("FInterID").AsString = dtsGeneral.FieldByName("FInterID").AsString;
dtsCustAddrs.FieldByName("FEntryID").AsInteger = vcount + 1;
}
2
3
4
5
6
7
8
9
10
//PasScript
//客戶地址新增,產生ID
procedure btnCustAddressAppendRowOnClick(sender: tobject);
var
vcount: Integer;
begin
vcount := GetVarNo(dtsCustAddrs);
dtsCustAddrs.Append;
dtsCustAddrs.FieldByName('FInterID').AsString := dtsGeneral.FieldByName('FInterID').AsString;
dtsCustAddrs.FieldByName('FEntryID').AsInteger := vcount + 1;
end;
2
3
4
5
6
7
8
9
10
11
// Make sure to add code blocks to your code group
- btnCustAddressDeleteRowOnClick:
btnCustAddressDeleteRow
的OnClick
事件,設定時客戶地址會被刪除。
//JScript
//客戶地址刪除
function btnCustAddressDeleteRowOnClick(sender)
{
dtsCustAddrs.Delete;
}
2
3
4
5
6
//PasScript
//客戶地址刪除
procedure btnCustAddressDeleteRowOnClick(sender: tobject);
begin
dtsCustAddrs.Delete;
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- btnCustRelationAppendRowOnClick:
btnCustRelationAppendRow
的OnClick
事件,客戶關係新增,產生ID。
//JScript
//客戶關係新增,產生ID
function btnCustRelationAppendRowOnClick(sender)
{
var vcount;
vcount = GetvarNo(dtsCustRelation);
dtsCustRelation.Append;
dtsCustRelation.Edit;
dtsCustRelation.FieldByName("FInterID").AsString = dtsGeneral.FieldByName("FInterID").AsString;
dtsCustRelation.FieldByName("FEntryID").AsInteger = vcount + 1;
}
2
3
4
5
6
7
8
9
10
11
//PasScript
//客戶關係新增,產生ID
procedure btnCustRelationAppendRowOnClick(sender: tobject);
Var
vcount: Integer;
begin
vcount := GetVarNo(dtsCustRelation);
dtsCustRelation.Append;
dtsCustRelation.Edit;
dtsCustRelation.FieldByName('FInterID').AsString := dtsGeneral.FieldByName('FInterID').AsString;
dtsCustRelation.FieldByName('FEntryID').AsInteger := vcount + 1;
end;
2
3
4
5
6
7
8
9
10
11
12
// Make sure to add code blocks to your code group
- btnCustRelationDeleteRowOnClick:
btnCustRelationDeleteRow
的OnClick
事件,客戶關係的刪除。
//JScript
//客戶關係刪除
function btnCustRelationDeleteRowOnClick(sender)
{
dtsCustRelation.Delete;
}
2
3
4
5
6
7
//PasScript
//客戶關係刪除
procedure btnCustRelationDeleteRowOnClick(sender: tobject);
begin
dtsCustRelation.Delete;
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- btnCustMaterialAppendRowOnClick:
btnCustMaterialAppendRow
的OnClick
事件,客戶產品新增,產生ID。
//JScript
//客戶產品新增,產生ID
function btnCustMaterialAppendRowOnClick(sender)
{
var vcount;
vcount = GetvarNo(dtsCustMaterial);
dtsCustMaterial.Append;
dtsCustMaterial.FieldByName("FInterID").AsString = dtsGeneral.FieldByName("FInterID").AsString;
dtsCustMaterial.FieldByName("FEntryID").AsInteger = vcount + 1;
}
2
3
4
5
6
7
8
9
10
//PasScript
//客戶產品新增,產生ID
procedure btnCustMaterialAppendRowOnClick(sender: tobject);
var
vcount: Integer;
begin
vcount := GetVarNo(dtsCustMaterial);
dtsCustMaterial.Append;
dtsCustMaterial.FieldByName('FInterID').AsString := dtsGeneral.FieldByName('FInterID').AsString;
dtsCustMaterial.FieldByName('FEntryID').AsInteger := vcount + 1;
end;
2
3
4
5
6
7
8
9
10
11
// Make sure to add code blocks to your code group
- btnCustMaterialDeletRowOnClick:
btnCustMaterialDeletRow
的OnClick
事件,客戶產品刪除。
//JScript
//客戶產品刪除
function btnCustMaterialDeletRowOnClick(sender)
{
dtsCustMaterial.Delete;
}
2
3
4
5
6
7
//PasScript
//客戶產品刪除
procedure btnCustMaterialDeletRowOnClick(sender: tobject);
begin
dtsCustMaterial.Delete;
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- btnFirstOnClick:
btnFirst
的OnClick
事件,記錄定位至首條。
//JScript
//顯示首條記錄
function btnFirstOnClick(sender)
{
//主數據集更新,同步更新明細數據集
dtsGeneral.First;
dtsCustAddrs.Close;
dtsCustRelation.Close;
dtsCustMaterial.Close;
dtsCustAddrs.SQL.Text = "SELECT * FROM Basic_CustAddrs WHERE FInterID = " + dtsGeneral.FieldByName("FInterID").AsString;
dtsCustRelation.SQL.Text = "SELECT * FROM Basic_CustRelation WHERE FInterID = " + dtsGeneral.FieldByName("FInterID").AsString;
dtsCustMaterial.SQL.Text = "SELECT * FROM Basic_CustMaterial WHERE FInterID = " + dtsGeneral.FieldByName("FInterID").AsString;
dtsCustAddrs.Open;
dtsCustRelation.Open;
dtsCustMaterial.Open;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//PasScript
//顯示首條記錄
procedure btnFirstOnClick(sender: tobject);
begin
//主數據集更新,同步更新明細數據集
dtsGeneral.First;
dtsCustAddrs.Close;
dtsCustRelation.Close;
dtsCustMaterial.Close;
dtsCustAddrs.SQL.Text := 'SELECT * FROM Basic_CustAddrs WHERE FInterID = ' + dtsGeneral.FieldByName('FInterID').AsString;
dtsCustRelation.SQL.Text := 'SELECT * FROM Basic_CustRelation WHERE FInterID = ' + dtsGeneral.FieldByName('FInterID').AsString;
dtsCustMaterial.SQL.Text := 'SELECT * FROM Basic_CustMaterial WHERE FInterID = ' + dtsGeneral.FieldByName('FInterID').AsString;
dtsCustAddrs.Open;
dtsCustRelation.Open;
dtsCustMaterial.Open;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Make sure to add code blocks to your code group
- btnPriorOnClick:
btnPrior
的OnClick
事件,記錄定位至上一條。
//JScript
//顯示上一條記錄
function btnPriorOnClick(sender)
{
dtsGeneral.Prior;
dtsCustAddrs.Close;
dtsCustRelation.Close;
dtsCustMaterial.Close;
dtsCustAddrs.SQL.Text = "SELECT * FROM Basic_CustAddrs WHERE FInterID = " + dtsGeneral.FieldByName("FInterID").AsString;
dtsCustRelation.SQL.Text = "SELECT * FROM Basic_CustRelation WHERE FInterID = " + dtsGeneral.FieldByName("FInterID").AsString;
dtsCustMaterial.SQL.Text = "SELECT * FROM Basic_CustMaterial WHERE FInterID = " + dtsGeneral.FieldByName("FInterID").AsString;
dtsCustAddrs.Open;
dtsCustRelation.Open;
dtsCustMaterial.Open;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//PasScript
//顯示上一條記錄
procedure btnPriorOnClick(sender: tobject);
begin
dtsGeneral.Prior;
dtsCustAddrs.Close;
dtsCustRelation.Close;
dtsCustMaterial.Close;
dtsCustAddrs.SQL.Text := 'SELECT * FROM Basic_CustAddrs WHERE FInterID = ' + dtsGeneral.FieldByName('FInterID').AsString;
dtsCustRelation.SQL.Text := 'SELECT * FROM Basic_CustRelation WHERE FInterID = ' + dtsGeneral.FieldByName('FInterID').AsString;
dtsCustMaterial.SQL.Text := 'SELECT * FROM Basic_CustMaterial WHERE FInterID = ' + dtsGeneral.FieldByName('FInterID').AsString;
dtsCustAddrs.Open;
dtsCustRelation.Open;
dtsCustMaterial.Open;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Make sure to add code blocks to your code group
- btnNextOnClick:
btnNext
的OnClick
事件,記錄定位至下一條。
//JScript
//顯示下一條記錄
function btnNextOnClick(sender)
{
dtsGeneral.Next;
dtsCustAddrs.Close;
dtsCustRelation.Close;
dtsCustMaterial.Close;
dtsCustAddrs.SQL.Text = "SELECT * FROM Basic_CustAddrs WHERE FInterID = " + dtsGeneral.FieldByName("FInterID").AsString;
dtsCustRelation.SQL.Text = "SELECT * FROM Basic_CustRelation WHERE FInterID = " + dtsGeneral.FieldByName("FInterID").AsString;
dtsCustMaterial.SQL.Text = "SELECT * FROM Basic_CustMaterial WHERE FInterID = " + dtsGeneral.FieldByName("FInterID").AsString;
dtsCustAddrs.Open;
dtsCustRelation.Open;
dtsCustMaterial.Open;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//PasScript
//顯示下一條記錄
procedure btnNextOnClick(sender: tobject);
begin
dtsGeneral.Next;
dtsCustAddrs.Close;
dtsCustRelation.Close;
dtsCustMaterial.Close;
dtsCustAddrs.SQL.Text := 'SELECT * FROM Basic_CustAddrs WHERE FInterID = ' + dtsGeneral.FieldByName('FInterID').AsString;
dtsCustRelation.SQL.Text := 'SELECT * FROM Basic_CustRelation WHERE FInterID = ' + dtsGeneral.FieldByName('FInterID').AsString;
dtsCustMaterial.SQL.Text := 'SELECT * FROM Basic_CustMaterial WHERE FInterID = ' + dtsGeneral.FieldByName('FInterID').AsString;
dtsCustAddrs.Open;
dtsCustRelation.Open;
dtsCustMaterial.Open;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Make sure to add code blocks to your code group
- btnLastOnClick:
btnLast
的OnClick
事件,記錄定位至最後一條。
//JScript
//顯示最後一條記錄
function btnLastOnClick(sender)
{
dtsGeneral.Last;
dtsCustAddrs.Close;
dtsCustRelation.Close;
dtsCustMaterial.Close;
dtsCustAddrs.SQL.Text = "SELECT * FROM Basic_CustAddrs WHERE FInterID = " + dtsGeneral.FieldByName("FInterID").AsString;
dtsCustRelation.SQL.Text = "SELECT * FROM Basic_CustRelation WHERE FInterID = " + dtsGeneral.FieldByName("FInterID").AsString;
dtsCustMaterial.SQL.Text = "SELECT * FROM Basic_CustMaterial WHERE FInterID = " + dtsGeneral.FieldByName("FInterID").AsString;
dtsCustAddrs.Open;
dtsCustRelation.Open;
dtsCustMaterial.Open;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//PasScript
//顯示最後一條記錄
procedure btnLastOnClick(sender: tobject);
begin
dtsGeneral.Last;
dtsCustAddrs.Close;
dtsCustRelation.Close;
dtsCustMaterial.Close;
dtsCustAddrs.SQL.Text := 'SELECT * FROM Basic_CustAddrs WHERE FInterID = ' + dtsGeneral.FieldByName('FInterID').AsString;
dtsCustRelation.SQL.Text := 'SELECT * FROM Basic_CustRelation WHERE FInterID = ' + dtsGeneral.FieldByName('FInterID').AsString;
dtsCustMaterial.SQL.Text := 'SELECT * FROM Basic_CustMaterial WHERE FInterID = ' + dtsGeneral.FieldByName('FInterID').AsString;
dtsCustAddrs.Open;
dtsCustRelation.Open;
dtsCustMaterial.Open;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Make sure to add code blocks to your code group
- btnAppendOnClick:
btnAppend
的OnClick
事件。
//JScript
//新增記錄
function btnAppendOnClick(sender)
{
//獲取目前分組資訊,分給新記錄的分組資訊中
var vGroupID = dtsGeneral.FieldByName("FGroupID").AsString;
dtsGeneral.Append;
dtsGeneral.FieldByName("FInterID").AsInteger = GetNodeID;
dtsGeneral.FieldByName("FGroupID").AsString = vGroupID;
dtsGeneral.FieldByName("FCreater").AsString = UGMM.Informations.Values["UserName"];
dtsCustAddrs.Close;
dtsCustRelation.Close;
dtsCustMaterial.Close;
dtsCustAddrs.SQL.Text = "SELECT * FROM Basic_CustAddrs WHERE FInterID = " + dtsGeneral.FieldByName("FInterID").AsString;
dtsCustRelation.SQL.Text = "SELECT * FROM Basic_CustRelation WHERE FInterID = " + dtsGeneral.FieldByName("FInterID").AsString;
dtsCustMaterial.SQL.Text = "SELECT * FROM Basic_CustMaterial WHERE FInterID = " + dtsGeneral.FieldByName("FInterID").AsString;
dtsCustAddrs.Open;
dtsCustRelation.Open;
dtsCustMaterial.Open;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//PasScript
//新增記錄
procedure btnAppendOnClick(sender: tobject);
var
vGroupID: String;
begin
//獲取目前分組資訊,分給新記錄的分組資訊中
vGroupID := dtsGeneral.FieldByName('FGroupID').AsString;
dtsGeneral.Append;
dtsGeneral.FieldByName('FInterID').AsInteger := GetNodeID;
dtsGeneral.FieldByName('FGroupID').AsString := vGroupID;
dtsGeneral.FieldByName('FCreater').AsString := UGMM.Informations.Values['UserName'];
dtsCustAddrs.Close;
dtsCustRelation.Close;
dtsCustMaterial.Close;
dtsCustAddrs.SQL.Text := 'SELECT * FROM Basic_CustAddrs WHERE FInterID = ' + dtsGeneral.FieldByName('FInterID').AsString;
dtsCustRelation.SQL.Text := 'SELECT * FROM Basic_CustRelation WHERE FInterID = ' + dtsGeneral.FieldByName('FInterID').AsString;
dtsCustMaterial.SQL.Text := 'SELECT * FROM Basic_CustMaterial WHERE FInterID = ' + dtsGeneral.FieldByName('FInterID').AsString;
dtsCustAddrs.Open;
dtsCustRelation.Open;
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
// Make sure to add code blocks to your code group
- btnSaveOnClick:
btnSave
的OnClick
事件,點選儲存單據。
//JScript
//儲存
function btnSaveOnClick(sender)
{
var t,vdts;
t = now;
vdts = new TUgRFDataSet(Nil);
vdts.Connection = GetRFERP;
try{
//檢查客戶資料是否為空
if ((dtsGeneral.FieldByName("FCustCode").AsString == "")
|| (dtsGeneral.FieldByName("FCustName").AsString == ""))
{
ShowSweetAlert(atError,UGMM.LT("提示"),UGMM.LT("客戶程式碼或者客戶名稱不能為空!"));
return;
//exit;
}
//檢查業務員,銷售型別是否為空
if ((dtsGeneral.FieldByName("FEmpName").AsString == "")
|| (dtsGeneral.FieldByName("FSaleType").AsString == ""))
{
ShowSweetAlert(atError,UGMM.LT("提示"),UGMM.LT("業務員名稱或銷售型別不能為空!"));
return;
//exit;
}
//檢查新增客戶的客戶程式碼是否與表中已有的程式碼重複
vdts.Close;
vdts.SQL.Text = "SELECT FInterID FROM Basic_Cust WHERE FCustCode = '" + dtsGeneral.FieldByName("FCustCode").AsString + "'";
vdts.Open;
if ((vdts.RecordCount > 0) && (vdts.FieldByName("FInterID").AsString != dtsGeneral.FieldByName("FInterID").AsString))
{
ShowSweetAlert(atError,UGMM.LT("提示"),UGMM.LT("客戶程式碼重複,請重新選擇客戶程式碼輸入!"));
return;
//Exit;
}
//檢查主表是否有進行修改,被修改的主表客戶是否已經在系統內產生了單據,如有則不允許修改
vdts.Close;
vdts.SQL.Text = "SELECT 1 FROM Basic_Cust WHERE FInterID = " + dtsGeneral.FieldByName("FInterID").AsString;
vdts.Open;
if (vdts.RecordCount > 0)
{
vdts.Close;
vdts.SQL.Text = " if exists(select 1 from Sal_Order where FCustID = " + dtsGeneral.FieldByName("FInterID").AsString +") "
+" select 1 as FInterID "
+" else if exists(select 1 from Inv_CLstockBill where FCustID = " + dtsGeneral.FieldByName("FInterID").AsString +") "
+" select 1 as FInterID "
+" else if exists(select 1 from Inv_CLInvBal where FCustID = " + dtsGeneral.FieldByName("FInterID").AsString +") "
+" select 1 as FInterID "
+" else if exists(select 1 from Man_Mo where FCustID = " + dtsGeneral.FieldByName("FInterID").AsString +") "
+" select 1 as FInterID "
+" else if exists(select 1 from Man_Contact where FCustID = " + dtsGeneral.FieldByName("FInterID").AsString +") "
+" select 1 as FInterID "
+"else "
+" select 0 as FInterID ";
vdts.Open;
if (vdts.FieldByName("FInterID").AsInteger > 0)
{
//不儲存客戶資料,彈出視窗提示
UgSweetAlert1.CancelButtonText = UGMM.LT("取消");
UgSweetAlert1.ConfirmButtonText = UGMM.LT("確定");
UgSweetAlert1.Title = UGMM.LT("提示");
UgSweetAlert1.Text = UGMM.LT("檢測到該客戶資料概覽部分已被單據引用,是否僅更新收貨地址,關係和產品資訊?");
UgSweetAlert1.Show;
}
else
{
//未被引用的直接儲存
dtsGeneral.Edit;
dtsGeneral.FieldByName("FLstModDate").AsDateTime = t;
if (dtsGeneral.State is dsEdit)
dtsGeneral.Post;
dtsGeneral.ApplyUpdates(-1);
UpdateCustDetail;
ShowSweetAlert(atSuccess,UGMM.LT("提示"),UGMM.LT("數據儲存成功!"));
}
}
else
//新增的直接進行儲存
{
dtsGeneral.Edit;
dtsGeneral.FieldByName("FLstModDate").AsDateTime = t;
dtsGeneral.Post;
dtsGeneral.ApplyUpdates(-1);
UpdateCustDetail;
ShowSweetAlert(atSuccess,UGMM.LT("提示"),UGMM.LT("數據儲存成功!"));
}
//btnAppend.Enabled = True;
//btnSave.Enabled = False;
}
Finally{
vdts.Free;
}
}
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
//PasScript
//儲存
procedure btnSaveOnClick(sender: tobject);
Var
vdts: TUgRFDataSet;
t: TDateTime;
begin
t := now;
vdts := TUgRFDataSet.Create(Nil);
vdts.Connection := GetRFERP;
try
//檢查客戶資料是否為空
if (dtsGeneral.FieldByName('FCustCode').AsString = '')
or (dtsGeneral.FieldByName('FCustName').AsString = '')
Then
Begin
ShowSweetAlert(atError,UGMM.LT('提示'),UGMM.LT('客戶程式碼或者客戶名稱不能為空!'));
exit;
end;
//檢查業務員,銷售型別是否為空
if (dtsGeneral.FieldByName('FEmpName').AsString = '')
or (dtsGeneral.FieldByName('FSaleType').AsString = '')
Then
Begin
ShowSweetAlert(atError,UGMM.LT('提示'),UGMM.LT('業務員名稱或銷售型別不能為空!'));
exit;
End;
//檢查新增客戶的客戶程式碼是否與表中已有的程式碼重複
vdts.Close;
vdts.SQL.Text := 'SELECT FInterID FROM Basic_Cust WHERE FCustCode = ''' + dtsGeneral.FieldByName('FCustCode').AsString + '''';
vdts.Open;
if (vdts.RecordCount > 0) and (vdts.FieldByName('FInterID').AsString <> dtsGeneral.FieldByName('FInterID').AsString) Then
Begin
ShowSweetAlert(atError,UGMM.LT('提示'),UGMM.LT('客戶程式碼重複,請重新選擇客戶程式碼輸入!'));
Exit;
end;
//檢查主表是否有進行修改,被修改的主表客戶是否已經在系統內產生了單據,如有則不允許修改
vdts.Close;
vdts.SQL.Text := 'SELECT 1 FROM Basic_Cust WHERE FInterID = ' + dtsGeneral.FieldByName('FInterID').AsString;
vdts.Open;
if vdts.RecordCount > 0 Then
Begin
vdts.Close;
vdts.SQL.Text := ' if exists(select 1 from Sal_Order where FCustID = ' + dtsGeneral.FieldByName('FInterID').AsString +') '
+' select 1 as FInterID '
+' else if exists(select 1 from Inv_CLstockBill where FCustID = ' + dtsGeneral.FieldByName('FInterID').AsString +') '
+' select 1 as FInterID '
+' else if exists(select 1 from Inv_CLInvBal where FCustID = ' + dtsGeneral.FieldByName('FInterID').AsString +') '
+' select 1 as FInterID '
+' else if exists(select 1 from Man_Mo where FCustID = ' + dtsGeneral.FieldByName('FInterID').AsString +') '
+' select 1 as FInterID '
+' else if exists(select 1 from Man_Contact where FCustID = ' + dtsGeneral.FieldByName('FInterID').AsString +') '
+' select 1 as FInterID '
+'else '
+' select 0 as FInterID ';
vdts.Open;
IF vdts.FieldByName('FInterID').AsInteger > 0 Then
Begin
//不儲存客戶資料,彈出視窗提示
UgSweetAlert1.CancelButtonText := UGMM.LT('取消');
UgSweetAlert1.ConfirmButtonText := UGMM.LT('確定');
UgSweetAlert1.Title := UGMM.LT('提示');
UgSweetAlert1.Text := UGMM.LT('檢測到該客戶資料概覽部分已被單據引用,是否僅更新收貨地址,關係和產品資訊?');
UgSweetAlert1.Show;
End
Else
Begin
//未被引用的直接儲存
dtsGeneral.Edit;
dtsGeneral.FieldByName('FLstModDate').AsDateTime := t;
if dtsGeneral.State is dsEdit Then
dtsGeneral.Post;
dtsGeneral.ApplyUpdates(-1);
UpdateCustDetail;
ShowSweetAlert(atSuccess,UGMM.LT('提示'),UGMM.LT('數據儲存成功!'));
End;
End
Else
//新增的直接進行儲存
Begin
dtsGeneral.Edit;
dtsGeneral.FieldByName('FLstModDate').AsDateTime := t;
dtsGeneral.Post;
dtsGeneral.ApplyUpdates(-1);
UpdateCustDetail;
ShowSweetAlert(atSuccess,UGMM.LT('提示'),UGMM.LT('數據儲存成功!'));
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
// Make sure to add code blocks to your code group
- btnDeleteOnClick:
btnDelete
的OnClick
事件,點選以開啟刪除對話方塊提示。
//JScript
//刪除
function btnDeleteOnClick(sender)
{
UgSweetAlert.CancelButtonText = UGMM.LT("取消");
UgSweetAlert.ConfirmButtonText = UGMM.LT("確定");
UgSweetAlert.Title = UGMM.LT("提示");
UgSweetAlert.Text = UGMM.LT("確認要刪除此客戶資料嗎?");
UgSweetAlert.Show;
}
2
3
4
5
6
7
8
9
10
11
//PasScript
//刪除
procedure btnDeleteOnClick(sender: tobject);
begin
UgSweetAlert.CancelButtonText := UGMM.LT('取消');
UgSweetAlert.ConfirmButtonText := UGMM.LT('確定');
UgSweetAlert.Title := UGMM.LT('提示');
UgSweetAlert.Text := UGMM.LT('確認要刪除此客戶資料嗎?');
UgSweetAlert.Show;
end;
2
3
4
5
6
7
8
9
10
// Make sure to add code blocks to your code group
- btnUpdateOnClick:
btnUpdate
的OnClick
事件,點選以更新客戶資料。
//JScript
//更新客戶資料
function btnUpdateOnClick(sender)
{
UgSweetAlert2.CancelButtonText = UGMM.LT("取消");
UgSweetAlert2.ConfirmButtonText = UGMM.LT("確定");
UgSweetAlert2.Title = UGMM.LT("提示");
UgSweetAlert2.Text = UGMM.LT("確認要更新此客戶資料嗎?");
UgSweetAlert2.Show;
}
2
3
4
5
6
7
8
9
10
11
//PasScript
//更新客戶資料
procedure btnUpdateOnClick(sender: tobject);
Var
vdts : TUgRFDataSet;
begin
UgSweetAlert2.CancelButtonText := UGMM.LT('取消');
UgSweetAlert2.ConfirmButtonText := UGMM.LT('確定');
UgSweetAlert2.Title := UGMM.LT('提示');
UgSweetAlert2.Text := UGMM.LT('確認要更新此客戶資料嗎?');
UgSweetAlert2.Show;
end;
2
3
4
5
6
7
8
9
10
11
12
13
// Make sure to add code blocks to your code group
- imFCustLogoOnDblClick:
imFCustLogo
的OnDblClick
事件,雙擊打開檔案上傳對話方塊。
//JScript
function imFCustLogoOnDblClick(sender)
//客戶資料圖片處雙擊打開檔案上傳對話方塊
{
UgFileUpload01.Execute;
}
2
3
4
5
6
7
//PasScript
procedure imFCustLogoOnDblClick(sender: tobject);
//客戶資料圖片處雙擊打開檔案上傳對話方塊
begin
UgFileUpload01.Execute;
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- UgFileUpload01OnCompleted:
UgFileUpload01
的OnCompleted
事件,圖片上傳後傳送至數據集中。
//JScript
function UgFileUpload01OnCompleted(sender,astrea)
//圖片檔案上傳後傳送至數據集中
{
TBlobField(imFCustLogo.DataSource.DataSet.FieldByName(imFCustLogo.DataField)).LoadFromStream(astream);
}
2
3
4
5
6
//PasScript
procedure UgFileUpload01OnCompleted(sender: tobject;astream: tfilestream);
//圖片檔案上傳後傳送至數據集中
begin
TBlobField(imFCustLogo.DataSource.DataSet.FieldByName(imFCustLogo.DataField)).LoadFromStream(astream);
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- UgSweetAlert1OnConfirm:
UgSweetAlert1
的OnConfirm
事件,用於僅更新客戶的明細資料資訊。
//JScript
function UgSweetAlert1OnConfirm(sender)
//僅更新客戶明細資訊
{
UpdateCustDetail;
ShowSweetAlert(atSuccess,UGMM.LT("提示"),UGMM.LT("僅更新送貨地址,關係和產品資訊成功。"));
}
2
3
4
5
6
7
//PasScript
procedure UgSweetAlert1OnConfirm(sender: tobject);
//僅更新客戶明細資訊
begin
UpdateCustDetail;
ShowSweetAlert(atSuccess,UGMM.LT('提示'),UGMM.LT('僅更新送貨地址,關係和產品資訊成功。'));
end;
2
3
4
5
6
7
// Make sure to add code blocks to your code group
- UgSweetAlertOnConfirm:
UgSweetAlert
的OnConfirm
事件,用於刪除客戶資料的操作。
//JScript
function UgSweetAlertOnConfirm(sender)
//客戶資料刪除的執行操作
{
var AStoredProc,vRAISEMSG,vMSG,i,j;
//初始化預存程序,獲取需要賦值的參數
AStoredProc = new TUgRFStroedProc(nil);
AStoredProc.Connection = GETRFERP;
try{
AStoredProc.StoredProcName = "sp_Basic_Cust";
AStoredProc.Prepare;
if (AStoredProc.Prepared)
{
//參數賦值
AStoredProc.ParamByName("FDataID").AsString = dtsGeneral.FieldByName("FInterID").AsString;
AStoredProc.ParamByName("Flag").AsString = "Delete";
AStoredProc.ParamByName("FUserCode").AsString = UGMM.Informations.Values["UserFullName"];
if (AStoredProc.FindParam("FMsg") != nil)
AStoredProc.ParamByName("FMsg").AsString = "";
try{
AStoredProc.ExecProc;
}
Except{
vRAISEMSG=ExceptionMessage;
//意外情況字串處理
i = Pos("SQMESSAGE", vRAISEMSG);
j = Pos("[SQL Server]", vRAISEMSG);
vMSG = Copy(vRAISEMSG, i, Length(vRAISEMSG) - i + 1);
// 非格式化訊息提示
if (i == 0)
{
ShowSweetAlert(atError,UGMM.LT("提示"),Copy(vRAISEMSG, j + 12, Length(vRAISEMSG) - j + 1));
return;
//Exit;
}
}
}
}
finally{
AStoredProc.Free;
}
dtsGeneral.Open;
dtsCustAddrs.Open;
dtsCustRelation.Open;
dtsCustMaterial.Open;
}
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
//PasScript
procedure UgSweetAlertOnConfirm(sender: tobject);
//客戶資料刪除的執行操作
Var
AStoredProc: TUgRFStroedProc;
vRAISEMSG,vMSG: String;
i, j: Integer;
begin
//初始化預存程序,獲取需要賦值的參數
AStoredProc := TUgRFStroedProc.Create(nil);
AStoredProc.Connection := GETRFERP;
try
AStoredProc.StoredProcName := 'sp_Basic_Cust';
AStoredProc.Prepare;
if AStoredProc.Prepared then
begin
//參數賦值
AStoredProc.ParamByName('FDataID').AsString := dtsGeneral.FieldByName('FInterID').AsString;
AStoredProc.ParamByName('Flag').AsString := 'Delete';
AStoredProc.ParamByName('FUserCode').AsString := UGMM.Informations.Values['UserFullName'];
if AStoredProc.FindParam('FMsg') <> nil then
AStoredProc.ParamByName('FMsg').AsString := '';
try
AStoredProc.ExecProc;
Except{ExceptionMessage}
vRAISEMSG:=ExceptionMessage;
//意外情況字串處理
i := Pos('SQMESSAGE', vRAISEMSG);
j := Pos('[SQL Server]', vRAISEMSG);
vMSG := Copy(vRAISEMSG, i, Length(vRAISEMSG) - i + 1);
// 非格式化訊息提示
if i = 0 then
begin
ShowSweetAlert(atError,UGMM.LT('提示'),Copy(vRAISEMSG, j + 12, Length(vRAISEMSG) - j + 1));
Exit;
end;
end;
end;
finally
AStoredProc.Free;
end;
dtsGeneral.Open;
dtsCustAddrs.Open;
dtsCustRelation.Open;
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// Make sure to add code blocks to your code group
- UgSweetAlert2OnConfirm:
UgSweetAlert2
的OnConfirm
事件,更新客戶資料。
//JScript
function UgSweetAlert2OnConfirm(sender)
//更新客戶資料
{
var AStoredProc,vRAISEMSG,vMSG,i,j;
//初始化預存程序,獲取參數資訊
AStoredProc = new TUgRFStroedProc(nil);
AStoredProc.Connection = GETRFERP;
try{
AStoredProc.StoredProcName = "sp_Basic_Cust";
AStoredProc.Prepare;
if (AStoredProc.Prepared)
{
//參數賦值
AStoredProc.ParamByName("FDataID").AsString = dtsGeneral.FieldByName("FInterID").AsString;
AStoredProc.ParamByName("Flag").AsString = "Update";
AStoredProc.ParamByName("FUserCode").AsString = UGMM.Informations.Values["UserFullName"];
if (AStoredProc.FindParam("FMsg") != nil)
AStoredProc.ParamByName("FMsg").AsString = "";
try{
AStoredProc.ExecProc;
}
Except{
vRAISEMSG=ExceptionMessage;
//異常資訊處理
i = Pos("SQMESSAGE", vRAISEMSG);
j = Pos("[SQL Server]", vRAISEMSG);
vMSG = Copy(vRAISEMSG, i, Length(vRAISEMSG) - i + 1);
// 非格式化訊息提示
if (i == 0)
{
ShowSweetAlert(atError,UGMM.LT("提示"),Copy(vRAISEMSG, j + 12, Length(vRAISEMSG) - j + 1));
return;
//Exit;
}
}
}
}
finally{
AStoredProc.Free;
}
}
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
//PasScript
procedure UgSweetAlert2OnConfirm(sender: tobject);
//更新客戶資料
Var
AStoredProc: TUgRFStroedProc;
vRAISEMSG,vMSG: String;
i, j: Integer;
begin
//初始化預存程序,獲取參數資訊
AStoredProc := TUgRFStroedProc.Create(nil);
AStoredProc.Connection := GETRFERP;
try
AStoredProc.StoredProcName := 'sp_Basic_Cust';
AStoredProc.Prepare;
if AStoredProc.Prepared then
begin
//參數賦值
AStoredProc.ParamByName('FDataID').AsString := dtsGeneral.FieldByName('FInterID').AsString;
AStoredProc.ParamByName('Flag').AsString := 'Update';
AStoredProc.ParamByName('FUserCode').AsString := UGMM.Informations.Values['UserFullName'];
if AStoredProc.FindParam('FMsg') <> nil then
AStoredProc.ParamByName('FMsg').AsString := '';
try
AStoredProc.ExecProc;
Except{ExceptionMessage}
vRAISEMSG:=ExceptionMessage;
//異常資訊處理
i := Pos('SQMESSAGE', vRAISEMSG);
j := Pos('[SQL Server]', vRAISEMSG);
vMSG := Copy(vRAISEMSG, i, Length(vRAISEMSG) - i + 1);
// 非格式化訊息提示
if i = 0 then
begin
ShowSweetAlert(atError,UGMM.LT('提示'),Copy(vRAISEMSG, j + 12, Length(vRAISEMSG) - j + 1));
Exit;
end;
end;
end;
finally
AStoredProc.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
// Make sure to add code blocks to your code group
- UgWebRunFrameOnAfterRunScript:
UgWebRunFrame
的OnAfterRunScript
事件,初始化。
//JScript
function UgWebRunFrameOnAfterRunScript(sender)
{
UGMM.LC(Self);
//客戶分類查詢表
dtsCustGroup.Connection = GetRFERP;
dtsCustGroup.SQL.Text = "SELECT FInterID AS FGroupID,FGroupName FROM Basic_CustGroup";
dtsCustGroup.Open;
//結帳客戶查詢表
dtsInvoiceCust.Connection = GetRFERP;
dtsInvoiceCust.SQL.Text = "SELECT FInterID AS FInVoiceCustID,FCustCode AS FInvoiceCustCode,FCustName AS " +
"FInvoiceCustName FROM Basic_Cust";
dtsInvoiceCust.Open;
//區域
dtsFDistrict.Connection = GetRFERP;
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 = '" + UGMM.LT("地區") + "'";
dtsFDistrict.Open;
//業務員
dtsEmp.Connection = GetRFERP;
dtsEmp.SQL.Text = "SELECT FInterID AS FEmpID,FEmpCode,FEmpName,FDeptID,FDeptCode,FDeptName FROM Basic_Employee";
dtsEmp.Open;
//幣種資料
dtsCurrency.Connection = GetRFERP;
dtsCurrency.SQL.Text = "SELECT FCode as FCurrencyCode,FName as FCurrencyName,FInterID AS FCurrencyID,FExRate AS "+
"FExchangeRate FROM Basic_Currency";
dtsCurrency.Open;
//銷售型別
dtsSaleType.Connection = GetRFERP;
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 = '" + UGMM.LT("銷售型別") + "'";
dtsSaleType.Open;
//發票型別
dtsInvoiceType.Connection = GetRFERP;
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 = '" + UGMM.LT("發票型別") + "'";
dtsInvoiceType.Open;
//付款方式
dtsPayItem.Connection = GetRFERP;
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 = '" + UGMM.LT("付款方式") + "'";
dtsPayItem.Open;
//結算方式
dtsSettle.Connection = GetRFERP;
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 = '" + UGMM.LT("結算方式") + "'";
dtsSettle.Open;
//物料資訊
dtsItem.Connection = GetRFERP;
dtsItem.SQL.Text = "select A.FInterID as FItemID,A.FItemCode,A.FItemName,A.FItemSpec,A.FUnitID,A.FUnitCode,A.FUnitName, "
+ "b.FCoefficient,dbo.fun_GetPY(A.FItemName) as PY from Basic_Item A "
+ "left join basic_Unit B on a.FUnitID = b.FInterID "
+ "left join Basic_ItemGroup c on a.FGroupID = c.FInterID "
+ "where A.FTypeID=1 and isnull(FfrozenFor,0) = 0 "
+ "Order by FItemCode";
dtsItem.Open;
//分組型別的初始化設定
rgFCustomerType.Items.CommaText = UGMM.LT("國內客戶,國外客戶");
}
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
//PasScript
no PasScript
2
// Make sure to add code blocks to your code group
# 2.3.5. 多語言設定
點選FastWeb低程式碼開發平臺功能表導航項中的系統管理
-翻譯
-詞條維護
。
收集此頁面視窗中所有需要進行翻譯的詞條(包括程式中設定的多語言專案),點選新增
按鈕,根據提示填寫維護。
# 2.3.6. 運行效果
# 3. 業務單據頁面設定
# 3.1. 銷售訂單-多筆數據主從表單
點選功能表導航欄中的模組列表(WEB)
,在打開的模組列表中點選新增
按鈕,新增標題為銷售訂單
的模組,新增的內容樣式如下,主要填寫組別
、編號
、標題
、開發使用者
等內容,使用PasScript的使用者編號請填寫為 W-EQ-MOD-2134-1
,使用JScript的使用者編號請填寫 W-EQ-MOD-2134-2
。填寫完成後,點選儲存
按鈕。
選擇剛才建立的標題為銷售訂單
的模組,點選上方的模組設計
按鈕,進入模組設計界面。
銷售訂單的頁面設定如下圖。
# 3.1.1. 功能簡述
此頁面用於查詢銷售訂單資訊,功能涉及到查詢條件的引入,初始化單據等。
# 3.1.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Align | alClient | 佈局填滿整個客戶端 |
# 3.1.3. 控制元件設定
- 控制元件說明
TUgPanel
型別的控制元件在運行
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
UgPanel01 | TUgPanel | 佈局控制元件,放置於左側位置Title :查詢條件TitleAlign :taLeftJustifyTitlePosition :tpLeft Collapsible :True |
UgContainerPanel01 | TUgContainerPanel | 佈局控制元件,在UgPanel01中放置,用於放置查詢條件及按鈕等控制元件 |
dtpBegin | TUgDateTimePicker | 用於設定起始時間DateTime :2021-01-01FieldLabel :訂單日期FieldLabelAlign :laTop |
dtpEnd | TUgDateTimePicker | 用於設定截止時間DateTime :2021-03-01FieldLabel :訂單日期FieldLabelAlign :laTop |
edQuery | TUgEdit | 用於設定輸入的內容FieldLabel :客戶程式碼或名稱FieldLabelAlign :laTop EmptyText :輸入客戶程式碼或名稱 |
edFBillNo | TUgEdit | 用於設定輸入的單據編號FieldLabel :單據編號FieldLabelAlign :laTop |
UgComboBox01 | TUgComboBox | 用於設定查詢的單據狀態FieldLabel :單據狀態FieldLabelAlign :laTop |
btnQuery | TUgBitBtn | 設定查詢按鈕Caption :查詢IconCls :Search |
btnClear | TUgBitBtn | 設定清除按鈕Caption :清除 |
btnAppend | TUgBitBtn | 設定新建按鈕Caption :新建 |
dts1 | TUgRFDataSet | 銷售訂單數據集 |
ds1 | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dts1 。 |
UgHiddenPanel01 | TUgHiddenPanel | 隱藏面板,用於隱藏一些用於定義類的控制元件。 |
btnWidgeEdit | TUgButtonWidget | 按鈕佈局控制元件,用於在表格中設定按鈕Caption :檢視 |
UgDBGrid01 | TUgDBGrid | 表格DataSource :ds1WebOptions.Paged :False |
btnEditor | TUgBitBtn | 設定編輯按鈕Caption :編輯Visible :False |
btnChart | TUgButton | 設定排名分析按鈕Caption : 排名分析 |
- UgDBGrid01欄位設定
選擇並雙擊UgDBGrid01
控制元件,打開欄位編輯器,根據下圖顯示的內容進行編輯。點選左上角的+
或者-
進行新增行或刪除行操作。雙擊FieldName
或者Caption
可修改對應行的欄位名稱或者顯示標題內容。ReadOnly
用於設定欄位是否為可讀屬性。
設定完成後,在窗體結構與檢視器中選擇剛才建立的欄位FOperation
,修改WidgetColumn.Enabled
為True
,指定Widget
為btnWidget
。
# 3.1.4. 程式設計
在初始設定程式時,使用JScript使用者需勾選pub_js_tarslink
與pub_js_messageinfo
單元,使用PasScript的使用者請勾選pub_pas_tarslink
與pub_pas_messageinfo
單元。
- 初始設定:設定顯示數據集的初始化內容。(僅限PasScript)。
Begin
//打開頁面顯示,初始化控制元件顯示
dts1.Close;
dts1.Connection := GetRFERP;
resume;
UgComboBox01.Items.CommaText := UGMM.LT('全部,已審覈,草稿,作廢');
UgComboBox01.ItemIndex := 0;
UgComboBoxSelect;
dts1.Open;
End.
2
3
4
5
6
7
8
9
10
- btnQueryOnClick:
btnQuery
的OnClick
時間,點選查詢資訊,將查詢條件中的內容引入至查詢SQL中。
//JScript
function btnQueryOnClick(sender)
//查詢資訊,將查詢條件中的內容引入至查詢SQL中
{
dts1.Close;
resume;
if (edQuery.Text != "")
dts1.AddWhere("a.FCustCode LIKE '%" + edQuery.Text + "%' or a.FCustName LIKE '%" + edQuery.Text + "%'");
if (edFBillNo.Text != "")
dts1.AddWhere("a.FBillNo LIKE '%" + edFBillNo.Text + "%'");
UgComboBoxSelect;
dts1.Open;
}
2
3
4
5
6
7
8
9
10
11
12
13
//PasScript
procedure btnQueryOnClick(sender: tobject);
//查詢資訊,將查詢條件中的內容引入至查詢SQL中
begin
dts1.Close;
resume;
if edQuery.Text <> '' Then
dts1.AddWhere('a.FCustCode LIKE ''%' + edQuery.Text + '%'' or a.FCustName LIKE ''%' + edQuery.Text + '%''');
if edFBillNo.Text <> '' Then
dts1.AddWhere('a.FBillNo LIKE ''%' + edFBillNo.Text + '%''');
UgComboBoxSelect;
dts1.Open;
end;
2
3
4
5
6
7
8
9
10
11
12
13
// Make sure to add code blocks to your code group
- btnClearOnClick:
btnClear
的OnClick
時間,點選清除查詢條件,初始化查詢條件設定。
//JScript
function btnClearOnClick(sender)
//清除查詢條件,初始化查詢條件設定
{
edQuery.Text = "";
edFBillNo.Text = "";
dts1.Close;
resume;
UgComboBoxSelect;
dts1.Open;
}
2
3
4
5
6
7
8
9
10
11
//PasScript
procedure btnClearOnClick(sender: tobject);
//清除查詢條件,初始化查詢條件設定
begin
edQuery.Text := '';
edFBillNo.Text := '';
dts1.Close;
resume;
UgComboBoxSelect;
dts1.Open;
end;
2
3
4
5
6
7
8
9
10
11
// Make sure to add code blocks to your code group
- UgComboBoxSelect:覈取方塊的設定,確認查詢狀態條件。
//JScript
function UgComboBoxSelect()
//覈取方塊設定
{
if (UgComboBox01.ItemIndex == 0)
dts1.AddWhere("a.FStatus IN (0,1,2)");
if (UgComboBox01.ItemIndex == 1)
dts1.AddWhere("a.FStatus = 2" );
if (UgComboBox01.ItemIndex == 2)
dts1.AddWhere("a.FStatus = 1");
if (UgComboBox01.ItemIndex == 3)
dts1.AddWhere("a.FStatus = 0");
}
2
3
4
5
6
7
8
9
10
11
12
13
14
//PasScript
Procedure UgComboBoxSelect;
//覈取方塊設定
Begin
if UgComboBox01.ItemIndex = 0 then
dts1.AddWhere('a.FStatus IN (0,1,2)');
IF UgComboBox01.ItemIndex = 1 Then
dts1.AddWhere('a.FStatus = 2' );
If UgComboBox01.ItemIndex = 2 Then
dts1.AddWhere('a.FStatus = 1');
If UgComboBox01.ItemIndex = 3 Then
dts1.AddWhere('a.FStatus = 0');
End;
2
3
4
5
6
7
8
9
10
11
12
13
// Make sure to add code blocks to your code group
- resume:設定恢復初始查詢條件。
//JScript
function resume()
//恢復初始查詢條件的設定
{
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 '" +
UGMM.LT("已作廢") + "' WHEN 1 THEN '" + UGMM.LT("草 稿") + "' WHEN 2 THEN '" +
UGMM.LT("已審覈") + "' 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";
dts1.AddWhere("a.FDate between '" + DateToStr(dtpBegin.DateTime) + "' and '" + DateToStr(dtpEnd.DateTime) + "'");
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//PasScript
procedure resume;
//恢復初始查詢條件的設定
Begin
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 ''' +
UGMM.LT('已作廢') + ''' WHEN 1 THEN ''' + UGMM.LT('草 稿') + ''' WHEN 2 THEN ''' +
UGMM.LT('已審覈') + ''' 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';
dts1.AddWhere('a.FDate between ''' + DateToStr(dtpBegin.DateTime) + ''' and ''' + DateToStr(dtpEnd.DateTime) + '''');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Make sure to add code blocks to your code group
- btnAppendOnClick:
btnAppend
的OnClick
時間,點選以新增銷售訂單。
//JScript
function btnAppendOnClick(sender)
//新增銷售訂單
{
var F,D,DA,DList,i,FInterID;
//明細數據集為空空時退出
if (dts1.IsEmpty) {return;}
//打開視窗W-EQ-MOD-2135-2
F = UGMM.GetWebSubForm("W-EQ-MOD-2135-2");
F.Caption = UGMM.LT("編輯銷售訂單");
//翻譯
UGMM.LC(F);
//產生單據ID
FInterID = GetNodeID;
D = TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dts0"));
//D.SQL.Text = "select a.* from Sal_Order a(NOLOCK) where a.FInterID =:FInterID";
D.ParamByName("FInterID").AsInteger = FInterID;
D.Open;
D.Append;
//產生單據號及關聯資訊
D.FieldByName("FInterID").AsInteger = FInterID;
D.FieldByName("FBillID").AsInteger = 12020002;
D.FieldByName("FBillNo").AsString = GetBillNo("12020002",now,True);
D.FieldByName("FDate").AsDateTime = Date;
D.FieldByName("FSignDate").AsDateTime = Date;
D.FieldByName("FContractNo").AsString = D.FieldByName("FBillNo").AsString;
D.FieldByName("FExchangeRate").AsInteger = 1;
D.FieldByName("FStatus").AsInteger = 1;
D.FieldByName("FClosed").AsInteger = 0;
D.FieldByName("FBiller").AsString = UGMM.Informations.Values["UserFullName"];
D.FieldByName("FCreateDate").AsDateTime = now;
//明細數據集更新
DA = TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dts1"));
DA.ParamByName("FInterID").AsString = D.FieldByName("FInterID").AsString;
DA.Open;
//數據列表更新
DList = TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsList"));
DList.Locate("FInterID",dts1.FieldByName("FInterID").AsString,nil);
TUgWebRunFrame(TUgWebForm(F).RunFrame).ExecuteCode("RefState(-1);");
if (F.ShowModal == mrOK)
{
}
//關閉釋放視窗W-EQ-MOD-2135-2
UGMM.DelWebSubForm("W-EQ-MOD-2135-2");
btnQueryOnClick(sender);
}
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
//PasScript
procedure btnAppendOnClick(sender: tobject);
//新增銷售訂單
Var
F:TUniForm;
D:TUgRFDataSet;
DA: TUgRFDataSet;
DList: TUgRFDataSet;
i:String;
FInterID: Integer;
begin
//明細數據集為空空時退出
if dts1.IsEmpty then Exit;
//銷售訂單編輯W-EQ-MOD-2135-1
F := UGMM.GetWebSubForm('W-EQ-MOD-2135-1');
F.Caption := UGMM.LT('編輯銷售訂單');
//翻譯
UGMM.LC(F);
//產生單據ID
FInterID := GetNodeID;
D := TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dts0'));
//D.SQL.Text := 'select a.* from Sal_Order a(NOLOCK) where a.FInterID =:FInterID';
D.ParamByName('FInterID').AsInteger := FInterID;
D.Open;
D.Append;
//產生單據號及關聯資訊
D.FieldByName('FInterID').AsInteger := FInterID;
D.FieldByName('FBillID').AsInteger := 12020002;
D.FieldByName('FBillNo').AsString := GetBillNo('12020002',now,True);
D.FieldByName('FDate').AsDateTime := Date;
D.FieldByName('FSignDate').AsDateTime := Date;
D.FieldByName('FContractNo').AsString := D.FieldByName('FBillNo').AsString;
D.FieldByName('FExchangeRate').AsInteger := 1;
D.FieldByName('FStatus').AsInteger := 1;
D.FieldByName('FClosed').AsInteger := 0;
D.FieldByName('FBiller').AsString := UGMM.Informations.Values['UserFullName'];
D.FieldByName('FCreateDate').AsDateTime := now;
//明細數據集更新
DA := TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dts1'));
DA.ParamByName('FInterID').AsString := D.FieldByName('FInterID').AsString;
DA.Open;
//數據列表更新
DList := TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsList'));
DList.Locate('FInterID',dts1.FieldByName('FInterID').AsString,nil);
TUgWebRunFrame(TUgWebForm(F).RunFrame).ExecuteCode('RefState(-1);');
if F.ShowModal = mrOK then
Begin
End;
//關閉釋放視窗W-EQ-MOD-2135-1
UGMM.DelWebSubForm('W-EQ-MOD-2135-1');
btnQueryOnClick(sender);
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
// Make sure to add code blocks to your code group
- btnEditorOnClick:
btnEditor
的OnClick
事件,點選打開新視窗以編輯銷售訂單。btnEditor
在頁面中不可見。
//JScript
function btnEditorOnClick(sender)
//編輯銷售訂單
{
var F,D,DA,DList,i;
//無明細選擇時退出
if (dts1.IsEmpty) {return;}
//打開視窗頁面W-EQ-MOD-2135-2
F = UGMM.GetWebSubForm("W-EQ-MOD-2135-2");
F.Caption = UGMM.LT("編輯銷售訂單");
//翻譯
UGMM.LC(F);
//主數據集打開
D = TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dts0"));
D.ParamByName("FInterID").AsString = dts1.FieldByName("FInterID").AsString;
D.Open;
//明細數據集打開
DA = TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dts1"));
DA.ParamByName("FInterID").AsString = dts1.FieldByName("FInterID").AsString;
DA.Open;
//列表數據集打開
DList = TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsList"));
DList.Locate("FInterID",dts1.FieldByName("FInterID").AsString,nil);
//重新整理頁面編輯狀態
TUgWebRunFrame(TUgWebForm(F).RunFrame).ExecuteCode("RefState(" + D.FieldByName("FStatus").AsString + ");");
if (F.ShowModal == mrOK)
{
}
//關閉釋放視窗W-EQ-MOD-2135-2
UGMM.DelWebSubForm("W-EQ-MOD-2135-2");
btnQueryOnClick(sender);
}
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
//PasScript
procedure btnEditorOnClick(sender: tobject);
//編輯銷售訂單
Var
F:TUniForm;
D:TUgRFDataSet;
DA: TUgRFDataSet;
DList: TUgRFDataSet;
i:String;
begin
//無明細選擇時退出
if dts1.IsEmpty then Exit;
//打開視窗頁面W-EQ-MOD-2135-1
F := UGMM.GetWebSubForm('W-EQ-MOD-2135-1');
F.Caption := UGMM.LT('編輯銷售訂單');
//翻譯
UGMM.LC(F);
//主數據集打開
D := TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dts0'));
D.ParamByName('FInterID').AsString := dts1.FieldByName('FInterID').AsString;
D.Open;
//明細數據集打開
DA := TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dts1'));
DA.ParamByName('FInterID').AsString := dts1.FieldByName('FInterID').AsString;
DA.Open;
//列表數據集打開
DList := TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsList'));
DList.Locate('FInterID',dts1.FieldByName('FInterID').AsString,nil);
//重新整理頁面編輯狀態
TUgWebRunFrame(TUgWebForm(F).RunFrame).ExecuteCode('RefState(' + D.FieldByName('FStatus').AsString + ');');
if F.ShowModal = mrOK then
Begin
End;
//關閉釋放視窗
UGMM.DelWebSubForm('W-EQ-MOD-2135-1');
btnQueryOnClick(sender);
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
// Make sure to add code blocks to your code group
- btnRefreshOnClick:
btnRefresh
的OnClick
事件,點選以重新整理顯示。
//JScript
function btnRefreshOnClick(sender)
//重新整理
{
dts1.Close;
resume;
dts1.Open;
}
2
3
4
5
6
7
8
//PasScript
procedure btnRefreshOnClick(sender: tobject);
//重新整理
begin
dts1.Close;
resume;
dts1.Open;
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
- btnChartOnClick:
btnChart
的OnClick
事件,點選以打開銷售訂單排名分析視窗。
//JScript
function btnChartOnClick(sender)
{
//打開視窗銷售訂單排名分析
var F = UGMM.GetWebSubForm("W-EQ-MOD-2136-2");
F.Caption = UGMM.LT("銷售訂單排名分析");
//翻譯
UGMM.LC(F);
//關閉釋放視窗
if (F.ShowModal == mrOK)
{
}
UGMM.DelWebSubForm("W-EQ-MOD-2136-2");
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//PasScript
procedure btnChartOnClick(sender: tobject);
Var
F:TUniForm;
begin
//打開銷售訂單排名分析W-EQ-MOD-2136-1
F := UGMM.GetWebSubForm('W-EQ-MOD-2136-1');
F.Caption := UGMM.LT('銷售訂單排名分析');
//翻譯
UGMM.LC(F);
//關閉釋放視窗
if F.ShowModal = mrOK then
Begin
End;
UGMM.DelWebSubForm('W-EQ-MOD-2136-1');
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Make sure to add code blocks to your code group
- UgWebRunFrameOnAfterRunScript:
UgWebRunFrame
的OnAfterRunScript
事件,啟用翻譯功能。
//JScript
function UgWebRunFrameOnAfterRunScript(sender)
//翻譯及許可權驗證
{
UGMM.LC(Self);
//打開頁面顯示,初始化控制元件顯示
dts1.Close;
dts1.Connection = GetRFERP;
resume;
UgComboBox01.Items.CommaText = UGMM.LT("全部,已審覈,草稿,作廢");
UgComboBox01.ItemIndex = 0;
UgComboBoxSelect;
dts1.Open;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
//PasScript
procedure UgWebRunFrameOnAfterRunScript(const sender: tobject);
//翻譯及許可權驗證
begin
UGMM.LC(Self);
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- btnShowAllOnClick:
btnShowAll
的OnClick
事件,顯示全部內容。
//JScript
function btnShowAllOnClick(sender)
//顯示全部
{
UgDBGrid01.WebOptions.Paged = False;
UgDBGrid01.Refresh;
}
2
3
4
5
6
7
//PasScript
procedure btnShowAllOnClick(sender: tobject);
//顯示全部
begin
UgDBGrid01.WebOptions.Paged := False;
UgDBGrid01.Refresh;
end;
2
3
4
5
6
7
// Make sure to add code blocks to your code group
- btnExitOnClick:
btnExit
的OnClick
事件,點選以退出。
//JScript
function btnExitOnClick(sender)
//退出
{
var p = Self.Parent;
if (p is TUgWebForm)
{
TUgWebForm(p).Close;
}
if (p is TUniTabSheet)
UniSession.AddJS("document.getElementById(\"" + TUniTabSheet(p).jsid + "_tab-closeEl\").click();");
}
2
3
4
5
6
7
8
9
10
11
12
//PasScript
procedure btnExitOnClick(sender: tobject);
//退出
Var
p:TComponent;
Begin
p:=Self.Parent;
if p is TUgWebForm then
Begin
TUgWebForm(p).Close;
End;
if p is TUniTabSheet then
UniSession.AddJS('document.getElementById("' + TUniTabSheet(p).jsid + '_tab-closeEl").click();');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
// Make sure to add code blocks to your code group
- btnWidgetEditOnClick:
btnWidgetEdit
的OnClick
事件,按鈕位於表格中,點選以打開對應的編輯頁面。
//JScript
function btnWidgetEditOnClick(sender)
//編輯功能
{
btnEditorOnClick(Sender);
}
2
3
4
5
6
//PasScript
procedure btnWidgetEditOnClick(sender: tobject);
//編輯功能
begin
btnEditorOnClick(Sender);
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- UgComboBox01OnChange:
UgComboBox01
的OnChange
事件,切換時更新查詢條件,設定顯示不同單據狀態的單據。
//JScript
function UgComboBox01OnChange(sender)
//切換時更新單據頁面顯示
{
dts1.Close;
resume;
UgComboBoxSelect;
dts1.Open;
}
2
3
4
5
6
7
8
9
//PasScript
procedure UgComboBox01OnChange(sender: tobject);
//切換時更新單據頁面顯示
begin
dts1.Close;
resume;
UgComboBoxSelect;
dts1.Open;
end;
2
3
4
5
6
7
8
9
// Make sure to add code blocks to your code group
# 3.1.5. 多語言設定
點選FastWeb低程式碼開發平臺功能表導航項中的系統管理
-翻譯
-詞條維護
。
收集此頁面視窗中所有需要進行翻譯的詞條(包括程式中設定的多語言專案),點選新增
按鈕,根據提示填寫維護。
# 3.1.6. 運行效果
# 3.2. 銷售訂單編輯-多筆數據主從表單
點選功能表導航欄中的模組列表(WEB)
,在打開的模組列表中點選新增
按鈕,新增標題為銷售訂單編輯
的模組,新增的內容樣式如下,主要填寫組別
、編號
、標題
、開發使用者
等內容,使用PasScript的使用者編號請填寫為 W-EQ-MOD-2135-1
,使用JScript的使用者編號請填寫 W-EQ-MOD-2135-2
。填寫完成後,點選儲存
按鈕。
選擇剛才建立的標題為銷售訂單編輯
的模組,點選上方的模組設計
按鈕,進入模組設計界面。
銷售訂單編輯的頁面設定如下圖。
# 3.2.1. 功能簡述
此頁面用於編輯銷售訂單的資訊,執行審覈、列印等操作,功能涉及到視窗數據集的數據匯入、查詢表數據的引入、審覈、消審功能的預存程序的引入、視窗列印與Flying列印的引入。
# 3.2.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Height | 607 | 主窗體的高度(畫素) |
Width | 850 | 主窗體的寬度(畫素) |
# 3.2.3. 控制元件設定
- 控制元件說明
修改控制元件設定時注意TUgPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
UgPanel01 | TUgPanel | 面板控制元件,頂部按鈕佈局容器 |
UgContainerPanel01 | TUgContainerPanel | 面板控制元件,頂部佈局,顯示訂單日期,狀態資訊等控制元件的佈局容器 |
UgGroupBox01 | TUgGroupBox | 分組框控制元件,設定顯示訂單資訊的數據感知控制元件,Caption :訂單資訊 |
UgPageControl01 | TUgPageControl | 標籤頁面分組控制元件,在窗體結構與檢視器中單擊選擇UgPageControl01 ,點選檢視器上方的新增按鈕新增標籤頁TUniabSheet 新增四個標籤頁面 |
UniTabSheet1 | TUniTabSheet | PageControl1 中的標籤頁面1Caption :訂單明細 |
UniTabSheet2 | TUniTabSheet | PageControl1 中的標籤頁面2Caption :訂單要求 |
UniTabSheet3 | TUniTabSheet | PageControl1 中的標籤頁面3Caption :裝運及包裝要求 |
UniTabSheet4 | TUniTabSheet | PageControl1 中的標籤頁面4Caption :附件 |
btnAppend | TUgBitBtn | 新建按鈕,點選以新建銷售訂單Caption :新建 |
btnFirst | TUgBitBtn | 首項按鈕,點選跳轉至記錄的首頁Caption :首項 |
btnPrior | TUgBitBtn | 前項按鈕,點選跳轉至記錄的前項Caption :前項 |
btnNext | TUgBitBtn | 後項按鈕,點選跳轉至記錄的後項Caption :後項 |
btnLast | TUgBitBtn | 末項按鈕,點選跳轉至記錄的末項Caption :末項 |
btnSave | TUgBitBtn | 儲存按鈕,點選以儲存單據的更改Caption :儲存 |
btnExit | TUgBitBtn | 退出按鈕,點選以退出視窗Caption :退出 |
btnMenu | TUgMenuButton | 功能表按鈕,用於放置特定的功能表專案 |
btnPrint | TUgBitBtn | Flying列印按鈕Caption :Flying列印 |
btnPrintMenu | TUgMenuButton | 功能表按鈕,用於放置列印相關的功能表專案 |
UgPopupMenu01 | TUgPopupMenu | 設定功能表項的控制元件,在其中的Item專案中點選新增新增4個專案,分別命名為審覈 、消審 、作廢 、還原 、刪除 PopupCompoment :btnMenu |
ComboBoxPrinter | TUgComboBox | 用於顯示印表機列表Visible :控制元件是否可見,設定為False |
dts0 | TUgRFDataSet | 銷售訂單主表數據集 |
ds0 | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dts0 |
dtsFStatus | TUgRFDataSet | 狀態表數據集 |
dsFStatus | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFStatus |
dtsFStatus | TUgRFDataSet | 狀態表數據集 |
dsFStatus | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFStatus |
dtsFSaleType | TUgRFDataSet | 銷售型別數據集 |
dsFSaleType | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFSaleType |
dtsFCustID | TUgRFDataSet | 客戶名稱數據集 |
dsFCustID | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFCustID |
dtsFCurrencyID | TUgRFDataSet | 幣種資料數據集 |
dsFCurrencyID | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFCurrencyID |
dtsFDeptID | TUgRFDataSet | 部門名稱數據集 |
dsFDpetID | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFDeptID |
dtsFEmpID | TUgRFDataSet | 業務員名稱數據集 |
dsFEmpID | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsFDeptEmpID |
dtsList | TUgRFDataSet | 銷售訂單單據資訊數據集 |
dtsCust | TUgRFDataSet | 客戶資料數據集資訊 |
dtsCompany | TUgRFDataSet | 公司資料數據集資訊 |
UgTimer01 | TUgTimer | 定時器 |
UgSweetAlertClose | TUgSweetAlert | 在關閉時使用的訊息提示對話方塊。 |
UgFlying | TUgFlying | HttpPort :8808ReportName :Sal_Order.fr3 |
- 主數據集數據感知控制元件說明
此頁面中首頁繫結的數據源DataSource
為ds0
,以下數據感知控制元件需修改每一個控制元件的以下屬性。TUgDBImage
、TUgDBCheckBox
控制元件型別的除外。
屬性 | 取值 | 說明 |
---|---|---|
FieldLabel | 取值對應為數據欄位的中文名稱,作為控制元件顯示的標籤 | |
FieldLabelWidth | 60 | 設定標籤顯示欄位的寬度 |
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FDate | 訂單日期 | TUgDBDateTimePicker | dts0FDate | |
FSaleType | 銷售型別 | TUgDBLookupComboBox | lkupdts0FSaleType | 列表繫結的數據源ListSource :dsFSaleType列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField : FName |
FStatus | 狀態 | TUgDBLookupComboBox | lkupdts0FSaleType | 列表繫結的數據源ListSource :dsFStatus列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField : FIDFont.Size :20Font.Name :標楷體Font.Style.fsBold :TrueFieldLabel 預設為空 |
FBillNo | 單據編號 | TUgDBEdit | eddts0FBillNo | ReadOnly :False |
FCustID | 客戶名稱 | TUgDBLookupComboBox | lkupdts0FCustID | 列表繫結的數據源ListSource :dsFCustID列表顯示的欄位名 ListField :FCustName列表對應返回的欄位值 KeyField :FCustID |
FContractNo | 合同號 | TUgDBEdit | eddts0FContractNo | |
FCurrencyID | 幣種 | TUgDBLookupComboBox | lkupdts0FCurrencyID | 列表繫結的數據源ListSource :dsFCurrencyID列表顯示的欄位名 ListField :FCurrencyName列表對應返回的欄位值 KeyField :FCurrencyID |
FDeptID | 部門名稱 | TUgDBLookupComboBox | lkupdts0FDeptID | 列表繫結的數據源ListSource :dsFDeptID列表顯示的欄位名 ListField :FDeptName列表對應返回的欄位值 KeyField :FDeptID |
FEmpID | 業務員 | TUgDBLookupComboBox | lkupdts0FEmpID | 列表繫結的數據源ListSource :dsFEmpID列表顯示的欄位名 ListField :FEmpName列表對應返回的欄位值 KeyField :FEmpID |
FExchangeRate | 匯率 | TUgDBNumberEdit | eddts0FExchangeRate | |
FNote | 備註 | TUgDBMemo | mmdts0FNote |
- UniTabSheet01控制元件說明
TPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
UgPanel02 | TUgPanel | 佈局控制元件,佈局于頂部位置,放置按鈕 |
btnDelRow | TBitBtn | 刪除行按鈕Caption :刪除行 |
btnCopyRow | TBitBtn | 複製行Caption :複製行 |
btnImportItem | TBitBtn | 匯入物料Caption :匯入物料 |
dts1 | TRFDataSet | 銷售訂單明細數據集 |
ds1 | TDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dts1 |
UgDBGrid01 | TUgDBGrid | 銷售訂單明細數據表格DataSource :ds1 |
- UgDBGrid01欄位設定
選擇並雙擊UgDBGrid01
控制元件,打開欄位編輯器,根據下圖顯示的內容進行編輯。點選左上角的+
或者-
進行新增行或刪除行操作。雙擊FieldName
或者Caption
可修改對應行的欄位名稱或者顯示標題內容。ReadOnly
用於設定欄位是否為可讀屬性。
- TUniabSheet2數據感知控制元件說明
此頁面中首頁繫結的數據源DataSource
為ds0
,
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FOrderRequest | 訂單要求 | TUgDBMemo | memodts0FOrderRequest | Align :alClientFieldLabel :訂單要求FieldLabelWidth :60 |
- UniTabSheet3控制元件說明
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
dtsPort | TUgRFDataSet | 港口資訊數據集 |
dsPort | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為dtsPort |
- UniTabSheet3數據感知控制元件說明
此頁面中首頁繫結的數據源DataSource
為ds0
,以下數據感知控制元件需修改每一個控制元件的以下屬性。TUgDBImage
、TUgDBCheckBox
控制元件型別的除外。
屬性 | 取值 | 說明 |
---|---|---|
FieldLabel | 取值對應為數據欄位的中文名稱,作為控制元件顯示的標籤 | |
FieldLabelWidth | 60 | 設定標籤顯示欄位的寬度 |
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FSignDate | 簽訂日期 | TUgDBDateTimePicker | dtpdts0FSignDate | |
FSignAddr | 簽訂地點 | TUgDBEdit | eddts0FSignAddr | |
FBeginPort | 出發港口 | TUgDBLookupComboBox | lkupdtts0FBeginPort | 列表繫結的數據源ListSource :dsPort列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField :FName |
FEndPort | 目的港口 | TUgDBLookupComboBox | lkupdts0FEndPort | 列表繫結的數據源ListSource :dsPort列表顯示的欄位名 ListField :FName列表對應返回的欄位值 KeyField :FName |
FTrafficType | 運輸方式 | TUgDBEdit | eddts0FTrafficType | |
FPacket | 包裝方式 | TUgDBMemo | mmFPacket |
- UniTabSheet4控制元件說明
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
btnUpload | TUgBitBtn | 上傳按鈕Caption :上傳圖片 |
- UniTabSheet4數據感知控制元件說明
此頁面中首頁繫結的數據源DataSource
為ds0
。
數據欄位名稱 | 中文名稱 | 對應控制元件型別 | 控制元件名稱 | 備註 |
---|---|---|---|---|
FImage | 訂單圖片 | TUgDBImage | imgdts0FImage |
# 3.2.4. 程式設計
在初始設定程式時,使用JScript使用者需勾選pub_js_tarslink
與pub_js_messageinfo
單元,使用PasScript的使用者請勾選pub_pas_tarslink
與pub_pas_messageinfo
單元。
- 初始設定:設定顯示數據集的初始化內容。
//JScript
//定義銷售訂單
var FBillID = 12020002;
2
3
//PasScript
Const
//定義銷售訂單
FBillID = 12020002;
//......
Begin
//數據集初始設定
dts0.Connection := GETRFERP;
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.Connection := GETRFERP;
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';
//單據列表(從主視窗中獲取)
dtsList.Connection := GETRFERP;
dtsList.SQL.Text := 'select FInterID FROM Sal_Order where 1=1';
dtsList.Open;
//銷售型別
dtsFSaleType.Connection := GETRFERP;
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 = ''' + UGMM.LT('銷售型別') + '''';
dtsFSaleType.Open;
//狀態
dtsFStatus.Connection := GETRFERP;
dtsFStatus.SQL.Text := 'Select FName=''' + UGMM.LT('已作廢') + ''',FID = 0 union Select FName=''' + UGMM.LT('草 稿') +
''',FID = 1 union Select FName=''' + UGMM.LT('已審覈') + ''',FID = 2 ORDER BY FID desc';
dtsFStatus.Open;
//客戶資料
dtsFCustID.Connection := GETRFERP;
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';
dtsFCustID.Open;
//部門
dtsFDeptID.Connection := GETRFERP;
dtsFDeptID.SQL.Text := 'SELECT FGroupID as FDeptID,FGroupCode as FDeptCode,FGroupName as FDeptName FROM Dict_GroupInfo';
dtsFDeptID.Open;
//業務員
dtsFEmpID.Connection := GETRFERP;
dtsFEmpID.SQL.Text := 'SELECT FInterID as FEmpID,FEmpCode,FEmpName FROM Basic_Employee';
dtsFEmpID.Open;
//幣種
dtsFCurrencyID.Connection := GETRFERP;
dtsFCurrencyID.SQL.Text := 'SELECT FCode as FCurrencyCode,FName as FCurrencyName,FInterID AS FCurrencyID,FExRate AS ' +
'FExchangeRate FROM Basic_Currency';
dtsFCurrencyID.Open;
//港口
dtsPort.Connection := GETRFERP;
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 = ''' + UGMM.LT('港口') + '''';
dtsPort.Open;
//物料
dtsFItemCode.Connection := GETRFERP;
dtsFItemCode.SQL.Text := 'select A.FInterID as FItemID,A.FItemCode,A.FItemName,A.FItemSpec,A.FUnitID,A.FUnitCode,A.FUnitName,' +
'b.FCoefficient,dbo.fun_GetPY(A.FItemName) as PY '+
'from Basic_Item A left join basic_Unit B on a.FUnitID = b.FInterID ' +
'left join Basic_ItemGroup c on a.FGroupID = c.FInterID ' +
'where A.FTypeID=1 and isnull(FfrozenFor,0) = 0 ' +
'Order by FItemCode';
dtsFItemCode.Open;
//公司資料
dtsCompany.Connection := GETRFERP;
dtsCompany.SQL.Text := 'select top 1 * FROM Basic_Company';
dtsCompany.Open;
//新增列印報表
UGMM.AddReport(btnPrintMenu,//報表功能附加到哪個按鈕下,名稱為對應的控制元件名稱,此處僅為示例,實際使用修改爲你使用的名稱,比如UgMenuButton01
UGMM.ReportDesignPermission(Self),//報表設計許可權【動態模組:目前登陸使用者等於模組開發者時】
self.Guid);
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
// Make sure to add code blocks to your code group
- RefState:設定按鈕編輯狀態的子程式。
//JScript
function RefState(aState)
//按鈕及控制元件狀態定義
{
Self.Tag = aState;
if (aState == -1)
//草稿編輯狀態
{
btnFirst.Enabled = False;
btnPrior.Enabled = False;
btnNext.Enabled = False;
btnLast.Enabled = False;
btnAppend.Enabled = False;
btnPrint.Enabled = False;
btnSave.Enabled = True;
btnUploadImage.Enabled = True;
btnNewRow.Enabled = True;
btnDelRow.Enabled = True;
btnCopyRow.Enabled = True;
btnRowUp.Enabled = True;
btnRowDown.Enabled = True;
btnImportItem.Enabled = True;
//控制元件控制
ds0.AutoEdit = True;
ds1.AutoEdit = True;
lkupdts0FSalType.AutoEdit = True;
lkupdts0FCustID.AutoEdit = True;
lkupdts0FDeptID.AutoEdit = True;
lkupdts0FEmpID.AutoEdit = True;
lkupdts0FOrderType.AutoEdit = True;
lkupdts0FCurrencyID.AutoEdit = True;
UgDBGrid01.ReadOnly = False;
lkupdts0FBeginPort.AutoEdit = True;
lkupdts0FEndPort.AutoEdit = True;
lkupdts0FTrafficType.AutoEdit = True;
}
if (aState == 1)
//草稿儲存狀態
{
btnFirst.Enabled = True;
btnPrior.Enabled = True;
btnNext.Enabled = True;
btnLast.Enabled = True;
btnAppend.Enabled = True;
btnPrint.Enabled = True;
btnSave.Enabled = False;
btnUploadImage.Enabled = True;
btnNewRow.Enabled = True;
btnDelRow.Enabled = True;
btnCopyRow.Enabled = True;
btnRowUp.Enabled = True;
btnRowDown.Enabled = True;
btnImportItem.Enabled = True;
//控制元件控制
ds0.AutoEdit = True;
ds1.AutoEdit = True;
lkupdts0FSalType.AutoEdit = True;
lkupdts0FCustID.AutoEdit = True;
lkupdts0FDeptID.AutoEdit = True;
lkupdts0FEmpID.AutoEdit = True;
lkupdts0FOrderType.AutoEdit = True;
lkupdts0FCurrencyID.AutoEdit = True;
UgDBGrid01.ReadOnly = False;
lkupdts0FBeginPort.AutoEdit = True;
lkupdts0FEndPort.AutoEdit = True;
lkupdts0FTrafficType.AutoEdit = True;
}
if (aState == 2)
//審覈狀態
{
btnFirst.Enabled = True;
btnPrior.Enabled = True;
btnNext.Enabled = True;
btnLast.Enabled = True;
btnAppend.Enabled = True;
btnPrint.Enabled = True;
btnSave.Enabled = False;
btnUploadImage.Enabled = False;
btnNewRow.Enabled = False;
btnDelRow.Enabled = False;
btnCopyRow.Enabled = False;
btnRowUp.Enabled = False;
btnRowDown.Enabled = False;
btnImportItem.Enabled = False;
//控制元件控制
ds0.AutoEdit = False;
ds1.AutoEdit = False;
lkupdts0FSalType.AutoEdit = False;
lkupdts0FCustID.AutoEdit = False;
lkupdts0FDeptID.AutoEdit = False;
lkupdts0FEmpID.AutoEdit = False;
lkupdts0FOrderType.AutoEdit = False;
lkupdts0FCurrencyID.AutoEdit = False;
UgDBGrid01.ReadOnly = False;
lkupdts0FBeginPort.AutoEdit = False;
lkupdts0FEndPort.AutoEdit = False;
lkupdts0FTrafficType.AutoEdit = False;
}
if (aState == 0)
//作廢狀態
{
btnFirst.Enabled = True;
btnPrior.Enabled = True;
btnNext.Enabled = True;
btnLast.Enabled = True;
btnAppend.Enabled = True;
btnPrint.Enabled = False;
btnSave.Enabled = False;
btnUploadImage.Enabled = False;
btnNewRow.Enabled = False;
btnDelRow.Enabled = False;
btnCopyRow.Enabled = False;
btnRowUp.Enabled = False;
btnRowDown.Enabled = False;
btnImportItem.Enabled = False;
//控制元件控制
ds0.AutoEdit = False;
ds1.AutoEdit = False;
lkupdts0FSalType.AutoEdit = False;
lkupdts0FCustID.AutoEdit = False;
lkupdts0FDeptID.AutoEdit = False;
lkupdts0FEmpID.AutoEdit = False;
lkupdts0FOrderType.AutoEdit = False;
lkupdts0FCurrencyID.AutoEdit = False;
UgDBGrid01.ReadOnly = False;
lkupdts0FBeginPort.AutoEdit = False;
lkupdts0FEndPort.AutoEdit = False;
lkupdts0FTrafficType.AutoEdit = False;
}
}
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
//PasScript
procedure RefState(aState: Integer);
//按鈕及控制元件狀態定義
Begin
Self.Tag := aState;
if aState = -1 then
//草稿編輯狀態
begin
btnFirst.Enabled := False;
btnPrior.Enabled := False;
btnNext.Enabled := False;
btnLast.Enabled := False;
btnAppend.Enabled := False;
btnPrint.Enabled := False;
btnSave.Enabled := True;
btnUploadImage.Enabled := True;
btnNewRow.Enabled := True;
btnDelRow.Enabled := True;
btnCopyRow.Enabled := True;
btnRowUp.Enabled := True;
btnRowDown.Enabled := True;
btnImportItem.Enabled := True;
//控制元件控制
ds0.AutoEdit := True;
ds1.AutoEdit := True;
lkupdts0FSalType.AutoEdit := True;
lkupdts0FCustID.AutoEdit := True;
lkupdts0FDeptID.AutoEdit := True;
lkupdts0FEmpID.AutoEdit := True;
lkupdts0FOrderType.AutoEdit := True;
lkupdts0FCurrencyID.AutoEdit := True;
UgDBGrid01.ReadOnly := False;
lkupdts0FBeginPort.AutoEdit := True;
lkupdts0FEndPort.AutoEdit := True;
lkupdts0FTrafficType.AutoEdit := True;
end;
if aState = 1 Then
//草稿儲存狀態
begin
btnFirst.Enabled := True;
btnPrior.Enabled := True;
btnNext.Enabled := True;
btnLast.Enabled := True;
btnAppend.Enabled := True;
btnPrint.Enabled := True;
btnSave.Enabled := False;
btnUploadImage.Enabled := True;
btnNewRow.Enabled := True;
btnDelRow.Enabled := True;
btnCopyRow.Enabled := True;
btnRowUp.Enabled := True;
btnRowDown.Enabled := True;
btnImportItem.Enabled := True;
//控制元件控制
ds0.AutoEdit := True;
ds1.AutoEdit := True;
lkupdts0FSalType.AutoEdit := True;
lkupdts0FCustID.AutoEdit := True;
lkupdts0FDeptID.AutoEdit := True;
lkupdts0FEmpID.AutoEdit := True;
lkupdts0FOrderType.AutoEdit := True;
lkupdts0FCurrencyID.AutoEdit := True;
UgDBGrid01.ReadOnly := False;
lkupdts0FBeginPort.AutoEdit := True;
lkupdts0FEndPort.AutoEdit := True;
lkupdts0FTrafficType.AutoEdit := True;
end;
if aState = 2 Then
//審覈狀態
begin
btnFirst.Enabled := True;
btnPrior.Enabled := True;
btnNext.Enabled := True;
btnLast.Enabled := True;
btnAppend.Enabled := True;
btnPrint.Enabled := True;
btnSave.Enabled := False;
btnUploadImage.Enabled := False;
btnNewRow.Enabled := False;
btnDelRow.Enabled := False;
btnCopyRow.Enabled := False;
btnRowUp.Enabled := False;
btnRowDown.Enabled := False;
btnImportItem.Enabled := False;
//控制元件控制
ds0.AutoEdit := False;
ds1.AutoEdit := False;
lkupdts0FSalType.AutoEdit := False;
lkupdts0FCustID.AutoEdit := False;
lkupdts0FDeptID.AutoEdit := False;
lkupdts0FEmpID.AutoEdit := False;
lkupdts0FOrderType.AutoEdit := False;
lkupdts0FCurrencyID.AutoEdit := False;
UgDBGrid01.ReadOnly := False;
lkupdts0FBeginPort.AutoEdit := False;
lkupdts0FEndPort.AutoEdit := False;
lkupdts0FTrafficType.AutoEdit := False;
End;
if aState = 0 Then
//作廢狀態
Begin
btnFirst.Enabled := True;
btnPrior.Enabled := True;
btnNext.Enabled := True;
btnLast.Enabled := True;
btnAppend.Enabled := True;
btnPrint.Enabled := False;
btnSave.Enabled := False;
btnUploadImage.Enabled := False;
btnNewRow.Enabled := False;
btnDelRow.Enabled := False;
btnCopyRow.Enabled := False;
btnRowUp.Enabled := False;
btnRowDown.Enabled := False;
btnImportItem.Enabled := False;
//控制元件控制
ds0.AutoEdit := False;
ds1.AutoEdit := False;
lkupdts0FSalType.AutoEdit := False;
lkupdts0FCustID.AutoEdit := False;
lkupdts0FDeptID.AutoEdit := False;
lkupdts0FEmpID.AutoEdit := False;
lkupdts0FOrderType.AutoEdit := False;
lkupdts0FCurrencyID.AutoEdit := False;
UgDBGrid01.ReadOnly := False;
lkupdts0FBeginPort.AutoEdit := False;
lkupdts0FEndPort.AutoEdit := False;
lkupdts0FTrafficType.AutoEdit := 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
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// Make sure to add code blocks to your code group
- UgWebRunFrameOnAfterRunScript:
UgWebRunFrame
的OnAfterRunScript
事件,翻譯頁面。
//JScript
function UgWebRunFrameOnAfterRunScript(sender)
//翻譯頁面
{
UGMM.LC(Self);
//數據集初始設定
dts0.Connection = GETRFERP;
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.Connection = GETRFERP;
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";
//單據列表(從主視窗中獲取)
dtsList.Connection = GETRFERP;
dtsList.SQL.Text = "select FInterID FROM Sal_Order where 1=1";
dtsList.Open;
//銷售型別
dtsFSaleType.Connection = GETRFERP;
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 = '" + UGMM.LT("銷售型別") + "'";
dtsFSaleType.Open;
//狀態
dtsFStatus.Connection = GETRFERP;
dtsFStatus.SQL.Text = "Select FName= '" + UGMM.LT("已作廢") + "',FID = 0 union Select FName= '" + UGMM.LT("草 稿") +
"',FID = 1 union Select FName='" + UGMM.LT("已審覈") + "',FID = 2 ORDER BY FID desc";
dtsFStatus.Open;
//客戶資料
dtsFCustID.Connection = GETRFERP;
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";
dtsFCustID.Open;
//部門
dtsFDeptID.Connection = GETRFERP;
dtsFDeptID.SQL.Text = "SELECT FGroupID as FDeptID,FGroupCode as FDeptCode,FGroupName as FDeptName FROM Dict_GroupInfo";
dtsFDeptID.Open;
//業務員
dtsFEmpID.Connection = GETRFERP;
dtsFEmpID.SQL.Text = "SELECT FInterID as FEmpID,FEmpCode,FEmpName FROM Basic_Employee";
dtsFEmpID.Open;
//幣種
dtsFCurrencyID.Connection = GETRFERP;
dtsFCurrencyID.SQL.Text = "SELECT FCode as FCurrencyCode,FName as FCurrencyName,FInterID AS FCurrencyID,FExRate AS " +
"FExchangeRate FROM Basic_Currency";
dtsFCurrencyID.Open;
//港口
dtsPort.Connection = GETRFERP;
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 = '" + UGMM.LT("港口") + "'";
dtsPort.Open;
//物料
dtsFItemCode.Connection = GETRFERP;
dtsFItemCode.SQL.Text = "select A.FInterID as FItemID,A.FItemCode,A.FItemName,A.FItemSpec,A.FUnitID,A.FUnitCode,A.FUnitName," +
"b.FCoefficient,dbo.fun_GetPY(A.FItemName) as PY "+
"from Basic_Item A left join basic_Unit B on a.FUnitID = b.FInterID " +
"left join Basic_ItemGroup c on a.FGroupID = c.FInterID " +
"where A.FTypeID=1 and isnull(FfrozenFor,0) = 0 " +
"Order by FItemCode";
dtsFItemCode.Open;
//公司資料
dtsCompany.Connection = GETRFERP;
dtsCompany.SQL.Text = "select top 1 * FROM Basic_Company";
dtsCompany.Open;
//新增列印報表
UGMM.AddReport(btnPrintMenu,//報表功能附加到哪個按鈕下,名稱為對應的控制元件名稱,此處僅為示例,實際使用修改爲你使用的名稱,比如UgMenuButton01
UGMM.ReportDesignPermission(Self),//報表設計許可權【動態模組:目前登陸使用者等於模組開發者時】
self.Guid);
}
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
//PasScript
procedure UgWebRunFrameOnAfterRunScript(const sender: tobject);
//翻譯頁面
begin
UGMM.LC(Self);
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- btnCloseOnClick:
btnClose
的OnClick
事件,當關閉視窗時檢查是否處於編輯狀態,並彈窗提示。
//JScript
function btnCloseOnClick(sender)
//關閉視窗時檢查,是否處於編輯狀態,並彈窗提示
{
var p = Self.Parent;
if (p is TUgWebForm)
{
if (Self.tag == -1)
{
UgSweetAlertClose.CancelButtonText = UGMM.LT("取消");
UgSweetAlertClose.ConfirmButtonText = UGMM.LT("確定");
UgSweetAlertClose.Title = UGMM.LT("提示");
UgSweetAlertClose.Text = UGMM.LT("窗體處於編輯狀態,是否放棄儲存並關閉窗體?");
UgSweetAlertClose.Show;
}
Else{
TUgWebForm(p).Close;
}
}
if (p is TUniTabSheet)
UniSession.AddJS("document.getElementById(\"" + TUniTabSheet(p).jsid + "_tab-closeEl\").click();");
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//PasScript
procedure btnCloseOnClick(sender: tobject);
//關閉視窗時檢查,是否處於編輯狀態,並彈窗提示
Var
p:TComponent;
Begin
p:=Self.Parent;
if p is TUgWebForm then
Begin
if (Self.tag = -1) then
begin
UgSweetAlertClose.CancelButtonText := UGMM.LT('取消');
UgSweetAlertClose.ConfirmButtonText := UGMM.LT('確定');
UgSweetAlertClose.Title := UGMM.LT('提示');
UgSweetAlertClose.Text := UGMM.LT('窗體處於編輯狀態,是否放棄儲存並關閉窗體?');
UgSweetAlertClose.Show;
end
Else
TUgWebForm(p).Close;
End;
if p is TUniTabSheet then
UniSession.AddJS('document.getElementById("' + TUniTabSheet(p).jsid + '_tab-closeEl").click();');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Make sure to add code blocks to your code group
- lkupdts1FItemCodeOnChange:
lkupdts1FItemCode
的OnChange
事件,更新物料程式碼選擇時對應更新顯示的內容。
//JScript
function lkupdts1FItemCodeOnChange(sender)
//更新物料程式碼選擇時對應更新顯示的內容
{
dts1.Edit;
dts1.FieldByName("FItemID").AsString = dtsFItemCode.FieldByName("FItemID").AsString;
dts1.FieldByName("FItemCode").AsString = dtsFItemCode.FieldByName("FItemCode").AsString;
dts1.FieldByName("FItemName").AsString = dtsFItemCode.FieldByName("FItemName").AsString;
dts1.FieldByName("FItemSpec").AsString = dtsFItemCode.FieldByName("FItemSpec").AsString;
dts1.FieldByName("FUnitID").AsString = dtsFItemCode.FieldByName("FUnitID").AsString;
dts1.FieldByName("FUnitCode").AsString = dtsFItemCode.FieldByName("FUnitCode").AsString;
dts1.FieldByName("FUnitName").AsString = dtsFItemCode.FieldByName("FUnitName").AsString;
}
2
3
4
5
6
7
8
9
10
11
12
13
//PasScript
procedure lkupdts1FItemCodeOnChange(sender: tobject);
//更新物料程式碼選擇時對應更新顯示的內容
begin
dts1.Edit;
dts1.FieldByName('FItemID').AsString := dtsFItemCode.FieldByName('FItemID').AsString;
dts1.FieldByName('FItemCode').AsString := dtsFItemCode.FieldByName('FItemCode').AsString;
dts1.FieldByName('FItemName').AsString := dtsFItemCode.FieldByName('FItemName').AsString;
dts1.FieldByName('FItemSpec').AsString := dtsFItemCode.FieldByName('FItemSpec').AsString;
dts1.FieldByName('FUnitID').AsString := dtsFItemCode.FieldByName('FUnitID').AsString;
dts1.FieldByName('FUnitCode').AsString := dtsFItemCode.FieldByName('FUnitCode').AsString;
dts1.FieldByName('FUnitName').AsString := dtsFItemCode.FieldByName('FUnitName').AsString;
end;
2
3
4
5
6
7
8
9
10
11
12
13
// Make sure to add code blocks to your code group
- PageSwitch:頁面切換時顯示的內容,配合首頁,末頁等使用。
//JScript
function PageSwitch()
//頁面切換時顯示的內容,配合首頁,末頁等使用
{
dts0.Close;
dts0.ParamByName("FInterID").AsString = dtsList.FieldByName("FInterID").AsString;
dts0.Open;
dts1.Close;
dts1.ParamByName("FInterID").AsString = dtsList.FieldByName("FInterID").AsString;
dts1.Open;
RefState(dts0.FieldByName("FStatus").AsInteger);
}
2
3
4
5
6
7
8
9
10
11
12
//PasScript
Procedure PageSwitch;
//頁面切換時顯示的內容,配合首頁,末頁等使用
Begin
dts0.Close;
dts0.ParamByName('FInterID').AsString := dtsList.FieldByName('FInterID').AsString;
dts0.Open;
dts1.Close;
dts1.ParamByName('FInterID').AsString := dtsList.FieldByName('FInterID').AsString;
dts1.Open;
RefState(dts0.FieldByName('FStatus').AsInteger);
End;
2
3
4
5
6
7
8
9
10
11
12
// Make sure to add code blocks to your code group
- btnFirstOnClick:
btnFirst
的OnClick
事件,定位至首項。
//JScript
function btnFirstOnClick(sender)
//首項
{
dtsList.First;
PageSwitch;
}
2
3
4
5
6
7
//PasScript
procedure btnFirstOnClick(sender: tobject);
//首項
begin
dtsList.First;
PageSwitch;
end;
2
3
4
5
6
7
// Make sure to add code blocks to your code group
- btnPriorOnClick:
btnPrior
的OnClick
事件,定位至前項。
//JScript
function btnPriorOnClick(sender)
//前項
{
dtsList.Prior;
PageSwitch;
}
2
3
4
5
6
7
//PasScript
procedure btnPriorOnClick(sender: tobject);
//前項
begin
dtsList.Prior;
PageSwitch;
end;
2
3
4
5
6
7
// Make sure to add code blocks to your code group
- btnNextOnClick:
btnNext
的OnClick
事件,定位至後項。
//JScript
function btnNextOnClick(sender)
//後項
{
dtsList.Next;
PageSwitch;
}
2
3
4
5
6
7
//PasScript
procedure btnNextOnClick(sender: tobject);
//後項
begin
dtsList.Next;
PageSwitch;
end;
2
3
4
5
6
7
// Make sure to add code blocks to your code group
- btnLastOnClick:
btnLast
的OnClick
事件,定位至末項。
//JScript
function btnLastOnClick(sender)
//末項
{
dtsList.Last;
PageSwitch;
}
2
3
4
5
6
7
//PasScript
procedure btnLastOnClick(sender: tobject);
//末項
begin
dtsList.Last;
PageSwitch;
end;
2
3
4
5
6
7
// Make sure to add code blocks to your code group
- btnAppendOnClick:
btnAppend
的OnClick
事件,點選以打開視窗新建單據。
//JScript
function btnAppendOnClick(sender)
//新建單據
{
var FInterID;
//預留區,如果單據處於編輯狀態,新建按鈕會變成灰色
FInterID = GetNodeID;
dts0.Close;
dts0.ParamByName("FInterID").AsInteger = FInterID;
dts0.Open;
dts0.Append;
//產生單據號及相關資訊
dts0.FieldByName("FInterID").AsInteger = FInterID;
dts0.FieldByName("FBillID").AsInteger = FBillID;
dts0.FieldByName("FBillNo").AsString = GetBillNo(IntToStr(FBillID),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 = UGMM.Informations.Values["UserFullName"];
dts0.FieldByName("FCreateDate").AsDateTime = now;
//明細單據更新
dts1.Close;
dts1.ParamByName("FInterID").AsString = dts0.FieldByName("FInterID").AsString;
dts1.Open;
//狀態重新整理
RefState(-1);
}
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
//PasScript
procedure btnAppendOnClick(sender: tobject);
//新建單據
Var
FInterID: Integer;
begin
//預留區,如果單據處於編輯狀態,新建按鈕會變成灰色
FInterID := GetNodeID;
dts0.Close;
dts0.ParamByName('FInterID').AsInteger := FInterID;
dts0.Open;
dts0.Append;
//產生單據號及相關資訊
dts0.FieldByName('FInterID').AsInteger := FInterID;
dts0.FieldByName('FBillID').AsInteger := FBillID;
dts0.FieldByName('FBillNo').AsString := GetBillNo(IntToStr(FBillID),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 := UGMM.Informations.Values['UserFullName'];
dts0.FieldByName('FCreateDate').AsDateTime := now;
//明細單據更新
dts1.Close;
dts1.ParamByName('FInterID').AsString := dts0.FieldByName('FInterID').AsString;
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
// Make sure to add code blocks to your code group
- btnSaveOnClick:
btnSave
的OnClick
事件,點選以儲存單據。
//JScript
function btnSaveOnClick(sender)
//儲存
{
var vdts,vSQL;
//檢查是否為空
dts1.Edit;
dts1.Post;
if (dts1.RecordCount == 0)
{
ShowSweetAlert(atError,UGMM.LT("提示"),UGMM.LT("明細數據不能為空!"));
return;
//Exit;
}
//客戶資料,部門資料更新
if ((Trim(dts0.FieldByName("FCustID").AsString) == "")
|| (Trim(dts0.FieldByName("FDeptID").AsString) == "")){
ShowSweetAlert(atError,UGMM.LT("提示"),UGMM.LT("客戶名稱不能為空!"));
return;
//exit;
}
dts1.First;
While (!(dts1.Eof))
//物料資訊檢查是否為空
{
if ((Trim(dts1.FieldByName("FItemID").AsString)=="")
|| (Trim(dts1.FieldByName("FAmount").AsString)=="")){
ShowSweetAlert(atError,UGMM.LT("提示"),UGMM.LT("物料資訊不能為空!"));
return;
//Exit;
}
dts1.Next;
}
//儲存
vdts = new TUgRFDataSet(Nil);
try{
//新增單據更新單據編號
vdts.Connection = GETRFERP;
vdts.SQL.Text = "SELECT FInterID FROM Sal_Order WHERE FInterID =" + dts0.FieldByName("FInterID").AsString;
vdts.Open;
if (vdts.RecordCount == 0)
dts0.FieldByName("FBillNo").AsString = GetBillNo(IntToStr(FBillID),now,False);
DataSetSort(dts1,"FEntryID");
//明細內容更新
if (dts1.RecordCount > 0)
{
dts1.Edit;
dts1.Post;
dts1.ApplyUpdates(-1);
}
//主表更新儲存
dts0.Edit;
dts0.FieldByName("FStatus").AsInteger = 1;
dts0.Post;
dts0.ApplyUpdates(-1);
ShowSweetAlert(atSuccess,UGMM.LT("提示"),UGMM.LT("數據儲存成功!"));
RefState(1);
}
Finally{
vdts.Free;
}
}
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
//PasScript
procedure btnSaveOnClick(sender: tobject);
//儲存
Var
vdts: TUgRFDataSet;
vSQL: String;
Begin
//檢查是否為空
dts1.Edit;
dts1.Post;
if dts1.RecordCount = 0 Then
Begin
ShowSweetAlert(atError,UGMM.LT('提示'),UGMM.LT('明細數據不能為空!'));
Exit;
End;
//客戶資料,部門資料更新
if (Trim(dts0.FieldByName('FCustID').AsString) = '')
or (Trim(dts0.FieldByName('FDeptID').AsString) = '')
Then
Begin
ShowSweetAlert(atError,UGMM.LT('提示'),UGMM.LT('客戶名稱不能為空!'));
exit;
end;
dts1.First;
While not dts1.Eof Do
//物料資訊檢查是否為空
Begin
if (Trim(dts1.FieldByName('FItemID').AsString)='')
or (Trim(dts1.FieldByName('FAmount').AsString)='')
Then
Begin
ShowSweetAlert(atError,UGMM.LT('提示'),UGMM.LT('物料資訊不能為空!'));
Exit;
End;
dts1.Next;
End;
//儲存
vdts :=TUgRFDataSet.Create(Nil);
try
//新增單據更新單據編號
vdts.Connection := GETRFERP;
vdts.SQL.Text := 'SELECT FInterID FROM Sal_Order WHERE FInterID =' + dts0.FieldByName('FInterID').AsString;
vdts.Open;
if vdts.RecordCount = 0 Then
dts0.FieldByName('FBillNo').AsString := GetBillNo(IntToStr(FBillID),now,False);
DataSetSort(dts1,'FEntryID');
//明細內容更新
if dts1.RecordCount > 0 Then
Begin
dts1.Edit;
dts1.Post;
dts1.ApplyUpdates(-1);
End;
//主表更新儲存
dts0.Edit;
dts0.FieldByName('FStatus').AsInteger := 1;
dts0.Post;
dts0.ApplyUpdates(-1);
ShowSweetAlert(atSuccess,UGMM.LT('提示'),UGMM.LT('數據儲存成功!'));
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
64
65
66
// Make sure to add code blocks to your code group
- dts1BeforeEdit:
dts1
的BeforeEdit
事件,在編輯前啟用單據編輯模式。
//JScript
function dts1BeforeEdit(datasettdataset)
//明細數據集在編輯前啟動編輯模式
{
RefState(-1);
}
2
3
4
5
6
//PasScript
procedure dts1BeforeEdit(dataset: tdataset);
//明細數據集在編輯前啟動編輯模式
begin
RefState(-1);
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- btnDelRowOnClick:
btnDelRow
的OnClick
事件,點選以刪除行。
//JScript
function btnDelRowOnClick(sender)
//刪除行
{
RefState(-1);
if (dts1.RecordCount == 0)
{
ShowSweetAlert(atError,UGMM.LT("提示"),UGMM.LT("無可刪除的明細數據!"));
return;
//Exit;
}
dts1.Delete;
}
2
3
4
5
6
7
8
9
10
11
12
13
//PasScript
procedure btnDelRowOnClick(sender: tobject);
//刪除行
begin
RefState(-1);
if dts1.RecordCount = 0 then
Begin
ShowSweetAlert(atError,UGMM.LT('提示'),UGMM.LT('無可刪除的明細數據!'));
Exit;
End;
dts1.Delete;
end;
2
3
4
5
6
7
8
9
10
11
12
// Make sure to add code blocks to your code group
- btnCopyRowOnClick:
btnCopyRow
的OnClick
事件,點選以複製行。
//JScript
function btnCopyRowOnClick(sender)
//複製行
{
//在 dts1OnNewRecord 事件中觸發新增欄位的更新事件
RefState(-1);
DataSetRowCopy(dts1);
}
2
3
4
5
6
7
8
9
//PasScript
procedure btnCopyRowOnClick(sender: tobject);
//複製行
begin
//在 dts1OnNewRecord 事件中觸發新增欄位的更新事件
RefState(-1);
DataSetRowCopy(dts1);
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
- DoBillBusiness:用於實現單據的審覈、消審功能。
//JScript
function DoBillBusiness(AFlag)
//實現單據的審覈、消審
{
//{ 執行預存程序 sp_XXXX }
//{ sp_XXXX @ProcID, @DataID, @UserID }
var ADataSet,AStoredProc,sOptName,strSQL,iReturnFlag,iReturnMsg,i,j,vRAISEMSG,vMSG,Field;
//單據功能字元更新
if (AFlag == UGMM.LT("消審")){
sOptName = "UnCheck";
}
else if (AFlag == UGMM.LT("審覈")){
sOptName = "Check";
}
else if (AFlag == UGMM.LT("作廢")){
sOptName = "Revoke";
}
else if (AFlag == UGMM.LT("還原")){
sOptName = "Recover";
}
else if (AFlag == UGMM.LT("刪除")){
sOptName = "Delete";
}
else if (AFlag == UGMM.LT("關閉")){
sOptName = "Close";
}
else if (AFlag == UGMM.LT("恢復")){
sOptName = "UnClose";
}
else
{
sOptName = AFlag;
}
//預存程序初始化,獲取參數資訊
AStoredProc = new TUgRFStroedProc(nil);
AStoredProc.Connection = GETRFERP;
try{
AStoredProc.StoredProcName = "sp_Sal_Order";
AStoredProc.Prepare;
if (AStoredProc.Prepared)
{
//參數賦值
AStoredProc.ParamByName("ProcID").AsString = sOptName;
AStoredProc.ParamByName("DataID").AsString = dts0.FieldByName("FInterID").AsString;
AStoredProc.ParamByName("UserID").AsString = UGMM.Informations.Values["UserFullName"];
if (AStoredProc.FindParam("SQResult") != nil)
AStoredProc.ParamByName("SQResult").AsString = "";
try{
//執行預存程序
AStoredProc.ExecProc;
}
Except{
vRAISEMSG=ExceptionMessage;
//異常資訊更新
i = Pos("SQMESSAGE", vRAISEMSG);
j = Pos("[SQL Server]", vRAISEMSG);
vMSG = Copy(vRAISEMSG, i, Length(vRAISEMSG) - i + 1);
// 非格式化訊息提示
if (i == 0)
{
ShowSweetAlert(atError,UGMM.LT("提示"), Copy(vRAISEMSG, j + 12, Length(vRAISEMSG) - j + 1));
return;
//Exit;
}
}
}
}
finally{
AStoredProc.Free;
}
//數據集重新整理,更新顯示狀態
dts0.Open;
dts1.Open;
RefState(dts0.FieldByName("FStatus").AsInteger);
RefreshStatus;
}
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
//PasScript
procedure DoBillBusiness(AFlag: String);
//實現單據的審覈、消審
var
ADataSet: TUgRFDataSet;
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 }
//單據功能字元更新
if AFlag = UGMM.LT('消審') then
sOptName := 'UnCheck'
else if AFlag = UGMM.LT('審覈') then
sOptName := 'Check'
else if AFlag = UGMM.LT('作廢') then
sOptName := 'Revoke'
else if AFlag = UGMM.LT('還原') then
sOptName := 'Recover'
else if AFlag = UGMM.LT('刪除') then
sOptName := 'Delete'
else if AFlag = UGMM.LT('關閉') then
sOptName := 'Close'
else if AFlag = UGMM.LT('恢復') then
sOptName := 'UnClose'
else
begin
sOptName := AFlag;
end;
//預存程序初始化,獲取參數資訊
AStoredProc := TUgRFStroedProc.Create(nil);
AStoredProc.Connection := GETRFERP;
try
AStoredProc.StoredProcName := 'sp_Sal_Order';
AStoredProc.Prepare;
if AStoredProc.Prepared then
begin
//參數賦值
AStoredProc.ParamByName('ProcID').AsString := sOptName;
AStoredProc.ParamByName('DataID').AsString := dts0.FieldByName('FInterID').AsString;
AStoredProc.ParamByName('UserID').AsString := UGMM.Informations.Values['UserFullName'];
if AStoredProc.FindParam('SQResult') <> nil then
AStoredProc.ParamByName('SQResult').AsString := '';
try
//執行預存程序
AStoredProc.ExecProc;
Except{ExceptionMessage}
vRAISEMSG:=ExceptionMessage;
//異常資訊更新
i := Pos('SQMESSAGE', vRAISEMSG);
j := Pos('[SQL Server]', vRAISEMSG);
vMSG := Copy(vRAISEMSG, i, Length(vRAISEMSG) - i + 1);
// 非格式化訊息提示
if i = 0 then
begin
ShowSweetAlert(atError,UGMM.LT('提示'), Copy(vRAISEMSG, j + 12, Length(vRAISEMSG) - j + 1));
Exit;
end;
end;
end;
finally
AStoredProc.Free;
end;
//數據集重新整理,更新顯示狀態
dts0.Open;
dts1.Open;
RefState(dts0.FieldByName('FStatus').AsInteger);
RefreshStatus;
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
// Make sure to add code blocks to your code group
- UgPopupMenu01UgMenuItemsOnClick:
UgPopupMenu01UgMenuItems
的OnClick
事件,點選功能表欄專案執行單據功能。
//JScript
function UgPopupMenu01UgMenuItemsOnClick(acaption)
//功能按鈕分割槽
{
//執行預存程序
DoBillBusiness(acaption);
}
2
3
4
5
6
7
//PasScript
procedure UgPopupMenu01UgMenuItemsOnClick(const acaption: string);
//功能按鈕分割槽
begin
//執行預存程序
DoBillBusiness(acaption);
end;
2
3
4
5
6
7
// Make sure to add code blocks to your code group
- UgTimer01OnTimer:
UgTimer01
的OnTimer
事件,設定列印的相關設定專案。
//JScript
function UgTimer01OnTimer(sender)
{
//列印設定
UgTimer01.Enabled = False;
UgFlying.AddPrintData(dts0,"A");
UgFlying.AddPrintData(dts1,"B");
UgFlying.AddPrintData(dtsCompany,"C");
UgFlying.ReportPreview;
}
2
3
4
5
6
7
8
9
10
//PasScript
procedure UgTimer01OnTimer(sender: tobject);
begin
//列印設定
UgTimer01.Enabled := False;
UgFlying.AddPrintData(dts0,'A');
UgFlying.AddPrintData(dts1,'B');
UgFlying.AddPrintData(dtsCompany,'C');
UgFlying.ReportPreview;
end;
2
3
4
5
6
7
8
9
10
// Make sure to add code blocks to your code group
- lkupdts0FCustIDOnChange:
lkupdts0FCustID
的OnChange
事件,當變更客戶資料時更新對應欄位資訊。
//JScript
function lkupdts0FCustIDOnChange(sender)
//變更客戶資料時更新對應欄位資訊
{
dts0.Edit;
dts0.FieldByName("FCustCode").AsString = dtsFCustID.FieldByName("FCustCode").AsString;
dts0.FieldByName("FCustName").AsString = dtsFCustID.FieldByName("FCustName").AsString;
dts0.FieldByName("FDeptID").AsString = dtsFCustID.FieldByName("FDeptID").AsString;
dts0.FieldByName("FDeptCode").AsString = dtsFCustID.FieldByName("FDeptCode").AsString;
dts0.FieldByName("FDeptName").AsString = dtsFCustID.FieldByName("FDeptName").AsString;
dts0.FieldByName("FEmpID").AsString = dtsFCustID.FieldByName("FEmpID").AsString;
dts0.FieldByName("FEmpCode").AsString = dtsFCustID.FieldByName("FEmpCode").AsString;
dts0.FieldByName("FEmpName").AsString = dtsFCustID.FieldByName("FEmpName").AsString;
dts0.FieldByName("FSaleType").AsString = dtsFCustID.FieldByName("FSaleType").AsString;
//dts0.Post;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//PasScript
procedure lkupdts0FCustIDOnChange(sender: tobject);
//變更客戶資料時更新對應欄位資訊
begin
dts0.Edit;
dts0.FieldByName('FCustCode').AsString := dtsFCustID.FieldByName('FCustCode').AsString;
dts0.FieldByName('FCustName').AsString := dtsFCustID.FieldByName('FCustName').AsString;
dts0.FieldByName('FDeptID').AsString := dtsFCustID.FieldByName('FDeptID').AsString;
dts0.FieldByName('FDeptCode').AsString := dtsFCustID.FieldByName('FDeptCode').AsString;
dts0.FieldByName('FDeptName').AsString := dtsFCustID.FieldByName('FDeptName').AsString;
dts0.FieldByName('FEmpID').AsString := dtsFCustID.FieldByName('FEmpID').AsString;
dts0.FieldByName('FEmpCode').AsString := dtsFCustID.FieldByName('FEmpCode').AsString;
dts0.FieldByName('FEmpName').AsString := dtsFCustID.FieldByName('FEmpName').AsString;
dts0.FieldByName('FSaleType').AsString := dtsFCustID.FieldByName('FSaleType').AsString;
//dts0.Post;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Make sure to add code blocks to your code group
- btnUploadImageOnClick:
btnUploadImage
的OnClick
事件,點選以上傳圖片。
//JScript
function btnUploadImageOnClick(sender)
//上傳圖片
{
UgFileUpload.Execute;
}
2
3
4
5
6
//PasScript
procedure btnUploadImageOnClick(sender: tobject);
//上傳圖片
begin
UgFileUpload.Execute;
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- UgFileUploadOnCompleted:
UgFileUpload
的OnCompleted
事件,檔案上傳完成後更新至對應的數據集欄位。
//JScript
function UgFileUploadOnCompleted(sender,astream)
//檔案上傳完成時更新至對應的數據集欄位中
{
TBlobField(imgdts0FImage.DataSource.DataSet.FieldByName(imgdts0FImage.DataField)).LoadFromStream(astream);
}
2
3
4
5
6
//PasScript
procedure UgFileUploadOnCompleted(sender: tobject;astream: tfilestream);
//檔案上傳完成時更新至對應的數據集欄位中
begin
TBlobField(imgdts0FImage.DataSource.DataSet.FieldByName(imgdts0FImage.DataField)).LoadFromStream(astream);
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- dts1OnNewRecord:
dts1
的OnNewRecord
事件,新增記錄時初始化相關資訊的設定。
//JScript
function dts1OnNewRecord(dataset)
//新增記錄時修改相關資訊
{
dts1.FieldByName("FID").AsInteger = GetNodeID;
dts1.FieldByName("FInterID").AsInteger = dts0.FieldByName("FInterID").AsInteger;
dts1.FieldByName("FEntryID").AsInteger = dts1.RecordCount + 1;
dts1.FieldByName("FClosed").AsInteger = 0;
dts1.FieldByName("FState").AsInteger = 0;
}
2
3
4
5
6
7
8
9
10
//PasScript
procedure dts1OnNewRecord(dataset: tdataset);
//新增記錄時修改相關資訊
begin
dts1.FieldByName('FID').AsInteger := GetNodeID;
dts1.FieldByName('FInterID').AsInteger := dts0.FieldByName('FInterID').AsInteger;
dts1.FieldByName('FEntryID').AsInteger := dts1.RecordCount + 1;
dts1.FieldByName('FClosed').AsInteger := 0;
dts1.FieldByName('FState').AsInteger := 0;
end;
2
3
4
5
6
7
8
9
10
// Make sure to add code blocks to your code group
- dts0BeforeEdit:
dts0
的BeforeEdit
事件,主數據集在啟動前啟用編輯模式。
//JScript
function dts0BeforeEdit(dataset)
//主數據集在啟動前啟用編輯模式
{
RefState(-1);
}
2
3
4
5
6
//PasScript
procedure dts0BeforeEdit(dataset: tdataset);
//主數據集在啟動前啟用編輯模式
begin
RefState(-1);
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- btnImportItemOnClick:
btnImportItem
的OnClick
事件,點選以打開布種資料匯入頁面。
//JScript
function btnImportItemOnClick(sender)
//打開匯入界面,布種資料
{
var F,D;
//僅處於編輯模式下可打開匯入窗體
if ((dts0.FieldByName("FStatus").AsInteger == 1) || (dts0.FieldByName("FStatus").AsInteger == -1))
{
//打開匯入頁面視窗W-EQ-MOD-2125-2
F = UGMM.GetWebSubForm("W-EQ-MOD-2125-2");
F.Caption = UGMM.LT("匯入布種資料");
//翻譯頁面
UGMM.LC(F);
if (F.ShowModal == mrOK)
{
D = TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent("dtsSelected"));
//引用相關的內容進行新增
D.First;
While (!(D.Eof))
{
//數據集匯入更新
dts1.Append;
dts1.FieldByName("FItemID").AsString = D.FieldByName("FInterID").AsString;
dts1.FieldByName("FItemCode").AsString = D.FieldByName("FItemCode").AsString;
dts1.FieldByName("FItemName").AsString = D.FieldByName("FItemName").AsString;
dts1.FieldByName("FItemSpec").AsString = D.FieldByName("FItemSpec").AsString;
dts1.FieldByName("FUnitID").AsString = D.FieldByName("FUnitID").AsString;
dts1.FieldByName("FUnitCode").AsString = D.FieldByName("FUnitCode").AsString;
dts1.FieldByName("FUnitName").AsString = D.FieldByName("FUnitName").AsString;
dts1.Post;
D.Next;
}
RefState(-1);
}
//關閉釋放視窗W-EQ-MOD-2125-2
UGMM.DelWebSubForm("W-EQ-MOD-2125-2");
}
}
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
//PasScript
procedure btnImportItemOnClick(sender: tobject);
//打開匯入界面,布種資料
Var
F:TUniForm;
D: TUgRFDataSet;
begin
//僅處於編輯模式下可打開匯入窗體
if ((dts0.FieldByName('FStatus').AsInteger = 1) or (dts0.FieldByName('FStatus').AsInteger = -1)) then
begin
//打開匯入頁面視窗匯入布種資料
F := UGMM.GetWebSubForm('W-EQ-MOD-2125-1');
F.Caption := UGMM.LT('匯入布種資料');
//翻譯頁面
UGMM.LC(F);
if F.ShowModal = mrOK then
Begin
D := TUgRFDataSet(TUgWebForm(F).RunFrame.FindComponent('dtsSelected'));
//引用相關的內容進行新增
D.First;
While not D.Eof Do
Begin
//數據集匯入更新
dts1.Append;
dts1.FieldByName('FItemID').AsString := D.FieldByName('FInterID').AsString;
dts1.FieldByName('FItemCode').AsString := D.FieldByName('FItemCode').AsString;
dts1.FieldByName('FItemName').AsString := D.FieldByName('FItemName').AsString;
dts1.FieldByName('FItemSpec').AsString := D.FieldByName('FItemSpec').AsString;
dts1.FieldByName('FUnitID').AsString := D.FieldByName('FUnitID').AsString;
dts1.FieldByName('FUnitCode').AsString := D.FieldByName('FUnitCode').AsString;
dts1.FieldByName('FUnitName').AsString := D.FieldByName('FUnitName').AsString;
dts1.Post;
D.Next;
End;
RefState(-1);
End;
//關閉釋放視窗W-EQ-MOD-2125-1
UGMM.DelWebSubForm('W-EQ-MOD-2125-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
// Make sure to add code blocks to your code group
- btnPrintOnClick:
btnPrint
的OnClick
事件,點選以執行列印。
//JScript
function btnPrintOnClick(sender)
//使用Flying執行列印
{
UgFlying.GetPrintList;
}
2
3
4
5
6
//PasScript
procedure btnPrintOnClick(sender: tobject);
//使用Flying執行列印
begin
UgFlying.GetPrintList;
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- UgFlyingOnReceived:
UgFlying
的OnReceived
事件,點選以設定列印。
//JScript
function UgFlyingOnReceived(asender,atype,acontent)
//設定列印內容
{
var F,PDF;
//獲取印表機列表
if (AType == "GetPrintList")
{
UgComboBoxPrintList.Items.CommaText = AContent;
if (UgComboBoxPrintList.Items.Count != 0)
UgComboBoxPrintList.ItemIndex = 0;
UgFlying.PrinterName = UgComboBoxPrintList.Items.Strings[1];
UgTimer01.Enabled = True;
}
//獲取列印的檔案URL
else if (AType == "GetFileUrl")
{
//打開視窗W-EQ-MOD-2118-2
F = UGMM.GetWebSubForm("W-EQ-MOD-2118-2");
F.Caption = UGMM.LT("PDF檢視");
PDF = TUgURLFrame(TUgWebForm(F).RunFrame.FindComponent("UgURLFrame"));
//顯示PDF
PDF.URL = AContent;
if (F.ShowModal == mrOK)
{
}
UGMM.DelWebSubForm("W-EQ-MOD-2118-2");
}
else if (AType == "Error"){
ShowSweetAlert(atError,UGMM.LT("提示"),AContent);
}
}
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
//PasScript
procedure UgFlyingOnReceived(asender: tobject;atype: string;acontent: string);
//設定列印內容
var
F: TUniForm;
PDF: TUgURLFrame;
begin
//獲取印表機列表
if AType='GetPrintList' then
begin
UgComboBoxPrintList.Items.CommaText := AContent;
if UgComboBoxPrintList.Items.Count <> 0 Then
UgComboBoxPrintList.ItemIndex := 0;
UgFlying.PrinterName := UgComboBoxPrintList.Items.Strings[1];
UgTimer01.Enabled := True;
end
//獲取列印的檔案URL
else if AType='GetFileUrl' then
begin
//打開視窗PDF瀏覽
F := UGMM.GetWebSubForm('W-EQ-MOD-2118-1');
F.Caption := UGMM.LT('PDF檢視');
PDF := TUgURLFrame(TUgWebForm(F).RunFrame.FindComponent('UgURLFrame'));
//顯示PDF
PDF.URL := AContent;
if F.ShowModal = mrOK then
Begin
End;
//關閉
UGMM.DelWebSubForm('W-EQ-MOD-2118-1');
end
else if AType='Error' then
ShowSweetAlert(atError,UGMM.LT('提示'),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
27
28
29
30
31
32
33
34
// Make sure to add code blocks to your code group
- UgSweetAlertCloseOnConfirm:
UgSweetAlertClose
的OnConfirm
事件,點選以關閉視窗頁面。
//JScript
function UgSweetAlertCloseOnConfirm(sender)
//關閉視窗
{
var p = Self.Parent;
if (p is TUgWebForm)
{
TUgWebForm(p).Close;
}
if (p is TUniTabSheet)
UniSession.AddJS("document.getElementById(\"" + TUniTabSheet(p).jsid + "_tab-closeEl\").click();");
}
2
3
4
5
6
7
8
9
10
11
12
//PasScript
procedure UgSweetAlertCloseOnConfirm(sender: tobject);
//關閉視窗
Var
p:TComponent;
Begin
p:=Self.Parent;
if p is TUgWebForm then
Begin
TUgWebForm(p).Close;
End;
if p is TUniTabSheet then
UniSession.AddJS('document.getElementById("' + TUniTabSheet(p).jsid + '_tab-closeEl").click();');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
// Make sure to add code blocks to your code group
# 3.2.5. 多語言設定
點選FastWeb低程式碼開發平臺功能表導航項中的系統管理
-翻譯
-詞條維護
。
# 3.2.6. 報表設定
FastWeb中使用兩種方式來引入報表。
- 窗體引入
在初始化的程式中引入下述程式可在頁面中實現列印格式設計的引入。
UGMM.AddReport(btnPrintMenu,//報表功能附加到哪個按鈕下,名稱為對應的控制元件名稱,此處僅為示例,實際使用修改爲你使用的名稱,比如UgMenuButton01
UGMM.ReportDesignPermission(Self),//報表設計許可權【動態模組:目前登陸使用者等於模組開發者時】
self.Guid);
2
3
在運行界面可以看到列印功能表,點選按鈕右側的下拉箭頭會有額外選項,點選報表設計器
來打開報表設計器管理界面。
首先點選右側的報表數據
按鈕,打開報表數據及選擇的界面,將需要引用的報表數據集dts0
、dts1
、dtsFCustID
、dtsCompany
雙擊。
在彈出的編輯界面中填寫相應的標題名稱,點選下側的重新整理按鈕載入數據集。載入完成後,點選確定
。
返回報表管理器頁面後點擊新增
按鈕,打開新的報表設計器頁面進行報表的設計製作。製作完成並儲存后,在後續的引用中在列印
按鈕右側的下拉框選擇建立的報表執行列印預覽。
- 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
,打開報表設計界面進行設計。
設計完成後,FastWeb端可直接使用指定的設定執行列印設定操作。
# 3.2.7. 運行效果
# 3.3. 圖表-銷售訂單排名分析
點選功能表導航欄中的模組列表(WEB)
,在打開的模組列表中點選新增
按鈕,新增標題為銷售訂單排名分析
的模組,新增的內容樣式如下,主要填寫組別
、編號
、標題
、開發使用者
等內容,使用PasScript的使用者編號請填寫為 W-EQ-MOD-2136-1
,使用JScript的使用者編號請填寫 W-EQ-MOD-2136-2
。填寫完成後,點選儲存
按鈕。
選擇剛才建立的標題為銷售訂單排名分析
的模組,點選上方的模組設計
按鈕,進入模組設計界面。
銷售訂單排名分析的頁面設定如下圖。
# 3.3.1. 功能簡述
此視窗用於顯示銷售訂單金額的排名資訊,並使用圖表的方式來設定顯示相關資訊。
# 3.3.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Height | 800 | 主窗體的高度(畫素) |
Width | 1200 | 主窗體的寬度(畫素) |
# 3.3.3. 控制元件設定
- 控制元件說明
修改控制元件設定時注意TUgPanel
型別的控制元件需要清除Caption
屬性中原有的字元內容。
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
UgContainerPanel01 | TUgContainerPanel | 佈局控制元件,用於放置查詢條件相關的控制元件,在視窗中置於頂部Align :alTopHeight :44 |
dtpBegin | TUgDateTimePicker | 訂單的起始日期DateTime :2021-01-01FieldLabel :訂單日期FieldLabelWidth :60Height :22Width :200 |
dtpEnd | TUgDateTimePicker | 訂單的結束日期DateTime :2021-01-31FieldLabel :到FieldLabelWidth :60Height :22Width :200 |
btnQuery | TUgBitBtn | 查詢按鈕Caption :查詢 |
cbChartType | TUgComboBox | 覈取方塊,用於選擇圖表型別 |
dts1 | TUgRFDataSet | 顯示數據集資訊SQL :select a.FCustName,sum(IsNull(b.FAuxQty,0)) as FAuxQty from SAL_Order a(NOLOCK) inner join SAL_OrderEntry b(NOLOCK) on a.FInterID = b.FInterID Where a.FStatus = 2 group by a.FCustName Order by sum(IsNull(b.FAuxQty,0)) desc |
ds1 | TugDataSource | 數據源DataSource :dts1 |
UgDBGrid01 | TUgDBGrid | 設定顯示數量Align :alLeftWidth :305DataSource :ds1 |
UgSplitter01 | TUgSplitter | 分隔線Align :alLeftWidth :15 |
UgEChart01 | TUgEChart | EChart圖表顯示Align :alClient |
dts2 | TUgRFDataSet | 顯示數據集資訊SQL :select top 10 a.FCustName,sum(IsNull(b.FAuxQty,0)) as FAuxQty from SAL_Order a(NOLOCK) inner join SAL_OrderEntry b(NOLOCK) on a.FInterID = b.FInterID Where a.FStatus = 2 group by a.FCustName Order by sum(IsNull(b.FAuxQty,0)) desc |
- UgDBGrid01欄位設定
選擇並雙擊UgDBGrid01
控制元件,打開欄位編輯器,根據下圖顯示的內容進行編輯。點選左上角的+
或者-
進行新增行或刪除行操作。雙擊FieldName
或者Caption
可修改對應行的欄位名稱或者顯示標題內容。ReadOnly
用於設定欄位是否為可讀屬性。
# 3.3.4. 程式設計
在初始設定程式時,使用JScript使用者需勾選pub_js_tarslink
單元,使用PasScript的使用者請勾選pub_pas_tarslink
與單元。
初始設定:設定顯示數據集的初始化內容。目前模組無需初始化。
GetSQL:獲取SQL查詢相關的資訊。
//JScript
function GetSQL()
{
dts1.Close;
dts2.Close;
dts1.Conditions.Disable;
dts1.Conditions.Clear;
dts1.Conditions.Add("FDate1","a.FDate >= '" + DateTimeToStr(dtpBegin.DateTime) + "'",True);
dts1.Conditions.Add("FDate2","a.FDate <= '" + DateTimeToStr(dtpEnd.DateTime) + "'",True);
dts1.Conditions.Enable;
dts1.Open;
dts2.Conditions.Disable;
dts2.Conditions.Clear;
dts2.Conditions.Add("FDate1","a.FDate >= '" + DateTimeToStr(dtpBegin.DateTime) + "'",True);
dts2.Conditions.Add("FDate2","a.FDate <= '" + DateTimeToStr(dtpEnd.DateTime) + "'",True);
dts2.Conditions.Enable;
dts2.Open;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//PasScript
procedure GetSQL;
Begin
dts1.Close;
dts2.Close;
dts1.Conditions.Disable;
dts1.Conditions.Clear;
dts1.Conditions.Add('FDate1','a.FDate >= ''' + DateTimeToStr(dtpBegin.DateTime) + '''',True);
dts1.Conditions.Add('FDate2','a.FDate <= ''' + DateTimeToStr(dtpEnd.DateTime) + '''',True);
dts1.Conditions.Enable;
dts1.Open;
dts2.Conditions.Disable;
dts2.Conditions.Clear;
dts2.Conditions.Add('FDate1','a.FDate >= ''' + DateTimeToStr(dtpBegin.DateTime) + '''',True);
dts2.Conditions.Add('FDate2','a.FDate <= ''' + DateTimeToStr(dtpEnd.DateTime) + '''',True);
dts2.Conditions.Enable;
dts2.Open;
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Make sure to add code blocks to your code group
- GetEChartBar:設定獲取柱狀圖。
//JScript
function GetEChartBar()
//設定條形圖
{
var vOption;
if (dts2.IsEmpty)
{
ShowMessage(UGMM.LT("目前選擇的時間範圍內無數據!"));
return;
//Exit;
}
vOption = "option = {title: {text: '" + UGMM.LT("銷售訂單排名") + "',textStyle:{fontSize: 32},subtext: '',left: 'center'},"
+ "backgroundColor:\"#ffffff\","
+ "tooltip: {trigger: 'axis',axisPointer: { type: 'shadow' }},"
+ "grid: {top:\"40\",left: '3%',right: '4%',bottom: '3%',containLabel: true},"
+ "xAxis: [{type: 'category',axisTick:{show:false},data: [";
dts2.First;
while (!dts2.Eof)
{
vOption = vOption + "'" + dts2.FieldByName("FCustName").AsString + "',";
dts2.Next;
}
vOption = copy(vOption, 1, Length(vOption)-1);
vOption = vOption + "]}],";
vOption = vOption + "yAxis: [{type: 'value',axisLine:{show:false},axisTick:{show:false},axisLabel: {show:false,formatter: '{value}'},splitLine: {show:false,}}],"
+ "series: [{type: 'bar',label: {show: true,position: 'top',textStyle: {color: '#000000',},},"
+ "itemStyle: {normal: {color: function(params) {var colorList = ["
+ "'#7711AF', '#CF77FF', '#AE004F', '#F35872', '#FA7729','#FFC526', '#F8E71C', '#34ADAE', '#3DDFD2', '#A0FFFF'];"
+ "var colorListr = ['#0f4471','#00adb5','#ff5722','#5628b4','#20BF55','#f23557','#118df0','#11cbd7','#d3327b','#ae318a','#993090','#6f3071'];"
+ "return colorListr[params.dataIndex]},label: {show: true,position: 'top',formatter: '" + UGMM.LT("數量") + ":{c}',fontSize:14},shadowBlur: 10,shadowColor: 'rgba(40, 40, 40, 0.3)',}"
+ "},data: [";
dts2.First;
while (!dts2.Eof)
{
vOption = vOption + dts2.FieldByName("FAuxQty").AsString + ",";
dts2.Next;
}
vOption = copy(vOption, 1, Length(vOption)-1);
vOption = vOption + "]}]};";
dts2.First;
UgEChart01.Options.Text = vOption;
}
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
//PasScript
Procedure GetEChartBar;
//設定條形圖
Var
vOption: String;
Begin
if dts2.IsEmpty Then
Begin
ShowMessage(UGMM.LT('目前選擇的時間範圍內無數據!'));
Exit;
End;
vOption := 'option = {title: {text: ''' + UGMM.LT('銷售訂單排名') + ''',textStyle:{fontSize: 32},subtext: '''',left: ''center''},'
+ 'backgroundColor:"#ffffff",'
+ 'tooltip: {trigger: ''axis'',axisPointer: { type: ''shadow'' }},'
+ 'grid: {top:"40",left: ''3%'',right: ''4%'',bottom: ''3%'',containLabel: true},'
+ 'xAxis: [{type: ''category'',axisTick:{show:false},data: [';
dts2.First;
while not dts2.Eof Do
Begin
vOption := vOption + '''' + dts2.FieldByName('FCustName').AsString + ''',';
dts2.Next;
End;
vOption := copy(vOption, 1, Length(vOption)-1);
vOption := vOption + ']}],';
vOption := vOption + 'yAxis: [{type: ''value'',axisLine:{show:false},axisTick:{show:false},axisLabel: {show:false,formatter: ''{value}''},splitLine: {show:false,}}],'
+ 'series: [{type: ''bar'',label: {show: true,position: ''top'',textStyle: {color: ''#000000'',},},'
+ 'itemStyle: {normal: {color: function(params) {var colorList = ['
+ '''#7711AF'', ''#CF77FF'', ''#AE004F'', ''#F35872'', ''#FA7729'',''#FFC526'', ''#F8E71C'', ''#34ADAE'', ''#3DDFD2'', ''#A0FFFF''];'
+ 'var colorListr = [''#0f4471'',''#00adb5'',''#ff5722'',''#5628b4'',''#20BF55'',''#f23557'',''#118df0'',''#11cbd7'',''#d3327b'',''#ae318a'',''#993090'',''#6f3071''];'
+ 'return colorListr[params.dataIndex]},label: {show: true,position: ''top'',formatter: ''' + UGMM.LT('數量') + ':{c}'',fontSize:14},shadowBlur: 10,shadowColor: ''rgba(40, 40, 40, 0.3)'',}'
+ '},data: [';
dts2.First;
while not dts2.Eof Do
Begin
vOption := vOption + dts2.FieldByName('FAuxQty').AsString + ',';
dts2.Next;
End;
vOption := copy(vOption, 1, Length(vOption)-1);
vOption := vOption + ']}]};';
dts2.First;
UgEChart01.Options.Text := vOption;
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
// Make sure to add code blocks to your code group
- GetEChartLine:設定獲取折線圖。
//JScript
function GetEChartLine()
//折線圖
{
var vOption;
if (dts2.IsEmpty)
{
ShowMessage(UGMM.LT("目前選擇的時間範圍內無數據!"));
return;
//Exit;
}
vOption = "option = {title: {text: '" + UGMM.LT("銷售訂單排名") + "',textStyle:{fontSize: 32},subtext: '',left: 'center'},"
+ "backgroundColor:\"#ffffff\","
+ "tooltip: {trigger: 'axis',axisPointer: { type: 'shadow' }},"
+ "grid: {top:\"40\",left: '3%',right: '4%',bottom: '3%',containLabel: true},"
+ "xAxis: [{type: 'category',axisTick:{show:false},data: [";
dts2.First;
while (!dts2.Eof)
{
vOption = vOption + "'" + dts2.FieldByName("FCustName").AsString + "',";
dts2.Next;
}
vOption = copy(vOption, 1, Length(vOption)-1);
vOption = vOption + "]}],";
vOption = vOption + "yAxis: [{type: 'value',axisLine:{show:false},axisTick:{show:false},axisLabel: {show:false,formatter: '{value}'},splitLine: {show:false,}}],"
+ "series: [{type: 'line',smooth: 'true',label: {show: true,position: 'top',textStyle: {color: '#000000',},},"
+ "itemStyle: {normal: {color: function(params) {var colorList = ["
+ "'#7711AF', '#CF77FF', '#AE004F', '#F35872', '#FA7729','#FFC526', '#F8E71C', '#34ADAE', '#3DDFD2', '#A0FFFF'];"
+ "var colorListr = ['#0f4471','#00adb5','#ff5722','#5628b4','#20BF55','#f23557','#118df0','#11cbd7','#d3327b','#ae318a','#993090','#6f3071'];"
+ "return colorListr[params.dataIndex]},label: {show: true,position: 'top',formatter: '',fontSize:14},shadowBlur: 10,shadowColor: 'rgba(40, 40, 40, 0.3)',}"
+ "},areaStyle: {normal: {color: 'rgba(0,70,209,0.5)',shadowColor: 'rgba(53,142,215, 0.9)', shadowBlur: 20}},data: [";
dts2.First;
while (!dts2.Eof)
{
vOption = vOption + dts2.FieldByName("FAuxQty").AsString + ",";
dts2.Next;
}
vOption = copy(vOption, 1, Length(vOption)-1);
vOption = vOption + "]}]};";
dts2.First;
UgEChart01.Options.Text = vOption;
}
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
//PasScript
procedure GetEChartLine;
//折線圖
Var
vOption: String;
Begin
if dts2.IsEmpty Then
Begin
ShowMessage(UGMM.LT('目前選擇的時間範圍內無數據!'));
Exit;
End;
vOption := 'option = {title: {text: ''' + UGMM.LT('銷售訂單排名') + ''',textStyle:{fontSize: 32},subtext: '''',left: ''center''},'
+ 'backgroundColor:"#ffffff",'
+ 'tooltip: {trigger: ''axis'',axisPointer: { type: ''shadow'' }},'
+ 'grid: {top:"40",left: ''3%'',right: ''4%'',bottom: ''3%'',containLabel: true},'
+ 'xAxis: [{type: ''category'',axisTick:{show:false},data: [';
dts2.First;
while not dts2.Eof Do
Begin
vOption := vOption + '''' + dts2.FieldByName('FCustName').AsString + ''',';
dts2.Next;
End;
vOption := copy(vOption, 1, Length(vOption)-1);
vOption := vOption + ']}],';
vOption := vOption + 'yAxis: [{type: ''value'',axisLine:{show:false},axisTick:{show:false},axisLabel: {show:false,formatter: ''{value}''},splitLine: {show:false,}}],'
+ 'series: [{type: ''line'',smooth: ''true'',label: {show: true,position: ''top'',textStyle: {color: ''#000000'',},},'
+ 'itemStyle: {normal: {color: function(params) {var colorList = ['
+ '''#7711AF'', ''#CF77FF'', ''#AE004F'', ''#F35872'', ''#FA7729'',''#FFC526'', ''#F8E71C'', ''#34ADAE'', ''#3DDFD2'', ''#A0FFFF''];'
+ 'var colorListr = [''#0f4471'',''#00adb5'',''#ff5722'',''#5628b4'',''#20BF55'',''#f23557'',''#118df0'',''#11cbd7'',''#d3327b'',''#ae318a'',''#993090'',''#6f3071''];'
+ 'return colorListr[params.dataIndex]},label: {show: true,position: ''top'',formatter: '''',fontSize:14},shadowBlur: 10,shadowColor: ''rgba(40, 40, 40, 0.3)'',}'
+ '},areaStyle: {normal: {color: ''rgba(0,70,209,0.5)'',shadowColor: ''rgba(53,142,215, 0.9)'', shadowBlur: 20}},data: [';
dts2.First;
while not dts2.Eof Do
Begin
vOption := vOption + dts2.FieldByName('FAuxQty').AsString + ',';
dts2.Next;
End;
vOption := copy(vOption, 1, Length(vOption)-1);
vOption := vOption + ']}]};';
dts2.First;
UgEChart01.Options.Text := vOption;
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
// Make sure to add code blocks to your code group
- GetEChartPie:設定獲取EChart餅圖。
//JScript
function GetEChartPie()
//餅圖
{
var vOption;
if (dts2.IsEmpty)
{
ShowMessage(UGMM.LT("目前選擇的時間範圍內無數據!"));
return;
//Exit;
}
vOption = "option = {title: {text: '" + UGMM.LT("銷售訂單排名") + "',textStyle:{fontSize: 32},subtext: '',left: 'center'},"
+ "tooltip: {trigger: 'item',formatter: '{a} <br/>{b} : {c} ({d}%)'},"
+ "legend: {orient: 'vertical',left: 'right',"
+ "data: [";
dts2.First;
while (!dts2.Eof)
{
vOption = vOption + "'" + dts2.FieldByName("FCustName").AsString + "',";
dts2.Next;
}
vOption = copy(vOption, 1, Length(vOption)-1);
vOption = vOption + "]},"
+ "series: [{name: '" + UGMM.LT("數量") + "',type: 'pie',center: ['50%', '60%'],data: [";
dts2.First;
while (!dts2.Eof)
{
vOption = vOption + "{value: " + dts2.FieldByName("FAuxQty").AsString + ",name:'" + dts2.FieldByName("FCustName").AsString + "'},";
dts2.Next;
}
vOption = copy(vOption, 1, Length(vOption)-1);
vOption = vOption + "],emphasis: {itemStyle: {shadowBlur: 10,shadowOffsetX: 0,shadowColor: 'rgba(0, 0, 0, 0.5)'}}}]};";
dts2.First;
UgEChart01.Options.Text = vOption;
}
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
//PasScript
Procedure GetEChartPie;
//餅圖
Var
vOption: String;
Begin
if dts2.IsEmpty Then
Begin
ShowMessage(UGMM.LT('目前選擇的時間範圍內無數據!'));
Exit;
End;
vOption := 'option = {title: {text: ''' + UGMM.LT('銷售訂單排名') + ''',textStyle:{fontSize: 32},subtext: '''',left: ''center''},'
+ 'tooltip: {trigger: ''item'',formatter: ''{a} <br/>{b} : {c} ({d}%)''},'
+ 'legend: {orient: ''vertical'',left: ''right'','
+ 'data: [';
dts2.First;
while not dts2.Eof Do
Begin
vOption := vOption + '''' + dts2.FieldByName('FCustName').AsString + ''',';
dts2.Next;
End;
vOption := copy(vOption, 1, Length(vOption)-1);
vOption := vOption + ']},'
+ 'series: [{name: ''' + UGMM.LT('數量') + ''',type: ''pie'',center: [''50%'', ''60%''],data: [';
dts2.First;
while not dts2.Eof Do
Begin
vOption := vOption + '{value: ' + dts2.FieldByName('FAuxQty').AsString + ',name:''' + dts2.FieldByName('FCustName').AsString + '''},';
dts2.Next;
End;
vOption := copy(vOption, 1, Length(vOption)-1);
vOption := vOption + '],emphasis: {itemStyle: {shadowBlur: 10,shadowOffsetX: 0,shadowColor: ''rgba(0, 0, 0, 0.5)''}}}]};';
dts2.First;
UgEChart01.Options.Text := vOption;
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
// Make sure to add code blocks to your code group
- UgWebRunFrameOnAfterRunScript:
UgWebRunFrame
的OnAfterRunScript
事件,設定初始顯示的內容。
//JScript
function UgWebRunFrameOnAfterRunScript(sender)
{
dts1.Connection = GetRFERP;
dts2.Connection = GetRFERP;
GetSQL;
GetEChartBar;
UGMM.LC(Self);
cbChartType.Items.CommaText = UGMM.LT("柱狀圖,折線圖,餅圖");
cbChartType.ItemIndex = 0;
}
2
3
4
5
6
7
8
9
10
11
//PasScript
procedure UgWebRunFrameOnAfterRunScript(const sender: tobject);
begin
dts1.Connection := GetRFERP;
dts2.Connection := GetRFERP;
GetSQL;
GetEChartBar;
UGMM.LC(Self);
cbChartType.Items.CommaText := UGMM.LT('柱狀圖,折線圖,餅圖');
cbChartType.ItemIndex := 0;
end;
2
3
4
5
6
7
8
9
10
11
// Make sure to add code blocks to your code group
- btnQueryOnClick:
btnQuery
的OnClick
事件,設定重新整理查詢內容。
//JScript
function btnQueryOnClick(sender)
{
GetSQL;
cbChartTypeOnChange(sender);
}
2
3
4
5
6
//PasScript
procedure btnQueryOnClick(sender: tobject);
begin
GetSQL;
cbChartTypeOnChange(sender);
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- cbEChartTypeOnChange:
cbEChartType
的OnChange
事件,點選切換不同的圖表型別顯示。
//JScript
function cbChartTypeOnChange(sender)
{
if (cbChartType.ItemIndex == 0)
GetEChartBar;
if (cbChartType.ItemIndex == 1)
GetEChartLine;
if (cbChartType.ItemIndex == 2)
GetEChartPie;
}
2
3
4
5
6
7
8
9
10
11
//PasScript
procedure cbChartTypeOnChange(sender: tobject);
begin
if cbChartType.ItemIndex = 0 Then
GetEChartBar;
if cbChartType.ItemIndex = 1 Then
GetEChartLine;
if cbChartType.ItemIndex = 2 Then
GetEChartPie;
end;
2
3
4
5
6
7
8
9
10
// Make sure to add code blocks to your code group
# 3.3.5. 多語言設定
點選FastWeb低程式碼開發平臺功能表導航項中的系統管理
-翻譯
-詞條維護
。
收集此頁面視窗中所有需要進行翻譯的詞條(包括程式中設定的多語言專案),點選新增
按鈕,根據提示填寫維護。
# 3.3.6. 運行效果
# 4. 匯入窗體
# 4.1. 匯入布種資料-多筆數據表單
點選功能表導航欄中的模組列表(WEB)
,在打開的模組列表中點選新增
按鈕,新增標題為匯入布種資料
的模組,新增的內容樣式如下,主要填寫組別
、編號
、標題
、開發使用者
等內容,使用PasScript的使用者編號請填寫為 W-EQ-MOD-2125-1
,使用JScript的使用者編號請填寫 W-EQ-MOD-2125-2
。填寫完成後,點選儲存
按鈕。
選擇剛才建立的標題為匯入布種資料
的模組,點選上方的模組設計
按鈕,進入模組設計界面。
匯入布種資料的頁面設定如下圖。
# 4.1.1. 功能簡述
此匯入視窗頁面顯示布種資料的相關資訊,該頁面涉及到主從表的設計相關的資訊以及選擇
按鈕點選后的數據傳遞方式的設計說明。
# 4.1.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Height | 600 | 主窗體的高度(畫素) |
Width | 800 | 主窗體的寬度(畫素) |
# 4.1.3. 控制元件設定
- 控制元件說明
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
UgContainerPanel01 | TUgContainerPanel | 容器面板控制元件,用於放置查詢內容,按鈕控制元件Align :alTop |
edQuery | TUgEdit | 用於輸入查詢條件EmptyText :輸入布種程式碼或名稱FieldLabel :布種程式碼或名稱FieldLabelAlign :laTop |
btnSelect | TUgButton | 選擇按鈕Caption :選擇 |
btnQuery | TUgButton | 查詢按鈕Caption :查詢 |
btnClear | TUgButton | 清除按鈕Caption :清除 |
UgVerticalLine01 | TUgVerticalLine | 佈局按鈕,用於區隔不同功能型別的按鈕 |
btnRefresh | TUgButton | 重新整理按鈕Caption :重新整理 |
btnShowAll | TUgButton | 顯示全部按鈕Caption :顯示全部 |
btnExit | TUgButton | 退出按鈕Caption :退出 |
UgRFDataSet01 | TUgRFDataSet | 布種數據集 |
UgDataSource01 | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為UgRFDataSet01 |
UgRFDataSet02 | TUgRFDataSet | 布種分組數據集 |
UgDataSource02 | TUgDataSource | 數據源控制元件,用於對接數據感知控制元件,其DataSet 屬性設定為UgRFDataSet02 |
UgDBTreeGrid01 | TUgDBTreeGrid | 樹形表格數據集Align :alLeftDataSource :UgDataSource02IdField :FTreeKeyIDIdParentField :FTreeParentID |
UgDBGrid01 | TUgDBGrid | 表格數據集Align :alClientDataSource :UgDataSource01 Option.dgRowSelect :TrueOption.dgCheckSelect :TruedgMultiSelect :True |
- UgDBTreeGrid01欄位設定
選擇並雙擊UgDBTreeGrid01
控制元件,打開欄位編輯器,根據下圖顯示的內容進行編輯。點選左上角的+
或者-
進行新增行或刪除行操作。雙擊FieldName
或者Caption
可修改對應行的欄位名稱或者顯示標題內容。ReadOnly
用於設定欄位是否為可讀屬性。
- UgDBGrid01欄位設定
選擇並雙擊UgDBGrid01
控制元件,打開欄位編輯器,根據下圖顯示的內容進行編輯。點選左上角的+
或者-
進行新增行或刪除行操作。雙擊FieldName
或者Caption
可修改對應行的欄位名稱或者顯示標題內容。ReadOnly
用於設定欄位是否為可讀屬性。
# 4.1.4. 程式設計
在初始設定程式時,使用JScript使用者需勾選pub_js_tarslink
與pub_js_messageinfo
單元,使用PasScript的使用者請勾選pub_pas_tarslink
與pub_pas_messageinfo
單元。
- 初始設定:設定顯示數據集的初始化內容。(僅限PasScript)
Begin
//數據集初始化
UgRFDataSet01.Connection := GetRFERP;
UgRFDataSet02.Connection := GetRFERP;
UgRFDataSet02.Close;
UgRFDataSet02.SQL.Text := 'Select * From Basic_ItemGroup WHERE FTypeID = 1';
UgRFDataSet02.Open;
UgRFDataSet02.First;
UgRFDataSet01.Close;
UgRFDataSet01.SQL.Text := 'SELECT * FROM Basic_Item WHERE FTypeID = 1';
UgRFDataSet01.Open;
dtsSelected.Connection := GETRFERP;
dtsSelected.Close;
dtsSelected.SQL.Text := 'SELECT TOP 0 FInterID,FItemCode,FItemName,FItemSpec,FUnitID,FUnitCode,FUnitName' +
' FROM Basic_Item WHERE FTypeID = 1';
dtsSelected.Open;
End.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- UgWebRunFrameOnAfterRunScript:
UgWebRunFrame
的OnAfterRunScript
事件,翻譯界面並驗證模組許可權。
//JScript
function UgWebRunFrameOnAfterRunScript(sender)
{
//翻譯界面
UGMM.LC(Self);
//驗證模組許可權
UGMM.VerifyRunFramePerm(Self);
//數據集初始化
UgRFDataSet01.Connection = GetRFERP;
UgRFDataSet02.Connection = GetRFERP;
UgRFDataSet02.Close;
UgRFDataSet02.SQL.Text = "Select * From Basic_ItemGroup WHERE FTypeID = 1";
UgRFDataSet02.Open;
UgRFDataSet02.First;
UgRFDataSet01.Close;
UgRFDataSet01.SQL.Text = "SELECT * FROM Basic_Item WHERE FTypeID = 1";
UgRFDataSet01.Open;
dtsSelected.Connection = GETRFERP;
dtsSelected.Close;
dtsSelected.SQL.Text = "SELECT TOP 0 FInterID,FItemCode,FItemName,FItemSpec,FUnitID,FUnitCode,FUnitName" +
" FROM Basic_Item WHERE FTypeID = 1";
dtsSelected.Open;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//PasScript
procedure UgWebRunFrameOnAfterRunScript(const sender: tobject);
begin
//翻譯界面
UGMM.LC(Self);
//驗證模組許可權
UGMM.VerifyRunFramePerm(Self);
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
- UgDBTreeGrid01OnCellClick:
UgDBTreeGrid01
的OnCellClick
事件,點選實現分組資訊的顯示。
//JScript
function UgDBTreeGrid01OnCellClick(column)
//分組資訊顯示
{
UgRFDataSet01.Filtered = False;
UgRFDataSet01.Filter = "FGroupID = " + UgRFDataSet02.FieldByName("FInterID").AsString;
UgRFDataSet01.Filtered = True;
}
2
3
4
5
6
7
8
//PasScript
procedure UgDBTreeGrid01OnCellClick(column: tunidbgridcolumn);
//分組資訊顯示
begin
UgRFDataSet01.Filtered := False;
UgRFDataSet01.Filter := 'FGroupID = ' + UgRFDataSet02.FieldByName('FInterID').AsString;
UgRFDataSet01.Filtered := True;
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
- btnQueryOnClick:
btnQuery
的OnClick
事件,點選以使用查詢條件執行查詢。
//JScript
//查詢
function btnQueryOnClick(sender)
{
UgRFDataSet01.SQL.Text = "SELECT * FROM Basic_Item WHERE (FItemCode LIKE '%" + edQuery.Text +
"%' or FItemName LIKE '%" + edQuery.Text + "%') AND FTypeID = 1";
UgRFDataSet01.Open;
}
2
3
4
5
6
7
8
//PasScript
//查詢
procedure btnQueryOnClick(sender: tobject);
begin
UgRFDataSet01.SQL.Text := 'SELECT * FROM Basic_Item WHERE (FItemCode LIKE ''%' + edQuery.Text +
'%'' or FItemName LIKE ''%' + edQuery.Text + '%'') AND FTypeID = 1';
UgRFDataSet01.Open;
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
- btnClearOnClick:
btnClear
的OnClick
事件,點選以清除查詢條件中的內容,恢復初始查詢。
//JScript
//清除
function btnClearOnClick(sender)
{
edQuery.Text = "";
UgRFDataSet01.SQL.Text = "SELECT * FROM Basic_Item WHERE FTypeID = 1";
UgRFDataSet01.Open;
}
2
3
4
5
6
7
8
//PasScript
//清除
procedure btnClearOnClick(sender: tobject);
begin
edQuery.Text := '';
UgRFDataSet01.SQL.Text := 'SELECT * FROM Basic_Item WHERE FTypeID = 1';
UgRFDataSet01.Open;
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
- btnExitOnClick:
btnExit
的OnClick
事件,點選退出視窗。
//JScript
//退出視窗
function btnExitOnClick(sender)
{
var p = Self.Parent;
if (p is TUgWebForm)
{
TUgWebForm(p).Close;
}
if (p is TUniTabSheet)
UniSession.AddJS("document.getElementById(\"" + TUniTabSheet(p).jsid + "_tab-closeEl\").click();");
}
2
3
4
5
6
7
8
9
10
11
12
//PasScript
//退出視窗
procedure btnExitOnClick(sender: tobject);
Var
p:TComponent;
Begin
p:=Self.Parent;
if p is TUgWebForm then
Begin
TUgWebForm(p).Close;
End;
if p is TUniTabSheet then
UniSession.AddJS('document.getElementById("' + TUniTabSheet(p).jsid + '_tab-closeEl").click();');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
// Make sure to add code blocks to your code group
- btnRefreshOnClick:
btnRefresh
的OnClick
事件,點選以重新整理頁面顯示,數據集重新進行設定。
//JScript
//重新整理頁面顯示,數據集重新設定
function btnRefreshOnClick(sender)
{
UgRFDataSet01.Connection = GetRFERP;
UgRFDataSet02.Connection = GetRFERP;
UgRFDataSet02.Close;
UgRFDataSet02.SQL.Text = "Select * From Basic_ItemGroup WHERE FTypeID = 1";
UgRFDataSet02.Open;
UgRFDataSet02.First;
UgRFDataSet01.Close;
UgRFDataSet01.SQL.Text = "SELECT * FROM Basic_Item WHERE FTypeID = 1";
UgRFDataSet01.Open;
//UgDBGrid01.Refresh;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//PasScript
//重新整理頁面顯示,數據集重新設定
procedure btnRefreshOnClick(sender: tobject);
begin
UgRFDataSet01.Connection := GetRFERP;
UgRFDataSet02.Connection := GetRFERP;
UgRFDataSet02.Close;
UgRFDataSet02.SQL.Text := 'Select * From Basic_ItemGroup WHERE FTypeID = 1';
UgRFDataSet02.Open;
UgRFDataSet02.First;
UgRFDataSet01.Close;
UgRFDataSet01.SQL.Text := 'SELECT * FROM Basic_Item WHERE FTypeID = 1';
UgRFDataSet01.Open;
//UgDBGrid01.Refresh;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Make sure to add code blocks to your code group
- btnShowAllOnClick:
btnShowAll
的OnClick
事件,點選以顯示全部。
//JScript
//顯示全部
function btnShowAllOnClick(sender)
{
UgRFDataSet01.Filtered = False;
}
2
3
4
5
6
//PasScript
//顯示全部
procedure btnShowAllOnClick(sender: tobject);
begin
UgRFDataSet01.Filtered := False;
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
- btnSelectOnClick:
btnSelect
的OnClick
事件,點選選擇確認要返回的專案,在主視窗獲取此數據集資訊。
//JScript
function btnSelectOnClick(sender)
//確認要返回的專案,在主視窗獲取此數據集資訊
{
var i;
if (UgRFDataSet01.IsEmpty)
return;
//Exit;
dtsSelected.Close;
dtsSelected.Open;
//依次選擇打勾的專案,將數據欄位存入選擇的對象中。
for (i = 0; i<= UgDBGrid01.SelectedRows.count - 1; i++)
{
UgRFDataSet01.Bookmark = UgDBGrid01.selectedRows[i];
dtsSelected.Append;
dtsSelected.FieldByName("FInterID").AsString = UgRFDataSet01.FieldByName("FInterID").AsString;
dtsSelected.FieldByName("FItemCode").AsString = UgRFDataSet01.FieldByName("FItemCode").AsString;
dtsSelected.FieldByName("FItemName").AsString = UgRFDataSet01.FieldByName("FItemName").AsString;
dtsSelected.FieldByName("FItemSpec").AsString = UgRFDataSet01.FieldByName("FItemSpec").AsString;
dtsSelected.FieldByName("FUnitID").AsString = UgRFDataSet01.FieldByName("FUnitID").AsString;
dtsSelected.FieldByName("FUnitCode").AsString = UgRFDataSet01.FieldByName("FUnitCode").AsString;
dtsSelected.FieldByName("FUnitName").AsString = UgRFDataSet01.FieldByName("FUnitName").AsString;
dtsSelected.Post;
}
//關閉視窗時返回狀態資訊
TUgWebForm(self.Parent).ModalResult = mrOK;
}
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
//PasScript
procedure btnSelectOnClick(sender: tobject);
//確認要返回的專案,在主視窗獲取此數據集資訊
Var
i: Integer;
begin
if UgRFDataSet01.IsEmpty then
Exit;
dtsSelected.Close;
dtsSelected.Open;
//依次選擇打勾的專案,將數據欄位存入選擇的對象中。
for i := 0 to UgDBGrid01.SelectedRows.count - 1 do
begin
UgRFDataSet01.Bookmark := UgDBGrid01.selectedRows[i];
dtsSelected.Append;
dtsSelected.FieldByName('FInterID').AsString := UgRFDataSet01.FieldByName('FInterID').AsString;
dtsSelected.FieldByName('FItemCode').AsString := UgRFDataSet01.FieldByName('FItemCode').AsString;
dtsSelected.FieldByName('FItemName').AsString := UgRFDataSet01.FieldByName('FItemName').AsString;
dtsSelected.FieldByName('FItemSpec').AsString := UgRFDataSet01.FieldByName('FItemSpec').AsString;
dtsSelected.FieldByName('FUnitID').AsString := UgRFDataSet01.FieldByName('FUnitID').AsString;
dtsSelected.FieldByName('FUnitCode').AsString := UgRFDataSet01.FieldByName('FUnitCode').AsString;
dtsSelected.FieldByName('FUnitName').AsString := UgRFDataSet01.FieldByName('FUnitName').AsString;
dtsSelected.Post;
End;
//關閉視窗時返回狀態資訊
TUgWebForm(self.Parent).ModalResult := mrOK;
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
// Make sure to add code blocks to your code group
# 4.1.5. 多語言設定
點選FastWeb低程式碼開發平臺功能表導航項中的系統管理
-翻譯
-詞條維護
。
收集此頁面視窗中所有需要進行翻譯的詞條(包括程式中設定的多語言專案),點選新增
按鈕,根據提示填寫維護。
# 4.1.6. 運行效果
# 4.2. PDF檢視
點選功能表導航欄中的模組列表(WEB)
,在打開的模組列表中點選新增
按鈕,新增標題為PDFPreview
的模組,新增的內容樣式如下,主要填寫組別
、標題
、開發使用者
三項內容,填寫完成後,點選儲存
按鈕。
選擇剛才建立的標題為PDFPreview
的模組,點選上方的模組設計
按鈕,進入模組設計界面。
PDF檢視的頁面設定如下圖。
# 4.2.1. 功能簡述
此頁面不能單獨運行,需要由其他視窗呼叫並傳遞PDF的相關參數才可以正常運行。
# 4.2.2. 窗體設定
屬性 | 取值 | 說明 |
---|---|---|
Height | 600 | 主窗體的高度(畫素) |
Width | 800 | 主窗體的寬度(畫素) |
# 4.2.3. 控制元件設定
- 控制元件說明
控制元件名稱 | 控制元件型別 | 說明 |
---|---|---|
UgURLFrame | TUgURLFrame | 顯示列印結果的頁面控制元件,接收的是網頁地址Align :alClient |
# 4.2.4. 程式設計
此實體無需設計程式。
# 4.2.5. 多語言設定
點選FastWeb低程式碼開發平臺功能表導航項中的系統管理
-翻譯
-詞條維護
。
收集此頁面視窗中所有需要進行翻譯的詞條(包括程式中設定的多語言專案),點選新增
按鈕,根據提示填寫維護。