Quintiq file version 2.0
|
#parent: #root
|
Method Generate (
|
EnginePipelineSearch search,
|
Product_MPs products
|
)
|
{
|
TextBody:
|
[*
|
// 甄兰鸽 Jun-25-2024 (created)
|
table := selectobject( this, Source.Report, report, not report.IsShow() );
|
//清空之前存储的显示数据
|
this.Clear( search.TimeUnit(), search.StartDate(), search.EndDate() );
|
Transaction::Transaction().Propagate( attribute( EnginePipelineColumn, Index ) );
|
Transaction::Transaction().Propagate( attribute( EnginePipelineCell, ProductionQuantity ) );
|
Transaction::Transaction().Propagate( attribute( EnginePipelineCell, DemandQuantity ) );
|
//过滤后的产品id
|
productids := selectuniquevalues( products, Elements, product, true, product.ID() );
|
rows := selectsortedset( table, Row, row, row.RowNr() );
|
models := selectuniquevalues( table, Column.Cell.Demand, demand, demand.Model() );
|
cellnr := 5 + models.Size();
|
//合计行
|
sumname := 'SUM';
|
sumstr := sumname.Format( 'S(Len(10))' );
|
sumrowproduction := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '总产量' ), sumname, '', rows.Size() * cellnr );
|
sumrowdlproduction := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '大连产量' ), sumname, '', sumrowproduction.RowNr() + 1 );
|
sumrowccproduction := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '长春产量' ), sumname, '', sumrowdlproduction.RowNr() + 1 );
|
sumrowdemand := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '总需求' ), sumname, '', sumrowccproduction.RowNr() + 1 );
|
sumdemandrows := construct( EnginePipelineRows );
|
rowno := sumrowdemand.RowNr() + 1;
|
traverse( models, Elements, model ){
|
sumdemandrows.Add( EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( model.Concat( '需求' ) ), sumname, model, rowno ) );
|
rowno := rowno + 1;
|
}
|
sumrowinventory := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '库存' ), sumname, '', rowno );
|
|
//行计数
|
rownr := 0;
|
traverse( rows, Elements, row, productids.Find( row.Name() ) >= 0 ){
|
rowname := row.Name().Format( 'S(Len(10))' );
|
showrowproduction := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '总产量' ), row.Name(), '', rownr );
|
showrowdlproduction := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '大连产量' ), row.Name(), '', showrowproduction.RowNr() + 1 );
|
showrowccproduction := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '长春产量' ), row.Name(), '', showrowdlproduction.RowNr() + 1 );
|
showrowdemand := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '总需求' ), row.Name(), '', showrowccproduction.RowNr() + 1 );
|
rownr := showrowdemand.RowNr() + 1;
|
modelsnr := showrowdemand.RowNr() + 4;
|
uniquemodels := selectuniquevalues( row, Cell.Demand, demand, true, demand.Model() );
|
demandrows := construct( EnginePipelineRows );
|
traverse( uniquemodels, Elements, e ){
|
|
if( rownr < modelsnr ){
|
demandrows.Add( EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( e.Concat( '需求' ) ), row.Name(), e, rownr ) );
|
rownr := rownr + 1;
|
}
|
}
|
|
for( rownr := rownr; rownr < modelsnr; rownr ++ ){
|
|
demandrows.Add( EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '' ), row.Name(), '', rownr ) );
|
}
|
showrowinventory := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '库存' ), row.Name(), '', rownr );
|
|
traverse( this, Column, column ){
|
daycells := selectset( row, Cell, cell, cell.Column().TimeUnit() = Translations::MP_GlobalParameters_Day() and
|
cell.Column().StartDate() >= column.StartDate() and
|
cell.Column().StartDate() <= column.EndDate() );
|
|
//生产
|
productionqty := [Number]sum( daycells, Elements, cell, cell.ProductionQuantity() );
|
production := selectobject( column, CellValue, c, c.Row() = showrowproduction );
|
production.Value( [String]productionqty );
|
sumproduction := selectobject( column, CellValue, c, c.Row() = sumrowproduction );
|
sumproduction.Value( [String]( [Real]sumproduction.Value() + productionqty ) );
|
//大连产量
|
dlproductionqty := [Number]sum( daycells, Elements.Production, cellproduction, cellproduction.DLProduction() );
|
dlproduction := selectobject( column, CellValue, c, c.Row() = showrowdlproduction );
|
dlproduction.Value( [String]dlproductionqty );
|
sumdlproduction := selectobject( column, CellValue, c, c.Row() = sumrowdlproduction );
|
sumdlproduction.Value( [String]( [Real]sumdlproduction.Value() + dlproductionqty ) );
|
//长春产量
|
ccproductionqty := [Number]sum( daycells, Elements.Production, cellproduction, cellproduction.CCProduction() );
|
ccproduction := selectobject( column, CellValue, c, c.Row() = showrowccproduction );
|
ccproduction.Value( [String]ccproductionqty );
|
sumccproduction := selectobject( column, CellValue, c, c.Row() = sumrowccproduction );
|
sumccproduction.Value( [String]( [Real]sumccproduction.Value() + ccproductionqty ) );
|
//需求
|
totaldemandqty := [Number]sum( daycells, Elements, cell, cell.DemandQuantity() );
|
totaldemand := selectobject( column, CellValue, c, c.Row() = showrowdemand );
|
totaldemand.Value( [String]totaldemandqty );
|
sumdemand := selectobject( column, CellValue, c, c.Row() = sumrowdemand );
|
sumdemand.Value( [String]( [Real]sumdemand.Value() + totaldemandqty ) );
|
//具体需求
|
traverse( demandrows, Elements, demandrow ){
|
demandqty := [Number]sum( daycells, Elements.Demand, celldemand, celldemand.Model() = demandrow.Demand(), celldemand.Quantity() );
|
demandcell := selectobject( column, CellValue, c, c.Row() = demandrow );
|
demandcell.Value( [String]demandqty );
|
sumdemandrow := selectobject( sumdemandrows, Elements, r, r.Demand() = demandrow.Demand() );
|
if( not isnull( sumdemandrow ) ){
|
sumdemandcell := selectobject( column, CellValue, c, c.Row() = sumdemandrow );
|
sumdemandcell.Value( [String]( [Real]sumdemandcell.Value() + demandqty ) );
|
}
|
}
|
//库存
|
inventroyqty := [Number]maxobject( daycells, Elements, e, e.Column().StartDate() ).InventoryQuantity();
|
inventory := selectobject( column, CellValue, c, c.Row() = showrowinventory );
|
inventory.Value( [String]inventroyqty );
|
suminventory := selectobject( column, CellValue, c, c.Row() = sumrowinventory );
|
suminventory.Value( [String]( [Real]suminventory.Value() + inventroyqty ) );
|
}
|
}
|
traverse( this, Column, column ){
|
for( demandr := sumrowdemand.RowNr() + 1; demandr < sumrowinventory.RowNr(); demandr := demandr + 1 ){
|
demandrow := selectobject( this, Row, r, r.RowNr() = demandr and r.Name() = sumname );
|
// info( '------------------14----------------' );
|
if( not isnull( demandrow ) and not exists( demandrow, CellValue, cv, cv.Column() = column ) ){
|
demandcell := column.CellValue( relnew, Value := '' );
|
demandrow.CellValue( relinsert, demandcell );
|
}
|
}
|
}
|
|
rows := selectsortedset( this, Row, row, row.Name(), row.RowNr() );
|
i := 0;
|
traverse( rows, Elements, e ){
|
e.RowNr( i );
|
i := i + 1;
|
}
|
*]
|
}
|