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