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. 这里 ...
随机推荐
- EF封装类 增加版,增加从缓存中查找数据方法,供参考!
EF封装类 增加版,增加从缓存中查找数据方法,供参考! 这个类是抽象类,我这里增加了需要子类验证的方法ValidateEntity,方便扩展,若想直接使用该类,可以将该类更改成静态类,里面所有的方法都 ...
- JS魔法堂:精确判断IE的文档模式by特征嗅探
一.前言 苦逼的前端攻城狮都深受浏览器兼容之苦,再完成每一项功能前都要左顾右盼,生怕浏览器不支持某个API,生怕原生API内含臭虫因此判断浏览器类型和版本号成了不可绕过的一道关卡,而特征嗅探是继浏览器 ...
- thread_Exchanger数据交换
Exchanger 是一个同步辅助类,用于两个并发线程之间在一个同步点进行数据交换. 允许两个线程在某一个点进行数据交换. 可以视作双向的同步队列: 可应用于基因算法.流水线设计等场景 Exchan ...
- C#设计模式——职责链模式(Chain Of Responsibility Pattern)
一.概述 在软件开发中,某一个对象的请求可能会被多个对象处理,但每次最多只有一个对象处理该请求,对这类问题如果显示指定请求的处理对象,那么势必会造成请求与处理的紧耦合,为了将请求与处理解耦,我们可以使 ...
- sql apply
可以给表值函数传column,而join不可以
- unity3d拓展编辑器MenuItem的使用
MenuItem是自定义菜单栏显示 比如:[MenuItem("new/My Window")] 这样就会显示菜单new/My Window 把这个放在一个静态方法上就可以了.记住 ...
- js 当前日期及时间
返回时间格式 : 2016-07-22 10:22:30 function getNowFormatDate() { var date = new Date(); var seperator1 = & ...
- PHP 操作mongodb api大部分方法
<?php /* PHP mongodb * 全部curd操作 * @author:xiaojiang * @date: 2014-10-27 */ //查看 mongo类版本 1.30 以后版 ...
- Incorrect string value: '\xF0\x90\x8D\x83...' for column 通用解决方案
mysql插入非ascii字符时报这个错的根本原因在于: 对应表的字符集无法存储要插入的字符,比如汉字插入latin1编码,某些特殊字符插入gbk或者utf8等. 检查一下实际插入的字符以及对应表或者 ...
- 移位操作<<和>>,是逻辑数字上的移动(和大端小端无关)
问题描述 这几天帮同事调试DSP TMS320F28335,这鬼东西蛋疼死了.char是16bit的,16位就是他的最小内存单元.但是PC机串口发过来的有8bit的数据,然后转换就出问题. 一开始不知 ...