From db432910aeb08e46f68bcf1183b3ead703e208b0 Mon Sep 17 00:00:00 2001 From: lazhen <17772815105@139.com> Date: 星期三, 03 七月 2024 15:05:43 +0800 Subject: [PATCH] 库存汇总字段调整 --- _Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl | 109 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 95 insertions(+), 14 deletions(-) diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl index 6ed8f07..183c900 100644 --- a/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl +++ b/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl @@ -1,7 +1,8 @@ Quintiq file version 2.0 #parent: #root StaticMethod Initialize ( - MacroPlan owner + MacroPlan owner, + InterfaceDataset interface ) { Description: '鍒濆鍖�' @@ -23,25 +24,105 @@ search := source.InventorySummarySearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() ); - table.GenerateColumn( owner ); - - //浠嶱roduct planning鏌ユ壘搴撳瓨鐐逛负闀挎槬瑁呴厤绾胯竟搴撶殑鎵�鏈塎QB浜у搧锛屽彇Total Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲� + table.GenerateColumn( owner, 'All', startofyear, startofnextyear ); + //info( '-----------------------------------', table.InventorySummaryColumn( relsize ) ); + //搴撳瓨鏁伴噺涓篈ctual inventories閲岄潰鐨勭偣Planned inventories瀛楁搴撳瓨閲忓姞鎬� traverse( owner, Product_MP.ProductInStockingPoint_MP, pisp, pisp.IsLeaf() and not pisp.IsSystem() and ( pisp.StockingPoint_MP().UnitID() = ccunit or pisp.StockingPoint_MP().UnitID() = dlunit ) ){ unit := pisp.StockingPoint_MP().UnitID(); product := pisp.Product_MP(); - traverse( pisp, ProductInStockingPointInPeriod, pispip, pispip.Start() >= startofplanning - and pispip.Start() < startofnextyear and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Month() ){ - periodtime := pispip.Start().StartOfMonth().Date(); - periodname := periodtime.Format( "M2/D2/Y" ); - column := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname and column.Period() = periodtime ); - ccrow := table.GetRow( ccunit, product.ID(), startofyear, startofnextyear ); - ccrow.Initialize( column, pispip );//鍙朤otal Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲� + // info( '-----------------------------------', unit, product.ID() ); + weekpispips := construct( ProductInStockingPointInPeriods ); + monthpispips := construct( ProductInStockingPointInPeriods ); + nextweek := startofplanning.StartOfNextWeek(); + nextmonth := startofplanning.StartOfNextMonth(); + + unitrow := table.GetRow( unit, product.ID() ); + allrow := table.GetRow( allunit, product.ID() ); + pispips := selectsortedset( pisp, ProductInStockingPointInPeriod, pispip, pispip.Start() >= startofplanning and pispip.Start() < startofnextyear and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day(), pispip.Start() ); + info( '-----------------------------------', isnull( allrow ), pispips.Size() ); + traverse( pispips, Elements, pispip ){ + info( '-----------------------------------', pispip.Start() ); + period := pispip.Period_MP(); + periodtime := period.Start().Date(); + periodname := periodtime.Format( "M2/D2/Y" ); + //澶╋紝閫夋嫨鏃ラ绮掑害鏃讹紝鏈熸湯搴撳瓨锛屾渶灏忓簱瀛橈紝鏈�澶у簱瀛樺拰骞冲潎搴撳瓨鐨勬暟鍊间繚鎸佷竴鑷� + daycolumn := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname, column.Period() = periodtime, column.TimeUnit() = Translations::MP_GlobalParameters_Day() ); + unitrow.SetCellValue( daycolumn, pispip.PlannedInventoryLevelEnd() ); + allrow.SetCellValue( daycolumn, pispip.PlannedInventoryLevelEnd() ); + + //鍛紝閫夋嫨鍛ㄦ椂锛屾湡鏈簱瀛樹负姣忎竴鍛ㄦ渶鍚庝竴澶╃殑姹囨�诲簱瀛樹俊鎭紝鏈�灏忓簱瀛樹负杩欎竴鍛ㄥ簱瀛橀噺鏈�灏忕殑涓�澶╃殑鏁板�硷紝鏈�澶у簱瀛樹负杩欎竴鍛ㄥ簱瀛橀噺鏈�澶х殑涓�澶╃殑鏁板�硷紝骞冲潎搴撳瓨涓鸿鍛ㄧ殑骞冲潎鍊� + if( period.Start() < nextweek ){ + weekpispips.Add( pispip ); - allrow := table.GetRow( allunit, product.ID(), startofyear, startofnextyear ); - allrow.Initialize( column, pispip ); + weekend := nextweek - Duration::Days( 1 ); + if( period.Start() = weekend ){ + weekcolumn := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname, column.Period() = periodtime, column.TimeUnit() = Translations::MP_GlobalParameters_Week() ); + + maxinventory := max( weekpispips, Elements, e, e.PlannedInventoryLevelEnd() ); + mininventory := min( weekpispips, Elements, e, e.PlannedInventoryLevelEnd() ); + aveinventory := average( weekpispips, Elements, e, e.PlannedInventoryLevelEnd() ); + unitrow.SetCellValue( weekcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory ); + allrow.SetCellValue( weekcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory ); + } + }else{ + weekpispips.Flush(); + weekpispips.Add( pispip ); + nextweek := nextweek.StartOfNextWeek(); } + + //鏈堬紝閫夋嫨鏈堟椂锛屾湡鏈簱瀛樹负姣忎竴鏈堟渶鍚庝竴澶╃殑姹囨�诲簱瀛樹俊鎭紝鏈�灏忓簱瀛樹负杩欎竴涓湀搴撳瓨閲忔渶灏忕殑涓�澶╃殑鏁板�硷紝鏈�澶у簱瀛樹负杩欎竴涓湀搴撳瓨閲忔渶澶х殑涓�澶╃殑鏁板�硷紝骞冲潎搴撳瓨涓鸿鏈堢殑骞冲潎鍊� + if( period.Start() < nextmonth ){ + monthpispips.Add( pispip ); + + monthend := nextmonth - Duration::Days( 1 ); + if( period.Start() = monthend ){ + monthcolumn := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname, column.Period() = periodtime, column.TimeUnit() = Translations::MP_GlobalParameters_Month() ); + + maxinventory := max( monthpispips, Elements, e, e.PlannedInventoryLevelEnd() ); + mininventory := min( monthpispips, Elements, e, e.PlannedInventoryLevelEnd() ); + aveinventory := average( monthpispips, Elements, e, e.PlannedInventoryLevelEnd() ); + unitrow.SetCellValue( monthcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory ); + allrow.SetCellValue( monthcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory ); + } + }else{ + monthpispips.Flush(); + monthpispips.Add( pispip ); + nextmonth := nextmonth.StartOfNextMonth(); + } + } } - + //棣栧厛鍦‥ntities閲岃瘑鍒埗绾nit涓洪暱鏄�/澶ц繛鐨勬墍鏈夊簱瀛樼偣 + //闀挎槬搴撳瓨鐐� + ccsps := construct( Strings ); + //澶ц繛搴撳瓨鐐� + dlsps := construct( Strings ); + allsps := construct( Strings ); + traverse( owner, Unit, unit, unit.ID() = ccunit or unit.ID() = dlunit ){ + if( unit.ID() = ccunit ){ + ccsps := selectuniquevalues( unit, StockingPoint_MP, sp, sp.ID() ); + } + if( unit.ID() = dlunit ){ + dlsps := selectuniquevalues( unit, StockingPoint_MP, sp, sp.ID() ); + } + allsps := allsps.Union( selectuniquevalues( unit, StockingPoint_MP, sp, sp.ID() ) ); + } + //鍐嶅湪搴撳瓨鏇存柊鐨勫瓙鐣岄潰搴撳瓨鐐归�夋嫨涓壘鍒拌繖浜涘簱瀛樼偣鎵�鍏宠仈鐨勫凡鍕鹃�夊簱浣� + selections := selectset( interface, InventoryPointSelection, selection, allsps.Find( selection.StockpoingPoint() ) >= 0 and selection.IsIncluded() ); + productids := selectuniquevalues( selections, Elements, selection, selection.ProductID() ); + //鏈�鍚庡皢杩欎簺搴撲綅涓浂浠跺彿鐨勬暟閲忚繘琛屽姞鎬� + traverse( table, InventorySummaryColumn, column, column.Period() < startofplanning.Date() ){ + traverse( productids, Elements, productid ){ + if( column.TimeUnit() = Translations::MP_GlobalParameters_Day() ){//澶� + column.GenerateCell( selections, ccsps, dlsps, table, column.Period(), column.Period(), productid, allunit, ccunit, dlunit ); + }else if( column.TimeUnit() = Translations::MP_GlobalParameters_Week() ){//鍛� + column.GenerateCell( selections, ccsps, dlsps, table, column.Period().StartOfWeek(), column.Period(), productid, allunit, ccunit, dlunit ); + }else if( column.TimeUnit() = Translations::MP_GlobalParameters_Month() ){//鏈� + column.GenerateCell( selections, ccsps, dlsps, table, column.Period().StartOfMonth(), column.Period(), productid, allunit, ccunit, dlunit ); + } + } + } + + rows := selectsortedset( table, InventroySummaryRow, row, row.Name() ); i := 0; traverse( rows, Elements, e ){ -- Gitblit v1.9.3