打开公式管理器,用「导入」选中一个几年前的公式包,流程走完,再看公式树,那条公式没有出现。换到副图上,图上也不出线。通达信公式版本兼容的问题在现场就是这个样子:文件在手,操作也走了,结果不对。
文中涉及的文件后缀、目录名与提示措辞,按通达信金融终端个人版的形态描述。不同版本在支持的格式与提示文案上存在差异,涉及某个后缀与版本的具体对应关系,以官方版本说明为准。
一、tn6、tne、exp:三种格式各对应什么
旧公式打不开,先看手上的包是什么后缀。公式管理器导出的包,后缀决定了它里面装了什么、能被哪一类客户端读出来。
这三种后缀都来自公式管理器的导出功能,内部结构不完全一样。放在一起对照,能先排除掉一部分「打开没反应」的情况。
| 文件后缀 | 包里装了什么 | 与版本的关系 | 处理方向 |
|---|---|---|---|
| tn6 | 公式源码与参数定义 | 由导出端写入,导入端按同一套结构解析 | 直接在公式管理器里导入,看提示落在哪一句 |
| tne | 公式源码或受保护形态的公式包 | 一部分客户端版本保留读取能力,另一部分版本已不再解析 | 用能打开它的版本打开后,重新导出为可读形态 |
| exp | 成批导出的公式集合 | 支持范围随客户端版本调整 | 优先改走源码粘贴,减少对格式转换的依赖 |
上表按后缀形态归纳。某个后缀从哪个版本开始支持、到哪个版本停止支持,以官方版本说明与客户端帮助为准。判断手上的包属于哪一类,可以在公式管理器里试导入一次,把提示原文记下来。
二、旧公式在新版打不开的几类原因
通达信公式版本兼容出问题,成因集中在四类。按提示文字区分,定位会快一些。
- 函数改名或下架。同一功能在新版本里换了名字,旧源码引用的旧名字找不到对应实现,编辑时会把这个名字点出来。做法是在公式管理器的函数列表里检索它,检索不到说明当前版本不再提供。
- 语法变动。同一段表达式在不同版本里被解析成不同结构,报错会集中在某一行。做法是按提示给的行号定位到那一行,把这一行折半注释,看报错是否消失。
- 加密导出文件的版本锁。包带有导出端写下的版本或授权约束,导入端读不出里面的内容,提示文字落在授权或版本这一侧。做法是用导出该包的版本打开后重新导出,或者向来源索取源码形态的版本。
- 字段名变更。公式能编译通过,挂到副图上取值不对,原因是引用的字段在新版本里换了名称或口径。做法是逐个核对源码里的字段名,替换成当前版本可识别的写法。
四类成因里,前两类来自客户端自身的版本演进,后两类来自包与导入端之间的约定。区分方法是看提示落在哪个环节:编辑阶段报出来的错指向函数与语法,导入阶段给出的提示指向格式与授权。同一句话里的关键词不同,走的分支也不同。
{按提示定位的顺序}
1. 记下提示原文与客户端版本号
2. 提示里带函数名 -> 到函数列表里检索该名字
3. 提示里带行号 -> 定位到那一行,折半注释再看一次
4. 提示里带授权或版本字样 -> 按加密包的路径处理
5. 编译通过但取值不对 -> 逐个核对源码里的字段名
把这四类放在一张表里对照,处理动作可以直接对上去。
| 现象 / 提示 | 含义 | 处理 |
|---|---|---|
| 提示里点名某个函数 | 该函数在当前版本不再提供,或已经改名 | 在函数列表里检索,改用当前版本提供的等价函数 |
| 报错集中在同一行的括号处 | 该行的括号或运算符不符合当前语法 | 按提示行号定位,折半注释把范围缩小 |
| 导入时提示与授权或版本有关 | 包带有导出端写下的版本锁 | 用导出该包的版本打开后重新导出,或改取源码 |
| 导入成功但公式树里没有 | 包内公式没有被写入用户公式区 | 看导入提示全文,确认是覆盖、跳过还是失败 |
| 能编译但挂图取值不对 | 引用的字段在当前版本换了名称或口径 | 逐个核对源码里的字段名,替换后再测一次 |
三、导入提示的措辞随版本变化
同一件事在不同版本里给出的提示文字不一样,按字面搜提示原文时要把这一点考虑进去。这也是通达信公式版本兼容要连版本号一起记的原因。
以同名公式为例,一部分版本的提示里写「是否覆盖」,另一部分版本把覆盖与跳过做成两个按钮,还有版本把同名冲突处理放在导入完成后的确认环节。看到提示文字与别人截图里的不同,先判断它对应的是同一个环节还是不同环节,再决定要不要按截图里的步骤走。
记下来的信息里,版本号与提示原文各占一半。有了这两样,去查版本说明或者问来源的时候,能直接对上,不用来回描述界面长什么样。
四、导入之后的两步验证
通达信公式版本兼容的问题处理完,靠两步就能确认是否真的落位。
第一步看公式树。导入完成后在公式管理器里展开对应的分类,确认新增的公式名出现在列表里;同名公式要确认是新增了一条还是覆盖了原来那条,判断方法是看列表条数与公式内容。第二步挂副图。在分析图上按 Ctrl+F 打开公式选择,把公式挂到副图上,确认副图区域有曲线输出。
{导入后的两步验证}
第一步 公式树
1. 打开公式管理器
2. 展开目标分类
3. 看列表条数,确认是新增还是覆盖
第二步 挂副图
1. 在分析图上按 Ctrl+F 进入公式选择
2. 选中该公式挂到副图
3. 确认副图区域有曲线输出
4. 若为空白,回到公式管理器点「测试公式」看报错行
两步都过,说明公式已经进入用户公式区并能正常计算。只过第一步、第二步空白,问题在源码本身,按上一节的四类成因回到编辑器里看。两步都不过,问题在导入环节,回到文件后缀与提示原文这两项。
两步验证确认的是公式能被读入并计算。取值是否符合源码写的条件,还要回到源码里对一遍。副图出线只说明编译通过,参数错位、字段口径不同这两类问题在副图上未必看得出来,把参数表逐个对一遍更稳妥。
五、下一步动作:按顺序走这几步
遇到打不开的旧公式,按下面的顺序走一遍,比一个个试导入要快。
{处理顺序}
1. 记录提示原文与客户端版本号
2. 判断属于哪一类:函数、语法、版本锁、字段
3. 能取到源码的,直接在编辑器里重建并测试
4. 只能取到加密包的,用导出该包的版本打开后重新导出
5. 重建完成后,按上节两步验证确认落位
包既打不开、来源也取不到源码时,继续在格式转换上花时间并不划算。可行的做法是按源码文本重建一个功能等价的版本,把函数与字段换成当前版本可识别的写法。
源码形态能绕开格式上的问题。手上有源码文本时,版本之间的差异就剩下函数与字段两件事,核对范围会收窄。重建之前先把参数名与个数抄下来,重建之后逐项对一遍,避免参数在手动录入时错位。
相关延伸:公式资源的挑选口径,见 指标资源选择与会员 一栏;本机公式的存放位置与安装步骤,见 公式安装与导入 一栏。
通达信公式版本兼容的判断落到操作上,就是把提示原文、版本号、文件后缀三项对在一起看。三项对得上,处理方向基本就定了。
本文只作技术研究口径,不涉及也不构成对任何标的的判断。
站内还有 报错与卡顿排查 的条目,导入后出现提示时的定位顺序可对照查看。文中文件后缀、目录名与提示措辞按通达信金融终端个人版的形态描述,不同版本在支持的格式与提示文案上存在差异,具体以官方版本说明为准。
