惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
博客园 - 三生石上(FineUI控件)
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
罗磊的独立博客
博客园_首页
量子位
雷峰网
雷峰网
GbyAI
GbyAI
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
D
DataBreaches.Net
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The Cloudflare Blog
IT之家
IT之家
WordPress大学
WordPress大学
人人都是产品经理
人人都是产品经理
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 聂微东

博客园 - delphi中间件

delphi 面向模型编程 array of TVarRec core.recordModel.pas 使用泛型序列结构体 DDD建模指导 rabbitMQ VS mqtt redis流的应用场景 redis消费者组 redis流的操作命令 领域服务与领域事件 业务规则和模型 限界上下文与统一语言 领域驱动 mqtt即时通讯 ActiveRecord ORM RAD(速成应用开发) unigui插件框架 delphi cs\web一种统一的界面风格 - delphi中间件 - 博客园 动态生成unidbgrid 单据工厂 用json元数据填充模板 mormot2 ORM rest vs jsonrpc SSE技术详解:使用 HTTP 做服务端数据推送应用的技术 http持久连接 json-rpc 2.0 MCP服务器 RTTI对性能的影响 频繁地创建和销毁对象 TMultiPartFormData
工厂流水线式自动生产UNIGUI WEB软件
delphi中间件 · 2026-05-18 · via 博客园 - delphi中间件

工厂流水线式自动生产UNIGUI WEB软件

广大delphi程序员一般喜欢往窗口上面拖放各种控件,所见即所得地设计UI界面。笔者开发软件也长期如此。

此次笔者大胆尝试一种新的开发方式:使用工厂流水线式自动生产软件。

有啥好处:

1)让不懂开发的人(比如现场实施人员)也能开发软件;

2)极大地提高开发效率。

工厂流水线式自动生产基础数据的步骤(以商品单位为例):

1

1)创建商品单位的数据表

create table ShangPinDanWei(
DanWeiMingCheng nvarchar(20) primary key
)

2)准备商品单位的json元数据

{
    "商品单位":{
            "tableName":"shangpindanwei",
            "reportModel":"ShangPinDanWei.fr3",    
        "编辑":[
            {"caption":"单位:","fieldname":"DanWeiMingCheng","emptytext":"必输项","component":"dbedit","readonly":false,"onclick":""}
        ],
        "表格":[
            {"caption":"单位","fieldname":"DanWeiMingCheng","width":300}
        ]
    }
}

3)工厂生产商品单位的.pas和.dfm文件

商品单位

4)工程添加第2步生成的文件,并用delphi编译

1

从始至终,只需要我们添加数据表和编辑json元数据,不需要我们编写一个代码。

工厂流水线式自动生产单据的步骤(以采购订单为例):

1

1)创建采购订单的数据表

if exists(select * from sysobjects where name = '采购订单')
drop table 采购订单 
create table 采购订单(
采购单号 nvarchar(30) primary key,
操作人 nvarchar(20),
创建日期 datetime,
状态 nvarchar(10),
数量 decimal(18,4),
金额 decimal(18,2),
门店编号 nvarchar(20),
门店 nvarchar(100),
供应商编号 nvarchar(20),
供应商 nvarchar(100),
备注 nvarchar(100)
)

if exists(select * from sysobjects where name = '采购订单2')
drop table 采购订单2 
create table 采购订单2(
采购单号 nvarchar(30) not null,
行号 int not null,  
条码 nvarchar(20),
商品 nvarchar(100),
单位 nvarchar(20),
规格 nvarchar(30),
数量 decimal(18,4),
进货价 decimal(18,4),
金额 decimal(18,2),
PRIMARY KEY (采购单号, 行号)
)

2)准备采购订单的json元数据

{
    "采购订单":{
            "tableNameM":"CaiGouDingDan",
            "tableNameD":"CaiGouDingDan2",
            "billNoHead":"PO",
            "reportModel":"CaiGouDingDan.fr3",
            "明细表字段":{
                "fldBillNo":"caigoudanhao",
                "fldRecNo":"jiluhao",
                "fldBarcode":"tiaoma",
                "fldGoodsName":"shangpinmingcheng",
                "fldUnitName":"danwei",
                "fldSpec":"guige",
                "fldQty":"caigoushuliang",
                "fldPrice":"caigoujia",
                "fldAmount":"caigoujine"
            },
            "主表字段":{
                "fldBillNo":"caigoudanhao",
                "fldCreateBy":"zhidanren",
                "fldDatetime":"riqi",
                "fldStatus":"zhuangtai",
                "fldTotalQty":"caigoushuliang",
                "fldTotalAmount":"caigoujine",
                "fldShopId":"mendianbianhao",
                "fldShopName":"mendianmingcheng",
                "fldSupplierId":"gongyingshangbianhao",
                "fldSupplierName":"gongyingshangmingcheng"    
            },    
        "基本信息":[
            {"caption":"门店:","fieldname":"MenDianMingCheng","emptytext":"请选择","component":"dbedit","readonly":false,"onclick":"selectshop","fid":"mendianbianhao","fname":"mendianmingcheng"},
            {"caption":"供应商:","fieldname":"GongYingShangMingCheng","emptytext":"请选择","component":"dbedit","readonly":false,"onclick":"selectsupplier","fid":"gongyingshangbianhao","fname":"gongyingshangmingcheng"},
            {"caption":"采购单号:","fieldname":"CaiGouDanHao","emptytext":"自动生成","component":"dbedit","readonly":true,"onclick":""},
            {"caption":"备注:","fieldname":"BeiZhu","emptytext":"","component":"dbedit","readonly":false,"onclick":""}
        ],
        "单据信息":[
            {"caption":"条码","fieldname":"tiaoma","width":147,"showsum":false,"readonly":true},
            {"caption":"商品","fieldname":"shangpinmingcheng","width":300,"showsum":false,"readonly":true},
            {"caption":"单位","fieldname":"danwei","width":64,"showsum":false,"readonly":true},
            {"caption":"规格","fieldname":"guige","width":137,"showsum":true,"readonly":true},
            {"caption":"采购价","fieldname":"caigoujia","width":93,"showsum":true,"readonly":false},
            {"caption":"采购数量","fieldname":"CaiGouShuLiang","width":93,"showsum":true,"readonly":false},
            {"caption":"采购金额","fieldname":"CaiGouJinE","width":93,"showsum":true,"readonly":true}
        ]
    }
}

3)工厂生产采购订单的.pas和.dfm文件

采购订单

4)工程添加第2步生成的文件,并用delphi编译

1