泛微E9开发实战:如何将字段小数位从2位扩展到4位(附SQL语句)

泛微E9开发实战:调整字段小数位精度(从两位到四位)的完整指南 本文提供了泛微E9二次开发中调整字段小数位精度的完整实战指南。针对财务、仓储等业务对数据精度的实际需求,详细解析了如何通过修改数据库物理表结构及同步更新工作流元数据表(workflow_billfield),实现将字段从两位小数改为四位小数的操作,并强调了修改后的验证步骤与常见避坑要点。 阅读详情

泛微E9系统深度定制:精准扩展数值字段小数位的完整实战指南

在泛微E9这类成熟的企业级协同办公平台中进行二次开发,我们常常会遇到一个看似微小却影响深远的挑战:如何调整业务表中数值字段的小数精度。比如,最初设计为两位小数的“单价”或“税率”字段,随着业务精细化管理的需求,可能需要支持四位甚至更多位小数。这不仅仅是执行一条ALTER TABLE语句那么简单,它涉及到对E9底层数据架构的理解、对元数据一致性的维护,以及对后续业务流程潜在影响的评估。如果你是一位正在为此问题寻找可靠解决方案的开发者,那么这篇文章正是为你准备的。我们将抛开泛泛而谈,深入E9的核心表结构,手把手带你完成从分析、操作到验证的全过程,确保你的修改既安全又彻底。

1. 理解泛微E9的字段管理双轨制

在动手修改任何一个字段之前,我们必须先厘清泛微E9中字段定义的“双轨制”逻辑。这是避免出现“页面显示已改,但报表出错”或“流程计算异常”等诡异问题的关键。

简单来说,E9对于一张业务表(例如uf_carMng车辆管理表)中字段的管理,分为物理存储层和逻辑定义层。

  • 物理存储层:即数据库(如Oracle、SQL Server)中实际存在的物理表及其列。这里的字段类型(如DECIMAL(18,2))直接决定了数据如何被存储和计算。修改这一层,是改变数据存储精度的根本。
  • 逻辑定义层:主要指E9系统用于驱动表单设计、流程引擎和权限控制的一系列元数据表。其中,workflow_billfield表至关重要,它存储了每个字段在E9逻辑世界中的“身份证信息”,包括其显示名称、页面控件类型以及——非常关键的——数据库类型描述。

注意:很多开发者只修改物理表,却忽略了更新workflow_billfield表中的fielddbtype字段。这会导致E9的表单引擎在渲染、校验或进行某些内部计算时,依然按照旧的精度逻辑来处理该字段,从而引发数据不一致或界面异常。

为了更清晰地展示这两个层面的关系,我们来看一个对比:

层面核心表/对象关键字段作用修改影响
物理存储层数据库物理表 (如 uf_carMng)列的数据类型 (如 dj列)实际存储数据,保证数据完整性直接改变数据库列的存储和计算精度
逻辑定义层系统元数据表 (如 workflow_billfield)fielddbtype (如 decimal(18,2))告知E9系统如何理解、展示和处理该字段影响表单渲染、流程计算、数据校验等系统行为

因此,一个完整的字段小数位扩展操作,必须是两步走:先修改数据库物理列的精度,再同步更新元数据表中的类型定义。接下来,我们就进入具体的实战环节。

2. 实战第一步:定位目标字段与关联信息

盲目执行SQL是危险的。在修改前,我们需要精确地定位目标字段及其在E9元数据体系中的“坐标”。

假设我们需要修改车辆管理表(uf_carMng)中的“单价”(假设数据库字段名为dj)字段,将其从DECIMAL(18,2)改为DECIMAL(38,4)。

2.1 获取业务表的单据ID (billid)

在E9中,每一张业务表单都对应workflow_bill表中的一条记录,并通过唯一的billid进行标识。我们需要先找到目标表的billid。

-- 通过表名查询对应的单据ID
SELECT id AS billid, name, tablename
FROM workflow_bill
WHERE tablename = 'uf_carMng';

执行这条查询,你会得到类似下面的结果:

billidnametablename
-565车辆管理uf_carMng

请记下这个billid值(本例中是-565),它在后续所有涉及元数据表的操作中都会用到。

2.2 确认字段的当前元数据定义

拿到billid后,我们进一步在workflow_billfield表中查看“单价”字段的详细定义。

-- 根据billid和字段名查询字段定义
SELECT id, fieldname, fieldlabel, fielddbtype, fieldhtmltype
FROM workflow_billfield
WHERE billid = -565 
  AND fieldname = 'dj';

查询结果可能如下:

idfieldnamefieldlabelfielddbtypefieldhtmltype
12345dj单价decimal(18,2)1

这里,fielddbtype的值为decimal(18,2),证实了它当前在系统逻辑中被定义为2位小数。fieldhtmltype为1通常代表“单行文本框”。

关键检查点:

  • 确认fieldname(dj)确实是你想修改的数据库字段名。
  • 核对fielddbtype的当前值,作为修改前的基准。
  • 如果有多个字段名相似,务必通过fieldlabel(字段显示名)进行二次确认。

3. 核心操作:执行双轨制修改

信息确认无误后,我们开始执行实际的修改操作。请务必在操作前备份相关数据表!

3.1 修改物理表字段数据类型

这一步直接在数据库上执行,使用标准的SQL ALTER TABLE语句。语法可能因数据库类型略有差异。

对于 Microsoft SQL Server:

-- 修改 uf_carMng 表中 dj 列的数据类型为 DECIMAL(38,4)
ALTER TABLE uf_carMng
ALTER COLUMN dj DECIMAL(38,4);

对于 Oracle:

-- Oracle中修改列数据类型,如果列有数据,可能需要使用其他方式
-- 先检查是否有数据,若无数据或可接受重建,一种方法是:
ALTER TABLE uf_carMng MODIFY (dj NUMBER(38,4));

提示:在Oracle中,如果列包含数据,直接修改为不同的精度或标度可能会失败。在生产环境,可能需要通过创建临时列、迁移数据、删除原列、重命名等更复杂的步骤来完成,操作前请充分评估。

参数解释:DECIMAL(38,4) 或 NUMBER(38,4) 中,38是精度(总位数),4是标度(小数位数)。38是一个很大的值,确保了足够的整数位。你可以根据实际业务需求调整这两个数字。

3.2 同步更新元数据表 (workflow_billfield)

这是确保E9前端和后端逻辑一致性的关键一步。我们需要将系统“记忆”中的字段类型更新为新的精度。

-- 更新 workflow_billfield 表中对应字段的 fielddbtype 定义
UPDATE workflow_billfield
SET fielddbtype = 'decimal(38,4)'
WHERE billid = -565 
  AND fieldname = 'dj';

执行成功后,系统便会知道dj字段现在应该按照4位小数来解析和处理。

一个常见的进阶场景:如果你的字段不仅存在于主表(uf_carMng),还可能出现在明细表(uf_carMng_detail)中,并且该明细表也在workflow_billfield中有定义(通过detailtable字段关联),那么你需要同时更新主表和所有相关明细表中的该字段定义。更新前,请仔细查询确认。

4. 修改后的全面验证与测试

修改完成并不意味着万事大吉。系统性的验证是保证修改成功、避免后续隐患的必要环节。

4.1 数据层验证

重新查询workflow_billfield表,确认fielddbtype已更新。

SELECT fieldname, fielddbtype FROM workflow_billfield WHERE billid = -565 AND fieldname = 'dj';

预期结果应为:decimal(38,4)。

4.2 功能层测试

这是最重要的部分,需要在E9的前端界面进行实际操作测试:

  1. 表单数据录入与显示:
    • 进入车辆管理表单,尝试为“单价”字段输入一个包含4位小数的值,例如 123.4567。
    • 保存表单,然后重新打开查看。确认显示的值仍然是 123.4567,没有被四舍五入或截断。
  2. 计算逻辑测试:
    • 如果“单价”字段参与了表单上的任何计算(如“总价 = 单价 * 数量”),测试计算结果的精度是否符合4位小数的预期。
    • 检查相关的业务逻辑、触发器或后端计算代码,确保它们能正确处理新的精度。
  3. 列表与报表:
    • 在车辆管理的列表页面,查看“单价”列的显示和排序是否正常。
    • 运行任何涉及该字段的报表或统计查询,确认数据汇总和显示的准确性。
  4. 流程与接口:
    • 如果该字段关联了工作流,测试在流程流转过程中,字段值的传递和显示是否正常。
    • 检查与该表数据交互的外部接口或集成点,确保它们能兼容新的数据格式。

4.3 潜在问题与排查

如果在测试中发现问题,可以按照以下思路排查:

  • 页面显示仍为2位小数:检查浏览器缓存,或检查是否有前端的JavaScript格式化脚本写死了小数位数。E9的标准控件通常会读取fielddbtype,但自定义脚本可能覆盖这一行为。
  • 计算错误:检查计算公式(可能在表单属性、流程节点条件或后端代码中),确认其是否显式地使用了ROUND、CAST等函数将结果强制转为2位小数。
  • 历史数据处理:修改字段类型后,已有数据的小数部分不会被自动补零或修改。例如,原来的123.45在修改后仍然是123.45,而不是123.4500。这在大多数情况下不是问题,但如果你在应用程序逻辑中依赖“小数点后一定位数”的假设,则需要考虑对历史数据进行批量更新。

5. 深入探索:相关系统表与扩展应用

理解workflow_bill和workflow_billfield只是开始。围绕字段管理,E9还有其他相关的元数据表,掌握它们能让你应对更复杂的定制需求。

  • workflow_bill 单据信息表:如前所述,它是所有业务表单的注册中心。除了id和tablename,其detailtablename和detailkeyfield字段对于处理主从表结构非常重要。
  • workflow_billfield 字段定义表:我们已经重点使用。它还有一些值得关注的字段:
    • fieldhtmltype: 决定了字段在表单上的呈现控件(文本框、下拉框等)。
    • selectitemtype/pubchoiceid: 如果字段是选择框,这些字段关联到公共选择项。
    • viewtype: 标识是主表字段还是明细表字段。
  • 表单HTML模板与JS文件:对于深度UI定制,有时需要检查或修改对应的JSP/HTML模板以及相关的JavaScript文件,以确保前端验证和显示逻辑与新的数据类型同步。

扩展应用场景:

  • 批量修改多个字段:如果你需要将同一表中多个数值字段(如price, tax_rate, discount)都改为4位小数,只需在UPDATE workflow_billfield语句的WHERE条件中使用IN子句,并批量执行ALTER TABLE语句即可。
  • 在开发与生产环境同步:这类结构变更通常先在开发/测试环境进行。验证无误后,需要将变更脚本(包括ALTER TABLE和UPDATE语句)整理成文档,在申请生产环境变更窗口时严格执行。切忌直接在生产环境数据库管理工具中手动操作。

修改系统核心表的字段结构是一项需要谨慎对待的任务。整个过程的核心思想是 “物理存储”与“逻辑定义”同步更新。我自己的经验是,在每次执行这类ALTER语句前,养成在测试环境完整跑通所有相关业务流程的习惯,这能帮你避开绝大多数坑。最后,别忘了更新你的技术文档,记录下这次变更的原因、时间和具体SQL,这对未来的维护和团队协作至关重要。

泛微E9开发 修改字段的小数位个数(两位->四位) 本文介绍了在泛微E9中修改车辆管理表"单价"字段小数位数的操作步骤:1)通过SQL查询获取表的billid和字段数据类型;2)分两步修改字段类型,既要修改物理表结构(ALTER TABLE命令),又要更新工作流单据字段表(workflow_billfield)中的类型定义;3)展示修改前后的数据类型变化对比。文章还提供了workflow_bill和workflow_billfield两个关键系统表的结构说明,帮助理解系统底层数据存储逻辑。该操作实现了将"单价"字段的小 阅读详情

相关推荐

一些特殊的sql查询语句

in 和 not in 要慎用,否则会导致全表扫描 应尽量避免在 where 子句中对字段进行 null 值 判断,否则将导致引擎放弃使用索引而进行全表扫描 时间字段显示为可视 查询数据库表列重复的sql 在一个varchar类型字段的数据加值 in 不存在库的给一个默认值 查找数据库表中最新一条数据 case和sum的组合 TOP子句 select into mysql不可用 IFNULL() COALESCE() FIRST()返回指定字段第一个记录的值

ruanxinyan12345的博客 1606

泛微OA修改浮点数字段精度

3.3 根据系统表:workflow_billfield(工作流单据字段表),billid(表单ID) = - + 表单ID,FIELDNAME(字段名称)3.5 修改fielddbtype decimal(38,2) -->decimal(38,4)保存;3.1 找到修改表单ID,formtable_main_14。3.2 需要修改字段名称,浮点数精度,fdsjd。1.需求:将两位小数更改为四为小数;3.5 重启服务,修改成功;

树林边的小青蛙 1040

基础sql语句大全

基础sql语句大全前言SQL语句概述示例所用E-R图Oracle常用数据类型规定第一章 DDL:Data Definition Language基本表的创建、修改、删除View视图Sequence序列号Index索引Synonym同义词 前言 因为最近要考ocp(全英文考试,所以下文也会中英夹杂,侧重oracle标准。),又要把大学学过的数据库捡起来。特开此文整理基础sql语句语法和注意事项。 所有示例代码均来自oracle官方教材。参考资料:数据库系统教程和oracle提供的官方教材。 一人书写这么多内容

xinsuchu1952的博客 6030

泛微OA修改字段小数位

需求:泛微OA流程表单 浮点数类型字段 由2为小数平滑改为4位。

很坏的坏蛋的博客 1328

泛微OA 浮点数数据类型更新说明

可用于生产环境,直接按文档操作修改数据库表类型 十分安全 方便

IFIX往Mysql数据库同步数据方法

通过IFix数据库向Mysql数据库同步数据

仙人掌 1597

泛微E8调整字段的小数位数-数据库篇

在 Oracle 环境下新建了一个2位小数的字段,而后想扩展成5位小数。先直接把数据库中的真正字段改了长度,表单界面还是显示2位。摸索了半天,还有这两个地方要改: ...

u013948083的专栏 1167

机房电脑的“还原”秘密:如何应对重启即清零的困境

机房电脑重启后自动还原是常见的现象,这主要依靠硬件还原卡或软件还原系统(如冰点还原)实现。这类技术会定期将系统盘恢复初始状态,但通常不保护非系统盘。要高效使用公共电脑,建议:1)将个人文件存储在D/E盘;2)使用绿色便携软件;3)必要时可尝试通过热键临时关闭还原功能;4)养成云端备份习惯。掌握这些技巧既能遵守机房规定,又能保证学习资料安全,培养良好的数字资产管理能力。

一位主要以学校学生信息技术,社会工作生活讲解科普拓展的博主 1459

泛微OA E9修改字段小数位

-更新 《工作流单据字段表》 fielddbtype(单据字段数据库类型) fielddbtype decimal(38,2) 改为 decimal(38,4) ,修改后重启服务。--《工作流单据字段表》 WHERE billid(单据ID) AND FIELDNAME(字段名) AND DETAILTABLE(明细表)--备份《工作流单据字段表》,保险起见可以备份下表。

qq_41266370的博客 307

Zabbix华为交换机光衰告警

zabbix使用自动发现监控huawei网络设备光衰

qq_31651649的博客 4529

CAPL编程入门:从零开始掌握汽车通信脚本语言

本文详细介绍了CAPL编程的基础知识,从开发环境搭建到核心语法精要,再到总线通信实战和高级调试技巧。CAPL作为汽车通信脚本语言,专为CAN、LIN等网络协议设计,帮助工程师高效完成车载网络测试。通过实战案例和性能优化建议,读者可以快速掌握CAPL编程技能。

s1t2u3的博客 980

泛微OA_E9_【功能巧用】浮点数字段向上或向下取整设置_1_640

*视频内容总结:** 1. **主题** - 介绍如何通过字段属性设置,实现浮点数字段的**向上取整**和**向下取整**功能。3. **实现效果** - **向上取整**:输入如`2.5`,自动取整为`3`(靠近的最大整数)。4. **配置步骤** - **步骤1**:表单中添加两个浮点数字段(向上取整、向下取整),设置小数位数。- **步骤2**:通过字段属性插入SQL语句: - **流程表单**:替换SQL中字段的**数据库名**(如`XXQZ`)。- 确保字段名或ID替换准确,否则功能失效。

泛微OA学习资料包括: 1、内部完整教学视频近2000部,覆盖各类别、各场景、各模块等; 2、各类前后端开发技术文档,包括:入门教程资料、前后端二次开发资料、接口文档等。 涵盖产品:E10、E9、eteams、E8、E7、Emobile、通 430

Android TV远程调试全攻略:从开发者模式开启到ADB连接(附常见问题排查)

本文提供了一份详尽的Android TV远程调试实战指南,涵盖从开启开发者模式、配置网络ADB连接到高效调试与深度排错的完整流程。文章重点解析了通过Wi-Fi进行远程调试的核心步骤,并针对常见的连接失败、授权问题等提供了系统性的解决方案,旨在帮助开发者为Android TV应用开发构建稳定高效的调试环境。

1345

分享SQL2005 查询表结构的SQL语句

1 SELECT 2 (case when a.colorder=1 then d.name else '' end) as 表名,--如果表名相同就返回空 syscolumns(表字段信息表) a sysobjects d 3 a.colorder as 字段序号, 4 a.name as 字段名, 5 (...

dingshen2767的博客 165

Oracle EBS 如何处理MMT表错误-WIP 实体未定义或不具有期间余额项

错误说明:WIP 实体未定义或不具有期间余额项。(The wip entity is either not defined or does not have a period balance entry)由于工单的创建日期为4月份,工单的余额表记录的期间是4月份,而3月份工单余额表中没有记录。公司将上一个新的库存组织,有一部分测试的工单创建日期在4月份,而工单的发放日期、发料事务处理日期和完工事务处理日期均在3月份。1、关闭3月份库存会计期,待定事务处理存在未计成本物料/WMS。成本类型: PAC成本。

陈显平的专栏-Oracle EBS 654

结合MATLAB/Simulink和多体动力学仿真软件UM(Universal Mechanism),建立高速列车轴箱轴承的动力学模型,并通过联合仿真分析其正常运行特性和典型故障模式

高速列车是现代交通运输的重要组成部分,其运行速度高、载客量大,对安全性和可靠性提出了极高的要求。轴箱轴承作为高速列车的关键部件之一,承担着传递载荷和支撑车轴的重要作用。然而,由于长期运行在高速、重载和复杂工况下,轴箱轴承容易出现疲劳磨损、润滑失效和裂纹等故障,从而影响列车的安全性。本项目旨在结合MATLAB/Simulink和多体动力学仿真软件UM(Universal Mechanism),建立高速列车轴箱轴承的动力学模型,并通过联合仿真分析其正常运行特性和典型故障模式。

xiaoheshang_123的博客 331

查询SQL2008字段和注释

SELECT 表名 = case when a.colorder=1 then d.name else '' end, 表说明 = case when a.colorder=1 then isnull(f.value,'') else '' end, 字段序号 = a.colorder, 字段名 = a.nam...

aochiba1882的博客 158

MIKE水动力笔记4_制作网格

建立水动力模型前的重要一步就是制作网格,本文所讲内容就是如何在MIKE中制作网格。

晏长街的博客 2万+

测试常用mysql语句_软件测试常用的sql语句

一.数据库基础(mysql)1.windows命令行连接服务器mysql -h&ip -p&port -u&用户名 -p-h (host) 连接的ip localhost-p (port) 端口号 3306-u (username) 用户名 root-p (password) 密码 123456如果在本地登录,直接写mysql -uroot -p2.数据库的执行原理数据服务...

weixin_29168153的博客 865

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

sql 拼接int类型的字段_MySQL数据库—SQL汇总

一、SQL常用数据类型1数值型a、整型 默认有符号,需要无符号的话,用UNSIGNED INT。 插入超过范围的数,最终为临界值。 整型的长度代表显示的宽度,如果要使用,需要搭配zerofill使用,对于int(M),如长度小于M,用0左填充至宽度为M,如果大于M则无影响。没实际意义。b、小数 D保留小数位数。 M整数+小数位数和。 MD可以省略,DECIMAL默认为(10...

weixin_39863155的博客 1731

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

查询数据库表和字段MSSQL语句

本篇文章由泉州SEOwww.234yp.com 整理发布,php连接mssqlwww.234yp.com/Article/168172.html谢谢合作!php连接mssql   今天整理资料时看到有这样一个查询数据库中的表和字段信息的语句,很强! 就是忘了当初谁写的了,印像中该是邹建所创。也贴出来以后备用吧。   1SELECT   2表名= CASE a.colorder WHEN 1 THEN c.name ELSE '' END,   3序= a.colorder,   4字段名 = a...

404

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java:java.sql.SQLException:Underflow Exception trying to bind 4.9E-324

最近在执行一个数据库写操作时抛出了如下的异常: java.sql.SQLException:Underflow Exception trying to bind 4.9E-324 4.9E-324显然是个浮点数,通过代码跟踪,发现它是java.lang.Double.MIN_VALUE定义的最小双精度数浮点数,于是找到原因,是数据库一个表中的某个字段写入了错误的数据,该字段类型是NUMBER(*

10km的专栏 2995

mysql 查询小数点_MySQL查询小数点位数

怎么查询某个字段中小数有几位?MySQL数据库:通过下面sql就可以查出来,有2位col*100,有3位col*1000,一次类推;select * from ws_inventory_item where real_quantity*1000 - floor(real_quantity*1000) > 0备注:floor:函数只返回整数部分,小数部分舍弃。Oracle数据库:select ...

weixin_31133141的博客 5131

第60章 SQL ROUND() 函数教程

ROUND() 函数用于把数值字段舍入为指定的小数位数。

1583

获取SQLServer的最完整数据字典的SQL语句

原创于2008年06月18日,2009年10月18日迁移至此。获取SQLServer的最完整数据字典的SQL语句 其实网上已经流传了很多关于获取SQLServer的数据字典的版本,不过我相信这个应该是最全的了,本语句包括了表、字段、字段类型、字段长度、是否为空、是否递增字段、索引名称、索引的定位、索引类型、主键、外键等

不胜人生一场醉 1万+

sql中len函数_在SQL中使用LEN(),ROUND()函数

sql中len函数LEN() and ROUND() are scalar functions which return a single value, based in the input value. LEN()和ROUND()是标量函数,它们基于输入值返回单个值。 LEN() function is used to find the length of the value in any ...

cumt30111的博客 3091
上一篇: 电子书制作神器EasyPub使用指南:从杂乱txt到精美epub的全流程解析
下一篇: 5分钟搞定Octave Online:免费替代MATLAB的云端神器(附入门代码示例)
Python
博客等级 码龄26年 1973粉丝 1567原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值