Files
ctbjrj/成套报价软件/报价公式.cs
T

60 lines
3.4 KiB
C#

using System;
namespace 成套报价软件
{
/// <summary>
/// ★ A2(2026-09-30):三表报价公式【单一来源】——
/// 主窗口 grid 版重算、RecalcAllFromDatabase 库版重算、扒图窗口(Pdf/Cad)重算
/// 全部调用本类,公式只在这一处维护(此前三处各写一份,毛利率口径分裂的教训)。
/// 口径约定:
/// 元件行:采购单价=表价×采购系数;采购价=采购单价×数量;
/// 报出单价=采购单价×报出系数;报出价=报出单价×数量
/// 箱号行:单台成本=SUM(元件.采购价);成本价=单台成本×数量;
/// 单台报出=SUM(元件.报出价);报出价=单台报出×数量;
/// 利润=报出价−成本价;利润率=利润/成本价(小数,保留2位);
/// 毛利率=利润/报出价×100(百分数值,保留2位,如 4.76=4.76%)
/// 图号行:箱柜数量=SUM(箱号.数量);单价=SUM(箱号.报出价);总价=单价×台数;
/// 成本总价=SUM(箱号.成本价)×台数;毛利=总价−成本总价;
/// 毛利率=毛利/总价×100(百分数值,保留2位)
/// </summary>
internal static class 报价公式
{
/// <summary>元件行公式。</summary>
internal static void 元件(decimal 表价, decimal 采购系数, decimal 报出系数, decimal 数量,
out decimal 采购单价, out decimal 采购价, out decimal 报出单价, out decimal 报出价)
{
采购单价 = 表价 * 采购系数;
采购价 = 采购单价 * 数量;
报出单价 = 采购单价 * 报出系数;
报出价 = 报出单价 * 数量;
}
/// <summary>箱号行聚合公式(输入=该箱号全部元件的采购价/报出价合计)。</summary>
internal static void 箱号(decimal 元件采购价合计, decimal 元件报出价合计, decimal 数量,
out decimal 单台成本, out decimal 成本价, out decimal 单台报出, out decimal 报出价,
out decimal 利润, out decimal 利润率, out decimal 毛利率)
{
单台成本 = 元件采购价合计;
成本价 = 单台成本 * 数量;
单台报出 = 元件报出价合计;
报出价 = 单台报出 * 数量;
利润 = 报出价 - 成本价;
利润率 = 成本价 == 0m ? 0m : Math.Round(利润 / 成本价, 2); // 小数,0.05=5%
毛利率 = 报出价 == 0m ? 0m : Math.Round(利润 / 报出价 * 100m, 2); // 百分数值,4.76=4.76%
}
/// <summary>图号行聚合公式(输入=该图号全部箱号的数量/报出价/成本价合计与台数)。</summary>
internal static void 图号(decimal 箱号数量合计, decimal 箱号报出价合计, decimal 箱号成本价合计, decimal 台数,
out decimal 箱柜数量, out decimal 单价, out decimal 总价, out decimal 成本总价,
out decimal 毛利, out decimal 毛利率)
{
箱柜数量 = 箱号数量合计;
单价 = 箱号报出价合计;
总价 = 单价 * 台数;
成本总价 = 箱号成本价合计 * 台数;
毛利 = 总价 - 成本总价;
毛利率 = 总价 == 0m ? 0m : Math.Round(毛利 / 总价 * 100m, 2); // 百分数值,保留2位
}
}
}