客戶資料編輯
# FastERP 進銷存模板開發 客戶資料編輯
客戶資料編輯模組位於功能表欄中的 [基礎資料]-[客戶資料]。通過 [新建] 或 [編輯] 按鈕進入。使用的模組型別為編輯窗體,關於編輯窗體的建立模式請參考 編輯窗體。
# 1. 數據表結構
計量單位使用的數據表名稱為 Basic_Cust。表結構已於 客戶資料 的開發說明中建立,此處不需要重複建立。除上述之外,還需要再建立以下表結構。
Basic_CustAddrs:客戶地址。
CREATE TABLE [dbo].[Basic_CustAddrs](
[FInterID] [int] NOT NULL,
[FEntryID] [int] NOT NULL,
[FCompany] [varchar](100) NULL,
[FAddress] [varchar](200) NULL,
[FPerson] [varchar](100) NULL,
[FEMail] [varchar](100) NULL,
[FPhone] [varchar](20) NULL,
[FFax] [varchar](20) NULL,
CONSTRAINT [PK_Basic_CustAddrs_1] PRIMARY KEY CLUSTERED
(
[FInterID] ASC,
[FEntryID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Basic_CustRelation:客戶關係管理。
CREATE TABLE [dbo].[Basic_CustRelation](
[FInterID] [int] NOT NULL,
[FEntryID] [int] NOT NULL,
[FEmpName] [varchar](100) NULL,
[FDeptName] [varchar](100) NULL,
[FPosition] [varchar](100) NULL,
[FCharacter] [varchar](100) NULL,
[FInfluence] [varchar](100) NULL,
[FSex] [varchar](50) NULL,
[FBirthDate] [datetime] NULL,
[FWeddingDate] [datetime] NULL,
[FNativePlace] [varchar](100) NULL,
[FEMail] [varchar](100) NULL,
[FPhone] [varchar](20) NULL,
[FTel] [varchar](20) NULL,
[FFax] [varchar](20) NULL,
[FNote] [varchar](100) NULL,
CONSTRAINT [PK_Basic_CustRelation] PRIMARY KEY CLUSTERED
(
[FInterID] ASC,
[FEntryID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Basic_CustMaterial:客戶物料資訊。
CREATE TABLE [dbo].[Basic_CustMaterial](
[FInterID] [int] NOT NULL,
[FEntryID] [int] NOT NULL,
[FCustID] [int] NULL,
[FCustItemCode] [nvarchar](50) NULL,
[FCustItemName] [nvarchar](100) NULL,
[FItemCode] [nvarchar](50) NULL,
[FItemName] [nvarchar](100) NULL,
[FItemSpec] [nvarchar](100) NULL,
[FPackMethod] [nvarchar](50) NULL,
[FPackQty] [decimal](28, 6) NULL,
[FPackUnit] [nvarchar](10) NULL,
[FWeightUnit] [nvarchar](10) NULL,
[FWhUnit] [nvarchar](10) NULL,
[FStandPrice] [decimal](28, 6) NULL,
[FSalePrice] [decimal](28, 6) NULL,
[FNote] [nvarchar](100) NULL,
CONSTRAINT [PK_Basic_CustMaterial] PRIMARY KEY CLUSTERED
(
[FInterID] ASC,
[FEntryID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 2. 模組設計
登陸FastERP,打開[主頁]->[平臺設計]->[系統設計]->[模組設計]。在模組設計列表左側中找到 進銷存-基礎資料-客戶資料-客戶資料編輯,單擊選擇,點選功能表欄中的 [編輯] 按鈕。打開 模組設計 界面。

在基本資訊界面中保持上述內容設定。

切換至 窗體設計 界面,選擇 數據集資訊標籤頁,此處需建立四個數據集。
# 2.1. 客戶資料模組設計
客戶資料模組界面根據上述內容進行設計。主控制元件需設定為 dbStand,其中SQL指令碼設計如下。
select A.*
from Basic_Cust A
where A.FInterID=:FInterID
2
3
其中的 :FInterID 來源於上文視窗客戶資料 通過滑鼠雙擊或選擇 [編輯] 按鈕傳遞過來的記錄的主鍵ID。

點選 欄位資訊按鈕,點選 [載入欄位] 按鈕,界面中會顯示選擇的SQL產生的數據集欄位資訊。修改欄位標籤資訊。
其中部分欄位需要特別設定。
FInterID:主鍵欄位,欄位提交模式需設定為pfInKey,預設值型別為VAR_NODEID。FCustCode:客戶程式碼,需檢查是否有重複,檢驗重複專案需設定數據強制。且不能為空,設定儲存檢空模式為逐條強制。FCustName:客戶名稱,需檢查是否有重複,檢驗重複專案需設定數據強制。且不能為空,設定儲存檢空模式為逐條強制。FGroupID:分組ID,需要從上文視窗中獲取,預設值型別專案需設定VAR_CONTEXDATA。預設值專案需設定為0.FInterID。控制元件型別需設定為dbImgBox。設定儲存檢空模式為逐條強制。參照型別需設定為SQL。參照內容需設定為Select FGroupName,FInterID from Basic_CustGroup。FShortName:客戶簡稱,不能為空,設定儲存檢空模式為逐條強制。FforzenFor:是否凍結,需設定一個預設值,預設值型別為VAR_DEFAULT,預設值設定為0。FCreateDate:建檔日期,需自動設定建立的時間點,預設值型別為VAR_DATETIME。FCreater:建立人,需自動設定建立的使用者名稱稱。預設值型別為VAR_USERNAME。FLstModDate:最後修改日期,設定預設值型別為VAR_DATETIME,預設值為-1。用於在每次更新儲存時自動更新。日期。FSaleType:銷售型別。設定控制元件型別為dbcomboBox。設定參照型別為參照,設定參照內容為REF_SALETYPE。FInvoiceType:發票型別。設定控制元件型別為dbcomboBox。設定參照型別為參照,設定參照內容為REF_INVOICETYPE。FEmpName:業務員。設定控制元件型別為dbLookUp,設定控制元件選項為EditList,設定儲存檢空模式為逐條強制,設定參照型別為參照,設定參照內容為LKUP_EMPLOYEE。FDeptName:部門名稱。設定控制元件型別為dbLookUp,設定控制元件選項為EditList,設定儲存檢空模式為逐條強制,設定參照型別為參照,設定參照內容為LKUP_DEPT。FInvoiceCustName:結帳客戶。設定控制元件型別為dbLookUp,設定控制元件選項為EditList,設定參照型別為參照,設定參照內容為LKUP_INVOICECUST。FCurrency:幣別。設定控制元件型別為dbLookUp,設定控制元件選項為EditList,設定參照型別為參照,設定參照內容為LKUP_CURRENCY。FDistrict:區域。設定控制元件型別為dbcomboBox,設定參照型別為參照,設定參照內容為REF_DISTRICT。FCustomerType:客戶型別。設定預設值型別為VAR_DEFAULT,設定預設值為1,設定控制元件型別為dbRadioGroup,設定參照內容為國內客戶=1 國外客戶=2。FPayItem:付款方式。設定控制元件型別為dbLookUp,設定參照型別為參照,設定參照內容為LKUP_PAYITME。FSettleName:結算方式。設定控制元件型別為dbLookUp,設定參照型別為參照,設定參照內容為LKUP_SETTLE。

在擴充套件控制元件-工具欄功能表標籤頁中,新增四項按鈕專案,按照圖中所示進行設定。其中 SUBBUTTON 型別顯示的是按鈕組,用於容納其它按鈕。
# 2.2. 客戶收貨地址設計

客戶收穫地址的數據集資訊根據圖中所示進行設計。其中主控制元件需設定為 dbGrid,SQL設定如下:
select * from Basic_CustAddrs
where FInterID =:FInterID
2

欄位資訊界面中,點選 [載入欄位] 按鈕,可將SQL語句構造的數據集的欄位提取並顯示在表格中。修改各欄位的欄位標籤,修改欄位的屬性設定。
FInterID:單據ID,與FEntryID聯合組成唯一ID,設定欄位提交模式為pfInKey,設定預設值型別為VAR_DATA,設定預設值為0.FInterID,表示預設值來源於數據集0的FInterID欄位。FEntryID:序號ID,與FInterID聯合組成唯一ID,設定欄位提交模式為pfInKey,設定預設值型別為VAR_NO。FCompany:收貨公司。副控制元件設定為dbedit。FAddress:收貨地址。副控制元件設定為dbedit。FPerson:收貨人。副控制元件設定為dbedit。FEMail:郵箱。副控制元件設定為dbedit。FPhone:電話號碼。副控制元件設定為dbedit。FFax:傳真號碼。副控制元件設定為dbedit。

在擴充套件控制元件-其它控制元件界面中,在表格空白處單擊,按下↓方向按鍵,新增空白行,新增兩行,分別設定為 新增行 與 刪除行的按鈕,根據圖中所示內容進行設定。
# 2.3. 客戶關係模組設計

客戶關係的數據集資訊根據上圖所示進行設定,主控制元件設定為 dbGrid,SQL設定如下:
select * from Basic_CustRelation
where FInterID =:FInterID
order by FEntryID
2
3

在欄位資訊標籤頁中,點選 [載入欄位] 按鈕,SQL產生的數據集中的欄位資訊顯示在列表中。修改各欄位的欄位標籤如圖所示。
FInterID:單據ID,與FEntryID聯合組成唯一ID,設定欄位提交模式為pfInKey,設定預設值型別為VAR_DATA,設定預設值為0.FInterID,表示預設值來源於數據集0的FInterID欄位。FEntryID:序號ID,與FInterID聯合組成唯一ID,設定欄位提交模式為pfInKey,設定預設值型別為VAR_NO。FEmpName:姓名,設定副控制元件為dbedit。FDeptName:部門,設定副控制元件為dbedit。FPosition:位置,設定副控制元件為dbedit。FCharacter:性格,設定副控制元件為dbedit。FInfluence:影響力,設定副控制元件為dbedit。FSex:性別,設定副控制元件為dbedit。FBirthDate:出生日期,設定副控制元件為dbDateTime。FWedding:結婚紀念日,設定副控制元件為dbDateTime。FNativePlace:籍貫,設定副控制元件為dbedit。FEmail:郵箱,設定副控制元件為dbedit。FPhone:電話號碼,設定副控制元件為dbedit。FTel:行動電話,設定副控制元件為dbedit。FFax:傳真號碼,設定副控制元件為dbedit。FNote:注意事項,設定副控制元件為dbedit。

在擴充套件控制元件-其它控制元件界面中,在表格空白處單擊,按下↓方向按鍵,新增空白行,新增兩行,分別設定為 新增行 與 刪除行的按鈕,根據圖中所示內容進行設定。
# 2.4. 客戶產品模組設計

數據集設計界面根據圖中所示進行設定,主控制元件名稱需設定為 dbGrid,SQL設定如下:
select * from Basic_CustMaterial
where FInterID =:FInterID
Order By FEntryID
2
3

在欄位資訊標籤頁中,點選 [載入欄位] 按鈕,SQL產生的數據集中的欄位資訊顯示在列表中。修改各欄位的欄位標籤如圖所示。
FInterID:單據ID,與FEntryID聯合組成唯一ID,設定欄位提交模式為pfInKey,設定預設值型別為VAR_DATA,設定預設值為0.FInterID,表示預設值來源於數據集0的FInterID欄位。FEntryID:序號ID,與FInterID聯合組成唯一ID,設定欄位提交模式為pfInKey,設定預設值型別為VAR_NO。FCustItemCode:客戶物料程式碼,設定副控制元件為dbedit。FCustItem:客戶物料名稱,設定副控制元件為dbedit。FItemCode:物料程式碼,設定控制元件選項為dbLookUp,設定副控制元件為dbLookUp,設定參照型別為參照,設定參照內容為LKUP_ITEMFABRIC。FItemName:物料名稱,設定副控制元件為dbedit。FItemSpec:規格,設定副控制元件為dbedit。FPackMet:包裝方式,設定副控制元件為dbedit。FPackQty:包裝數量,設定副控制元件為dbedit。FPackUnit:包裝單位,設定副控制元件為dbcomboBox,設定參照型別為參照,設定參照內容為REF_UNITPIECE。FWeightUnit:重量單位,設定副控制元件為dbcomboBox,設定參照型別為參照,設定參照內容為REF_UNIT。FStandPrice:標準價,設定副控制元件為dbedit。FSalePrice:銷售價,設定副控制元件為dbedit。FNote:備註,設定副控制元件為dbmemo。FWhUnit:庫存單位,設定副控制元件為dbcomboBox,設定參照型別為參照,設定參照內容為LKUP_ITEMFABRIC。

在擴充套件控制元件-其它控制元件界面中,在表格空白處單擊,按下↓方向按鍵,新增空白行,新增兩行,分別設定為 新增行 與 刪除行的按鈕,根據圖中所示內容進行設定。
以上資訊設定完成後,點選 [儲存] 按鈕儲存設定。有必要時可關閉並重新打開編輯界面,在第二個數據集數據集資訊中設定快捷查詢的條件程式碼。設定完成後重新點選 [儲存] 按鈕儲存。
# 3. 設計佈局
點選模組設計功能表欄中的 設計佈局-編輯窗體,在FastERP的主視窗中會顯示一個新建立的標籤頁,點選功能表欄中的 設計-設計佈局,會打開自定義視窗,其中會顯示可使用的元件,首先在自定義視窗中 可用專案 處使用滑鼠右鍵點選,建立一個分組,命名為 基本資訊、概覽,客戶收貨地址、關係人員、客戶產品,拖動置於標籤頁面中,將使用滑鼠右鍵,選擇分組,建立概覽、客戶收貨地址、關係人員、客戶產品 分組標籤,將可用專案中的欄位拖動放入界面中,最終顯示界面如下:




在功能表欄中使用滑鼠右鍵,點選選擇自定義 選項,點選至 命令 選項卡,選擇命令 業務操作,拖動至界面中。將 更新客戶資料 拖動至 業務操作 功能表欄中。
設定完成後,點選功能表欄中的 [設計]-[儲存佈局],在彈出的確認儲存佈局視窗中選擇 [確認] 按鈕,等待儲存完成時彈出 儲存成功 的提示,至此完成佈局的儲存。
# 4. 設計指令碼
點選模組中的 [設計]-[指令碼設計],分別在元件欄位中選擇 功能表按鈕 - [刪除],功能表按鈕-[更新客戶資料],下方的事件中雙擊 OnClick 事件,右側的指令碼編輯區域將自動產生關聯的程式碼。
procedure TMyHandler.tbDelOnClick(Sender: TObject);
var
FStatus:integer;
tempVar:array of string;
vResult:string;
begin
//處理過程
if not DBFUN.ShowConfirmDialogue('提示','確定刪除客戶資料嗎?',295) then Abort();
FStatus := FThis.dts0.FieldByName('FStatus').Asinteger;
if FStatus = 1 then
begin
DBFUN.ShowConfirmDialogue('提示','已審覈,不能刪除!',295);
Abort();
end
else
begin
setLength(tempVar,4);
tempVar[0] := FThis.dts0.FieldByName('FInterID').AsString;
tempVar[1] := 'Delete';
tempVar[2] := FThis.dts0.FieldByName('FCreater').AsString;
tempVar[3] := '';
DM.ExecProcedure('sp_Basic_Cust',tempVar);
FThis.CurrID := FThis.FCurrID;
FThis.Close;
end;
end;
procedure TMyHandler.tb0updateOnClick(Sender: TObject);
var
FStatus:integer;
tempVar:array of string;
vResult:string;
begin
//處理過程
if not DBFUN.ShowConfirmDialogue('提示','確定更新客戶資料嗎?',295) then Abort();
setLength(tempVar,4);
tempVar[0] := FThis.dts0.FieldByName('FInterID').AsString;
tempVar[1] := 'Update';
tempVar[2] := FThis.dts0.FieldByName('FCreater').AsString;
tempVar[3] := '';
DM.ExecProcedure('sp_Basic_Cust',tempVar);
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
其它控制元件列表中包含了 OtherCustAddrsAddRow、OtherCustAddrsDelRow、OtherCustRelationAddRow、OtherCustRelationDelRow、OtherCustMaterialAddRow、OtherCustMaterialDelRow,分別設定 OnClick事件。
procedure TMyHandler.OtherCustAddrsAddRowOnClick(Sender: TObject);
begin
FThis.dts1.Append;
FThis.dts1.Post;
end;
procedure TMyHandler.OtherCustAddrsDelRowOnClick(Sender: TObject);
begin
if FThis.dts1.RecordCount = 0 then exit;
FThis.dts1.Delete;
end;
procedure TMyHandler.OtherCustRelationAddRowOnClick(Sender: TObject);
begin
FThis.dts2.Append;
FThis.dts2.Post;
end;
procedure TMyHandler.OtherCustRelationDelRowOnClick(Sender: TObject);
begin
if FThis.dts2.RecordCount = 0 then exit;
FThis.dts2.Delete;
end;
procedure TMyHandler.OtherCustMaterialAddRowOnClick(Sender: TObject);
begin
FThis.dts3.Append;
FThis.dts3.Post;
end;
procedure TMyHandler.OtherCustMaterialDelRowOnClick(Sender: TObject);
begin
if FThis.dts3.RecordCount = 0 then exit;
FThis.dts3.Delete;
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
在數據控制元件中找到 dts0,設定 BeforeEdit 與 BeforeOpen 事件。
procedure TMyHandler.dts0BeforeEdit(DataSet: TDataSet);
begin
if not FbEdit then Abort;
end;
procedure TMyHandler.dts0AfterOpen(DataSet: TDataSet);
begin
if FThis.dts0.FieldByName('FStatus').asinteger = 0 then
FbEdit :=true
else
FbEdit :=false;
FThis.OpenDataDetail;
end;
2
3
4
5
6
7
8
9
10
11
12