Files
JY1.0/gptlog-process/gptlog.md

2.3 KiB
Raw Blame History

2026-07-09 08:20:52 - 入库记录导出功能列名数据错位修复

提问

用户反馈 WarehousingRecord 组件的导出功能导出的 Excel 表格列名和数据对不上,提供了正确和错误两个 Excel 文件对比。

排查过程

  1. 读取正确的表和错误的表,对比发现:错误的表中"物料名称"值出现在"类型"列下,"图号/型号"值出现在"物料编号"列下,全部列偏移。
  2. 读取 WarehousingRecord.vue,发现导出调用 his.exportExcel_NPOI(Data),存储过程名为 仓储管理_入库记录_导出表格_查询。
  3. 查看 exportExcel_NPOI 定义(curd.js),确认导出是通过 NPOI 后端处理器按位置映射列。
  4. 查询存储过程定义,发现动态 SQL 使用 A.* 返回 UNION ALL 视图的全部24列 + JOIN 的6列 = 30列数据,但导出表头只定义了16列。
  5. 查询6个视图的列顺序,确认视图首列是"物料名称"而非"类型",导致按位置映射时全部错位。
  6. 对比正常工作的 仓储管理_外协到货记录_导出表格_查询,确认其使用显式列选择。

根因

存储过程 仓储管理_入库记录_导出表格_查询 的动态 SQL 使用 A.* 返回全部列,NPOI 导出处理器按位置将数据映射到表头,但视图列顺序(物料名称, 图号或型号, 入库数, 单位, 入库日期, ...)与表头顺序(类型, 物料编号, 物料名称, 图号/型号, 单位, 入库数, ...)不一致,导致列名和数据错位。

结论与修复

将存储过程中 A.* 改为显式选择16列,按表头顺序排列并使用 AS 别名匹配表头名称:

  • A.类型
  • 库存管理_物料主文件_基本.物料编码 as 物料编号
  • A.物料名称
  • A.图号或型号 as [图号/型号]
  • A.单位
  • A.入库数
  • 库存管理_货位主文件.货位名称 as 库位
  • A.入库日期
  • 入库单去重.入库单号
  • A.批次编号
  • 采购管理_供应商.供应商编号
  • A.供应商
  • A.采购合同编号 as 采购合同
  • A.订单号
  • A.产品名称 as [产品/组件名称]
  • A.备注 as 采购备注

已在数据库 ERPTOOL_JY 上执行 ALTER PROCEDURE 修复,验证修复后数据列顺序正确。

修改的数据库对象

  • 存储过程:仓储管理_入库记录_导出表格_查询(ERPTOOL_JY 数据库,192.168.1.27)