庫(kù)存賬齡是在某時(shí)間節(jié)點(diǎn)撮抓,某種或某類存貨的庫(kù)存時(shí)間的加權(quán)平均值妇斤,跟庫(kù)存周轉(zhuǎn)率關(guān)系明顯。庫(kù)存周轉(zhuǎn)率越高,庫(kù)存賬齡越低站超,可是二者又不是反比關(guān)系荸恕。不能簡(jiǎn)單把庫(kù)存賬齡看成庫(kù)存周轉(zhuǎn)率的一個(gè)衍生指標(biāo)來對(duì)待 ,
主界面 (如圖2.4.1圖1)死相。
目的:一融求、庫(kù)存成本的控制。二算撮、存貨跌價(jià)準(zhǔn)備計(jì)提生宛。
功能:【所有導(dǎo)出】將當(dāng)前頁的所有倉(cāng)庫(kù)相應(yīng)的所有產(chǎn)品導(dǎo)出到EXCEL文檔“构瘢【選擇導(dǎo)出】將當(dāng)前頁選擇的的產(chǎn)品導(dǎo)出到Excel文檔陷舅。【查詢】多條件篩選查詢數(shù)據(jù)(如圖2.4.1 圖2)审洞±痴觯【定位】查詢某產(chǎn)品定位到某行,假設(shè)產(chǎn)品在多個(gè)倉(cāng)庫(kù)芒澜,能夠選擇下條定位(如圖2.4.2 圖3)仰剿。
主界面:
2.4.1(圖1)
篩選查詢框:
2.4.2(圖2)
定位查詢框:
從界面上能夠看到00我們這里用到的控件有
控件名稱說明
日期控件(DateTimePicker)控件能夠在工具箱直接拖動(dòng)至窗口。拖至窗口后右擊屬性能夠改動(dòng)控件的樣式和各種屬性撰糠,還能夠編輯事件酥馍。
下拉框(ComboBox)
文本(TextBox)
button(Button)
表格(DataGridView)
復(fù)選框(CheckBox)
功能實(shí)現(xiàn):
第一步:數(shù)據(jù)庫(kù)
1、表與關(guān)系
表1:??出入庫(kù)記錄明細(xì)表(InAndOutOfInventoryRecordList)
[td]
列名數(shù)據(jù)類型主鍵/外鍵說明
InAndOutOfInventoryRecordListIDint - Identity主鍵出入庫(kù)記錄明細(xì)ID
Quantitydecimal (18, 3)數(shù)量
TheUnitPricedecimal (18, 3)單位價(jià)格
InAndOutOfInventoryRecordIDint外鍵存貨ID
TheInventoryIDint外鍵出入庫(kù)存記錄ID
表2:??出入庫(kù)記錄表(InAndOutOfInventoryRecord)
[td]
列名數(shù)據(jù)類型主鍵/外鍵說明
InAndOutOfInventoryRecordIDint - Identity主鍵出入庫(kù)存記錄ID
WarehouseID_Dispatchint外鍵倉(cāng)庫(kù)ID_出庫(kù)
ForTheTypeIDint外鍵出入庫(kù)類型ID
WarehouseInventory_IDint外鍵倉(cāng)庫(kù)ID_入庫(kù)
OoperateDatedatetime操作日期
2阅酪、模糊查詢匹配
第一步:界面層(UIL)代碼,寫在查詢button點(diǎn)擊事件
截圖效果:
首先選擇好模糊匹配定位(比方輸入“雙”字旨袒,假設(shè)選擇左模糊。則查出“雙XX”的產(chǎn)品术辐,假設(shè)選擇右模糊砚尽,則查出“XX雙”,假設(shè)選擇包括能夠?yàn)樽蠡源省⒂夷:由稀癤X雙XX”,假設(shè)是精確查詢必孤,則為“雙”的產(chǎn)品)
代碼:
private voidbtnFixedPosition_Click(object sender, EventArgs e)? ?? ???{? ?? ?? ?? ?stringstrRowFilter = "";? ?//查詢條件? ?? ?? ?? ?stringstrProductName = txtProductName1.Text.Trim();??//定位到篩選后的一行? ?? ?? ?? ?if(strProductName == "") { return; }? ?? ?? ?? ?if(radLeft.Checked)? ? //左模糊? ?? ?? ?? ?{? ?? ?? ?? ?? ? strRowFilter = string.Format("產(chǎn)品名稱 like '%{0}'", strProductName.Trim());? ?? ?? ?? ?}? ?? ?? ?? ?else? ?? ?? ?? ?{? ?? ?? ?? ?? ? if(radRight.Checked)??//右模糊? ?? ?? ?? ?? ? {? ?? ?? ?? ?? ?? ???strRowFilter = string.Format("產(chǎn)品名稱 like '{0}%'", strProductName.Trim());? ?? ?? ?? ?? ? }? ?? ?? ?? ?? ? else? ?? ?? ?? ?? ? {? ?? ?? ?? ?? ?? ???if(radContain.Checked)??//包括模糊? ?? ?? ?? ?? ?? ???{? ?? ?? ?? ?? ?? ?? ?? ?strRowFilter = string.Format("產(chǎn)品名稱 like '%{0}%'", strProductName.Trim());? ?? ?? ?? ?? ?? ???}? ?? ?? ?? ?? ?? ???else? ?? ? //精確查詢? ?? ?? ?? ?? ?? ???{? ?? ?? ?? ?? ?? ?? ?? ?strRowFilter = string.Format("產(chǎn)品名稱 like '{0}'", strProductName.Trim());? ?? ?? ?? ?? ?? ???}? ?? ?? ?? ?? ? }? ?? ?? ?? ?}? ?? ?? ?? ?dvtest = newDataView(dtExisting) { RowFilter =strRowFilter };? ?? ?? ?? ?dttest = dvtest.ToTable();? ?? ?? ?? ?if(dttest.Rows.Count > 1)??//是否篩選后有一行以上? ?? ?? ?? ?{? ?? ?? ?? ?? ? btnNext.Enabled = true;??//下一個(gè)??button 啟用? ?? ?? ?? ?}? ?? ?? ?? ?else? ?? ?? ?? ?{? ?? ?? ?? ?? ? btnNext.Enabled =?false;??//下一個(gè)??button 不啟用? ?? ?? ?? ?}? ?? ?? ?? ?intTpage = 0;? ?? ?? ?? ?FixedPosition(intTpage);? ?? ???}?
3、庫(kù)齡明細(xì)查詢分析(依據(jù)產(chǎn)品ID與相應(yīng)的存庫(kù)進(jìn)行分析)
第一步:數(shù)據(jù)庫(kù)的存儲(chǔ)過程
if(@Type='btnCountAnalysis_Click_SELECTBeLaidUpQuantity')??--查詢?nèi)霂?kù)量計(jì)算庫(kù)齡賬齡? ?BEGIN? ?DECLARE @出入庫(kù)流水表 TABLE (產(chǎn)品名稱 char(30),出入庫(kù)時(shí)間 nchar(10), 出入庫(kù)數(shù)量 decimal,時(shí)間 DATETIME)? ?--創(chuàng)建暫時(shí)表? ?? ? INSERT@出入庫(kù)流水表? ?? ?SELECT LTRIM(RTRIM(TheProductTable.ProductName)) AS 產(chǎn)品名稱,? ?? ?CONVERT(nchar(10),InAndOutOfInventoryRecord.OoperateDate , 20) AS 出入庫(kù)時(shí)間,? ?? ? LTRIM(RTRIM(CAST(-InAndOutOfInventoryRecordList.Quantity AS DECIMAL))) AS 出入庫(kù)數(shù)量,? ?? ?InAndOutOfInventoryRecord.OoperateDate AS 時(shí)間? ?? ?FROM??InAndOutOfInventoryRecordListINNER JOIN? ?? ?InAndOutOfInventoryRecord ON InAndOutOfInventoryRecordList.InAndOutOfInventoryRecordID= InAndOutOfInventoryRecord.InAndOutOfInventoryRecordIDINNER JOIN? ?? ?TheInventoryTable ON InAndOutOfInventoryRecordList.TheInventoryID = TheInventoryTable.TheInventoryID INNER JOIN? ?? ?TheProductTable ON TheInventoryTable.ProductID = TheProductTable.ProductID? ?? ?WHERE InAndOutOfInventoryRecord.WarehouseID_Dispatch!= 0 AND? ?? ?InAndOutOfInventoryRecordList.TheInventoryID IN? ?? ?(SELECT TheInventoryTable.TheInventoryID AS 存貨ID? ?? ?FROM??TheInventoryTableINNER JOIN? ?? ?TheProductTable ON TheInventoryTable.ProductID = TheProductTable.ProductID? ?? ?WHERE TheProductTable.ProductID = 3 AND TheInventoryTable.WarehouseID = 1)??--產(chǎn)品ID瑞躺、倉(cāng)庫(kù)ID? ?? ?UNION ALL? ?? ?SELECT LTRIM(RTRIM(TheProductTable.ProductName)) AS 產(chǎn)品名稱,? ?? ?CONVERT(nchar(10),InAndOutOfInventoryRecord.OoperateDate , 20) AS 出入庫(kù)時(shí)間,? ?? ? LTRIM(RTRIM(CAST(InAndOutOfInventoryRecordList.Quantity AS DECIMAL))) AS 出入庫(kù)數(shù)量,? ?? ?InAndOutOfInventoryRecord.OoperateDate AS 時(shí)間? ?? ?FROM??InAndOutOfInventoryRecordListINNER JOIN? ?? ?InAndOutOfInventoryRecord ON InAndOutOfInventoryRecordList.InAndOutOfInventoryRecordID= InAndOutOfInventoryRecord.InAndOutOfInventoryRecordIDINNER JOIN? ?? ?TheInventoryTable ON InAndOutOfInventoryRecordList.TheInventoryID = TheInventoryTable.TheInventoryID INNER JOIN? ?? ?TheProductTable ON TheInventoryTable.ProductID = TheProductTable.ProductID? ?? ?WHERE InAndOutOfInventoryRecord.WarehouseInventory_ID!= 0 AND? ?? ?InAndOutOfInventoryRecordList.TheInventoryID IN? ?? ?(SELECT TheInventoryTable.TheInventoryID AS 存貨ID? ?? ?FROM??TheInventoryTableINNER JOIN? ?? ?TheProductTable ON TheInventoryTable.ProductID = TheProductTable.ProductID? ?? ?WHERE TheProductTable.ProductID = @ProductID AND TheInventoryTable.WarehouseID = @WarehouseID)??--產(chǎn)品ID敷搪、倉(cāng)庫(kù)ID? ?? ?ORDER BYInAndOutOfInventoryRecord.OoperateDate;? ?? ?? ?? ? SELECT 產(chǎn)品名稱,庫(kù)齡,CASE WHEN 出入庫(kù)數(shù)量 > 數(shù)量 THEN 數(shù)量 ELSE 出入庫(kù)數(shù)量 END AS數(shù)量? ?? ?FROM (? ?? ?? ?? ?SELECT 產(chǎn)品名稱,? ?? ?? ?? ?DATEDIFF(DAY,出入庫(kù)時(shí)間,GETDATE()) AS 庫(kù)齡,? ?--與今天相比,計(jì)算出相差的天數(shù)? ?? ?? ?? ?出入庫(kù)數(shù)量,? ?? ?? ?? ?(? ?? ?? ?? ?? ? SELECT ISnull(SUM(CAST(出入庫(kù)數(shù)量 AS DECIMAL)),0)? ?? ?? ?? ?? ? FROM @出入庫(kù)流水表? ?? ?? ?? ?? ? WHERE 產(chǎn)品名稱 =(SELECT ProductName FROM TheProductTable WHERE TheProductTable.ProductID = @ProductID)? ?? ?? ?? ?? ? AND 出入庫(kù)時(shí)間 <= GETDATE() AND? ?? ?? ?? ?? ? (出入庫(kù)時(shí)間 <= 出入庫(kù)流水表.出入庫(kù)時(shí)間 OR(出入庫(kù)時(shí)間 > 出入庫(kù)流水表.出入庫(kù)時(shí)間 AND 出入庫(kù)數(shù)量 < 0))? ?? ?? ?? ?)AS數(shù)量? ?? ?? ?? ?FROM??@出入庫(kù)流水表 AS 出入庫(kù)流水表? ?? ?? ?? ?WHERE 產(chǎn)品名稱 =(SELECT ProductName FROM TheProductTable WHERE TheProductTable.ProductID = @ProductID) and 出入庫(kù)時(shí)間 <= GETDATE() and 出入庫(kù)數(shù)量 > 0? ?? ?? ?) as計(jì)算表? ?? ?WHERE 數(shù)量 > 0? ?? ?SELECT *FROM @出入庫(kù)流水表? ?END
第二步:邏輯層(BLL)代碼
? ?? ???///<summary>? ?? ???///查詢?nèi)霂?kù)量計(jì)算庫(kù)齡賬齡? ?? ???///</summary>? ?? ???///<param name="intProductID">產(chǎn)品ID</param>? ?? ???///<param name="intWarehouseID">倉(cāng)庫(kù)ID</param>? ?? ???///<returns></returns>? ?? ???[OperationContract]? ?? ???public DataSetbtnCountAnalysis_Click_SELECTBeLaidUpQuantity(intintProductID, int intWarehouseID)? ?? ???{? ?? ?? ?? ?SqlParameter[] SQlCMDpas = {? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?newSqlParameter("@Type",SqlDbType.Char),? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?new SqlParameter("@ProductID", SqlDbType.Int),//產(chǎn)品ID? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?new SqlParameter("@WarehouseID", SqlDbType.Int),//倉(cāng)庫(kù)ID? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? };? ?? ?? ???SQlCMDpas[0].Value = "btnCountAnalysis_Click_SELECTBeLaidUpQuantity";? ?? ?? ???SQlCMDpas[1].Value = intProductID;? ?? ?? ???SQlCMDpas[2].Value = intWarehouseID;? ?? ?? ?? ?return myDALMethod.QueryDataSet("InventoryManage_frm_StockLookIntoTheDistance",SQlCMDpas);? ?? ???}
第三步:界面層(UIL)代碼幢哨。在具體庫(kù)齡窗口的Load事件中綁定的數(shù)據(jù)
截圖效果(在主界面點(diǎn)擊相應(yīng)的產(chǎn)品相應(yīng)的倉(cāng)庫(kù)的具體庫(kù)齡):
截圖效果(具體庫(kù)齡的主界面):
左邊為產(chǎn)品相應(yīng)的庫(kù)齡與及相應(yīng)庫(kù)齡的數(shù)量赡勘。右邊為相應(yīng)產(chǎn)品的出入庫(kù)情況(時(shí)間、數(shù)量)
截圖效果(點(diǎn)擊同樣庫(kù)齡合并數(shù)量):
將同樣庫(kù)齡的數(shù)量加起來(為什么出現(xiàn)同樣庫(kù)齡捞镰?由于在某天對(duì)該產(chǎn)品的進(jìn)出次數(shù)多U⒂搿)
代碼:
(一)Load事件:
DataSet dsAgeAnalysis =myfrm_StockLookIntoTheDistance.btnCountAnalysis_Click_SELECTBeLaidUpQuantity(intProductID,intWarehouseID);? ?? ?? ???dgvInventoryAgeAnalysis.DataSource = dsAgeAnalysis.Tables[0];??//查詢庫(kù)齡? ?? ?? ???dgvDiscrepancyAgeAnalysis.DataSource = dsAgeAnalysis.Tables[1];??//具體出入明細(xì)? ?? ?? ???ChangeColour();??//出庫(kù)標(biāo)識(shí) 入庫(kù) 標(biāo)識(shí) 顏色
(二) 合計(jì)數(shù)量
#region 合計(jì)? ?? ???///? ?? ???///合計(jì)? ?? ???///? ?? ???///? ?? ???///? ?? ???private voidbtnTotal_Click(object sender, EventArgs e)? ?? ???{? ?? ?? ???listAgeAnalysis.Clear();??//又一次點(diǎn)擊時(shí)毙替。清空庫(kù)齡集合? ?? ?? ?? ?DataTable dtSumAgeAnalysis = new DataTable();? ?//保存合計(jì)的庫(kù)齡? ?? ?? ???dtSumAgeAnalysis = ((DataTable)(dgvInventoryAgeAnalysis.DataSource)).Clone();? ?? ?? ?? ?for (int intRows = 0;intRows < dgvInventoryAgeAnalysis.Rows.Count; intRows++)? ?? ?? ?? ?{? ?? ?? ?? ?? ?if (!listAgeAnalysis.Exists(i => i ==Convert.ToInt32(dgvInventoryAgeAnalysis.Rows[intRows].Cells["庫(kù)齡"].Value)))? ?? ?? ?? ?? ?{? ?? ?? ?? ?? ?? ? listAgeAnalysis.Add(Convert.ToInt32(dgvInventoryAgeAnalysis.Rows[intRows].Cells["庫(kù)齡"].Value));? ?? ?? ?? ?? ?? ? dtSumAgeAnalysis.Rows.Add();? ?? ?? ?? ?? ?? ? dtSumAgeAnalysis.Rows[dtSumAgeAnalysis.Rows.Count - 1]["產(chǎn)品名稱"] =dgvInventoryAgeAnalysis.Rows[intRows].Cells["產(chǎn)品名稱"].Value;? ?? ?? ?? ?? ?? ? dtSumAgeAnalysis.Rows[dtSumAgeAnalysis.Rows.Count - 1]["庫(kù)齡"] =dgvInventoryAgeAnalysis.Rows[intRows].Cells["庫(kù)齡"].Value;? ?? ?? ?? ?? ?? ? dtSumAgeAnalysis.Rows[dtSumAgeAnalysis.Rows.Count - 1]["數(shù)量"] = 0;? ?? ?? ?? ?? ?}? ?? ?? ?? ?? ?if (listAgeAnalysis.Exists(i => i == Convert.ToInt32(dgvInventoryAgeAnalysis.Rows[intRows].Cells["庫(kù)齡"].Value)))? ?? ?? ?? ?? ?{? ?? ?? ?? ?? ?? ? dtSumAgeAnalysis.Rows[dtSumAgeAnalysis.Rows.Count - 1]["數(shù)量"] = Convert.ToInt32(dtSumAgeAnalysis.Rows[dtSumAgeAnalysis.Rows.Count- 1]["數(shù)量"])? ?? ?? ?? ?? ?? ?? ?? ?+ Convert.ToInt32(dgvInventoryAgeAnalysis.Rows[intRows].Cells["數(shù)量"].Value);? ?? ?? ?? ?? ?}? ?? ?? ?? ?}? ?? ?? ???dgvInventoryAgeAnalysis.DataSource = dtSumAgeAnalysis;? ?? ???}? ?? ? #endregion?
(三)出庫(kù)標(biāo)識(shí) 入庫(kù) 標(biāo)識(shí) 顏色
///<summary>? ?? ???///出庫(kù)標(biāo)識(shí) 入庫(kù) 標(biāo)識(shí) 顏色? ?? ???///</summary>? ?? ???void ChangeColour()? ?? ???{? ?? ?? ?? ?for (int intRows = 0;intRows < dgvDiscrepancyAgeAnalysis.Rows.Count; intRows++)? ?? ?? ?? ?{? ?? ?? ?? ?? ?if (Convert.ToInt32(dgvDiscrepancyAgeAnalysis.Rows[intRows].Cells["出入庫(kù)數(shù)量"].Value) > 0)? ?? ?? ?? ?? ?{? ?? ?? ?? ?? ?? ???dgvDiscrepancyAgeAnalysis.Rows[intRows].DefaultCellStyle.BackColor= Color.Gold;??//為入庫(kù)? ?? ?? ?? ?? ?}? ?? ?? ?? ?? ?else? ?? ?? ?? ?? ?{? ?? ?? ?? ?? ?? ? dgvDiscrepancyAgeAnalysis.Rows[intRows].DefaultCellStyle.BackColor = Color.OldLace; //為出庫(kù)? ?? ?? ?? ?? ?}? ?? ?? ?? ?}? ?? ???}用友T6全功能100站點(diǎn)應(yīng)用實(shí)例百度網(wǎng)盤下載:?用友T6全功能100站點(diǎn)應(yīng)用實(shí)例.rar?(456.98 KB, 下載次數(shù): 54)?