客戶資料編輯
# 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