From 23eddf3d7adcdd2994c97c611dd2dd83895e38f3 Mon Sep 17 00:00:00 2001 From: lazhen <17772815105@139.com> Date: 星期五, 02 八月 2024 20:59:38 +0800 Subject: [PATCH] 财务产量报表修改 --- _Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLUnit.qbl | 2 _Main/BL/Type_FinancialProductionRow/Method_Initialize.qbl | 4 _Main/BL/Type_FinancialProductionReport/Method_GetCurrentPeriod.qbl | 53 +++++++++++++++++ _Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCUnit.qbl | 2 _Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl | 90 +++++++++++++----------------- _Main/BL/Type_FinancialProductionReport/Method_GetRowByUnit.qbl | 22 +++++++ _Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLUnit.qbl | 2 _Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCUnit.qbl | 2 8 files changed, 120 insertions(+), 57 deletions(-) diff --git a/_Main/BL/Type_FinancialProductionReport/Method_GetCurrentPeriod.qbl b/_Main/BL/Type_FinancialProductionReport/Method_GetCurrentPeriod.qbl new file mode 100644 index 0000000..6e9b192 --- /dev/null +++ b/_Main/BL/Type_FinancialProductionReport/Method_GetCurrentPeriod.qbl @@ -0,0 +1,53 @@ +Quintiq file version 2.0 +#parent: #root +Method GetCurrentPeriod ( + Date startofplanning, + Period_MPs periods +) as owning Period_MPs +{ + Description: '鑾峰彇褰撳墠鏈堢殑璁″垝鍛ㄦ湡---------------搴熷純' + TextBody: + [* + // 鐢勫叞楦� Aug-2-2024 (created) + //寮�濮嬫棩鏈熷埌涓嬩釜鏈堢殑闂撮殧澶╂暟 + currentperiods := construct( Period_MPs ); + startofnextmonth := startofplanning.StartOfNextMonth(); + //鐗规畩鎯呭喌锛屽綋寮�濮嬫棩鏈熸濂芥槸杩欎釜鏈堢涓�澶╋紝 鍒欑洿鎺ヤ娇鐢═imeUnit涓烘湀鐨勬暟鎹� + if( startofplanning.StartOfMonth() = startofplanning ){ + period := selectobject( periods, Elements, period, period.TimeUnit() = Translations::MP_GlobalParameters_Month() and period.StartDate() = startofplanning ); + currentperiods.Add( period ); + } else if( startofplanning.StartOfWeek() = startofplanning ){ + //鐗规畩鎯呭喌锛屽綋寮�濮嬫棩鏈熸濂芥槸杩欎釜鍛ㄧ涓�澶╋紝 鍒欑洿鎺ヤ娇鐢═imeUnit涓哄懆鐨勬暟鎹紝 璺ㄥ懆鏃朵娇鐢╠ay + traverse( periods, Elements, period, ( period.TimeUnit() = Translations::MP_GlobalParameters_Week() and period.StartDate() < startofnextmonth ) + or ( period.TimeUnit() = Translations::MP_GlobalParameters_Day() and period.EndDate() = startofnextmonth ) ){ + currentperiods.Add( period ); + } + } else { + duration := startofplanning.StartOfNextMonth() - startofplanning; + //濡傛灉璁″垝寮�濮嬫棩鏈熷埌涓嬩釜鏈堝皬浜�7澶╋紝鍒欏彲浠ョ洿鎺ヤ娇鐢≒eriod鐨凾imeUnit涓哄ぉ鐨勬暟鎹� + if( duration <= 7 ){ + i := 1; + traverse( periods, Elements, period, period.TimeUnit() = Translations::MP_GlobalParameters_Day() and i < duration ){ + currentperiods.Add( period ); + i ++; + } + }else{ + //鍙嶄箣闇�瑕佸湪鍔犱笂Period鐨凾imeUnit涓哄懆鐨勬暟鎹� + day := startofplanning; + while( day < startofnextmonth ){ + if( day = day.StartOfWeek() ){ + period := selectobject( periods, Elements, cperiod, cperiod.TimeUnit() = Translations::MP_GlobalParameters_Week() and cperiod.StartDate() = day ); + day := period.EndDate(); + currentperiods.Add( period ); + } else { + period := selectobject( periods, Elements, cperiod, cperiod.TimeUnit() = Translations::MP_GlobalParameters_Day() and cperiod.StartDate() = day ); + day := period.EndDate(); + currentperiods.Add( period ); + } + } + } + } + + return ¤tperiods; + *] +} diff --git a/_Main/BL/Type_FinancialProductionReport/Method_GetRowByUnit.qbl b/_Main/BL/Type_FinancialProductionReport/Method_GetRowByUnit.qbl new file mode 100644 index 0000000..8de3af4 --- /dev/null +++ b/_Main/BL/Type_FinancialProductionReport/Method_GetRowByUnit.qbl @@ -0,0 +1,22 @@ +Quintiq file version 2.0 +#parent: #root +Method GetRowByUnit ( + String product, + String unit +) as FinancialProductionRow +{ + Description: '鏍规嵁宸ュ巶鑾峰彇琛�' + TextBody: + [* + // 鐢勫叞楦� Aug-2-2024 (created) + row := selectobject( this, FinancialProductionRow, row, row.Name() = product and row.Unit() = unit ); + if( isnull( row ) ){ + //鍒濆鍖栧崟鍏冩牸 + row := this.FinancialProductionRow( relnew, Name := product, Unit := unit ); + traverse( this, FinancialProductionColumn, column ){ + row.Initialize( column, unit ); + } + } + return row; + *] +} diff --git a/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCUnit.qbl b/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCUnit.qbl index 77d1f16..4a17ee3 100644 --- a/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCUnit.qbl +++ b/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCUnit.qbl @@ -5,7 +5,7 @@ TextBody: [* // 鐢勫叞楦� Jun-25-2024 (created) - return '闀挎槬'; + return '闀挎槬宸ュ巶'; //return 'Assembly Plant (France)'; *] } diff --git a/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLUnit.qbl b/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLUnit.qbl index 4759121..ba77240 100644 --- a/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLUnit.qbl +++ b/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLUnit.qbl @@ -5,7 +5,7 @@ TextBody: [* // 鐢勫叞楦� Jun-25-2024 (created) - return '澶ц繛'; + return '澶ц繛宸ュ巶'; //return 'Assembly Plant (Spain)'; *] } diff --git a/_Main/BL/Type_FinancialProductionRow/Method_Initialize.qbl b/_Main/BL/Type_FinancialProductionRow/Method_Initialize.qbl index 2bdcc0c..da223ae 100644 --- a/_Main/BL/Type_FinancialProductionRow/Method_Initialize.qbl +++ b/_Main/BL/Type_FinancialProductionRow/Method_Initialize.qbl @@ -2,7 +2,7 @@ #parent: #root Method Initialize ( FinancialProductionColumn column, - Real quantity + Number quantity ) { TextBody: @@ -10,7 +10,7 @@ // 鐢勫叞楦� Jun-24-2024 (created) cell := selectobject( this, FinancialProductionCell, cell, cell.FinancialProductionColumn() = column ); - value := [Real]cell.Value() + quantity; + value := [Number]cell.Value() + quantity; cell.Value( [String]value ); *] } diff --git a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl index e9e00a2..63d3a59 100644 --- a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl +++ b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl @@ -14,66 +14,54 @@ source := owner.FinancialProductionSource( relnew, IsImport := false, Name := FinancialProductionReport::GetDefaultName() ); table := source.FinancialProductionReport( relnew, ID := source.Name(), Name := source.Name(), IsImport := false ); showtable := source.FinancialProductionReport( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsImport := false, IsShow := true ); - startofplanning := owner.StartOfPlanning(); - startofnextmonth := owner.StartOfPlanning().StartOfNextMonth(); - startofyear := startofplanning.StartOfYear(); + startofplanning := owner.StartOfPlanning().Date(); + //startofnextmonth := startofplanning.StartOfNextMonth(); startofnextyear := startofplanning.StartOfNextYear(); search := source.FinancialProductionSearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit ); products := construct( Product_MPs ); - + //闇�瑕佺殑鏃ユ湡鍖洪棿锛� 鍛ㄥ拰澶╃殑鍙渶瑕佸綋鍓嶆湀 + //periods := selectset( owner, Period_MP, period, not period.IsHistorical() + // and period.StartDate() < startofnextmonth + // and period.TimeUnit() <> Translations::MP_GlobalParameters_Quarter() + // ); + //鑾峰彇褰撳墠鏈堥渶瑕佺殑Period + //currentperiods := table.GetCurrentPeriod( startofplanning, periods ); table.GenerateColumn( owner ); - - traverse( owner, Product_MP.ProductInStockingPoint_MP, pisp, pisp.Product_MP().IsLeaf() and not isnull( pisp.StockingPoint_MP() ) and ( pisp.StockingPoint_MP().UnitID() = ccunit or pisp.StockingPoint_MP().UnitID() = dlunit ) ){ - unit := pisp.StockingPoint_MP().UnitID(); - info( unit, pisp.ProductID() ); - ccrow := null( FinancialProductionRow ); - dlrow := null( FinancialProductionRow ); - allrow := selectobject( table, FinancialProductionRow, row, row.Name() = pisp.ProductID() and row.Unit() = allunit ); - if( unit = ccunit ){ - ccrow := table.FinancialProductionRow( relnew, Name := pisp.ProductID(), Unit := unit ); - }else{ - dlrow := table.FinancialProductionRow( relnew, Name := pisp.ProductID(), Unit := unit ); - } - if( isnull( allrow ) ){ - products.Add( pisp.Product_MP() ); - allrow := table.FinancialProductionRow( relnew, Name := pisp.ProductID(), Unit := allunit ); - } - - for( start := startofyear; start < startofnextyear; start := start.StartOfNextMonth() ){ - periodtime := start.Date(); - periodname := periodtime.Format( "M2/D2/Y" ); - column := selectobject( table, FinancialProductionColumn, column, column.Name() = periodname and column.Period() = periodtime ); - - if( not isnull( ccrow ) ){ - ccrow.Initialize( column, ccunit ); + //鍙栧綋鍓嶇増鏈殑product planning閲宯ew supply瀛楁锛屽垎澶ц繛鍜岄暱鏄ュ伐鍘傜殑浜х嚎锛岃繘琛屽姞鎬� + traverse( owner, StockingPoint_MP, stockingpoint ){ + unit := stockingpoint.Unit(); + parentunits := unit.GetAllParent(); + //鏄惁灞炰簬闀挎槬宸ュ巶 + iscc := unit.ID() = ccunit or exists( parentunits, Elements, punit, punit.ID() = ccunit ); + //鏄惁灞炰簬澶ц繛宸ュ巶 + isdl := unit.ID() = dlunit or exists( parentunits, Elements, punit, punit.ID() = dlunit ); + if( iscc or isdl ){ + traverse( stockingpoint, ProductInStockingPoint_MP, pisp, pisp.Product_MP().IsLeaf() ){ + //鑾峰彇宸ュ巶琛� + factoryrow := table.GetRowByUnit( pisp.ProductID(), ifexpr( iscc, ccunit, dlunit ) ); + //鑾峰彇鍚堣琛� + allrow := table.GetRowByUnit( pisp.ProductID(), allunit ); + products.Add( pisp.Product_MP() ); + //褰損roduct planning鐨勬棩鏈熷尯闂村湪闇�瑕佺殑鏃ユ湡鍖洪棿鍐� + traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear + // and ( ( pispip.Period_MP().StartDate().StartOfMonth() = startofplanning.StartOfMonth() and currentperiods.Find( pispip.Period_MP() ) >= 0 ) + // or ( pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Month() and pispip.Period_MP().StartDate() < startofnextyear ) ) + ){ + periodtime := pispip.Start().StartOfMonth().Date(); + periodname := periodtime.Format( "M2/D2/Y" ); + quantity := ceil( pispip.NewSupplyQuantity() );//鍚戜笂鍙栨暣 + + column := selectobject( table, FinancialProductionColumn, column, column.Name() = periodname and column.Period() = periodtime ); + + factoryrow.Initialize( column, quantity ); + allrow.Initialize( column, quantity ); + } } - if( not isnull( dlrow ) ){ - dlrow.Initialize( column, dlunit ); - } - if( not exists( allrow, FinancialProductionCell, allcell, allcell.FinancialProductionColumn() = column ) ){ - allrow.Initialize( column, allunit ); - } - } - - traverse( pisp, ProductInStockingPointInPeriod, pispip, pispip.Start() >= startofplanning - and ( ( pispip.Start() < startofnextmonth and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day() ) - or ( 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, FinancialProductionColumn, column, column.Name() = periodname and column.Period() = periodtime ); - - if( not isnull( ccrow ) ){ - ccrow.Initialize( column, pispip.NewSupplyProductionQuantity() ); - } - if( not isnull( dlrow ) ){ - dlrow.Initialize( column, pispip.NewSupplyProductionQuantity() ); - } - allrow.Initialize( column, pispip.NewSupplyProductionQuantity() ); } } + rows := selectsortedset( table, FinancialProductionRow, row, row.Name() ); i := 0; traverse( rows, Elements, e ){ diff --git a/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCUnit.qbl b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCUnit.qbl index 739a84b..e504a84 100644 --- a/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCUnit.qbl +++ b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCUnit.qbl @@ -5,7 +5,7 @@ TextBody: [* // 鐢勫叞楦� Jun-28-2024 (created) - return '闀挎槬'; + return '闀挎槬宸ョ▼'; //return 'Assembly Plant (France)'; *] } diff --git a/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLUnit.qbl b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLUnit.qbl index d544c74..781dc80 100644 --- a/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLUnit.qbl +++ b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLUnit.qbl @@ -5,7 +5,7 @@ TextBody: [* // 鐢勫叞楦� Jun-28-2024 (created) - return '澶ц繛'; + return '澶ц繛宸ュ巶'; //return 'Assembly Plant (Spain)'; *] } -- Gitblit v1.9.3