lazhen
2024-07-03 db432910aeb08e46f68bcf1183b3ead703e208b0
库存汇总字段调整
已重命名1个文件
已修改20个文件
已添加4个文件
已删除6个文件
465 ■■■■■ 文件已修改
_Main/BL/Relations/Relation_InventorySummaryCell_ProductInStockingPointInPeriod_ProductInStocki.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummaryCell/Function_CalcAverageInventory.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummaryCell/Function_CalcEndingInventory.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummaryCell/Function_CalcMaximumInventory.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummaryCell/Function_CalcMinimumInventory.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummaryColumn/Attribute_TimeUnit.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummaryColumn/Method_GenerateCell.qbl 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummaryReport/Method_Clear.qbl 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummaryReport/Method_Generate.qbl 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummaryReport/Method_GenerateColumn.qbl 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummaryReport/Method_GetRow.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCUnit.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLUnit.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl 107 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventroySummaryRow/Method_Initialize#0.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventroySummaryRow/Method_Initialize.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventroySummaryRow/Method_InitializeCell.qbl 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventroySummaryRow/Method_SetCellValue#0.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventroySummaryRow/Method_SetCellValue0.qbl 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelPeriod.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnCreated.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnCreated.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_InventorySummaryCell_ProductInStockingPointInPeriod_ProductInStocki.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl
@@ -2,9 +2,7 @@
#parent: #root
Method GetRow (
  String salessegment,
  String product,
  DateTime startdate,
  DateTime enddate
  String product
) as FinancialSalesRow
{
  TextBody:
@@ -15,7 +13,7 @@
    if( isnull( row ) ){
      row := this.FinancialSalesRow( relnew, Name := product, Unit := salessegment );
      //初始化单元格
      row.InitializeCell( this, startdate, enddate );
      row.InitializeCell( this );
    }
    
    return row;
_Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl
@@ -1,19 +1,13 @@
Quintiq file version 2.0
#parent: #root
Method InitializeCell (
  FinancialSalesReport table,
  DateTime startdate,
  DateTime enddate
  FinancialSalesReport table
)
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-28-2024 (created)
    for( start := startdate; start < enddate; start := start.StartOfNextMonth() ){
      periodtime := start.Date();
      periodname := periodtime.Format( "M2/D2/Y" );
      column := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
    traverse( table, FinancialSalesColumn, column ){
      this.Initialize( column, this.Unit() );
    }
  *]
_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
@@ -23,7 +23,7 @@
    table                     := source.FinancialSalesReport( relnew, ID := source.Name(), Name := source.Name(), IsImport := false );
    showtable                 := source.FinancialSalesReport( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsImport := false, IsShow := true );
    startofplanning           := owner.StartOfPlanning();
    startofyear               := startofplanning.StartOfYear();
    //startofyear               := startofplanning.StartOfYear();
    startofnextyear           := startofplanning.StartOfNextYear();
    
    search                    := source.FinancialSalesSearch( relnew, Unit := allsalessegment, Generation := allsalessegment, MqbMlb := allsalessegment, Power := allsalessegment );
@@ -34,7 +34,7 @@
    traverse( owner, SalesDemand.astype( Forecast ), forecast, forecast.StartDate() < startofnextyear.Date() and ( ( forecast.SalesSegmentName() = ccsalessegment and forecast.Product_MP().MQBMLB() = 'MLB' ) 
              or forecast.SalesSegmentName() = tjsalessegment or forecast.SalesSegmentName() = fssalessegment ) ){
      product    := forecast.Product_MP();
      allrow     := table.GetRow( allsalessegment, product.ID(), startofyear, startofnextyear );
      allrow     := table.GetRow( allsalessegment, product.ID() );
      periodtime := forecast.StartDate().StartOfMonth();
      periodname := periodtime.Format( "M2/D2/Y" );
      
@@ -47,13 +47,13 @@
      //Forecast的Sales Segment为长春,识别出MLB的所有产品汇总
      if( forecast.SalesSegmentName() = ccsalessegment and product.MQBMLB() = 'MLB' ){
    //    info( '------------------------', column.Name() );
        ccrow := table.GetRow( ccsalessegment, product.ID(), startofyear, startofnextyear );
        ccrow := table.GetRow( ccsalessegment, product.ID() );
    //    info( '------------------------', ccrow.FinancialSalesCell( relsize ), column.FinancialSalesCell( relsize ) );
        ccrow.Initialize( column, forecast.Quantity() );
      }else if( forecast.SalesSegmentName() = tjsalessegment or forecast.SalesSegmentName() = fssalessegment ){
        //大连财务销量:首先在forecast界面查找Sales Segment是天津和佛山的所有需求,每个产品按月汇总需求数量
    //    info( '------------------------', column.Name() );
        dlrow := table.GetRow( dlsalessegment, product.ID(), startofyear, startofnextyear );
        dlrow := table.GetRow( dlsalessegment, product.ID() );
    //    info( '------------------------', dlrow.FinancialSalesCell( relsize ), column.FinancialSalesCell( relsize ) );
        dlrow.Initialize( column, forecast.Quantity() );
      }
@@ -67,10 +67,10 @@
          periodtime := pispip.Start().StartOfMonth().Date();
          periodname := periodtime.Format( "M2/D2/Y" );
          column    := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
          ccrow := table.GetRow( ccsalessegment, product.ID(), startofyear, startofnextyear );
          ccrow := table.GetRow( ccsalessegment, product.ID() );
          ccrow.Initialize( column, pispip.DependentDemandAndSalesDemandQuantity() );//取Total Demand字段按月汇总需求数量
          
          allrow     := table.GetRow( allsalessegment, product.ID(), startofyear, startofnextyear );
          allrow     := table.GetRow( allsalessegment, product.ID() );
          allrow.Initialize( column, pispip.DependentDemandAndSalesDemandQuantity() );
        }
      }
@@ -84,10 +84,10 @@
        
        column    := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
        traverse( trip, ProductInTrip, pit ){
          dlrow      := table.GetRow( dlsalessegment, pit.ProductID(), startofyear, startofnextyear );
          dlrow      := table.GetRow( dlsalessegment, pit.ProductID() );
          dlrow.Initialize( column, pit.Quantity() );//取Total Demand字段按月汇总需求数量
          
          allrow     := table.GetRow( allsalessegment, pit.ProductID(), startofyear, startofnextyear );
          allrow     := table.GetRow( allsalessegment, pit.ProductID() );
          allrow.Initialize( column, pit.Quantity() );
        }
      }
_Main/BL/Type_InventorySummaryCell/Function_CalcAverageInventory.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_InventorySummaryCell/Function_CalcEndingInventory.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_InventorySummaryCell/Function_CalcMaximumInventory.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_InventorySummaryCell/Function_CalcMinimumInventory.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_InventorySummaryColumn/Attribute_TimeUnit.qbl
ÎļþÃû´Ó _Main/BL/Type_InventorySummaryColumn/Attribute_Category.qbl ÐÞ¸Ä
@@ -1,6 +1,6 @@
Quintiq file version 2.0
#parent: #root
Attribute Category
Attribute TimeUnit
{
  #keys: '3[415136.0.865101993][415136.0.865101992][415136.0.865101994]'
  Description: 'day;week;month'
_Main/BL/Type_InventorySummaryColumn/Method_GenerateCell.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
Quintiq file version 2.0
#parent: #root
Method GenerateCell (
  InventoryPointSelections selections,
  Strings ccstockingpointids,
  Strings dlstockingpointids,
  InventorySummaryReport table,
  Date start,
  Date end,
  String productid,
  String allunit,
  String ccunit,
  String dlunit
)
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-3-2024 (created)
    //All
    alldetails := selectset( selections, Elements.InventoryInterfaceDataDetail, detail, detail.PartNumber() = productid and detail.Date() >= start and detail.Date() <= end );
    if( alldetails.Size() > 0 ){
      allrow     := table.GetRow( allunit, productid );
      allvalue := sum( alldetails, Elements, e, e.Quantity() );
      allrow.SetCellValue( this, allvalue );
      //长春
      ccdetails := selectset( alldetails, Elements, detail, ccstockingpointids.Find( detail.InventoryPointSelection().StockpoingPoint() ) >= 0 );
      if( ccdetails.Size() > 0 ){
        ccrow := table.GetRow( ccunit, productid );
        value := sum( ccdetails, Elements, e, e.Quantity() );
        ccrow.SetCellValue( this, value );
      }
      //大连
      dldetails := selectset( alldetails, Elements, detail, dlstockingpointids.Find( detail.InventoryPointSelection().StockpoingPoint() ) >= 0 );
      if( dldetails.Size() > 0 ){
        dlrow := table.GetRow( dlunit, productid );
        value := sum( dldetails, Elements, e, e.Quantity() );
        dlrow.SetCellValue( this, value );
      }
    }
  *]
}
_Main/BL/Type_InventorySummaryReport/Method_Clear.qbl
@@ -1,6 +1,10 @@
Quintiq file version 2.0
#parent: #root
Method Clear
Method Clear (
  String timeunit,
  DateTime starttime,
  DateTime endtime
)
{
  TextBody:
  [*
@@ -8,6 +12,6 @@
    this.InventorySummaryColumn( relflush );
    this.InventroySummaryRow( relflush );
    
    this.GenerateColumn( this.InventorySummarySource().MacroPlan() );
    this.GenerateColumn( this.InventorySummarySource().MacroPlan(), timeunit, starttime, endtime );
  *]
}
_Main/BL/Type_InventorySummaryReport/Method_Generate.qbl
@@ -8,15 +8,21 @@
  TextBody:
  [*
    // ç”„兰鸽 Jun-25-2024 (created)
    startofplanning           := search.InventorySummarySource().MacroPlan().StartOfPlanning();
    startofyear               := startofplanning.StartOfYear();
    startofendyear            := startofplanning.StartOfNextYear() - Duration::Days( 1 );
    //查询日期返回需要在计划日期之内
    if( search.StartDate().DateTime() < startofendyear and search.EndDate().DateTime() > startofyear ){
    table      := selectobject( this, InventorySummarySource.InventorySummaryReport, report, not report.IsShow() );
    allunit    := '<All>';
    //清空之前存储的显示数据
    this.Clear();
      this.Clear( search.Category(), search.StartDate().DateTime(), search.EndDate().DateTime() );
    //过滤后的产品id
    productids := selectuniquevalues( products, Elements, product, ( search.Generation() = allunit or product.Generation() = search.Generation() )
                                      and ( search.MqbMlb() = allunit or product.MQBMLB() = search.MqbMlb() )
                                      and ( search.Power() = allunit or product.Power() = search.Power() ), product.ID() );
    sumrow     := this.InventroySummaryRow( relnew, Name := 'SUM', Unit := search.Unit(), RowNr := table.InventroySummaryRow( relsize ) );
      sumrow.InitializeCell( this );
    traverse( table, InventroySummaryRow, row, row.Unit() = search.Unit() ){
      productid  := construct( Strings );
      productid.Add( row.Name() );
@@ -24,19 +30,18 @@
      if( productids.ContainsAll( productid ) ){
        showrow := this.InventroySummaryRow( relnew, Name := row.Name(), Unit := row.Unit(), RowNr := row.RowNr() );
        
        traverse( row, InventorySummaryCell, cell ){
    //      column   := selectobject( this, InventorySummaryColumn, column, column.Name() = cell.InventorySummaryColumn().Name() );
    //
    //      sumcell  := selectobject( column, InventorySummaryCell, c, c.InventroySummaryRow() = sumrow );
    //      if( isnull( sumcell ) ){
    //        sumcell := column.InventorySummaryCell( relnew, Value := '0' );
    //        sumrow.InventorySummaryCell( relinsert, sumcell );
    //      }
    //
    //      showcell := column.InventorySummaryCell( relnew, Value := cell.Value() );
    //      showrow.InventorySummaryCell( relinsert, showcell );
    //      value := [Real]cell.Value() + [Real]sumcell.Value();
    //      sumcell.Value( [String]value );
          traverse( row, InventorySummaryCell, cell, cell.InventorySummaryColumn().TimeUnit() = search.Category() ){
            column   := selectobject( this, InventorySummaryColumn, column, column.Name() = cell.InventorySummaryColumn().Name() );
            sumcell  := selectobject( column, InventorySummaryCell, c, c.InventroySummaryRow() = sumrow );
            showcell := column.InventorySummaryCell( relnew, EndingInventory := cell.EndingInventory(), MinimumInventory := cell.MinimumInventory(), MaximumInventory := cell.MaximumInventory(), AverageInventory := cell.AverageInventory() );
            showrow.InventorySummaryCell( relinsert, showcell );
            sumcell.EndingInventory( sumcell.EndingInventory() + cell.EndingInventory() );
            sumcell.MinimumInventory( sumcell.MinimumInventory() + cell.MinimumInventory() );
            sumcell.MaximumInventory( sumcell.MaximumInventory() + cell.MaximumInventory() );
            sumcell.AverageInventory( sumcell.AverageInventory() + cell.AverageInventory() );
          }
        }
      }
    }
_Main/BL/Type_InventorySummaryReport/Method_GenerateColumn.qbl
@@ -1,7 +1,10 @@
Quintiq file version 2.0
#parent: #root
Method GenerateColumn (
  MacroPlan owner
  MacroPlan owner,
  String timeunit,
  DateTime starttime,
  DateTime endtime
)
{
  TextBody:
@@ -9,12 +12,37 @@
    // ç”„兰鸽 Jun-25-2024 (created)
    startofplanning           := owner.StartOfPlanning();
    startofyear               := startofplanning.StartOfYear();
    startofnextyear           := startofplanning.StartOfNextYear();
    for( start := startofyear; start < startofnextyear; start := start.StartOfNextMonth() ){
    startofendyear            := startofplanning.StartOfNextYear() - Duration::Days( 1 );
    //查询日期返回需要在计划日期之内
    if( starttime < startofendyear and endtime > startofyear ){
      if( starttime < startofyear ){
        starttime := startofyear;
      }
      if( endtime > startofendyear ){
        endtime := startofendyear;
      }
    for( start := starttime; start <= endtime; start := start.StartOfNextDay() ){
      periodtime := start.Date();
      periodname := periodtime.Format( "M2/D2/Y" );
      this.InventorySummaryColumn( relnew, Name := periodname, Period := periodtime );
      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Day() ){
        this.InventorySummaryColumn( relnew, Name := periodname, Period := periodtime, TimeUnit := Translations::MP_GlobalParameters_Day() );
      }
      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Week() ){
        weekend := ( start.StartOfNextWeek() - Duration::Days( 1 ) ).Date();
        if( periodtime = weekend ){
          this.InventorySummaryColumn( relnew, Name := periodname, Period := periodtime, TimeUnit := Translations::MP_GlobalParameters_Week() );
        }
      }
      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Month() ){
        monthend := ( start.StartOfNextMonth() - Duration::Days( 1 ) ).Date();
        if( periodtime = monthend ){
          this.InventorySummaryColumn( relnew, Name := periodname, Period := periodtime, TimeUnit := Translations::MP_GlobalParameters_Month() );
        }
      }
    }
    }
  *]
}
_Main/BL/Type_InventorySummaryReport/Method_GetRow.qbl
@@ -2,9 +2,7 @@
#parent: #root
Method GetRow (
  String unit,
  String product,
  DateTime startdate,
  DateTime enddate
  String product
) as InventroySummaryRow
{
  TextBody:
@@ -15,7 +13,7 @@
    if( isnull( row ) ){
      row := this.InventroySummaryRow( relnew, Name := product, Unit := unit );
      //初始化单元格
      row.InitializeCell( this, startdate, enddate );
      row.InitializeCell( this );
    }
    
    return row;
_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCUnit.qbl
@@ -5,7 +5,7 @@
  TextBody:
  [*
    // ç”„兰鸽 Jun-28-2024 (created)
    return '长春';
    //return 'China';
    //return '长春';
    return 'Assembly Plant (France)';
  *]
}
_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLUnit.qbl
@@ -5,7 +5,7 @@
  TextBody:
  [*
    // ç”„兰鸽 Jun-28-2024 (created)
    return '大连';
    //return 'Foregin';
    //return '大连';
    return 'Assembly Plant (Spain)';
  *]
}
_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,24 +24,104 @@
    
    search                    := source.InventorySummarySearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );
    
    table.GenerateColumn( owner );
    //从Product planning查找库存点为长春装配线边库的所有MQB产品,取Total Demand字段按月汇总需求数量
    table.GenerateColumn( owner, 'All', startofyear, startofnextyear );
    //info( '-----------------------------------', table.InventorySummaryColumn( relsize ) );
    //库存数量为Actual 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 );//取Total Demand字段按月汇总需求数量
    //  info( '-----------------------------------', unit, product.ID() );
      weekpispips := construct( ProductInStockingPointInPeriods );
      monthpispips := construct( ProductInStockingPointInPeriods );
      nextweek := startofplanning.StartOfNextWeek();
      nextmonth := startofplanning.StartOfNextMonth();
          
          allrow     := table.GetRow( allunit, product.ID(), startofyear, startofnextyear );
          allrow.Initialize( column, pispip );
      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 );
          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();
        }
    }
    }
    //首先在Entities里识别父级Unit为长春/大连的所有库存点
    //长春库存点
    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;
_Main/BL/Type_InventroySummaryRow/Method_Initialize#0.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_InventroySummaryRow/Method_Initialize.qbl
@@ -8,7 +8,7 @@
  TextBody:
  [*
    // ç”„兰鸽 Jun-24-2024 (created)
    cell := column.InventorySummaryCell( relnew );
    cell := column.InventorySummaryCell( relnew, AverageInventory := 0, EndingInventory := 0, MaximumInventory := 0, MinimumInventory := 0 );
    
    this.InventorySummaryCell( relinsert, cell );
  *]
_Main/BL/Type_InventroySummaryRow/Method_InitializeCell.qbl
@@ -1,19 +1,13 @@
Quintiq file version 2.0
#parent: #root
Method InitializeCell (
  InventorySummaryReport table,
  DateTime startdate,
  DateTime enddate
  InventorySummaryReport table
)
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-28-2024 (created)
    for( start := startdate; start < enddate; start := start.StartOfNextMonth() ){
      periodtime := start.Date();
      periodname := periodtime.Format( "M2/D2/Y" );
      column := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname and column.Period() = periodtime );
    traverse( table, InventorySummaryColumn, column ){
      this.Initialize( column, this.Unit() );
    }
  *]
_Main/BL/Type_InventroySummaryRow/Method_SetCellValue#0.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
Method SetCellValue (
  InventorySummaryColumn column,
  Real quantity
)
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-24-2024 (created)
    cell := selectobject( this, InventorySummaryCell, cell, cell.InventorySummaryColumn() = column );
    cell.AverageInventory( cell.AverageInventory() + quantity );
    cell.EndingInventory( cell.EndingInventory() + quantity );
    cell.MaximumInventory( cell.MaximumInventory() + quantity );
    cell.MinimumInventory( cell.MinimumInventory() + quantity );
  *]
}
_Main/BL/Type_InventroySummaryRow/Method_SetCellValue0.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: #root
Method SetCellValue (
  InventorySummaryColumn column,
  Real endinginventory,
  Real minimuminventory,
  Real maximuminventory,
  Real averageinventory
)
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-24-2024 (created)
    cell := selectobject( this, InventorySummaryCell, cell, cell.InventorySummaryColumn() = column );
    cell.AverageInventory( cell.AverageInventory() + averageinventory );
    cell.EndingInventory( cell.EndingInventory() + endinginventory );
    cell.MaximumInventory( cell.MaximumInventory() + maximuminventory );
    cell.MinimumInventory( cell.MinimumInventory() + minimuminventory );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
@@ -10,12 +10,12 @@
    Body:
    [*
      //初始化
      if( not exists( MacroPlan, FinancialProductionSource, source, not source.IsImport() ) ){
      //if( not exists( MacroPlan, FinancialProductionSource, source, not source.IsImport() ) ){
        FinancialProductionSource::Initialize( MacroPlan );
      }
      //}
      //info( '------------------1----------------' );
      table := selectobject( MacroPlan, FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() and table.IsShow() );
      info( '------------------2----------------', table.IsImport(), table.IsShow() );
      //info( '------------------2----------------', table.IsImport(), table.IsShow() );
      DataHolderTable.Data( table );
      
      dhSearch.Data( table.FinancialProductionSource().FinancialProductionSearch() );
_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
@@ -9,12 +9,12 @@
  {
    Body:
    [*
      if( not exists( MacroPlan, FinancialSalesSource, source, not source.IsImport() ) ){
      //if( not exists( MacroPlan, FinancialSalesSource, source, not source.IsImport() ) ){
        FinancialSalesSource::Initialize( MacroPlan );
      }
      //}
      //info( '------------------1----------------' );
      table := selectobject( MacroPlan, FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and table.IsShow() );
      info( '------------------2----------------', table.IsImport(), table.IsShow() );
      //info( '------------------2----------------', table.IsImport(), table.IsShow() );
      DataHolderTable.Data( table );
      
      dhSearch.Data( table.FinancialSalesSource().FinancialSalesSearch() );
_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def
@@ -10,7 +10,7 @@
    Body:
    [*
      
      valueString := "<All>;" + FinancialProductionReport::GetDefaultCCUnit() + ";" + FinancialProductionReport::GetDefaultDLUnit();
      valueString := "<All>;" + FinancialSalesReport::GetSalesSegmentCC() + ";" + FinancialSalesReport::GetSalesSegmentDL();
      
      this.Strings( valueString );
    *]
_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelPeriod.def
@@ -21,6 +21,7 @@
      BaseType: 'WebDateSelector'
      Properties:
      [
        Date: 9999-12-31
        Label: 'End date'
        Taborder: 1
      ]
_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def
@@ -9,12 +9,12 @@
  {
    Body:
    [*
      if( not isnull( MacroPlan.InventorySummarySource() ) ){
        InventorySummarySource::Initialize( MacroPlan );
      }
      //if( not isnull( MacroPlan.InventorySummarySource() ) ){
        InventorySummarySource::Initialize( MacroPlan, InterfaceDataset );
      //}
      //info( '------------------1----------------' );
      table := selectobject( MacroPlan, InventorySummarySource.InventorySummaryReport, table, table.IsShow() );
      info( '------------------2----------------', table.IsShow() );
      //info( '------------------2----------------', table.IsShow() );
      DataHolderTable.Data( table );
      
      dhSearch.Data( table.InventorySummarySource().InventorySummarySearch() );
_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelCategory/RadioButtonGroupUseForPlanning_545
Response OnCreated () id:Response_PanelCategory_RadioButtonGroupUseForPlanning_OnCreated
{
  #keys: '[415136.0.875614032]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      this.ButtonValues( Translations::MP_GlobalParameters_Day() + ';' + Translations::MP_GlobalParameters_Week() + ';' + Translations::MP_GlobalParameters_Month() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
@@ -10,10 +10,14 @@
    Body:
    [*
      //日期改变后刷新显示
      if( this.Date() < DateSelectorStart.Date() ){
        this.HintError( 'The end date cannot be less than the start date!' );
      }else{
      if( dhSearch.Data().EndDate() <> this.Date() ){
        dhSearch.Data().EndDate( this.Date() );
        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
      }
      }
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
@@ -10,10 +10,14 @@
    Body:
    [*
      //日期改变后刷新显示
      if( this.Date() > DateSelectorEnd.Date() ){
        this.HintError( 'The start date cannot be later than the end date!' );
      }else{
      if( dhSearch.Data().StartDate() <> this.Date() ){
        dhSearch.Data().StartDate( this.Date() );
        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
      }
      }
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnCreated.def
@@ -10,7 +10,7 @@
    Body:
    [*
      
      valueString := "<All>;" + FinancialProductionReport::GetDefaultCCUnit() + ";" + FinancialProductionReport::GetDefaultDLUnit();
      valueString := "<All>;" + InventorySummaryReport::GetDefaultCCUnit() + ";" + InventorySummaryReport::GetDefaultDLUnit();
      
      this.Strings( valueString );
    *]