Inventory of the materials to teach you how to query a date certain combination of dimensions
Please correct me if any omission or error
From the Inventory Management-> journals-> Item Counting> Counting can enter the inventory:
Lines can create a new inventory record, click into the inventory:
Need to be aware that disk Points: changes in the respective fields, will be updated in real time.
Basically every field modified method of the corresponding field in the data source will triggerto update disk Points:
The inventory part by class: InventMov_Jour_Loss_SumUp, control, it is a subclass ofinventmov_journal InventMovement subclass inventmov_journal.
InventMov_Jour_Loss_SumUp use: InventQty dateOnHandPhysical (InventDim _inventDim) disc calculatorspoints,
Which in turn calls a static method of InventSumDatePhysicalDim:
server static InventQty onHandQty (
TransDate _transDate
ItemId _itemId
InventDim _inventDim
InventDimParm _inventDimParm
)
To calculate the static method to invoke class: InventSumDatePhysicalDim this class inherits fromInventSumDatePhysical, which is responsible for the combined dimension to query the amount of materials.
Declare a the class inventmov_journal statement:
InventJournalTrans inventJournalTrans;
When entering the inventory row will operate the inventJournalTrans
First of all:
When you create a new inventory record is triggered to calculate the plate number of points, then used inventDim inventDim InventMovement declared InventMovement:
InventDim inventdim (InventDim _inventDim = inventDim)
{
;
inventDim = _inventDim;
if (! inventDim)
inventDim = InventDim :: find (this.inventDimId ());
return inventDim;
}
To get inventDim! inventDim will call table: find inventDim:
static public InventDim find (InventDimId inventDimId, boolean _forupdate = false)
{
InventDim inventDim;
;
if (inventDimId)
{
if (_forupdate)
inventDim.selectForUpdate (_forupdate);
select firstonly inventDim
index hint DimIdIdx
where inventDim.InventDimId The == inventDimId;
}
return inventDim;
}
In this way, you will know:
InventQty dateOnHandPhysical (InventDim _inventDim)
The parameters from there, you get your new a new definition inventdim, you add two records record the actual modify this inventdim.
Then:
InventQty dateOnHandPhysical (InventDim _inventDim)
{
InventDimParm _inventDimParm;
;
/ / Lower sentence based on previous inventDim construct a _InventDimParm of
_inventDimParm.initFromInventDim (_inventDim);
_inventDimParm = InventDimParm :: orParms (_inventDimParm, InventJournalTable :: journalId2inventDimParm (inventJournalTrans.JournalId));
return InventSumDatePhysicalDim :: onHandQty (inventJournalTrans.TransDate, inventJournalTrans.ItemId, _inventDim, _inventDimParm);
}
This code: InventJournalTable :: journalId2inventDimParm:
static InventDimParm journalId2inventDimParm (InventJournalId inventJournalId)
{
InventDimParm inventDimParm;
;
InventDimFixedClass :: inventDimFixed2InventDimParm (InventJournalTable :: find (inventJournalId). InventDimFixed, inventDimParm);
return inventDimParm;
}
The based of the field InventDimFixed inventJournalTable to construct a inventDimParm.
This field is derived from this:
When you create a new record will pop up:
InventDimFixed is an integer of 0 to 255, on eight dimensions, respectively, corresponding to 8bits in a byte, if the dimension is selected, this bit is:
Color |
Size |
Config |
Serial |
Pallet |
Location |
Batch |
warehouse |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
InventJournalTable the call InventDimFixedClass class to initial this field, the core of the code is:
InventDimFixed inventDimFixed ()
{
InventDimFixed inventDimFixed;
;
# InventDimDevelop
if (inventDimParm.inventLocationIdFlag) inventDimFixed = InventDimFixedClass :: setField (inventDimFixed, # INVENTLOCATIONID_IDX);
if (inventDimParm.inventBatchIdFlag) inventDimFixed = InventDimFixedClass :: setField (inventDimFixed, # BATCH_IDX);
if (inventDimParm.WMSLocationIdFlag) inventDimFixed = InventDimFixedClass :: setField (inventDimFixed, # LOCATION_IDX);
if (inventDimParm.WMSPalletIdFlag) inventDimFixed = InventDimFixedClass :: setField (inventDimFixed, # PALLET_IDX);
if (inventDimParm.inventSerialIdFlag) inventDimFixed = InventDimFixedClass :: setField (inventDimFixed, # SERIALID_IDX);
if (inventDimParm.configIdFlag) inventDimFixed = InventDimFixedClass :: setField (inventDimFixed, # CONFIGID_IDX);
if (inventDimParm.inventSizeIdFlag) inventDimFixed = InventDimFixedClass :: setField (inventDimFixed, # INVENTSIZEID_IDX);
if (inventDimParm.inventColorIdFlag) inventDimFixed = InventDimFixedClass :: setField (inventDimFixed, # INVENTCOLORID_IDX);
return inventDimFixed;
}
View the class declaration you can see:
public class InventDimFixedClass
{
InventDimParm inventDimParm;
# DEFINE.INVENTLOCATIONID_IDX (0)
# DEFINE.BATCH_IDX ??(1)
# DEFINE.LOCATION_IDX (2)
# DEFINE.PALLET_IDX (3)
# DEFINE.SERIALID_IDX (4)
# DEFINE.CONFIGID_IDX (5)
# DEFINE.INVENTSIZEID_IDX (6)
# DEFINE.INVENTCOLORID_IDX (7)
/ / Indexes 0 .. 15 reserved for the SYS layer
/ / Indexes 16 .. 30 reserved for distributors, vars and customers
# INVENTDIMDEVELOP
}
SetField performed:
static InventDimFixed setField (InventDimFixed inventDimFixed, Integer idx)
{
;
inventDimFixed = InventDimFixed | (1 << idx);
return inventDimFixed;
}
That is, with the 1-bit or a result.
Continue to look at the code:
InventQty dateOnHandPhysical (InventDim _inventDim)
{
InventDimParm _inventDimParm;
;
/ / Lower sentence based on previous inventDim construct a _InventDimParm of
_inventDimParm.initFromInventDim (_inventDim);
_inventDimParm = InventDimParm :: orParms (_inventDimParm, InventJournalTable :: journalId2inventDimParm (inventJournalTrans.JournalId));
return InventSumDatePhysicalDim :: onHandQty (inventJournalTrans.TransDate, inventJournalTrans.ItemId, _inventDim, _inventDimParm);
}
Two inventDimParm by bit or get a inventDimParm of, and then use the Enter dates onHandQty starta dimension materials knot stock:
server static InventQty onHandQty (
TransDate _transDate
ItemId _itemId
InventDim _inventDim
InventDimParm _inventDimParm
)
{
InventSumDatePhysicalDim inventSumDatePhysicalDim = InventSumDatePhysicalDim :: newParameters (_transDate, _itemId, _inventDim, _inventDimParm);
;
the return inventSumDatePhysicalDim.postedQty () +
inventSumDatePhysicalDim.receivedQty () -
inventSumDatePhysicalDim.deductedQty () -
inventSumDatePhysicalDim.pickedQty () +
inventSumDatePhysicalDim.registeredQty ();
}
To construct a class InventSumDatePhysicalDim to calculate balances.
Final first InventSumDatePhysicalDim selectInventTransPicked selectInventTransPostingFinancial selectInventTransPostingPhysical selectInventTransRegistered
These four methods will be combined with the two macro statements to query the transaction records the various date is greater than the selected dates, stock from the InventSum table query to the current node, then the middle of the current date and query date the number of transactions according to the actual access to addition and subtraction, the The Query Date junction stock.
These two macros: # InventDimSelect,
# InventDimExistsJoin:
exists join tableId from% 2
where (% 2.InventDimId == 1) &&
(% 2.ConfigId ==% 3.ConfigId | |!% 4.ConfigIdFlag of) &&
(% 2.InventSizeId ==% 3.InventSizeId | |!% 4.InventSizeIdFlag of) &&
(% 2.InventColorId ==% 3.InventColorId | |!% 4.InventColorIdFlag of) &&
(% 2.InventLocationId ==% 3.InventLocationId | |!% 4.InventLocationIdFlag of) &&
(% 2.InventBatchId ==% 3.InventBatchId | |!% 4.InventBatchIdFlag of) &&
(% 2.WMSLocationId ==% 3.WMSLocationId | |!% 4.WMSLocationIdFlag of) &&
(% 2.WMSPalletId ==% 3.WMSPalletId | |!% 4.WMSPalletIdFlag of) &&
(% 2.InventSerialId ==% 3.InventSerialId | |!% 4.InventSerialIdFlag of)
# InventDimDevelop
This macro realized: If you choose a certain dimension, then it must be with you to your dimensions to match the dimension table in the database to find the corresponding data if you do not choose this dimension, this dimension all match.
Finally, we talk about how to use it:
An example:
If you want to query material B-Pack1 dimensions: Warehouse: GW, SIZE: 5, Color: red 4/22/2008junction stock
Can do:
InventDim inventDim;
InventDimParm _inventDimParm;
Date _date;
ItemId itemId;
;
inventDim.inventColorId = "red";
inventDim.inventSizeId = 5;
inventDim.inventLocationId = "gw";
_inventDimParm.initFromInventDim (_inventDim);
_date = 22/4/2008;
itemId = "b-pack1";
return InventSumDatePhysicalDim :: onHandQty (_date, iItemId, inventDim, _inventDimParm);
Inventory of the materials to teach you how to query a date certain combination of dimensions的更多相关文章
- 11.Query an Array of Embedded Documents-官方文档摘录
总结 1.插入数据 db.inventory.insertMany( [ { item: "journal", instock: [ { warehouse: "A&qu ...
- 9.Query on Embedded/Nested Documents-官方文档摘录
1.插入案例 db.inventory.insertMany( [ { item: "journal", qty: 25, size: { h: 14, w: 21, uom: & ...
- 8.Query Documents-官方文档摘录
总结 1 先插入数据 db.inventory.insertMany([ { item: "journal", qty: 25, size: { h: 14, w: 21, uom ...
- Mongo使用
在用mongo进行查询时,$exists表示是否document是否包括这个field,即使field的value为null也算是包括. $exists Syntax: { field: { $exi ...
- spring jdbcTemplate query 返回值为null
spring jdbcTemplate query 返回值为null 今天使用以下方法从数据库中查询数据,返回列表 public List<BookBean> getBooks(){ St ...
- VUE自定义(有限)库存日历插件
开发过程中遇到一个令人发指的,一个element-ui无法满足的日历需求, 改造其日历插件的代价太大,于是索性自己手写一个,需求如下: 1. 根据开始.结束时间计算时间覆盖的月份,渲染有限的可选择日期 ...
- Mongodb的基本使用及对接多数据源
mongodb介绍 MongoDB(来自于英文单词"Humongous",中文含义为"庞大")是可以应用于各种规模的企业.各个行业以及各类应用程序的开源数据库. ...
- 《Ansible权威指南》笔记(2)——Inventory配置
四.Inventory配置ansible通过Inventory来定义主机和组,使用时通过-i指定读取,默认/etc/ansible/hosts.可以存在多个Inventory,支持动态生成.1.定义主 ...
- [转]Teach Yourself Programming in Ten Years——用十年教会自己编程
作者:Peter Norvig 译者:刘海粟 本文原文为:http://norvig.com/21-days.html 该翻译文档的PDF版可以在这里获得:http://download.csdn.n ...
随机推荐
- AngularJS 初印象------对比 Asp.net MVC
之前就早耳闻前端MVC的一些框架,微软自家的Knockout.js,google家的AngularJs,还有Backone.但未曾了解,也不解为什么前端也要这么分.这两天看了AngularJs的官方教 ...
- Chrome浏览器在Windows8/8.1下显示模糊的解决办法
刚刚换了一台新电脑,安装完Windows 8.1,屏幕分辨率被自动设置为1920 X 1080,打开Chrome浏览器却发现内容显示非常模糊,不论如何改变Chrome的设置均没有效果,开启或关闭Chr ...
- python获取当前日期前后N天或N月的日期
# -*- coding: utf-8 -*- '''获取当前日期前后N天或N月的日期''' from time import strftime, localtime from datetime im ...
- struts2学习笔记之二:基本环境搭建
学习struts2有一段时间了,作为一个运维人员学习的时间还是挺紧张的,写这篇文件为了方便以后复习时使用 环境: MyEclipse 10 tomcat6 jdk1.6 首先建立一个web项目,并 ...
- [jQuery学习系列一]1-选择器与DOM对象
前言: 好久没有更新博客了, 最近想复习下 之前学过的JS的相关内容, 也算是自己的一种总结. 知识长时间不用就会忘记, 多学多记多用!! 下面的程序都可以在下面的网站进行在线调试: http://w ...
- 浅谈sql中的in与not in,exists与not exists的区别
转 浅谈sql中的in与not in,exists与not exists的区别 12月12日北京OSC源创会 —— 开源技术的年终盛典 » sql exists in 1.in和exists ...
- How to install ZeroMQ on Ubuntu14.04
Prepare: sudo apt-get install libtool autoconf automake uuid-dev sudo apt-get install python-dev sud ...
- iOS图片加载速度极限优化—FastImageCache解析
FastImageCache是Path团队开发的一个开源库,用于提升图片的加载和渲染速度,让基于图片的列表滑动 优化点 iOS从磁盘加载一张图片,使用UIImageVIew显示在屏幕上,需要经过以下步 ...
- Linux操作系统shell与函数详解
shell和函数的定义 1. linux shell 函数 将一组命令集或语句形成一个可用的块, 这些语句块称为函数. 2. shell 函数的组成 函数名:函数名字,注意一个脚本中函数名要唯一, ...
- 多看Kindle的“导出失败,请检查网络或账号”错误的解决
一直都用得好好的,今天突然不行了,报错“导出失败,请检查网络或账号”. 网上搜索,试了一下这个方法: 我目前的解决办法是:先同步至小米账户(需要联网,并在Kindle系统设置 -> 阅读 -&g ...