Quintiq file version 2.0
|
#parent: #root
|
StaticMethod Package (
|
MacroPlan macroPlan,
|
PackagingPlanRow ppr,
|
PackagingPlanColumn ppc,
|
output Number needPackagingQuantity
|
)
|
{
|
TextBody:
|
[*
|
// 计划开始时间
|
plannedStartDate := macroPlan.StartOfPlanning().Date();
|
|
traverse ( ppr, PackagingPlanCell, ppcell, ppcell.PackagingPlanColumn() = ppc ) {
|
// Product_MP
|
pmp := select( macroPlan, Product_MP, tempPMP, tempPMP.IsLeaf() and tempPMP.ID() = ppr.ProductID() );
|
// 包装lotsize
|
ppls := select( macroPlan, PackagingPlanLotSize, tempPPLS, tempPPLS.Factory() = ppr.Factory() and
|
tempPPLS.ProductID() = ifexpr( exists( macroPlan, PackagingPlanLotSize, tempPPLS1, tempPPLS1.ProductID() = pmp.ID() ),
|
pmp.ID(),
|
pmp.ParentID() ) );
|
// 一日包装容量
|
ppnc := select( macroPlan, PackagingPlanNewCapability, tempPPNC, tempPPNC.Factory() = ppr.Factory() and
|
tempPPNC.ProductID() = ifexpr( exists( macroPlan, PackagingPlanNewCapability, tempPPNC1, tempPPNC1.ProductID() = pmp.ID() ),
|
pmp.ID(),
|
pmp.ParentID() ) );
|
// Unit
|
us := selectset( macroPlan, Unit, tempU, tempU.ID().Regex( ppr.FactoryAbbreviation() + " " + ppr.Category() ) );
|
|
// 包装库存出现负值,需要设置包装量
|
if ( not isnull( ppls ) and not isnull( ppnc ) ) {
|
// 包装开始的索引
|
indexPPCell := ppcell.Previous();
|
|
// info( "产线个数:", us.Size(), " 开始时间:", ppcell.StartDate().Format( "Y-M2-D2" ), " 包装库存数量:", ppcell.PackagingInventory(), " 需要包装的数量:", needPackagingQuantity,
|
// " 包装lotsize:",guard( ppls.LotSize(), 0 ), " 最大包装容量:", ppnc.MaximumDailyPackagingQuantity() );
|
|
while ( not isnull( indexPPCell ) and
|
indexPPCell.StartDate() >= plannedStartDate and
|
exists( us, Elements.UnitPeriod.astype( UnitPeriodTime ).ShiftPlan, tempSP,
|
tempSP.UnitPeriodTime().StartDate() = indexPPCell.StartDate(),
|
tempSP.Outcome() <> "" ) and
|
needPackagingQuantity > 0 ) {
|
// 能包装的数量
|
canPackagingQuantity := ifexpr( ceil( needPackagingQuantity / ppls.LotSize() ) < floor( ppnc.MaximumDailyPackagingQuantity() / ppls.LotSize() ),
|
ceil( needPackagingQuantity / ppls.LotSize() ),
|
floor( ppnc.MaximumDailyPackagingQuantity() / ppls.LotSize() ) ) * ppls.LotSize();
|
// 改类下其他产品包装总和
|
categoryPackageQuantity := sum( indexPPCell, PackagingPlanColumn.PackagingPlanCell, tempPPCell,
|
tempPPCell <> indexPPCell and
|
tempPPCell.PackagingPlanRow().Factory() = indexPPCell.PackagingPlanRow().Factory() and
|
tempPPCell.PackagingPlanRow().Category() = indexPPCell.PackagingPlanRow().Category(),
|
tempPPCell.Package() );
|
canPackagingQuantity := minvalue( [Number] ( ppnc.MaximumDailyPackagingQuantity() - categoryPackageQuantity ), canPackagingQuantity );
|
// info( "开始包装的日期:", indexPPCell.StartDate().Format( "Y-M2-D2" ), " 能包装的数量:", canPackagingQuantity );
|
|
indexPPCell.Package( canPackagingQuantity );
|
Transaction::Transaction().Propagate( attribute( PackagingPlanCell, PackagingInventory ) );
|
Transaction::Transaction().Propagate( attribute( PackagingPlanCell, UnpackagedInventory ) );
|
|
needPackagingQuantity := needPackagingQuantity - canPackagingQuantity;
|
indexPPCell := indexPPCell.Previous();
|
}
|
}
|
}
|
*]
|
}
|