爱招飞帮助手册 爱招飞帮助手册
首页
  • 学习手册

    • 基本入门
    • 功能介绍
    • 控件说明
    • 功能用法
    • 专用模板
    • 开发流程
    • 函数程序
  • 学习手册

    • 基本入门
    • 功能介绍
    • 控件说明
    • 系统工具
    • 系统管理
    • 数据库工具
    • 专用模板
    • 外部功能
    • 开发流程
    • 函数代码
  • 开发手册
  • 学习手册

    • 基本入门
    • 功能介绍
    • 控件说明
    • 功能用法
    • 专用模板
    • 开发流程
    • 函数程序
  • 开发手册
  • 学习手册

    • 基本入门
    • 功能介绍
    • 控件说明
    • 功能用法
    • 专用模板
    • 开发流程
    • 函数程序
  • 开发手册
  • 学习手册

    • 安装配置
    • 快速上手
    • 界面介绍
    • 功能介绍
    • 报表设计
  • 学习手册

    • 安装配置
    • 快速上手
    • 界面介绍
    • 功能介绍
    • RestAPI
    • WebSocket
  • 学习手册

    • 安装配置
    • 快速上手
    • 程序架构
    • 界面介绍
    • 功能介绍
  • 学习手册

    • 安装配置
    • 快速上手
    • 界面介绍
    • 功能介绍
  • 学习手册

    • 安装配置
    • 快速上手
    • 界面介绍
    • 功能介绍
    • 预设资料
    • RestAPI说明
    • WebSocket说明
    • MQTT说明
    • Python说明
    • 自定程序
    • 运行卫士
    • 自动化作业
    • 函数程序
    • 控件使用
  • 开发手册
  • FastERP
  • FastWeb
  • Smart
  • PinToo
  • Flying
  • TARS
  • 通用功能

    • Report
    • Script
    • Echarts
    • Chart
    • DB Install
    • HiDesk
    • HiNAT
    • FastBPM
    • ReportBuilder
首页
  • 学习手册

    • 基本入门
    • 功能介绍
    • 控件说明
    • 功能用法
    • 专用模板
    • 开发流程
    • 函数程序
  • 学习手册

    • 基本入门
    • 功能介绍
    • 控件说明
    • 系统工具
    • 系统管理
    • 数据库工具
    • 专用模板
    • 外部功能
    • 开发流程
    • 函数代码
  • 开发手册
  • 学习手册

    • 基本入门
    • 功能介绍
    • 控件说明
    • 功能用法
    • 专用模板
    • 开发流程
    • 函数程序
  • 开发手册
  • 学习手册

    • 基本入门
    • 功能介绍
    • 控件说明
    • 功能用法
    • 专用模板
    • 开发流程
    • 函数程序
  • 开发手册
  • 学习手册

    • 安装配置
    • 快速上手
    • 界面介绍
    • 功能介绍
    • 报表设计
  • 学习手册

    • 安装配置
    • 快速上手
    • 界面介绍
    • 功能介绍
    • RestAPI
    • WebSocket
  • 学习手册

    • 安装配置
    • 快速上手
    • 程序架构
    • 界面介绍
    • 功能介绍
  • 学习手册

    • 安装配置
    • 快速上手
    • 界面介绍
    • 功能介绍
  • 学习手册

    • 安装配置
    • 快速上手
    • 界面介绍
    • 功能介绍
    • 预设资料
    • RestAPI说明
    • WebSocket说明
    • MQTT说明
    • Python说明
    • 自定程序
    • 运行卫士
    • 自动化作业
    • 函数程序
    • 控件使用
  • 开发手册
  • FastERP
  • FastWeb
  • Smart
  • PinToo
  • Flying
  • TARS
  • 通用功能

    • Report
    • Script
    • Echarts
    • Chart
    • DB Install
    • HiDesk
    • HiNAT
    • FastBPM
    • ReportBuilder
  • PinToo帮助主页
  • 学习手册

    • 基本入门

    • 功能介绍

    • 控件说明

    • 功能用法

    • 专用模板

    • 开发流程

      • 纺织印染业ERP设计实务
        • 1. 系统组成
        • 2. 主页
          • 2.1. 功能简述
          • 2.2. 窗体设置
          • 2.3. 控件设置
          • 2.4. 程序设计
          • 2.5. 多语言设置
          • 2.6. 运行结果
        • 3. 公司资料-单笔数据表单
          • 3.1. 功能简述
          • 3.2. 窗体设置
          • 3.3. 控件设置
          • 3.4. 程序设计
          • 3.5. 多语言设置
          • 3.6. 运行结果
        • 4. 客户资料查询-多笔数据表单
          • 4.1. 功能简述
          • 4.2. 窗体设置
          • 4.3. 控件设置
          • 4.4. 程序设计
          • 4.5. 多语言设置
          • 4.6. 运行结果
        • 5. 销售订单编辑-多笔数据主从表单
          • 5.1. 功能简述
          • 5.2. 窗体设置
          • 5.3. 控件设置
          • 5.4. 程序设计
          • 5.5. 多语言设置
          • 5.6. 报表设置
          • 5.7. 运行结果
    • 函数程序

  • 开发手册

目录

纺织印染业ERP设计实务

# PinToo 纺织印染业ERP设计实务

  该文档将指导实现在PinToo中的单据相关功能。本次我们将在PinToo中实现业务系统的功能。

# 1. 系统组成

  以下图片描述本系统的模块组成,其中公司资料、客户资料以及布种资料为对应的基础资料,销售订单为引用以上基础资料生成的单据。除公司资料外,其他的每个模块均包含查询页面以及编辑页面。销售订单中还包括打印的相关设置内容。

  本系统主要实现的功能为在建立公司资料、客户资料、布种资料等基础资料后,实现销售订单的单据的新增、编辑、审核等相关单据功能,并实现单据的打印。

# 2. 主页

  点击PinToo设计器左上角的按钮打开选项栏,选择左侧的模块设计。

  在打开的界面中点击添加,在弹出的窗口中输入模块信息,如下图所示,点击保存。

  保存完成后,选择刚才创建的模块,点击上方的设计按钮进入至设计页面。

  主页页面,其中主要包含主页显示的相关内容。

# 2.1. 功能简述

  主页页面将需要使用到的功能以菜单的形式展现出来,通过与各个对应的模块对接链接,点击功能图标打开对应的功能界面。

# 2.2. 窗体设置

属性 取值 说明
Height 800 设置窗口控件的高度
Width 400 设置窗口控件的宽度

# 2.3. 控件设置

  各结构控件说明如下。

控件名称 控件类型 说明
fxLayout1 TfxLayout 布局控件,用于对整个布局进行居中控制
Align:Center
Height:800
Width:400
fxRectangle2 TfxRectangle 方框控件,将所展示的控件包含于控件中
Align:Client
fxRectangle1 TfxRectangle 方框控件,作为标题展示使用
Align:Top
fxLabel1 TfxLabel 文字标题控件
Align:Client
StyledSettings:所有属性要全部清空设置为False
Text:爱招飞演示系统
TextSettings.FontColor:#FF515151
TextSettings.Font.Size:24
TextSettings.Font.Style.fsBold:True
TextSettings.HorzAlign:True
fxShadowEffect1 TfxShadowEffect 阴影布局控件,为fxRectangle1提供阴影效果控制
Opactiy:0.6
btnCompany TfxSuperButton 按钮布局控件
ButtonType:TfxSvgButton
ButtonType.AlgnType:aTop
ButtonType.Text:公司资料
ButtonType.TextSettings.FontColor:#FF666666
Height:140
Width:120
fxShadowEffect2 TfxShadowEffect 阴影布局控件,为btnCompany提供阴影效果控制
Opactiy:0.6
btnCust TfxSuperButton 按钮布局控件
ButtonType:TfxSvgButton
ButtonType.AlgnType:aTop
ButtonType.Text:客户资料
ButtonType.TextSettings.FontColor:#FF666666
Height:140
Width:120
fxShadowEffect3 TfxShadowEffect 阴影布局控件,为btnCust提供阴影效果控制
Opactiy:0.6
btnItem TfxSuperButton 按钮布局控件
ButtonType:TfxSvgButton
ButtonType.AlgnType:aTop
ButtonType.Text:布种资料
ButtonType.TextSettings.FontColor:#FF666666
Height:140
Width:120
fxShadowEffect4 TfxShadowEffect 阴影布局控件,为btnItem提供阴影效果控制
Opactiy:0.6
btnSalOrder TfxSuperButton 按钮布局控件
ButtonType:TfxSvgButton
ButtonType.AlgnType:aTop
ButtonType.Text:销售订单
ButtonType.TextSettings.FontColor:#FF666666
Height:140
Width:120
fxShadowEffect5 TfxShadowEffect 阴影布局控件,为btnSalOrder提供阴影效果控制
Opactiy:0.6
fxTabControl1 TfxTabControl 页面布局控件,位于底部位置
Align:MostBottomTabPosition:Bottom

  其中fxTabControl1双击可打开页面编辑器,添加五个项目。分别选择每个标签页项目,修改Text属性为对应的项目。

# 2.4. 程序设计

  • 初始设置:设置显示初始化内容。
Begin
  //对底部的项目进行多语言翻译
  fxTabControl1.Tabs[0].Text := self.GetMsgLang('TabItem1');
  fxTabControl1.Tabs[1].Text := self.GetMsgLang('TabItem2');
  fxTabControl1.Tabs[2].Text := self.GetMsgLang('TabItem3');
  fxTabControl1.Tabs[3].Text := self.GetMsgLang('TabItem4');
  fxTabControl1.Tabs[4].Text := self.GetMsgLang('TabItem5');
End.
1
2
3
4
5
6
7
8
  • btnCompanyOnClick:btnCompany的OnClick事件,打开公司资料主界面。
Procedure btnCompanyOnClick(Sender: TObject);
//打开公司资料主界面
var
  Page:  TfxRunFrame;
Begin
  Page := fxOpenFrameToPage('Company');
End;
1
2
3
4
5
6
7
  • btnCustOnClick:btnCust的OnClick事件,打开客户资料界面。
Procedure btnCustOnClick(Sender: TObject);
//打开客户资料界面
var
  Page:  TfxRunFrame;
Begin
  Page := fxOpenFrameToPage('CustList');
End;
1
2
3
4
5
6
7
  • btnItemOnClick:btnItem的OnClick时间,打开布种资料界面。
Procedure btnItemOnClick(Sender: TObject);
//打开布种资料界面
var
  Page:  TfxRunFrame;
Begin
  Page := fxOpenFrameToPage('ItemList');
End;
1
2
3
4
5
6
7
  • btnSalOrderOnClick:btnSalOrder的OnClick事件,打开销售订单查询界面。
Procedure btnSalOrderOnClick(Sender: TObject);
//打开销售订单查询界面
var
  Page:  TfxRunFrame;
Begin
  Page := fxOpenFrameToPage('SalOrderList');
End;
1
2
3
4
5
6
7

# 2.5. 多语言设置

  在程序设计界面,点击界面右下侧的按钮展开界面,点击左侧与右侧按钮切换至窗体语言设置界面,在此界面中设置多语言的相关信息。对于绝大部分显示的字幕类型,都可以点击对应的控件项,然后点击上侧的修改按钮修改显示的字幕类型。

  对于在程序中填写的多语言项目,请使用Self.GetMsgLang()来设定。比如上面程序中设置的几项多语言项目:

  //对底部的项目进行多语言翻译
  fxTabControl1.Tabs[0].Text := self.GetMsgLang('TabItem1');
  fxTabControl1.Tabs[1].Text := self.GetMsgLang('TabItem2');
  fxTabControl1.Tabs[2].Text := self.GetMsgLang('TabItem3');
  fxTabControl1.Tabs[3].Text := self.GetMsgLang('TabItem4');
  fxTabControl1.Tabs[4].Text := self.GetMsgLang('TabItem5');
1
2
3
4
5
6

  填写完成后,在窗体语言界面,点击下侧的MsgLang,在此页面中添加标题信息。

# 2.6. 运行结果

# 3. 公司资料-单笔数据表单

  点击PinToo设计器左上角的按钮打开选项栏,选择左侧的界面设置。

  在打开的界面中点击添加,在弹出的窗口中输入模块信息,如下图所示,点击保存。

  保存完成后,选择刚才创建的模块,点击上方的设计按钮进入至设计页面。

  公司资料界面用于对公司资料进行编辑。

# 3.1. 功能简述

  公司资料用于对公司资料的内容进行编辑,此页面中包含了单笔数据的表单设计模式,数据库图片的展示与引用,图片的对话框引入模式的设计说明。

# 3.2. 窗体设置

属性 取值 说明
Height 800 设置窗口控件的高度
Width 400 设置窗口控件的宽度

# 3.3. 控件设置

  • 控件说明
控件名称 控件类型 说明
fxLayout1 TfxLayout 布局控件,用于对整个布局进行居中控制
Align:Center
Height:800
Width:400
fxRectangle2 TfxRectangle 方框控件,将所展示的控件包含于控件中
Align:Client
fxRectangle1 TfxRectangle 方框控件,将所展示的控件包含于控件中
Align:Bottom
Height:40
fxShadowEffect1 TfxShadowEffect 阴影布局控件,为fxRectangle1提供阴影效果控制
Opactiy:0.6
btnEdit TfxSuperButton 按钮布局控件
ButtonType:TfxSvgButton
ButtonType.Text:修改
ButtonType.TextSettings.FontColor:#FF006633
Height:35
Width:75
btnSave TfxSuperButton 按钮布局控件
ButtonType:TfxSvgButton
ButtonType.Text:保存
ButtonType.TextSettings.FontColor:#FF006633
Height:35
Width:75
fxListBox1 TfxListBox 列表布局控件,双击添加9个ListBoxItem以及2个ListBoxGroupHeader
ListBoxGroupHeader1 TListBoxGroupHeader 组头
StyledSettings:清除所有的属性,均设置为False
Text:基本信息
TextSettings.FontColor:#FFCC9933
TextSettings.Font.Size:14
TextSettings.Font.Style.fsBold:True
ListBoxItem1 TListBoxItem 列表项,放置公司编号信息
Height:40
fxLayout2 TfxLayout 布局控件,用于对整个ListBoxItem布局进行控制
Align:Client
fxLabel1 TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:公司编号
Height:40
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
TextSettings.HorzAlign:Center
Width:80
edFCompanyID TfxEdit 编辑框,需清空原先的Text属性中的内容
TextSettings.FontColor:#FF666666
TextSettings.Font.Style.fsBold:True
ListBoxItem2 TListBoxItem 列表项,放置公司代号信息
Height:40
fxLayout3 TfxLayout 布局控件,用于对整个ListBoxItem布局进行控制
Align:Client
fxLabel2 TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:公司代号
Height:40
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
TextSettings.HorzAlign:Center
Width:80
edFCompanyCode TfxEdit 编辑框,需清空原先的Text属性中的内容
TextSettings.FontColor:#FF666666
TextSettings.Font.Style.fsBold:True
ListBoxItem3 TListBoxItem 列表项,放置简体名称信息
Height:40
fxLayout4 TfxLayout 布局控件,用于对整个ListBoxItem布局进行控制
Align:Client
fxLabel3 TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:简体名称
Height:40
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
TextSettings.HorzAlign:Center
Width:80
edFCompanyName TfxEdit 编辑框,需清空原先的Text属性中的内容
TextSettings.FontColor:#FF666666
TextSettings.Font.Style.fsBold:True
ListBoxItem5 TListBoxItem 列表项,放置负责人信息
Height:40
fxLabel4 TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:负责人
Height:40
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
TextSettings.HorzAlign:Center
Width:80
edFContact TfxEdit 编辑框,需清空原先的Text属性中的内容
TextSettings.FontColor:#FF666666
TextSettings.Font.Style.fsBold:True
ListBoxItem6 TListBoxItem 列表项,放置电话信息
Height:40
fxLabel5 TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:电话1
Height:40
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
TextSettings.HorzAlign:Center
Width:80
edFPhone1 TfxEdit 编辑框,需清空原先的Text属性中的内容
TextSettings.FontColor:#FF666666
TextSettings.Font.Style.fsBold:True
ListBoxItem7 TListBoxItem 列表项,放置公司地址信息
Height:40
fxLabel6 TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:地址
Height:40
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
TextSettings.HorzAlign:Center
Width:80
edFCompanyAddr TfxEdit 编辑框,需清空原先的Text属性中的内容
TextSettings.FontColor:#FF666666
TextSettings.Font.Style.fsBold:True
ListBoxItem8 TListBoxItem 列表项,放置开户银行信息
Height:40
fxLabel7 TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:开户银行
Height:40
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
TextSettings.HorzAlign:Center
Width:80
edFBank TfxEdit 编辑框,需清空原先的Text属性中的内容
TextSettings.FontColor:#FF666666
TextSettings.Font.Style.fsBold:True
ListBoxItem9 TListBoxItem 列表项,放置开户账号信息
Height:40
fxLabel8 TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:开户账号
Height:40
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
TextSettings.HorzAlign:Center
Width:80
edFContact TfxEdit 编辑框,需清空原先的Text属性中的内容
TextSettings.FontColor:#FF666666
TextSettings.Font.Style.fsBold:True
ListBoxGroupHeader2 TListBoxGroupHeader 组头
StyledSettings:清除所有的属性,均设置为False
Text:公司图标
TextSettings.FontColor:#FFCC9933
TextSettings.Font.Size:14
TextSettings.Font.Style.fsBold:True
ListBoxItem4 TListBoxItem 列表项,放置公司图标信息
Height:40
imFCompanyLogo TfxImage 图片显示控件
Height:85
MarginWarpMode:Stretch
Width:85
btnUpload TfxSuperButton 按钮布局控件
ButtonType:TfxSvgButton
ButtonType.Text:图库
ButtonType.TextSettings.FontColor:#FF006633
Height:35
Width:75
btnClearPicture TfxSuperButton 按钮布局控件
ButtonType:TfxSvgButton
ButtonType.Text:清空
ButtonType.TextSettings.FontColor:#FF006633
Height:35
Width:75
fxActionList1 TfxActionList 双击控件,打开动作列表,添加TakePhotoFromLibraryAction1
dts0 TfxRFDataSet 数据集控件

# 3.4. 程序设计

  此功能程序需要引用公共单元FMXMedia、FMXMediaLibrary。在程序设计页面点击右下角的按钮展开,点击左侧或者右侧按钮切换至Uses Unit,在其中查找FMXMedia、FMXMediaLibrary并勾选引用。

  • 初始设置:设置显示初始化内容。
Begin
  dts0.Connection := fxdm.DBConnection;
  dts0.SQL.Text := 'SELECT * FROM Basic_Company';
  dts0.OpenData;
  OpenToControl;
  RefState(False);
End.
1
2
3
4
5
6
7
  • OpenToControl:数据信息显示在对应的控件中。
procedure OpenToControl;
//数据集信息显示在对应的控件中
var
  PicStream: TMemoryStream;
begin
  //内存流控件创建
  PicStream := TMemoryStream.Create;
  try
    //将数据集中读取到的内容赋值给各控件
    edFCompanyID.Text := dts0.FieldByName('FCompanyID').AsString;
    edFCompanyCode.Text := dts0.FieldByName('FCompanyCode').AsString;
    edFCompanyName.Text := dts0.FieldByName('FCompanyName').AsString;
    //将数据集中的流读取至内存中
    TBlobField(dts0.FieldByName('FCompanyLogo')).SaveToStream(PicStream);
    edFContact.Text := dts0.FieldByName('FContact').AsString;
    edFPhone1.Text := dts0.FieldByName('FPhone1').AsString;
    edFCompanyAddr.Text := dts0.FieldByName('FCompanyAddr').AsString;
    edFBank.Text := dts0.FieldByName('FBank').AsString;
    edFAccountNo.Text := dts0.FieldByName('FAccountNo').AsString;
    //从流中加载图片
    imFCompanyLogo.Bitmap.LoadFromStream(PicStream);
   Finally
    //Except {ErrorMsg / RaiseMsg(Const Error:String)}
    PicStream.Free;
   End;
End;
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
  • ControlToDB:将控件中显示的内容保存至数据集中。
//将控件中显示的内容保存至数据集中
procedure ControlToDB;
var
  PicStream: TMemoryStream;
begin
  //创建内存流
  PicStream := TMemoryStream.Create;
  try
    //将控件中获取的值回传给数据集并保存
    dts0.Edit;
    dts0.FieldByName('FCompanyID').AsString := edFCompanyID.Text;
    dts0.FieldByName('FCompanyCode').AsString := edFCompanyCode.Text;
    dts0.FieldByName('FCompanyName').AsString := edFCompanyName.Text; 
    imFCompanyLogo.Bitmap.SaveToStream(PicStream);
    TBlobField(dts0.FieldByName('FCompanyLogo')).LoadFromStream(PicStream);
    dts0.FieldByName('FContact').AsString := edFContact.Text;
    dts0.FieldByName('FPhone1').AsString := edFPhone1.Text;
    dts0.FieldByName('FCompanyAddr').AsString := edFCompanyAddr.Text;
    dts0.FieldByName('FBank').AsString := edFBank.Text;
    dts0.FieldByName('FAccountNo').AsString := edFAccountNo.Text;
    dts0.Post;  
  Finally
  //Except {ErrorMsg / RaiseMsg(Const Error:String)}
    PicStream.Free;
  End;
End;
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
  • RefState:刷新单据的显示状态。
procedure RefState(ABool: Boolean);
//刷新单据的显示状态
begin
  //设定为True时,处于浏览模式,大部分的按钮将不启用
  if ABool Then
  begin
    btnEdit.HitTest := False;
    btnSave.HitTest := True;
    edFCompanyID.HitTest := True;
    edFCompanyCode.HitTest := True;
    edFCompanyName.HitTest := True;
    btnUpload.HitTest := True;
    btnClearPicture.HitTest := True;
  End
  else
  //设定为False时,处于编辑模式,大部分的按钮将启用
  begin
    btnEdit.HitTest := True;
    btnSave.HitTest := False;
    edFCompanyID.HitTest := False;
    edFCompanyCode.HitTest := False;
    edFCompanyName.HitTest := False;
    btnUpload.HitTest := False;
    btnClearPicture.HitTest := False;    
  End;
End;
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
  • btnUploadOnClick:btnUpload的OnClick事件,执行图库选择。
//执行图库选择
Procedure btnUploadOnClick(Sender: TObject);
Begin
  TakePhotoFromLibraryAction1.ExecuteTarget(nil);
End;
1
2
3
4
5
  • btnClearPictureOnClick:btnClearPicture的OnClick事件,清空图片显示,恢复成空白状态。
//清空图片显示,恢复成空白状态
Procedure btnClearPictureOnClick(Sender: TObject);
Begin
  imFCompanyLogo.Bitmap.Assign(nil);
End;
1
2
3
4
5
  • btnEditOnClick:btnEdit的OnClick事件,点击编辑按钮,以启用界面的编辑状态。
//编辑按钮,点击以启用界面的编辑状态
Procedure btnEditOnClick(Sender: TObject);
Begin
  RefState(True);
End;
1
2
3
4
5
  • btnSaveOnClick:btnSave的OnClick事件,将界面中收集的控件传递的信息赋值给数据集,并保存。
//保存按钮点击,将界面中收集的控件传递的信息赋值给数据集,并保存。
Procedure btnSaveOnClick(Sender: TObject);
Begin
  ControlToDB;
  dts0.ApplyUpdates(-1);
  ToastMessage.ShowToastMessage(self.GetMsgLang('SaveSuccess'),2.0,100);
  RefState(False);
End;
1
2
3
4
5
6
7
8
  • TakePhotoFromLibraryAction1OnDidFinishTaking:TakePhotoFromLibraryAction1的OnDidFinishTaking事件,点击从图库中获取图片。
//打开图库界面,从图库中获取图片
Procedure TakePhotoFromLibraryAction1OnDidFinishTaking(Image: TBitmap);
Begin
  imFCompanyLogo.Bitmap.Assign(Image);
End;
1
2
3
4
5

# 3.5. 多语言设置

  在程序设计界面,点击界面右下侧的按钮展开界面,点击左侧与右侧按钮切换至窗体语言设置界面,在此界面中设置多语言的相关信息。对于绝大部分显示的字幕类型,都可以点击对应的控件项,然后点击上侧的修改按钮修改显示的字幕类型。

  对于在程序中填写的多语言项目,请使用Self.GetMsgLang()来设定。比如上面程序中设置的几项多语言项目:

  ToastMessage.ShowToastMessage(self.GetMsgLang('SaveSuccess'),2.0,100);
1

  填写完成后,在窗体语言界面,点击下侧的MsgLang,在此页面中添加标题信息。

# 3.6. 运行结果

# 4. 客户资料查询-多笔数据表单

  点击PinToo设计器左上角的按钮打开选项栏,选择左侧的界面设置。

  在打开的界面中点击添加,在弹出的窗口中输入模块信息,如下图所示,点击保存。

  保存完成后,选择刚才创建的模块,点击上方的设计按钮进入至设计页面。

# 4.1. 功能简述

  客户资料的页面按照客户分类进行客户信息的分类展示,此页面包含分组显示表单的模式设计,表格查询等相关的模块设计内容。

# 4.2. 窗体设置

属性 取值 说明
Height 800 设置窗口控件的高度
Width 400 设置窗口控件的宽度

# 4.3. 控件设置

  各结构控件说明如下。

控件名称 控件类型 说明
fxLayout1 TfxLayout 布局控件,用于对整个布局进行居中控制
Align:Center
Height:800
Width:400
fxRectangle2 TfxRectangle 方框控件,将所展示的控件包含于控件中
Align:Client
fxRectangle1 TfxRectangle 方框控件,将所展示的控件包含于控件中
Align:Top
Height:60
fxLabel5 TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:客户代码或名称
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:16
TextSettings.Font.Style.fsBold:True
edQuery TfxEdit 编辑框,需清空原先的Text属性中的内容
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:16
TextSettings.Font.Style.fsBold:True
btnQuery TfxSuperButton 按钮布局控件
ButtonType:TfxSvgButton
ButtonType.Text:查询
ButtonType.TextSettings.FontColor:#FF006633
Height:35
Width:75
btnNew TfxSuperButton 按钮布局控件
ButtonType:TfxSvgButton
ButtonType.Text:新建
ButtonType.TextSettings.FontColor:#FF006633
Height:35
Width:75
fxShadowEffect1 TfxShadowEffect 阴影布局控件,为fxRectangle1提供阴影效果控制
Opactiy:0.6
CustList TfxSuperListBox 客户资料列表展示页面
ItemStyle:CustListLayout
CustListLayout TfxLayout 模块布局控件
Align:Top
Height:75
fxLayout2 TfxLayout 左侧布局
Align:Left
Width:335
fxLayout4 TfxLayout 顶部布局,放置客户代号信息
Align:Top
FCustCode TfxLabel 位于fxLayout4中,文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:FCustCode
TextSettings.FontColor:#FFCC9933
TextSettings.Font.Size:16
TextSettings.Font.Style.fsBold:True
fxLine2 TfxLine 位于fxLayout4中,
LineLocation:Boundary
LineType:Bottom
fxLayout6 TfxLayout 顶部布局,放置业务员信息
Align:Top
fxLabel3 TfxLabel 位于fxLayout6中,文字标题控件
Align:Left
StyledSettings:所有属性要全部清空设置为False
Text:业务员
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:16
TextSettings.Font.Style.fsBold:True
Width:85
FEmpName TfxLabel 文字标题控件
Align:Client
StyledSettings:所有属性要全部清空设置为False
Text:FEmpName
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:16
TextSettings.Font.Style.fsBold:True
fxLayout7 TfxLayout 顶部布局,放置业务员信息
Align:Top
fxLabel3 TfxLabel 位于fxLayout7中,文字标题控件
Align:Left
StyledSettings:所有属性要全部清空设置为False
Text:业务员
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:16
TextSettings.Font.Style.fsBold:True
Width:85
FEmpName TfxLabel 位于fxLayout7中,文字标题控件
Align:Client
StyledSettings:所有属性要全部清空设置为False
Text:FEmpName
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:16
TextSettings.Font.Style.fsBold:True
fxLine1 TfxLine 位于fxLayout2中,
LineLocation:Boundary
LineType:Bottom
fxLayout3 TfxLayout 位于fxLayout2中,右侧按钮布局
Align:Client
btnEdit TfxSuperButton 按钮布局控件
Align:Center
ButtonType:TfxSvgButton
ButtonType.SvgData:查找相关SVG图形
Height:35
Width:75

# 4.4. 程序设计

  此功能程序需要引用公共单元ufxSuperListBox。在程序设计页面点击右下角的按钮展开,点击左侧或者右侧按钮切换至Uses Unit,在其中查找ufxSuperListBox并勾选引用。

  • fxRunFrameAfterScriptRun:fxRunFrame的AfterScriptRun事件,启动页面时进行查询。
Procedure fxRunFrameAfterScriptRun(Sender: TObject);
//启动页面时执行查询
Begin
  CustListLayOut.Visible := False;
  CustList.Initial;
  btnQueryOnClick(sender);
End;
1
2
3
4
5
6
7
  • OpenCustList:打开列表作为查询内容呈现,从数据集中依次获取数据,并动态创建于列表中。
procedure OpenCustList(ASQL:String);
//打开列表作为查询内容呈现,从数据集中依次获取数据,并动态创建于列表中
Var 
  iCds:TRFDataSet; 
  iLbi:TfxSuperListBoxItem;
  iStream:TMemoryStream;
  SqlText:String;
  i:integer;
begin
  CustList.Clear;
  iCds := TRFDataSet.Create(nil);
  CustList.BeginUpdate;
  try
    //打开数据集
    SqlText := ASQL;
    fxdm.DataExecSql(SqlText,iCds);
    iCds.First;
    //将获取到的信息动态创建于列表中
    While Not iCds.Eof Do
    Begin
        iLbi:=CustList.AddItem;
        iLbi.TagString := iCds.FieldByName('FInterID').AsString;       
        TfxLabel(iLbi.GetStyleFmxObject(FCustCode.StyleName)).Text:= 
        '    (' + iCds.FieldByName('FCustCode').AsString + ')' + iCds.FieldByName('FCustName').AsString;
        //TfxLabel(iLbi.GetStyleFmxObject(FCustName.StyleName)).Text:=iCds.FieldByName('FCustName').AsString;
        TfxLabel(iLbi.GetStyleFmxObject(FEmpName.StyleName)).Text:=iCds.FieldByName('FEmpName').AsString;  
        TfxLabel(iLbi.GetStyleFmxObject(FSaleType.StyleName)).Text:=iCds.FieldByName('FSaleType').AsString;
        //TfxSuperButton(iLbi.GetStyleFmxObject(btnEdit.StyleName)).TagSting:= iCds.FieldByName('FInterID').AsString;  
        //TfxLabel(iLbi.GetStyleFmxObject(ProcessText.StyleName)).Text:=IntToStr(i);  
      iCds.Next;
    End;    
  Finally
  //Except {ErrorMsg / RaiseMsg(Const Error:String)}
  iCds.Free;
  CustList.EndUpdate;
  End;
End;
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
31
32
33
34
35
36
37
  • btnEditOnClick:btnEdit的OnClick事件,点击以打开编辑页面。
Procedure btnEditOnClick(Sender: TObject);
//点击打开编辑页面
var
  Page:  TfxRunFrame;
  iLib: TfxSuperListBoxItem;
  vInterID: String;
Begin
  //编辑界面显示,将数据集的参数进行传递,打开对应的数据
  iLib:= TfxSuperListBoxItem(TfmxObject(sender).TagObject);
  vInterID := StrToInt(iLib.TagString);
  Page := fxOpenFrameToPage('CustEdit');
  TRFDataSet(Page.FindComponent('dts0')).AddWhere('FInterID = ' + IntToStr(vInterID));
  TRFDataSet(Page.FindComponent('dts0')).OpenData;
  TfxTimer(Page.FindComponent('fxTimer')).Enabled := True;
End;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  • btnNewOnClick:btnNew的OnClick事件,点击新建界面,打开编辑窗体并新增行记录。
Procedure btnNewOnClick(Sender: TObject);
//新建界面,打开编辑窗体并新增行记录。
var
  Page:  TfxRunFrame;
  iLib: TfxSuperListBoxItem;
  vInterID: String;
Begin
  //实例化,获取详细信息
  iLib:= TfxSuperListBoxItem(TfmxObject(sender).TagObject);
  //vInterID := iLib.TagString;
  Page := fxOpenFrameToPage('CustEdit');
  vInterID := fxdm.GetNodeID;
  Page.TagValue := IntToStr(vInterID);
  TRFDataSet(Page.FindComponent('dts0')).AddWhere('FInterID = ' + IntToStr(vInterID));
  TRFDataSet(Page.FindComponent('dts0')).OpenData;
  //TfxTimer(Page.FindComponent('fxTimer')).Enabled := True;
  TRFDataSet(Page.FindComponent('dts0')).Append;
End;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  • btnQueryOnClick:btnQuery的OnClick事件,点击查询,根据界面进行分析。
Procedure btnQueryOnClick(Sender: TObject);
//查询,根据界面进行分析查询
var
  vSQL: String;
Begin
  if edQuery.Text = ''  Then
    vSQL := 'SELECT * FROM Basic_Cust'
  else
    vSQL := 'SELECT * FROM Basic_Cust WHERE FCustCode LIKE ''%' + edQuery.Text +
     '%'' or FCustName LIKE ''%' + edQuery.Text + '%''';
  OpenCustList(vSQL);
End;
1
2
3
4
5
6
7
8
9
10
11
12

# 4.5. 多语言设置

  在程序设计界面,点击界面右下侧的按钮展开界面,点击左侧与右侧按钮切换至窗体语言设置界面,在此界面中设置多语言的相关信息。对于绝大部分显示的字幕类型,都可以点击对应的控件项,然后点击上侧的修改按钮修改显示的字幕类型。

# 4.6. 运行结果

# 5. 销售订单编辑-多笔数据主从表单

  点击PinToo设计器左上角的按钮打开选项栏,选择左侧的界面设置。

  在打开的界面中点击添加,在弹出的窗口中输入模块信息,如下图所示,点击保存。

  保存完成后,选择刚才创建的模块,点击上方的设计按钮进入至设计页面。

# 5.1. 功能简述

  此页面用于编辑销售订单的信息,执行审核、打印等操作,功能涉及到窗口数据集的数据导入、查找表数据的引入、审核、消审功能的存储过程的引入、窗口打印与Flying打印的引入。

# 5.2. 窗体设置

属性 取值 说明
Height 800 设置窗口控件的高度
Width 400 设置窗口控件的宽度

# 5.3. 控件设置

  各结构控件说明如下。

控件名称 控件类型 说明
fxRectangle2 TfxRectangle 方框控件,将所展示的控件包含于控件中
Align:Center
fxListBox1 TfxListBox 列表布局控件,双击添加7个ListBoxItem以及2个ListBoxGroupHeader
ListBoxGroupHeader1 TListBoxGroupHeader 组头
StyledSettings:清除所有的属性,均设置为False
Text:基本信息
TextSettings.FontColor:#FFCC9933
TextSettings.Font.Size:14
TextSettings.Font.Style.fsBold:True
ListBoxItem5 TListBoxItem 列表项,放置单据编号信息
Height:40
fxLabel4 TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:单据编号
Height:40
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
Width:65
lbFBillNo TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Height:40
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
TextSettings.HorzAlign:Trailing
Width:295
fxLine3 TfxLine 位于ListBoxItem5中,
LineLocation:Boundary
LineType:Bottom
ListBoxItem6 TListBoxItem 列表项,放置状态信息
Height:40
fxLabel5 TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:状态
Height:40
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
Width:65
lbFBillNo TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Height:40
TextSettings.FontColor:#FFCC9933
TextSettings.Font.Size:18
TextSettings.Font.Style.fsBold:True
TextSettings.HorzAlign:Trailing
Width:295
fxLine4 TfxLine 位于ListBoxItem6中,
LineLocation:Boundary
LineType:Bottom
ListBoxItem1 TListBoxItem 列表项,放置客户名称信息
Height:40
fxLabel1 TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:客户名称
Height:40
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
Width:65
lbFCustName TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Height:40
TextSettings.FontColor:#FFCC9933
TextSettings.Font.Size:18
TextSettings.Font.Style.fsBold:True
TextSettings.HorzAlign:Trailing
Width:295
fxLine5 TfxLine 位于ListBoxItem1中,
LineLocation:Boundary
LineType:Bottom
ListBoxItem3 TListBoxItem 列表项,放置单据日期信息
Height:40
fxLabel3 TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:单据日期
Height:40
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
Width:65
dtpDate TfxDateEdit 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Height:40
TextSettings.FontColor:#FFCC9933
TextSettings.Font.Size:18
TextSettings.Font.Style.fsBold:True
TextSettings.HorzAlign:Trailing
Width:295
fxLine6 TfxLine 位于ListBoxItem3中,
LineLocation:Boundary
LineType:Bottom
ListBoxGroupHeader2 TListBoxGroupHeader 组头
StyledSettings:清除所有的属性,均设置为False
Text:订单明细
TextSettings.FontColor:#FFCC9933
TextSettings.Font.Size:14
TextSettings.Font.Style.fsBold:True
ListBoxItem4 TListBoxItem 列表项,放置按钮导入布种
Height:40
btnImport TfxSuperButton 按钮布局控件
ButtonType:TfxSvgButton
ButtonType.Text:导入布种
ButtonType.TextSettings.FontColor:#FF006633
Height:40
Width:80
fxLine2 TfxLine 位于ListBoxItem4中,
LineLocation:Boundary
LineType:Bottom
ListBoxItem7 TListBoxItem 列表项,放置按钮导入布种
Height:495
ItemList TfxSuperListBox
ItemStyle:ItemListLayout
ItemListLayout TfxLayout 模块布局控件
Align:Top
Height:75
fxLayout5 TfxLayout 位于ItemListLayout中,模块布局控件
Height:75
Width:305
fxLayout1 TfxLayout 位于fxLayout5中,模块布局控件
Align:Top
Height:25
fxLabel7 TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:布种名称
Height:25
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
Width:65
FItemName TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Height:25
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
Width:226
FAuxQty TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Height:25
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
Width:71
fxLayout7 TfxLayout 位于fxLayout5中,模块布局控件
Align:Top
Height:25
fxLabel7 TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:布种信息
Height:25
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
Width:65
FWidth TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Height:25
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
Width:226
FAmount TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Height:25
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
Width:71
fxLayout8 TfxLayout 位于fxLayout5中,模块布局控件
Align:Top
Height:25
fxLabel9 TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Text:颜色名称
Height:25
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
Width:65
FColorName TfxLabel 文字标题控件
StyledSettings:所有属性要全部清空设置为False
Height:25
TextSettings.FontColor:#FF666666
TextSettings.Font.Size:14
Width:226
btnDelete TfxSuperButton 按钮布局控件
ButtonType:TfxSvgButton
ButtonType.Text:删除
ButtonType.TextSettings.FontColor:#FF006633
Height:25
Width:71
ListBoxItem2 TListBoxItem 列表项,放置按钮功能
Height:495
btnPrint TfxSuperButton 按钮布局控件
ButtonType:TfxSvgButton
ButtonType.Text:移动打印
ButtonType.TextSettings.FontColor:#FF006633
Height:40
Width:80
btnMore TfxSuperButton 按钮布局控件
ButtonType:TfxSvgButton
ButtonType.Text:更多功能
ButtonType.TextSettings.FontColor:#FF006633
Height:40
Width:80
btnSave TfxSuperButton 按钮布局控件
ButtonType:TfxSvgButton
ButtonType.Text:保存草稿
ButtonType.TextSettings.FontColor:#FF006633
Height:40
Width:80
btnSaveCheck TfxSuperButton 按钮布局控件
ButtonType:TfxSvgButton
ButtonType.Text:保存审核
ButtonType.TextSettings.FontColor:#FF006633
Height:40
Width:80
cbMore TfxComboBox 功能复选框
Visible:False
cbPrinter TfxComboBox 打印列表复选框
Visible:False
dts0 TfxRFDataSet 主数据集
dts1 TfxRFDataSet 明细数据集
dtsCompany TfxRFDataSet 公司资料
fxFlying1 TfxFlying Flying打印设置
HttpHost:nas.isoface.cn
HttpPort:8808
ReportName:Sal_Order.fr3

# 5.4. 程序设计

  此功能程序需要引用公共单元Flying、ufxSuperListBox。在程序设计页面点击右下角的按钮展开,点击左侧或者右侧按钮切换至Uses Unit,在其中查找Flying、ufxSuperListBox并勾选引用。

  • 初始设置:设置显示初始化内容。
Begin
  //初始化设置
  cbMore.Items.CommaText := Self.GetMsgLang('审核,消审,作废,还原,删除');
End.
1
2
3
4
  • RefState:刷新显示状态,根据单据状态确定按钮的显示状态。
procedure RefState(AStatus:Integer);
//刷新显示状态,根据单据状态确定
begin
  //已作废
  if AStatus = 0 Then
  begin
    lbFCustName.HitTest := False;
    dtpDate.HitTest := False;
    btnImport.HitTest := False;
    btnPrint.HitTest := False;
    btnDelete.HitTest := False;
    btnSave.HitTest := False;
    btnSaveCheck.HitTest := False;    
  End;
  //草稿
  if AStatus = 1 Then
  begin
    lbFCustName.HitTest := True;
    dtpDate.HitTest := True;
    btnImport.HitTest := True;
    btnPrint.HitTest := False;
    btnDelete.HitTest := True;
    btnSave.HitTest := True;
    btnSaveCheck.HitTest := True;     
  End;
  //已审核
  if AStatus = 2 Then
  begin
    lbFCustName.HitTest := False;
    dtpDate.HitTest := False;
    btnImport.HitTest := False;
    btnPrint.HitTest := True;
    btnDelete.HitTest := False;
    btnSave.HitTest := False;
    btnSaveCheck.HitTest := False;     
  End;
End;
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
31
32
33
34
35
36
37
  • OpenSalOrder:打开销售订单主表,显示对应的数据。
procedure OpenSalOrder;
//打开销售订单主表,显示对应的数据
begin
  //主表
  lbFBillNo.Text := dts0.FieldByName('FBillNo').AsString;
  if dts0.FieldByName('FStatus').AsInteger = 0 Then
    lbStatus.Text := Self.GetMsgLang('已作废');
  if dts0.FieldByName('FStatus').AsInteger = 1 Then 
    lbStatus.Text := Self.GetMsgLang('草 稿');
  if dts0.FieldByName('FStatus').AsInteger = 2 Then 
    lbStatus.Text := Self.GetMsgLang('已审核');
  lbFCustName.Text := dts0.FieldByName('FCustName').AsString;
  dtpDate.DateTime := dts0.FieldByName('FDate').AsDateTime;
  RefState(dts0.FieldByName('FStatus').AsInteger);
End;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  • OpenSalOrderEntry:打开销售订单明细,显示对应的数据。
procedure OpenSalOrderEntry;
//打开销售订单明细,显示对应的数据
var
  iLbi: TfxSuperListBoxItem;
begin
  ItemList.Clear;
  dts1.First;
  ItemList.BeginUpdate;
  //依次更新各行的明细数据信息
  while not dts1.Eof Do
  begin
    iLbi := ItemList.AddItem;
    iLbi.TagString := dts1.FieldByName('FID').AsString;
    TfxLabel(iLbi.GetStyleFmxObject('FItemName')).Text := 
    dts1.FieldByName('FItemSpec').AsString + dts1.FieldByName('FItemName').AsString;
    TfxLabel(iLbi.GetStyleFmxObject('FWidth')).Text := 
    Self.GetMsgLang('门幅 ') + dts1.FieldByName('FWidth').AsString + Self.GetMsgLang('克重 ') + 
    dts1.FieldByName('FWeightOfLength').AsString;
    TfxLabel(iLbi.GetStyleFmxObject('FColorName')).Text := 
    dts1.FieldByName('FColorNo').AsString + dts1.FieldByName('FColorName').AsString;
    TfxLabel(iLbi.GetStyleFmxObject('FAuxQty')).Text := 
    dts1.FieldByName('FQtyPiece').AsString + dts1.FieldByName('FUnitPiece').AsString +  
    dts1.FieldByName('FAuxQty').AsString + dts1.FieldByName('FUnitName').AsString;
    TfxLabel(iLbi.GetStyleFmxObject('FAmount')).Text := 
    dts1.FieldByName('FAmount').AsString;
    dts1.Next;
  End;
  ItemList.EndUpdate; 
  //刷新显示状态
  RefState(dts0.FieldByName('FStatus').AsInteger); 
End;
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
31
  • fxRunFrameAfterScriptRun:初始化,设定初始查询程序信息。
Procedure fxRunFrameAfterScriptRun(Sender: TObject);
//初始化,设定初始查询程序信息
Begin
  ItemListLayOut.Visible := False;
  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.SQL.Text := 'SELECT * FROM Sal_OrderEntry WHERE FInterID = :FInterID';
  dtsCompany.SQL.Text := 'SELECT TOP 1 * FROM Basic_Company';
  dtsCompany.OpenData;
End;
1
2
3
4
5
6
7
8
9
10
11
  • fxTimer1OnTimer:fxTimer1的OnTimer事件,刷新显示的主数据集与明细数据集。
Procedure fxTimer1OnTimer(Sender: TObject);
//刷新显示主数据集与明细数据集
Begin
  fxTimer1.Enabled := False;
  OpenSalOrder;
  OpenSalOrderEntry;
End;
1
2
3
4
5
6
7
  • cbMoreOnChange:cbMore的OnChange事件,功能按钮的选择选择对应的项目时更新执行存储过程。
Procedure cbMoreOnChange(Sender: TObject);
//功能按钮的选择选择对应的项目时更新执行存储过程
var
  vOption: String;
  AStoredProc: TRFStoredProc;
  vRAISEMSG,vMSG: String;
  i, j: Integer;  
Begin 
  //选择存储过程的功能类型
  if cbMore.ItemIndex = -1 Then
    exit;
  if cbMore.ItemIndex = 0 Then
    vOption := 'Check';
  if cbMore.ItemIndex = 1 Then
    vOption := 'UnCheck';
  if cbMore.ItemIndex = 2 Then
    vOption := 'Revoke';
  if cbMore.ItemIndex = 3 Then
    vOption := 'Recover';
  if cbMore.ItemIndex = 4 Then
    vOption := 'Delete';
  //设定存储过程,获取参数
  AStoredProc := TRFStoredProc.Create(nil);
  AStoredProc.Connection := fxdm.DBConnection;
  try
    AStoredProc.StoredProcName := 'sp_Sal_Order';
    AStoredProc.Prepare;
    if AStoredProc.Prepared then
    begin
      //参数赋值
      //AStoredProc.ParamByName('FDataID').AsString := dts0.FieldByName('FInterID').AsString;
      //AStoredProc.ParamByName('Flag').AsString := 'Delete';
      //AStoredProc.ParamByName('FUserCode').AsString := self.GetMsgLang('admin');
      fxdm.SetStoredProcParam(AStoredProc,0,vOption); 
      fxdm.SetStoredProcParam(AStoredProc,1,dts0.FieldByName('FInterID').AsString);
      fxdm.SetStoredProcParam(AStoredProc,2,self.GetMsgLang('admin'));
      try
        //执行存储过程
        AStoredProc.ExecProc;
       Except
          vRAISEMSG:= ErrorMsg;
          //格式化错误信息提示
          i := Pos('SQMESSAGE', vRAISEMSG);
          j := Pos('[SQL Server]', vRAISEMSG);
          vMSG := Copy(vRAISEMSG, i, Length(vRAISEMSG) - i + 1);
    

          // 非格式化消息提示
          if i = 0 then
          begin
            ShowMessage(Copy(vRAISEMSG, j + 12, Length(vRAISEMSG) - j + 1));
            Exit;
          end;
        end;
        //btnQueryClick(sender);
    end;
  finally
    //刷新状态显示与数据集显示
    AStoredProc.Free;
    dts0.OpenData;
    dts1.OpenData;
    OpenSalOrder;
    OpenSalOrderEntry;
    cbMore.ItemIndex := -1;
  end;    
End;
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
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
  • lbFCustNameOnClick:lbFCustName的OnClick事件,导入选择客户信息。
Procedure lbFCustNameOnClick(Sender: TObject);
//导入选择客户信息
var
  Form: TfxRunFrame;
Begin
  //打开选择客户信息窗口
  Form := fxOpenFrameToForm('ImportCustName',[syFree],'');
  Form.TagObject := Self;
  //if GetVirtualForm(Form).ModalResult = mrYes Then
  //  lbFCustName.Text := dts0.FieldByName('FCustName').AsString;  
End;
1
2
3
4
5
6
7
8
9
10
11
  • btnImportOnClick:btnImport的OnClick事件,导入布种信息
Procedure btnImportOnClick(Sender: TObject);
//导入布种
var
  Form: TfxRunFrame;
Begin
  Form := fxOpenFrameToForm('ImportItem',[syFree],'');
  Form.TagObject := Self;
  //if GetVirtualForm(Form).ModalResult = mrYes Then
  //  OpenSalOrderEntry;   
End;
1
2
3
4
5
6
7
8
9
10
  • dts1OnNewRecord:dts1的OnNewRecord事件,新增时添加初始化信息。
Procedure dts1OnNewRecord(DataSet: TDataSet);
//新增时添加初始化信息
Begin
  dts1.FieldByName('FID').AsInteger := FXDM.GetNodeID;
  dts1.FieldByName('FInterID').AsString := dts0.FieldByName('FInterID').AsString;
  dts1.FieldByName('FEntryID').AsString := dts1.RecordCount + 1;
End;
1
2
3
4
5
6
7
  • fxTimer2OnTimer:fxTimer2的OnTimer事件,刷新显示明细。
Procedure fxTimer2OnTimer(Sender: TObject);
//刷新显示明细
Begin
  fxTimer2.Enabled := False;
  OpenSalOrderEntry;
End;
1
2
3
4
5
6
  • btnDeleteOnClick:btnDelete的OnClick事件,删除后刷新明细信息。
Procedure btnDeleteOnClick(Sender: TObject);
//删除行,删除后刷新明细
var
  iLbi: TfxSuperListBoxItem;
Begin
  iLbi:= TfxSuperListBoxItem(TfmxObject(sender).TagObject);
  dts1.First;
  while not dts1.FieldByName('FInterID').AsString = iLbi.TagString Do
  begin
    dts1.Next;
  End;
  dts1.Delete;
  fxTimer2.Enabled := True;
End;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • btnSaveOnClick:btnSave的OnClick事件,点击保存数据。
Procedure btnSaveOnClick(Sender: TObject);
//保存
var
  vdts: TRFDataSet;
Begin
  //检查客户明细是否为空
  vdts := TRFDataSet.Create(nil);
  try
    if dts0.FieldByName('FCustName').AsString = '' Then
    begin
      ShowMessage(Self.GetMsgLang('客户名称不能为空!'));
      exit;
    End;
    //检查明细数据集是否为空
    if dts1.RecordCount = 0 Then
    begin
      ShowMessage(Self.GetMsgLang('订单明细不能为空!'));
      exit;    
    End;
  //更新
    dts0.Edit;
    fxdm.OpenSQL(vdts,'SELECT FInterID FROM Sal_Order WHERE FInterID = ''' + dts0.FieldByName('FInterID').AsString + '''','demo');
    if vdts.RecordCount = 0 Then
      dts0.FieldByName('FBillNo').AsString := fxdm.GetBillNo('12020002',now,False);
    dts0.Post;
    dts0.ApplyUpdates(-1);
    dts1.Edit;
    dts1.Post;
    dts1.ApplyUpdates(-1);  
   
    Finally
    //Except {ErrorMsg / RaiseMsg(Const Error:String)}
      vdts.Free;
    End;
End;
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
31
32
33
34
35
  • dtpDateOnChange:dtpDate的OnChange事件,修改单据日期。
Procedure dtpDateOnChange(Sender: TObject);
//修改时间
Begin
  dts0.Edit;
  dts0.FieldByName('FDate').AsDateTime := dtpDate.DateTime;
  dts0.Post;
End;
1
2
3
4
5
6
7
  • btnSaveCheckOnClick:btnSaveCheck的OnClick事件,保存审核单据。
Procedure btnSaveCheckOnClick(Sender: TObject);
//保存审核
Begin
  //保存
  btnSaveOnClick(Sender);
  //审核
  cbMore.ItemIndex := 0;
  cbMoreOnChange(Sender);
End;
1
2
3
4
5
6
7
8
9
  • btnMoreOnClick:btnMore的OnClick事件,点击引出功能下拉菜单。
Procedure btnMoreOnClick(Sender: TObject);
//引出下拉菜单
Begin
  cbMore.DropDown;
End;
1
2
3
4
5
  • fxFlying1OnReceived:fxFlying1的OnReceived事件,接收获取打印数据信息。
Procedure fxFlying1OnReceived(ASender: TObject; AType: string; AContent: string);
//接收打印数据信息
var
  Form: TfxRunFrame;
begin
  if AType='GetPrintList' then
  begin
    cbPrinter.Items.CommaText := AContent;
    if cbPrinter.Items.Count <> 0  Then
    cbPrinter.ItemIndex := 0;
    fxTimer3.Enabled := True;
  end
  else if AType='GetFileUrl' then
  begin
    //fxShowFileView('PDF',AContent,'','','');
    Form := fxOpenFrameToForm('HTMLView',[syFree],'');
    Form.TagObject := Self;
    Form.TagValue := AContent;
  end
  else if AType='Error' then
    Showmessage(AContent);
end;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  • btnPrintOnClick:btnPrint的OnClick事件,点击引入打印数据信息。
Procedure btnPrintOnClick(Sender: TObject);
//移动打印
Begin
  fxFlying1.GetPrintList;
End;
1
2
3
4
5
  • fxTimer3OnTimer:fxTimer3的OnTimer事件,引入打印数据信息。
Procedure fxTimer3OnTimer(Sender: TObject);
//引入打印数据集信息
Begin
  fxTimer3.Enabled := False;
  fxFlying1.PrinterName := cbPrinter.Items.Strings[cbPrinter.ItemIndex];
  fxFlying1.AddPrintData(dts0,'A');
  fxFlying1.AddPrintData(dts1,'B');
  fxFlying1.AddPrintData(dtsCompany,'C');
  fxFlying1.ReportPreview;
End;
1
2
3
4
5
6
7
8
9
10
  • dts0OnNewRecord:dts0的OnNewRecord事件,主数据集更新时初始化部分内容信息。
Procedure dts0OnNewRecord(DataSet: TDataSet);
//主数据集更新时初始化部分内容信息
Begin
  dts0.FieldByName('FInterID').AsString := self.TagValue;
  dts0.FieldByName('FBillID').AsString := '12020002';
  dts0.FieldByName('FBillNo').AsString := fxdm.GetBillNo('12020002',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 := Self.GetMsgLang('admin');
  dts0.FieldByName('FCreateDate').AsDateTime := now; 
  dts0.Post;
  OpenSalOrder;
  OpenSalOrderEntry;
End;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 5.5. 多语言设置

  在程序设计界面,点击界面右下侧的按钮展开界面,点击左侧与右侧按钮切换至窗体语言设置界面,在此界面中设置多语言的相关信息。对于绝大部分显示的字幕类型,都可以点击对应的控件项,然后点击上侧的修改按钮修改显示的字幕类型。

  对于在程序中填写的多语言项目,请使用Self.GetMsgLang()来设定。比如上面程序中设置的几项多语言项目:

  ShowMessage(Self.GetMsgLang('客户名称不能为空!'));
1

  填写完成后,在窗体语言界面,点击下侧的MsgLang,在此页面中添加标题信息。

# 5.6. 报表设置

  • 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14

  输入完成后,点击执行SQL,等待下方的编辑框中出现字段信息后,点击应用返回至上一界面,在界面中点击保存数据。

  在报表设计界面中双击Sal_Order,打开报表设计界面进行设计。

  设计完成后,PinToo端可直接使用指定的设置执行打印设置操作。

# 5.7. 运行结果

RestAPI
系统函数

← RestAPI 系统函数→

Copyright © 2021-2025 爱招飞IsoFace | ALL Rights Reserved
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式