ERP产品价格成本计算的几个方法(转)
/// <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产品价格成本计算的几个方法(转)的更多相关文章
- 开放产品开发(OPD):产品负责人的工作原则和方法
月26日我将在2014 WOT全球软件技术峰会做相关的一个主题演讲[产品负责人的工作原则和方法],个原则和相应的一些方法. 以下是本次分享内容: 完整版如下,如果你喜欢想下载的话,点击 http:// ...
- MTM量身定制系统 - 富友ERP产品 - 信息化推动服装行业管理软件升级
MTM量身定制系统 - 富友ERP产品 - 信息化推动服装行业管理软件升级 国内第一款量体定制管理系统 结合富友软件10年服装行业经验和多家大型量身定制企业管理经验,推出的 ...
- Jetbrains系列产品2019.2.3最新激活方法
Jetbrains系列产品2019.2.3最新激活方法[持续更新] 发表于 2018-08-25 | 分类于 软件调试 本站惯例:本文假定你知道Jetbrains家的产品.不知道可以问问搜索引擎. 大 ...
- 批量修改zencart产品价格、原价、特价、产品属性价格
批量修改zencart商品价格无非只有下面几种情况: 一 在原来基础上批量调高一定比例 二 将原来的价格批量换成一个新的价格 针对第一种情况的话,网上很多人已经给出了解决办法: 利用SQL语句批量修改 ...
- (33)odoo中产品价格字段
打开product.template 和 product.product 模型发现有很多关于价格描述的字段 product.template: price list_pri ...
- Odoo:全球第一免费开源ERP库龄表的简单实现方法(无需二开)
问题背景 希望查看库龄超过30天的货物,该如何实现?此种简单数据查询需要二开吗? 解决方案 方法一:Stock Quant列表视图增加过滤器 <filter string="库龄超30 ...
- ERP产品销售发货--发货管理(四十一)
发货详细信息的业务实体视图: CREATE VIEW [dbo].[View_BioSendAppInfo] AS SELECT SendId, BillNo, Subject, DepartMent ...
- ERP产品采购申请管理(三十八)
BLL层代码: public class BioPurchaseBLL { /// <summary> /// 购进申请添加 /// </summary> /// <pa ...
- [JetBrains注册] 利用教育邮箱注册JetBrains产品(pycharm、idea等)的方法
我们在使用JetBrains的一些产品时,大多使用网上的一些key去注册或者pojie的,但是由于提供这些key的服务器并不能保证稳定可用,所以可能一段时间我们使用的ide又需要重新pojie. 这里 ...
随机推荐
- css命名那些事儿
根据目前彩票行业的公司进行css命名的层级解析,此次选择了网易彩票,QQ彩票,澳客彩票网,中国竞彩网,500.com,彩票365,新浪彩票,新浪爱彩,凤凰彩票,淘宝彩票的首页进行css命名的采集和分析 ...
- 二元查找树转变成排序的双向链表之C#算法实现
此题为July在CSDN发布的微软编程面试100题中的第一题,觉得蛮有趣的,今天也拿过来玩玩,July的代码用的是C++实现,可能因为有指针的原因吧,感觉看起来相对比较容易理解整个的实现过程,而我,试 ...
- ADO.NET学习系列(四)---窗体版的登录小程序
1.需求分析:做一个登录的小程序,基于Winform的窗体小程序.基本要求:登录成功:弹框显示登录成功,登录失败就弹框显示失败. 扩展功能:登录次数超过3次,就”锁定“用户,提示登录错误次数过多,不能 ...
- Winform开发框架之客户关系管理系统(CRM)的开发总结系列4-Tab控件页面的动态加载
在前面介绍的几篇关于CRM系统的开发随笔中,里面都整合了多个页面的功能,包括多文档界面,以及客户相关信息的页面展示,这个模块就是利用DevExpress控件的XtraTabPage控件的动态加载实现的 ...
- sencha/extjs 动态创建grid表格
//创建普通表格 id,父容器,标题,json数据字符串,列名(逗号分隔),json数据key即store的fields属性(逗号分隔) function createCommonTable(id, ...
- vs 2013各个版本密钥
Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9 Visual Studio Premium 2013 KEY(密钥) ...
- C# Web Forms - Using jQuery FullCalendar
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> ...
- PHP OAuth2 Server库
想找比较正宗的库,查了蛮久的.最后在 oauth官方站上,看到PHP版本的相关链接. 发现都是php 5.3版本以上的环境,基于命名空间的写法编写的. 访问下面这个页面,难得,发现文档给出了5.2版本 ...
- .NET向APNS苹果消息推送通知
一.Apns简介: Apns是苹果推送通知服务. 二.原理: APNs会对用户进行物理连接认证,和设备令牌认证(简言之就是苹果的服务器检查设备里的证书以确定其为苹果设备):然后,将服务器的信息接收并且 ...
- oracle user account locked
1.Question describe when you use account scott/tiger connect to oracle, you will see "the user ...