# 金蝶常见错误与解决方案

## 数据库相关错误

### SQL 执行超时

**错误信息：**
```
Timeout expired. The timeout period elapsed prior to completion of the operation
```

**可能原因：**
1. SQL 查询数据量过大
2. 缺少索引
3. 数据库服务器负载过高

**解决方案：**
1. 添加 WHERE 条件限制数据量
2. 检查并优化索引
3. 使用 TOP 限制返回行数
4. 避免 SELECT *，只查询需要的字段

### 死锁错误

**错误信息：**
```
Transaction (Process ID XX) was deadlocked on lock resources with another process
```

**解决方案：**
1. 减少事务持有时间
2. 按固定顺序访问表
3. 使用较低的事务隔离级别
4. 避免在事务中进行用户交互

---

## 插件相关错误

### 插件加载失败

**错误信息：**
```
未能加载文件或程序集 'XXX.dll' 或它的某一个依赖项
```

**可能原因：**
1. DLL 文件不存在
2. 版本不匹配
3. 依赖项缺失

**解决方案：**
1. 检查 DLL 文件是否在正确目录
2. 确认引用版本与运行时版本一致
3. 使用 Fusion Log Viewer 查看绑定失败详情

### 插件执行异常

**错误信息：**
```
Object reference not set to an instance of an object
```

**常见原因：**
1. 未检查 null 值
2. 数据实体字段不存在
3. 上下文对象未初始化

**代码示例（正确做法）：**
```csharp
// 企业版 C#
var value = dataEntity["FQty"];
if (value != null)
{
    var qty = Convert.ToDecimal(value);
}
```

```java
// 旗舰版 Java
Object value = dataEntity.get("qty");
if (value != null) {
    BigDecimal qty = new BigDecimal(value.toString());
}
```

---

## 配置相关错误

### 登录失败

**错误信息：**
```
登录失败，用户名或密码错误
```

**解决方案：**
1. 检查用户名密码是否正确
2. 确认用户未被禁用
3. 检查数据库连接配置

### 许可证过期

**错误信息：**
```
系统许可证已过期，请联系管理员
```

**解决方案：**
1. 联系金蝶客服续期
2. 导入新的许可证文件

---

## 业务逻辑错误

### 单据状态不允许操作

**错误信息：**
```
当前单据状态不允许此操作
```

**常见场景：**
- 已审核单据不能修改
- 已关闭单据不能删除
- 暂存单据不能提交

**解决方案：**
1. 检查单据当前状态
2. 确认操作是否符合业务流程
3. 必要时先反审核再操作

### 库存不足

**错误信息：**
```
库存不足，当前可用库存为 X
```

**解决方案：**
1. 检查库存数据是否准确
2. 确认是否允许负库存
3. 调整出库数量

---

## 性能相关问题

### 页面加载缓慢

**可能原因：**
1. 基础数据量过大
2. 网络延迟
3. 服务器资源不足

**优化建议：**
1. 使用分页加载
2. 启用缓存
3. 优化数据库查询
4. 增加服务器资源

### 报表生成超时

**优化建议：**
1. 减少数据范围
2. 使用预计算
3. 异步生成报表
4. 优化 SQL 查询
