客户资料编辑
# 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