提起Visual FoxPro,很多年轻程序员可能都没听过这个名字。但我去年真的用它给一个朋友的小公司做了一套进销存管理系统,花了大概三周时间,从需求梳理到上线运行,总共写了四千多行代码。这段经历让我想聊聊这个看似过时的工具,在特定场景下到底还能不能打。
先说背景。朋友开了一家做包装材料的贸易公司,员工不到二十人,之前一直用Excel记录订单、库存和往来账目。随着业务量增加,表格越做越大,经常出现数据对不上的情况,比如销售这边改了个订单数量,仓库那边还停留在旧数据。朋友找过一些现成的进销存软件,不是功能太复杂用不上,就是按年收费的价格让小公司肉疼。最后他问我能不能帮忙写个小系统,需求其实挺简单:管好商品信息、进货、出货、库存、客户和供应商资料,最好还能按条件查一下历史单据。
我一开始想用Python加SQLite来做,但考虑到他们公司电脑老旧,配置不高,而且不想额外安装运行环境,后来想到了VF。这东西确实老,微软早在2007年就停止支持了,但有一个别人比不了的优点:用它编译出来的程序是独立的可执行文件,Windows XP到Windows 10都能直接跑,不需要装任何运行时环境。这一点放在当下的开发环境里,简直像作弊一样方便。
开发过程比我想象中顺畅。VF的数据库表结构不需要单独建库文件,一个表对应一个文件,扩展名是DBF,管理起来非常直观。二十来个表之间用关系关联,写SQL查询语句也没太大障碍。界面用表单设计器拖拽控件,加一些基本的按钮、表格框、下拉选择框,很快就能拼出来。最让我惊喜的是报表设计器,打印进货单和出货单时,用画报表的方式很快就把格式调好了,比很多web系统打印时的样式问题省心得多。
当然,踩坑也是有的。VF对中文字符串的处理在某些旧版本上会出现乱码问题,解决方式是统一使用Unicode编码,并在每个表单初始化代码里加上设置语句。还有一次遇到日期格式的排序问题,查了很久才发现是系统区域设置不一致,最后在代码里强制指定了日期格式,问题立刻消失。这些小经验积累下来,调试速度慢慢就快了。

系统上线那天,朋友仓库的人很顺利就上手了。因为界面就是老老实实的表单风格,每个菜单对应一个功能,没有花哨的东西。库存查询、订单录入、客户管理,点开就能用。录入员用数字小键盘输条码号的时候,觉得比在网页里切换输入框快很多。这一点是我之前没考虑到的,VF原生桌面应用在键盘操作上确实比浏览器体验更好,没有网页刷新延迟,也没有焦点跳转卡顿。
写系统过程中我还发现一个有意思的现象,国内不少老牌生产企业,尤其是一些工厂的仓库和财务部门,至今还在使用基于VF或类似开发工具的老系统,数据文件动辄积累了几十年。我朋友公司的这套系统,后期如果要跟外部系统对接,需要导出成Excel或者CSV格式,VF也提供现成的函数,直接就可以实现。作为内部使用的小型管理系统,它的生命周期可能比我预想的要长。
如果你打算用VF做管理系统,我想给出几点参考。性能完全够用,数据量在几十万条记录之内不会有明显卡顿,超出的话建议定期归档历史数据。代码要用结构化方式编写过程文件,尽量少用全局变量,方便后期维护。表单设计上注意分辨率兼容,老程序在高分屏上会显得很小,可以设置缩放比例解决。数据库表字段尽量加注释,VF支持给每个字段写说明信息,这对后来接手的人很重要。
这个项目结束后,我在想VF到底还有没有未来。从发展的角度讲,它确实已经停止了迭代,新项目不会有企业愿意再投入精力去用一门过时的语言。但从解决实际问题的角度看,工具的价值从来不取决于它是否新潮,而是它能否在恰当的场景里解决恰当的问题。朋友公司的这台老电脑,两GB内存,双核处理器,跑了十几年,装上这套系统后运行得稳稳当当,连风扇声都比以前安静了不少。
一套管理系统,不管底层用什么技术,只要用户用着顺手、结账不出错、库存对得上,那就够好了。VF虽然老,但在这种轻量级、封闭式、小规模的管理场景里,依然留下了属于它的位置。