一般财务计算产品价格又很多方法,我这里做了几个供参考,实体属性主要是编号、数量、价格等,这里就不列出了。
/// <summary>
/// 先进先出算法
/// </summary>
/// <param name="inRecord">入库记录(一个周期内)</param>
/// <param name="outRecord">出库记录(一个周期内)</param>
/// <returns>InventoryPrice为结果价格</returns>
public List<BaseStock> ComputerPriceFIFO
(List<BaseStock> inRecord, List<BaseStock> outRecord)
{
//排序
var inList = (from o in inRecord
orderby o.CDate
select o).ToList(); var outList = (from o in outRecord
orderby o.CDate
select o).ToList(); foreach (var outItem in outList)
{
//当前条已出部分金额
decimal money = ;
//当前还需出的数量
decimal qty = outItem.Qty;
foreach (var inItem in inList)
{
//如果当前这一条够出库,那么结束去计算价格
if (inItem.Qty > qty)
{
money = money + inItem.Price * qty;
//更新入库表
inItem.Qty = inItem.Qty - qty;
break;
}
else
{
qty = qty - inItem.Qty;
money = money + (inItem.Price * inItem.Qty);
//更新入库表
inItem.Qty = ;
}
}
//计算出货价格
outItem.Price = money / outItem.Qty;
} return outList;
} /// <summary>
/// 后进先出算法
/// </summary>
/// <param name="inRecord">入库记录(一个周期内)</param>
/// <param name="outRecord">出库记录(一个周期内)</param>
/// <returns>InventoryPrice为结果价格</returns>
public List<BaseStock> ComputerPriceFOFI
(List<BaseStock> inRecord, List<BaseStock> outRecord)
{
//排序
var inList = (from o in inRecord
orderby o.CDate descending
select o).ToList(); var outList = (from o in outRecord
orderby o.CDate
select o).ToList(); foreach (var outItem in outList)
{
//当前条已出部分金额
decimal money = ;
//当前还需出的数量
decimal qty = outItem.Qty;
foreach (var inItem in inList)
{
//如果当前这一条够出库,那么结束去计算价格
if (inItem.Qty > qty)
{
money = money + inItem.Price * qty;
//更新入库表
inItem.Qty = inItem.Qty - qty;
break;
}
else
{
qty = qty - inItem.Qty;
money = money + (inItem.Price * inItem.Qty);
//更新入库表
inItem.Qty = ;
}
}
//计算出货价格
outItem.Price = money / outItem.Qty;
} return outList;
} /// <summary>
/// 加权平均算法
/// </summary>
/// <param name="inRecord">入库记录(一个周期内)</param>
/// <param name="outRecord">出库记录(一个周期内)</param>
/// <param name="prePrice">上期价格</param>
/// <param name="preQty">上期数量</param>
/// <returns></returns>
public List<BaseStock> ComputerPriceBalance
(List<BaseStock> inRecord, List<BaseStock> outRecord,
decimal prePrice, decimal preQty)
{
decimal money = ;
decimal qty = ;
foreach (var inItem in inRecord)
{
money = money + inItem.Price * inItem.Qty;
qty = qty + inItem.Qty;
} decimal price = (money + prePrice * preQty) / (qty + preQty); foreach (var outItem in outRecord)
{
outItem.Price = price;
} return outRecord;
} /// <summary>
/// 移动加权平均算法
/// </summary>
/// <param name="inRecord">入库记录(一个周期内)</param>
/// <param name="outRecord">出库记录(一个周期内)</param>
/// <param name="prePrice">上期价格</param>
/// <param name="preQty">上期数量</param>
/// <returns></returns>
public List<BaseStock> ComputerPriceTrack
(List<BaseStock> inRecord, List<BaseStock> outRecord,
decimal prePrice, decimal preQty, DateTime preDate)
{
//排序
var outList = (from o in outRecord
orderby o.CDate
select o).ToList(); List<Guid> preDetail_IDs = new List<Guid>();
foreach (var outItem in outList)
{
//取出比当前出库记录要早的入库记录,并且排除已经结算的记录
var inList = (from o in inRecord
where o.CDate <= outItem.CDate
&& !preDetail_IDs.Contains(o.Detail_ID)
orderby o.CDate
select o).ToList(); decimal money = ;
decimal qty = ;
foreach (var inItem in inList)
{
money = money + inItem.Price * inItem.Qty;
qty = qty + inItem.Qty;
preDetail_IDs.Add(inItem.Detail_ID);
} outItem.Price = (money + prePrice * preQty) / (qty + preQty); //修改上期价格和数量
prePrice = outItem.Price;
preQty = qty - outItem.Qty; } return outList;
}

ERP产品价格成本计算的几个方法(转)的更多相关文章

  1. 开放产品开发(OPD):产品负责人的工作原则和方法

    月26日我将在2014 WOT全球软件技术峰会做相关的一个主题演讲[产品负责人的工作原则和方法],个原则和相应的一些方法. 以下是本次分享内容: 完整版如下,如果你喜欢想下载的话,点击 http:// ...

  2. MTM量身定制系统 - 富友ERP产品 - 信息化推动服装行业管理软件升级

    MTM量身定制系统 - 富友ERP产品 - 信息化推动服装行业管理软件升级 国内第一款量体定制管理系统               结合富友软件10年服装行业经验和多家大型量身定制企业管理经验,推出的 ...

  3. Jetbrains系列产品2019.2.3最新激活方法

    Jetbrains系列产品2019.2.3最新激活方法[持续更新] 发表于 2018-08-25 | 分类于 软件调试 本站惯例:本文假定你知道Jetbrains家的产品.不知道可以问问搜索引擎. 大 ...

  4. 批量修改zencart产品价格、原价、特价、产品属性价格

    批量修改zencart商品价格无非只有下面几种情况: 一 在原来基础上批量调高一定比例 二 将原来的价格批量换成一个新的价格 针对第一种情况的话,网上很多人已经给出了解决办法: 利用SQL语句批量修改 ...

  5. (33)odoo中产品价格字段

    打开product.template 和 product.product 模型发现有很多关于价格描述的字段 product.template:        price        list_pri ...

  6. Odoo:全球第一免费开源ERP库龄表的简单实现方法(无需二开)

    问题背景 希望查看库龄超过30天的货物,该如何实现?此种简单数据查询需要二开吗? 解决方案 方法一:Stock Quant列表视图增加过滤器 <filter string="库龄超30 ...

  7. ERP产品销售发货--发货管理(四十一)

    发货详细信息的业务实体视图: CREATE VIEW [dbo].[View_BioSendAppInfo] AS SELECT SendId, BillNo, Subject, DepartMent ...

  8. ERP产品采购申请管理(三十八)

    BLL层代码: public class BioPurchaseBLL { /// <summary> /// 购进申请添加 /// </summary> /// <pa ...

  9. [JetBrains注册] 利用教育邮箱注册JetBrains产品(pycharm、idea等)的方法

    我们在使用JetBrains的一些产品时,大多使用网上的一些key去注册或者pojie的,但是由于提供这些key的服务器并不能保证稳定可用,所以可能一段时间我们使用的ide又需要重新pojie. 这里 ...

随机推荐

  1. 我的WCF学习与强化系列文章

    1.WCF服务创建与使用(请求应答模式) 2.WCF服务创建与使用(双工模式) 3.WCF序列化 4.WCF实现方法重载 5.WCF会话(Session)与实例(Instance)管理 后面会继续更新 ...

  2. Velocity魔法堂系列二:VTL语法详解

    一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...

  3. [ShortCut] Visual Studio快捷键

    msdn官方快捷键说明:https://msdn.microsoft.com/zh-cn/library/da5kh0wa.aspx 测试工具: visual studio 2013 操作步骤: 1. ...

  4. 点餐APP 冲刺三总结

    一转眼所有的冲刺都完成了,而今次的冲刺主要是完善数据库,而我们 也成功地实现了,虽然过程很艰辛,但是我们每一个人都学习到了很多新 知识,这是最好的收获.因为今学期没有软件工程的课程,所以大家都是 利用 ...

  5. 泛函编程(6)-数据结构-List基础

    List是一种最普通的泛函数据结构,比较直观,有良好的示范基础.List就像一个管子,里面可以装载一长条任何类型的东西.如需要对管子里的东西进行处理,则必须在管子内按直线顺序一个一个的来,这符合泛函编 ...

  6. 一、PBNI环境搭建及初步使用

    PowerBuilder Native Interface(PowerBuilder本机接口PBNI)允许将第3方程序转换为PowerBuilder对象,供PowerBuilder直接使用,也允许将P ...

  7. ahjesus js 快速求幂

    /* 快速幂计算,传统计算方式如果幂次是100就要循环100遍求值 快速幂计算只需要循环7次即可 求x的y次方 x^y可以做如下分解 把y转换为2进制,设第n位的值为i,计算第n位的权为x^(2^(n ...

  8. C++ Static(静态成员)的作用总结

    Static是C++中一个常见的关键字,它被用来控制变量的存储方式和可见性. 在类定义中,它的成员(包括数据成员和成员函数)可以用关键字static申明为静态成员.静态成员的特性是不管这个类创建了多少 ...

  9. js封装tab标签页

    <html> <head> <title></title> <meta charset="UTF-8"> <sty ...

  10. JavaScript一个经典问题

    看下面代码 <ul id="demo"> <li></li> <li></li> <li></li&g ...