Quintiq file version 2.0
|
#parent: #root
|
StaticMethod GenerateReport (
|
MacroPlan macroPlan
|
)
|
{
|
TextBody:
|
[*
|
macroPlan.PackagingPlanRow( relflush );
|
macroPlan.PackagingPlanColumn( relflush );
|
|
// 创建计划前一天列
|
planPre := macroPlan.PackagingPlanColumn( relnew, StartDate := macroPlan.StartOfPlanning().Date() - 1 );
|
|
// 生成报表
|
traverse ( macroPlan, Product_MP.ProductInStockingPoint_MP, pisp, pisp.IsLeaf() and not pisp.IsSystem() ) {
|
// 创建行
|
ppr := select( macroPlan, PackagingPlanRow, tempPPR, tempPPR.ProductID() = pisp.ProductID() and tempPPR.StockingPointID() = pisp.StockingPointID() );
|
if ( isnull( ppr ) ) {
|
ppr := macroPlan.PackagingPlanRow( relnew, ProductID := pisp.ProductID(), StockingPointID := pisp.StockingPointID(), Factory := "大连工厂", Category := "ZKG" );
|
}
|
|
// 创建计划前一天格子
|
planPreCell := ppr.PackagingPlanCell( relnew, PackagingPlanColumn := planPre, InitialPackagingInventory := 200 );
|
|
// 出发地库存点Trip
|
originTrips := selectset( macroPlan, Unit.Lane.LaneLeg.Trip, tempT, tempT.LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP().ID() = pisp.StockingPointID() );
|
// 目的地库存点Trip
|
destinationTrips := selectset( macroPlan, Unit.Lane.LaneLeg.Trip, tempT, tempT.LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP().ID() = pisp.StockingPointID() );
|
|
traverse ( pisp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispipl, not pispipl.IsPeriodFrozen() ) {
|
// 创建列
|
ppc := select( macroPlan, PackagingPlanColumn, tempPPC, tempPPC.StartDate() = pispipl.Start().Date() );
|
if ( isnull( ppc ) ) {
|
ppc := macroPlan.PackagingPlanColumn( relnew, StartDate := pispipl.Start().Date() );
|
}
|
|
// 创建单元格
|
cell := select( ppr, PackagingPlanCell, tempPPCell, tempPPCell.PackagingPlanColumn() = ppc );
|
if ( isnull( cell ) ) {
|
cell := ppr.PackagingPlanCell( relnew, NetDemand := pispipl.DependentDemandAndSalesDemandQuantity() - pispipl.NewSupplyQuantity(), EndingInventory := pispipl.InventoryLevelEnd() );
|
cell.PackagingPlanColumn( relset, ppc );
|
}
|
|
// 设置调出&调进
|
outs := selectset( originTrips, Elements, tempT, tempT.Departure().Date() = pispipl.Start().Date() );
|
traverse ( outs, Elements, out ) {
|
cell.Out( cell.Out() + out.Quantity() );
|
}
|
|
transferIns := selectset( destinationTrips, Elements, tempT, tempT.Arrival().Date() = pispipl.Start().Date() );
|
traverse ( transferIns, Elements, ti ) {
|
cell.TransferIn( cell.TransferIn() + ti.Quantity() );
|
}
|
|
// 设置前一天库存
|
if ( pispipl.Start().Date() = macroPlan.StartOfPlanning().Date() ) {
|
// prePISPIPL := pispipl.PreviousPlanningPISPIP().astype( ProductInStockingPointInPeriodPlanningLeaf );
|
planPreCell.EndingInventory( 2000 );
|
}
|
}
|
}
|
|
Transaction::Transaction().Propagate( attribute( PackagingPlanRow, FactoryAbbreviation ) );
|
PackagingPlanCell::CalculationPackagingPlanProperties();
|
Transaction::Transaction().Propagate( relation( PackagingPlanCell, Next ) );
|
|
// 设置包装&拆包-数量
|
traverse ( macroPlan, PackagingPlanRow, ppr, ( ppr.ProductID() = "Windshield" and ppr.StockingPointID() = "Bosch" ) or ( ppr.ProductID() = "Windshield" and ppr.StockingPointID() = "Components (Spain)" ) ) {
|
traverse ( ppr, PackagingPlanCell, ppc/*, ppc.StartDate() = Date::Construct( 2020, 4, 1 )*/ ) {
|
// 设置包装数量
|
if ( ppc.PackagingInventory() < ppc.Out() ) { // 包装库存是否小于调出
|
prePPC := ppc.Previous();
|
needPackagingQuantity := ppc.Out() - prePPC.PackagingInventory();
|
while ( not isnull( prePPC ) and needPackagingQuantity > 0.0 ) {
|
// 获取包装lotsize
|
ppls := select( macroPlan, PackagingPlanLotSize, tempPPLS, tempPPLS.Factory() = ppc.PackagingPlanRow().Factory() and
|
tempPPLS.ProductID() = ppc.PackagingPlanRow().ProductID() );
|
|
// 获取最大包装数量
|
maxPackageReflection := Reflection::FindAttribute( "PackagingPlanCapability", ppc.PackagingPlanRow().FactoryAbbreviation() + "_" + ppc.PackagingPlanRow().Category() + "_Package" );
|
maxPackageQuantity := maxPackageReflection.GetNumber( macroPlan.PackagingPlanCapability() );
|
|
// 获取最终包装数量
|
finalPackagingQuantity := minvalue( ceil( needPackagingQuantity / ppls.LotSize() ), ceil( ( maxPackageQuantity - prePPC.Package() ) / ppls.LotSize() ) ) * ppls.LotSize();
|
needPackagingQuantity := needPackagingQuantity - finalPackagingQuantity;
|
|
// 设置包装值
|
prePPC.Package( prePPC.Package() + finalPackagingQuantity );
|
|
//debuginfo( "需要包装数量:", needPackagingQuantity, " lotsize: ", ppls.LotSize(), " 最大包装数量:", maxPackageQuantity, " 最终补的数量:", finalPackagingQuantity );
|
PackagingPlanCell::CalculationPackagingPlanProperties();
|
|
prePPC := prePPC.Previous();
|
}
|
}
|
|
// 设置拆包数量
|
if ( ppc.TransferIn() > 0.0 ) { // 有调入数量
|
// 获取包装lotsize
|
ppls := select( macroPlan, PackagingPlanLotSize, tempPPLS, tempPPLS.Factory() = ppc.PackagingPlanRow().Factory() and
|
tempPPLS.ProductID() = ppc.PackagingPlanRow().ProductID() );
|
|
// 设置拆包值
|
ppc.Unpacking( ppc.TransferIn() );
|
}
|
}
|
}
|
*]
|
}
|