Quintiq file version 2.0
|
#parent: #root
|
StaticMethod Initialize (
|
MacroPlan owner
|
)
|
{
|
Description: '初始化'
|
TextBody:
|
[*
|
// 甄兰鸽 Jun-24-2024 (created)
|
owner.FinancialSalesSource( relflush );
|
products := construct( Product_MPs );
|
allunit := FinancialSalesReport::GetDefaultAllUnit();
|
ccunit := FinancialSalesReport::GetDefaultCCUnit();
|
dlunit := FinancialSalesReport::GetDefaultDLUnit();
|
ccsalessegment := FinancialSalesReport::GetSalesSegmentCC();
|
tjsalessegment := FinancialSalesReport::GetSalesSegmentTJ();
|
fssalessegment := FinancialSalesReport::GetSalesSegmentFS();
|
//ccspline := FinancialSalesReport::GetStockingPointCCLine();
|
//dlspline := FinancialSalesReport::GetStockingPointDLLine();
|
//ccrent := FinancialSalesReport::GetStockingPointCCRent();
|
|
source := owner.FinancialSalesSource( relnew, IsImport := false, Name := FinancialSalesReport::GetDefaultName() );
|
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().Date();
|
//startofyear := startofplanning.StartOfYear();
|
startofnextyear := startofplanning.StartOfNextYear();
|
|
search := owner.FinancialSalesSearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit );
|
|
table.GenerateColumn( owner );
|
|
//首先在forecast界面查找sales segment为长春的所有需求,识别出MLB的所有产品,每个产品按月汇总需求数量
|
traverse( owner, SalesDemand.astype( Forecast ), forecast, not isnull( forecast.SalesSegment_MP() ) and forecast.StartDate() < startofnextyear and forecast.Quantity() <> 0
|
and exists( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ) ){
|
salessegment := forecast.SalesSegment_MP();
|
parentsalessegments := salessegment.GetAllParent();
|
//是否属于长春
|
// iscc := salessegment.Name() = ccsalessegment or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name() = ccsalessegment );
|
iscc := salessegment.Name().StartsWith( ccsalessegment ) or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name().StartsWith( ccsalessegment ) );
|
//是否属于大连, 即天津和佛山
|
// isdl := salessegment.Name() = tjsalessegment or salessegment.Name() = fssalessegment
|
// or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name() = tjsalessegment )
|
// or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name() = fssalessegment );
|
isdl := salessegment.Name().StartsWith( tjsalessegment ) or salessegment.Name().StartsWith( fssalessegment )
|
or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name().StartsWith( tjsalessegment ) )
|
or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name().StartsWith( fssalessegment ) );
|
//Forecast的Sales Segment为长春,识别出MLB的所有产品汇总
|
//大连财务销量:首先在forecast界面查找Sales Segment是天津和佛山的所有需求,每个产品按月汇总需求数量
|
if( ( iscc and forecast.Product_MP().MQBMLB() = 'MLB' ) or isdl ){
|
product := forecast.Product_MP();
|
//获取合计行
|
allrow := table.GetRow( allunit, product );
|
//获取工厂行
|
factoryrow := table.GetRow( ifexpr( iscc and forecast.Product_MP().MQBMLB() = 'MLB', ccunit, dlunit ), product );
|
|
products.Add( product );
|
traverse( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ){
|
dayperiodtime := psdip.StartDate();
|
dayperiodname := dayperiodtime.Format( "M2/D2/Y" );
|
periodtime := psdip.StartDate().StartOfMonth();
|
periodname := periodtime.Format( "M2/D2/Y" );
|
// info( '-------------------------', periodname, periodtime );
|
daycolumn := selectobject( table, FinancialSalesColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime and column.IsDay() );
|
column := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime and not column.IsDay() );
|
// info( '-------------------------', column.Name() );
|
quantity := [Number]psdip.Quantity();//四舍五入
|
|
factoryrow.Initialize( column, quantity );
|
factoryrow.Initialize( daycolumn, quantity );
|
allrow.Initialize( column, quantity );
|
}
|
}
|
}
|
//从Product planning查找库存点为长春装配线边库(CC厂内库)的所有MQB产品,取Total Demand字段按月汇总需求数量
|
//从Product planning查找库存点为大连发动机的长春外租库,取New supply字段按月汇总需求数量
|
//traverse( owner, StockingPoint_MP, stockingpoint ){
|
traverse( owner, StockingPoint_MP, stockingpoint, ( stockingpoint.ID().StartsWith( 'CC' ) and stockingpoint.ID().EndsWith( '厂内库' ) ) or stockingpoint.ID() = '大连发动机的长春外租库' ){
|
isdl := stockingpoint.ID() = '大连发动机的长春外租库';
|
// unit := stockingpoint.Unit();
|
// parentunits := unit.GetAllParent();
|
//是否属于长春装配线
|
// iscc := unit.ID() = ccspline or exists( parentunits, Elements, punit, punit.ID() = ccspline );
|
// if( table.IsInUnit( stockingpoint, ccspline ) ){
|
traverse( stockingpoint, ProductInStockingPoint_MP, pisp, pisp.Product_MP().IsLeaf()
|
and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear
|
and ( pispip.DependentDemandAndSalesDemandQuantity() <> 0 or pispip.NewSupplyQuantity() <> 0 ) ) ){//产品为MQB
|
product := pisp.Product_MP();
|
allrow := table.GetRow( allunit, product );
|
if( isdl or pisp.Product_MP().MQBMLB() = 'MQB' ){
|
factoryrow := table.GetRow( ifexpr( isdl, dlunit, ccunit ), product );
|
products.Add( product );
|
traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical()
|
and pispip.Period_MP().StartDate() < startofnextyear
|
and ( pispip.DependentDemandAndSalesDemandQuantity() <> 0 or pispip.NewSupplyQuantity() <> 0 ) ){
|
dayperiodtime := pispip.Start().Date();
|
dayperiodname := dayperiodtime.Format( "M2/D2/Y" );
|
periodtime := pispip.Start().StartOfMonth().Date();
|
periodname := periodtime.Format( "M2/D2/Y" );
|
daycolumn := selectobject( table, FinancialSalesColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime and column.IsDay() );
|
column := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime and not column.IsDay() );
|
quantity := ifexpr( isdl, [Number]pispip.NewSupplyQuantity(), [Number]pispip.DependentDemandAndSalesDemandQuantity() );//四舍五入
|
|
factoryrow.Initialize( column, quantity );//取Total Demand字段按月汇总需求数量
|
factoryrow.Initialize( daycolumn, quantity );
|
allrow.Initialize( column, quantity );
|
}
|
}
|
}
|
// }
|
}
|
//startofnextyearlead := startofplanning.StartOfNextYear() + FinancialSalesReport::GetDefaultTripLeadingTime();
|
//大连财务销量:长春的需求需要在trip plan里面找到起始库存点为大连装配线边库,目的地为长春外租库的产品,由于需要考虑产品运输lead time,每个月的汇总数据需要推迟两天进行计算
|
//traverse( owner, Unit.Lane.LaneLeg, laneleg ){
|
// //起始库存点是否是大连装配线边库
|
// originsp := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.OriginStockingPointID() );
|
// isdlspline := table.IsInUnit( originsp, dlspline );
|
// //目的地是否是长春外租库
|
// destisp := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.DestinationStockingPointID() );
|
// isccrent := table.IsInUnit( destisp, ccrent );
|
// if( isdlspline and isccrent ){
|
// traverse( laneleg, Trip, trip, trip.Arrival() < startofnextyearlead and exists( trip, ProductInTrip, pit, pit.Quantity() <> 0 ) ){
|
//// periodtime := ( trip.Arrival() - FinancialSalesReport::GetDefaultTripLeadingTime() ).StartOfMonth().Date();
|
// dayperiodtime := trip.Departure().Date();
|
// dayperiodname := dayperiodtime.Format( "M2/D2/Y" );
|
// periodtime := trip.Departure().StartOfMonth().Date();
|
// periodname := periodtime.Format( "M2/D2/Y" );
|
//
|
// daycolumn := selectobject( table, FinancialSalesColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime and column.IsDay() );
|
// column := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime and not column.IsDay() );
|
// if( not isnull( column ) ){
|
// traverse( trip, ProductInTrip, pit, pit.Quantity() <> 0 ){
|
// product := pit.Product_MP();
|
// products.Add( product );
|
// quantity := [Number]pit.Quantity();//四舍五入
|
// dlrow := table.GetRow( dlunit, pit.Product_MP() );
|
// dlrow.Initialize( column, quantity );//汇总数量
|
// dlrow.Initialize( daycolumn, quantity );
|
//
|
// allrow := table.GetRow( allunit, pit.Product_MP() );
|
// allrow.Initialize( column, quantity );
|
// }
|
// }
|
// }
|
// }
|
//}
|
|
rows := selectsortedset( table, FinancialSalesRow, row, row.Name() );
|
i := 0;
|
traverse( rows, Elements, e ){
|
e.RowNr( i );
|
i := i + 1;
|
}
|
showtable.Generate( search, products );
|
*]
|
}
|