纺织印染业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低代码开发平台菜单导航项中的系统管理
-翻译
-词条维护
。

收集此页面窗口中所有需要进行翻译的词条(包括程序中设置的多语言项目),点击添加
按钮,根据提示填写维护。
# 4.2.6. 运行效果
