| | |
| | | ccsalessegment := FinancialSalesReport::GetSalesSegmentCC(); |
| | | tjsalessegment := FinancialSalesReport::GetSalesSegmentTJ(); |
| | | fssalessegment := FinancialSalesReport::GetSalesSegmentFS(); |
| | | ccspline := FinancialSalesReport::GetStockingPointCCLine(); |
| | | dlspline := FinancialSalesReport::GetStockingPointDLLine(); |
| | | ccrent := FinancialSalesReport::GetStockingPointCCRent(); |
| | | //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 ); |
| | |
| | | salessegment := forecast.SalesSegment_MP(); |
| | | parentsalessegments := salessegment.GetAllParent(); |
| | | //是否属于长春 |
| | | iscc := salessegment.Name() = ccsalessegment or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name() = ccsalessegment ); |
| | | // 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() = 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 planning查找库存点为长春装配线边库的所有MQB产品,取Total Demand字段按月汇总需求数量 |
| | | traverse( owner, StockingPoint_MP, stockingpoint ){ |
| | | //从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 ) ){ |
| | | // if( table.IsInUnit( stockingpoint, ccspline ) ){ |
| | | traverse( stockingpoint, ProductInStockingPoint_MP, pisp, pisp.Product_MP().IsLeaf() and pisp.Product_MP().MQBMLB() = 'MQB' |
| | | and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear and pispip.DependentDemandAndSalesDemandQuantity() <> 0 ) ){//产品为MQB |
| | | 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 ); |
| | | ccrow := table.GetRow( ccunit, product ); |
| | | products.Add( product ); |
| | | traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear and pispip.DependentDemandAndSalesDemandQuantity() <> 0 ){ |
| | | 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 := [Number]pispip.DependentDemandAndSalesDemandQuantity();//四舍五入 |
| | | quantity := ifexpr( isdl, [Number]pispip.NewSupplyQuantity(), [Number]pispip.DependentDemandAndSalesDemandQuantity() );//四舍五入 |
| | | |
| | | ccrow.Initialize( column, quantity );//取Total Demand字段按月汇总需求数量 |
| | | ccrow.Initialize( daycolumn, quantity ); |
| | | allrow.Initialize( column, quantity ); |
| | | } |
| | | } |
| | | // } |
| | | } |
| | | } |
| | | startofnextyearlead := startofplanning.StartOfNextYear() + FinancialSalesReport::GetDefaultTripLeadingTime(); |
| | | //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 ); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | //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; |