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