返回首页

针对开发人员的 1C 配置架构问题

本文分析了标准 1C 配置的架构和功能缺点:从代码绑定到表单和不可读查询,到访问角色和成本价格计算问题。示例和中高级开发人员的改进建议。

1C 缺点:从架构到功能
Advertisement 728x90

标准1C配置架构中的核心缺陷

标准1C配置通常将业务逻辑直接硬编码到表单中,导致执行环境被限制在客户端。表单和对象模块中的过程极少标记为导出(Export),无法在不使用扩展的情况下直接调用。函数之间存在强耦合,且高度依赖表单上下文,严重违背了模块隔离原则。

这种强耦合的典型表现包括:

  • 银行对账单的加载仅支持从列表表单或单据表单中触发。
  • 通过税号(TIN)填充组织或交易对手信息的功能与UI控件深度绑定,迫使开发者在通过代码创建对象时必须重复编写逻辑。

这种架构设计严重阻碍了模块的复用与自动化测试。

Google AdInline article slot

服务器调用的滥用

1C开发者往往过度依赖以 _ServerCall_ 为后缀的模块,导致对相同过程的调用被反复复制。公共模块中的函数本可直接在服务器端调用(无需勾选“服务器调用”标志),却偏偏要通过带有该标志的代理模块再次中转。这毫无必要地膨胀了代码量。

标准配置中充斥着数十个此类模块,令开发者不堪重负。更合理的做法是直接使用 Export 关键字导出服务器端过程,彻底摒弃冗余的包装层。

臃肿的查询语句取代了可读代码

数据提取几乎完全依赖查询语句,即便对象方法本可胜任。在单据管理器模块中,查询被用于生成打印数据;但在计算寄存器变动时,查询语句却膨胀成难以阅读的庞然大物,充斥着各种连接(JOIN)和条件分支。

Google AdInline article slot

这种为了追求声明式风格而牺牲可读性的做法,极大增加了调试难度和后续维护成本。更优的方案是在过程中将查询与命令式逻辑相结合。

模糊的数据结构

在生成打印表单时,多个表格文档常被粗暴地合并到一个文档中,仅通过区域(如 _Document1__Document2_)进行分隔,而非传递规范的数据集合。这些集合结构看似对象,但其字段组成往往缺乏逻辑,导致二次开发时必须进行繁琐的手动映射。

混乱的异步调用链

1C中的异步调用链缺乏规范文档:过程命名缺乏明确的上下文描述,且几乎没有注释。调试财政收据处理流程就是典型例子——一长串调用链找不到清晰的入口点。

Google AdInline article slot

最佳实践是引入状态机,通过当前状态参数来调度相应的调用。

状态机伪代码示例:

Procedure ExecuteAction(CurrentStatus) Export
    If CurrentStatus = "Initialization" Then
        InitializeReceipt();
        TransitionToStatus("Forming");
    Else If CurrentStatus = "Forming" Then
        GenerateReceipt();
        TransitionToStatus("Printing");
    // And so on
    EndIf;
EndProcedure

缺乏安全的调试机制

关键操作(如与财政登记机交互)不支持响应模拟。代码强依赖真实硬件反馈,导致无法进行虚拟环境测试。这显著增加了开发与集成阶段的风险。

命名混乱与重构困难

应用对象、模块和字段经常被重命名,有时甚至会被加上 _Delete_ 前缀。在配置中搜索 _Delete_ 会返回成百上千个结果。“合作伙伴/交易对手/买家”等术语的使用极不统一,实体(如收单协议)也频繁被合并或拆分。

这种做法反映了架构决策的随意性,迫使开发者在迁移引用时浪费大量时间。

不一致的界面规范

UI元素的命名规范差异极大:表格部件中的添加按钮可能叫 _InventoryAdd,也可能就叫 _Add。单据的右侧列可能是 _RightColumn,也可能是 _HeaderRight。这种不一致性严重阻碍了自动化脚本编写和扩展开发。

低效的算法设计

尽管官方极度强调性能,但代码库中仍存在大量冗余。例如打印发票时,系统会预先加载所有模板,而实际上只需调用其中少数几个。若采用按需缓存机制,在99%的场景下都能有效降低系统开销。

重复的HTTP功能实现

不同团队在实现HTTP请求(如直连银行、网站数据同步等)时各自为战,缺乏统一的拦截与调度节点。系统中没有标准化的代理层来实现集中化配置。

功能性缺陷

由于系统架构师基于过度简化的假设进行设计,标准方案在实际业务场景中频频失效。

成本核算问题

切换至月末结账模式适用于大型制造业,却会给零售和中型企业带来瓶颈:期末出现负数余额会直接导致成本核算流程完全卡死。

硬件限制僵化

禁止在同一工作站上连接两台收银机,是阻碍企业优化业务流程的典型反例。

积分/返利核算错误

过期积分需要按批次进行追踪,但1C默认采用加权平均法,导致计算结果频频出错。2.5版本更是放大了这一问题,若不彻底重写代码,该功能几乎无法投入使用。

过时的权限模型

角色权限依赖静态复选框,完全忽略了动态代码执行的需求。全量访问权限会意外包含管理员特权,导致普通用户也能创建账号或下载整个数据库。

核心总结

  • 架构僵化:与表单和上下文的强耦合严重限制了模块复用。
  • 代码冗余_ServerCall_ 模块无端增加了逻辑复杂度。
  • 查询晦涩:单体查询语句取代了清晰的对象方法。
  • 缺乏模拟支持:无法在隔离环境中测试财政相关操作。
  • 命名极不稳定:成百上千的 _Delete_ 元素让长期维护举步维艰。

— Editorial Team

Advertisement 728x90

继续阅读