---
url: /dev/reports/production-cost/index.md
---
# 生产费用表

## 功能概述

生产费用表用于归集车间实际发生的生产费用明细，包括直接材料费用、直接人工费用、燃料动力费用、固定资产折旧费用等。生产费用表支持按车间、按费用项目进行明细展示，并按产品产量进行费用分摊，是车间成本核算的核心报表之一。

## 业务对象

| 业务对象 | 说明 |
| --- | --- |
| 生产费用归集 | 按车间归集生产费用的核心业务对象 |
| 生产费用分摊 | 按产品分摊生产费用的计算对象 |

**业务场景描述：** 每月末，系统从材料领用、工资分配、电费/燃气费登记、折旧计算等多个数据源汇总各车间的生产费用，再按各产品的实际产量进行分摊，计算出各产品应承担的生产费用。

## 实体设计

**生产费用表实体 (RP\_ProductionCostLine)**

| 字段名称 | 字段编码 | 数据类型 | 必填 | 是否隐藏 | 说明 |
| --- | --- | --- | --- | --- | --- |
| 主键ID | id | 整数 | 自动 | 系统自带 |
| 会计期间 | period | 文本 | 是 | 否 | 会计月份 |
| 车间ID | workshopId | 参照/外键 | 是 | 是 | 关联车间档案ID |
| 产品编码 | productCode | 文本 | 是 | 否 | 产品料号编码 |
| 产品名称 | productName | 文本 | 是 | 否 | 产品名称 |
| 产量 | outputQty | 数值 | 是 | 否 | 产品入库数量(2位小数) |
| 直接材料费用 | directMaterialCost | 数值 | 是 | 否 | 直接材料消耗费用（元）(2位小数) |
| 直接人工费用 | directLaborCost | 数值 | 是 | 否 | 直接人工费用（元）(2位小数) |
| 燃料动力费用 | fuelPowerCost | 数值 | 是 | 否 | 燃料动力费用（元）(2位小数) |
| 折旧费用 | depreciationCost | 数值 | 是 | 否 | 固定资产折旧费用（元）(2位小数) |
| 其他生产费用 | otherProductionCost | 数值 | 是 | 否 | 其他生产费用（元）(2位小数) |
| 生产费用合计 | totalProductionCost | 数值 | 是 | 否 | 生产费用合计(2位小数) |
| 分摊单价 | allocationRate | 数值 | 是 | 否 | 单件产品分摊费用(2位小数) |
| 计算状态 | calcStatus | 枚举 | 是 | 否 | 0-未计算/1-已计算 |
| 备注 | remark | 文本 | 否 | 否 | 备注说明 |
| 创建人 | createBy | 文本 | 自动 | 是 | 创建人 |
| 创建时间 | createTime | 日期时间 | 自动 | 是 | 创建时间 |
| 更新人 | updateBy | 文本 | 自动 | 是 | 更新人 |
| 更新时间 | updateTime | 日期时间 | 自动 | 是 | 更新时间 |
| 组织ID | orgId | 参照/外键 | 是 | 是 | 所属组织ID |

## 页面设计

### 页面布局

生产费用表页面采用分层报表布局，由筛选区、费用明细区和分摊汇总区组成。

**顶部筛选区：**

* 会计期间选择器
* 车间多选下拉框
* 费用项目筛选
* "执行归集"按钮
* 费用分摊分析按钮
* 导出功能

**中间费用明细区：**

* 按车间分组展示各项生产费用
* 费用项目用不同颜色标识（材料费绿色、人工费蓝色、动力费橙色、折旧费紫色）
* 支持展开查看各费用分摊明细
* 费用合计行高亮显示

**分摊汇总区：**

* 按产品展示分摊后的生产费用
* 分摊单价排名
* 费用构成饼图
* 车间对比柱状图

### 核心组件

* **报表设计器：** 配置费用列展示、多级汇总和条件格式
* **智能分析：** 基于语义模型自动分析费用构成，识别分摊异常
* **费用分摊引擎：** 按产量比例自动分摊各项生产费用
* **数据可视化：** 集成饼图和柱状图组件，多维度展示费用结构

### 交互规则

1. 页面加载时自动加载当前期间的生产费用数据
2. 点击"执行归集"按钮从各数据源汇总生产费用
3. 点击"费用分摊分析"按钮查看按产品分摊明细
4. 支持按车间对比费用结构
5. 分摊单价异常的产品自动高亮标注

## 前端脚本

```javascript
// 执行生产费用归集
async function onClickCollect() {
    const period = getFilterValue('period');
    showLoading('正在归集生产费用...');
    try {
        const result = await collectProductionCost(period);
        renderCostTable(result.data);
        renderAllocationSummary(result.allocation);
        showToast('生产费用归集完成');
    } catch (e) {
        showError('归集失败：' + e.message);
    } finally {
        hideLoading();
    }
}

// 车间切换事件
async function onWorkshopChange() {
    const period = getFilterValue('period');
    const workshop = getFilterValue('workshop');
    const data = await loadProductionCostData(period, workshop);
    renderCostTable(data);
}

// 费用分摊分析
async function onAllocationAnalysis() {
    const period = getFilterValue('period');
    const data = await loadAllocationData(period);
    setChartData('costStructurePie', data.structure);
    setChartData('workshopBar', data.comparison);
    showAnalysisPanel();
}

// 表格渲染
function renderCostTable(data) {
    const grouped = groupByWorkshop(data);
    setTableData(grouped);
}
```

**计算触发时机：**

* 页面加载时自动加载已有归集数据
* 用户点击"执行归集"手动触发
* 支持费用分摊实时分析和可视化

## 后端脚本

### YonQL 查询

```sql
-- 查询直接材料费用
SELECT 
    Workshop,
    SUM(Amount) AS DirectMaterialCost
FROM MaterialUse
WHERE Period = #{period}
GROUP BY Workshop

-- 查询直接人工费用
SELECT 
    Workshop,
    SUM(Amount) AS DirectLaborCost
FROM SalaryAllocation
WHERE Period = #{period}
AND CostType = '生产费用'
GROUP BY Workshop

-- 查询燃料动力费用
SELECT 
    Workshop,
    SUM(Electricity + GasFee) AS FuelPowerCost
FROM WorkshopEnergy
WHERE Period = #{period}
GROUP BY Workshop

-- 查询折旧费用
SELECT 
    Workshop,
    SUM(Depreciation) AS DepreciationCost
FROM FixedAssetDepreciation
WHERE Period = #{period}
GROUP BY Workshop
```

### 报表计算逻辑

```javascript
async function collectProductionCost(period) {
    // 1. 获取各数据源费用
    const materialCosts = await queryMaterialCost(period);
    const laborCosts = await queryLaborCost(period);
    const energyCosts = await queryEnergyCost(period);
    const depreciationCosts = await queryDepreciationCost(period);
    
    // 2. 按车间汇总各项费用
    const workshopCosts = aggregateByWorkshop(
        materialCosts, laborCosts, energyCosts, depreciationCosts
    );
    
    // 3. 获取各车间产量数据用于分摊
    const productionData = await queryProductionByWorkshop(period);
    
    // 4. 按产品分摊费用
    for (const workshop of workshopCosts) {
        const products = productionData.filter(p => p.Workshop === workshop.Workshop);
        const totalOutput = products.reduce((sum, p) => sum + p.OutputQty, 0);
        
        for (const product of products) {
            const ratio = product.OutputQty / totalOutput;
            const totalCost = workshop.DirectMaterialCost 
                            + workshop.DirectLaborCost 
                            + workshop.FuelPowerCost 
                            + workshop.DepreciationCost
                            + workshop.OtherProductionCost;
            
            await saveProductionCost({
                Period: period,
                Workshop: workshop.Workshop,
                ProductCode: product.ProductCode,
                OutputQty: product.OutputQty,
                DirectMaterialCost: workshop.DirectMaterialCost * ratio,
                DirectLaborCost: workshop.DirectLaborCost * ratio,
                FuelPowerCost: workshop.FuelPowerCost * ratio,
                DepreciationCost: workshop.DepreciationCost * ratio,
                TotalProductionCost: totalCost * ratio,
                AllocationRate: totalCost / product.OutputQty,
                CalcStatus: '已计算'
            });
        }
    }
}
```

### 数据汇总

生产费用表按车间汇总各项费用，并按产品分摊生成产品成本数据。汇总数据传递给标准费用表用于差异分析，同时提供给利润分析模块计算产品利润率。

## 报表配置

### 报表数据源配置

| 配置项 | 说明 |
| --- | --- |
| 主数据源 | 生产费用表实体 (RP\_ProductionCostLine) |
| 关联数据源 | 材料领用单、工资分摊表、电费/燃气费登记、固定资产折旧表 |
| 数据类型 | 费用归集与分摊类报表 |
| 语义模型 | 基于"车间-费用项目-产品"三维生产费用语义模型 |

### 过滤条件

* 会计期间：必选
* 车间：可选，多选
* 费用项目：可选
* 产品编码：可选

### 分组统计

* **一级分组：** 车间
* **二级分组：** 费用项目
* **汇总指标：** 各项生产费用合计、费用合计、分摊单价

## 数据权限

### 功能权限

| 角色 | 查看 | 归集 | 分摊分析 | 导出 |
| --- | --- | --- | --- | --- |
| 车间主任 | ✅ | ✅ | ✅ | ✅ |
| 财务人员 | ✅ | ❌ | ✅ | ✅ |
| 系统管理员 | ✅ | ✅ | ✅ | ✅ |
| 普通用户 | ✅ | ❌ | ❌ | ❌ |

### 数据权限规则

1. 车间主任可查看本车间费用并执行归集操作
2. 财务人员可查看全公司费用数据和分摊分析结果
3. 系统管理员拥有全部权限
4. 所有归集和分摊操作需记录操作日志
