已重命名2个文件
已添加37个文件
已修改7个文件
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #root |
| | | #parent: #DomainModel |
| | | Dataset WholeShift |
| | | { |
| | | #keys: '2[413988.0.1256611421][413988.0.1256611420]' |
| | | DefaultMDSName: 'WholeShift' |
| | | InstanceType: WholeShift |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Relation TempDependentDemandInputGroup_MacroPlan_MacroPlan_TempDependentDemandInputGroup |
| | | { |
| | | #keys: '1[413988.0.1270630140]' |
| | | DefaultRelationStrategy |
| | | { |
| | | } |
| | | RelationSide.LeftSide MacroPlan |
| | | { |
| | | #keys: '3[413988.0.1270630142][413988.0.1270630141][413988.0.1270630143]' |
| | | Cardinality: '0to1' |
| | | ObjectDefinition: TempDependentDemandInputGroup |
| | | OwningSide: 'Reference' |
| | | } |
| | | RelationSide.RightSide TempDependentDemandInputGroup |
| | | { |
| | | #keys: '3[413988.0.1270630145][413988.0.1270630144][413988.0.1270630146]' |
| | | Cardinality: '1toN' |
| | | ObjectDefinition: MacroPlan |
| | | OwningSide: 'Owned' |
| | | } |
| | | } |
| | |
| | | // å建æ¥å£æ°æ®é |
| | | InterfaceDataset::OnServerStartup(); |
| | | |
| | | // æ´çæ°æ®é |
| | | WholeShift::OnServerStartup(); |
| | | |
| | | // Create MPDomainHandler |
| | | MPDomainHandler::OnServerStartup(); |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Attribute BalanceAxis |
| | | { |
| | | #keys: '3[413988.0.1273364842][413988.0.1273364841][413988.0.1273364843]' |
| | | Description: '平衡轴' |
| | | ValueType: Number |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Attribute ConnectingRod |
| | | { |
| | | #keys: '3[413988.0.1273364822][413988.0.1273364821][413988.0.1273364823]' |
| | | Description: 'è¿æ' |
| | | ValueType: Number |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Attribute Crankshaft |
| | | { |
| | | #keys: '3[413988.0.1273364832][413988.0.1273364831][413988.0.1273364833]' |
| | | Description: 'æ²è½´' |
| | | ValueType: Number |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Attribute CylinderBlock |
| | | { |
| | | #keys: '3[413988.0.1273381359][413988.0.1273381358][413988.0.1273381360]' |
| | | Description: '缸ä½' |
| | | ValueType: Number |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Attribute CylinderHead |
| | | { |
| | | #keys: '3[413988.0.1273364812][413988.0.1273364811][413988.0.1273364813]' |
| | | Description: '缸ç' |
| | | ValueType: Number |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Attribute Divisor |
| | | { |
| | | #keys: '3[413988.0.1270554768][413988.0.1270554767][413988.0.1270554769]' |
| | | ValueType: Real |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Attribute PeriodTask |
| | | { |
| | | #keys: '3[413988.0.1270554778][413988.0.1270554777][413988.0.1270554779]' |
| | | ValueType: String |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Attribute ProductInStockingName |
| | | { |
| | | #keys: '3[413988.0.1270630162][413988.0.1270630161][413988.0.1270630163]' |
| | | ValueType: String |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Attribute UnitID |
| | | { |
| | | #keys: '3[413988.0.1270630172][413988.0.1270630171][413988.0.1270630173]' |
| | | ValueType: String |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Attribute ID |
| | | { |
| | | #keys: '3[413988.0.1270554752][413988.0.1270554751][413988.0.1270554753]' |
| | | ValueType: String |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #root |
| | | #parent: #DomainModel |
| | | Type TempDependentDemandInputGroup |
| | | { |
| | | #keys: '5[413988.0.1270630137][413988.0.1270630135][0.0.0][413988.0.1270630136][413988.0.1270630138]' |
| | | BaseType: Object |
| | | StructuredName: 'TempDependentDemandInputGroups' |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Method CapacityRounding ( |
| | | MacroPlan macroPlan, |
| | | Real timeDifference, |
| | | UnitPeriodTimeBase uptb, |
| | | UnitPeriodTimeBases uptbs |
| | | ) |
| | | { |
| | | TextBody: |
| | | [* |
| | | debuginfo( "éè¦åæ´çæ¶é´ï¼åä½ï¼å°æ¶ï¼", timeDifference, " éè¦åæ´ç产è½å¨æçå¼å§æ¶é´ï¼", uptb.StartDate().Format( "Y-M2-D2" ) ); |
| | | nextUnitPeriodTimeBase := ifexpr( isnull( uptb.Next().astype( UnitPeriodTimeBase ) ), select( uptbs, Elements, tempUPTB, tempUPTB.Start() = uptb.End() ), uptb.Next().astype( UnitPeriodTimeBase ) ); |
| | | //debuginfo( "èèåºåålotsize" ); |
| | | //while ( timeDifference > 0 and not isnull( nextUnitPeriodTimeBase ) ) { |
| | | // debuginfo( "å¼å§åæ¶é´ä¸ºï¼", nextUnitPeriodTimeBase.StartDate().Format( "Y-M2-D2" ), "ç产è½å¨æå" ); |
| | | // |
| | | // traverse ( nextUnitPeriodTimeBase, PeriodTaskOperation, pto, guard( pto.Operation().RoutingStep().Routing().Start(), uptb.StartDate() ) <= uptb.StartDate() and |
| | | // guard( pto.Operation().RoutingStep().Routing().End(), uptb.End().Date() ) >= uptb.End().Date() and |
| | | // timeDifference > 0 ) { |
| | | // minimumQuantityThatCanBeBorrowed := Real::MaxReal(); |
| | | // minimumCapacityThatCanBeBorrowed := Real::MaxReal(); |
| | | // traverse ( pto, NewSupply, ns, true ) { |
| | | // targetBorrowSplitShiftLotsizeLimit := select( scenarioManager, SplitShiftLotsizeLimit, tempSSLL, tempSSLL.unitID() = unitPeriodTimeBase.UnitID() and |
| | | // tempSSLL.productID() = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() and |
| | | // tempSSLL.startTime() <= ns.Start().Date() and |
| | | // tempSSLL.endTime() >= ns.End().Date() ); |
| | | // minimumQuantityThatCanBeBorrowed := minvalue( |
| | | // minvalue( ifexpr( not isnull( targetBorrowSplitShiftLotsizeLimit ) and targetBorrowSplitShiftLotsizeLimit.lotsize() < ns.Quantity(), |
| | | // ns.Quantity() - targetBorrowSplitShiftLotsizeLimit.lotsize(), |
| | | // Real::MaxReal() ), |
| | | // minvalue( |
| | | // ifexpr( ( ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel() ) > 0, |
| | | // ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel(), |
| | | // 0.0 |
| | | // ), |
| | | // ns.Quantity() |
| | | // ) |
| | | // ), |
| | | // minimumCapacityThatCanBeBorrowed |
| | | // ); |
| | | // debuginfo( "nextUnitPeriodTimeBaseçå½å卿任å¡ä¾åºç产ååï¼", ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(), String::Tab(), |
| | | // "æå°åºåï¼", ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel(), String::Tab(), |
| | | // "ç°æåºåï¼", ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd(), String::Tab(), |
| | | // "ä¾åºæ°éï¼", ns.Quantity(), String::Tab(), |
| | | // "æ¯å¦åå¨lotsizeï¼", ifexpr( isnull( targetBorrowSplitShiftLotsizeLimit ), "ä¸åå¨", "åå¨" ), String::Tab(), |
| | | // "lotsizeæ°éï¼", ifexpr( isnull( targetBorrowSplitShiftLotsizeLimit ), -1, targetBorrowSplitShiftLotsizeLimit.lotsize() ) |
| | | // ); |
| | | // |
| | | // sourceProductInStockingPointInPeriodPlanningLeaf := select( ns, ProductInStockingPointInPeriodPlanningLeaf.ProductInStockingPoint_MP.ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), tempPISPIPPL, tempPISPIPPL.Start() = unitPeriodTimeBase.Start() ); |
| | | // sourceNewSupply := select( sourceProductInStockingPointInPeriodPlanningLeaf, NewSupply, tempNS, tempNS.Process_MP().AsProcess_MP().ID() = unitPeriodTimeBase.UnitID() ); |
| | | // targetReturnSplitShiftLotsizeLimit := select( scenarioManager, SplitShiftLotsizeLimit, tempSSLL, tempSSLL.unitID() = unitPeriodTimeBase.UnitID() and |
| | | // tempSSLL.productID() = sourceProductInStockingPointInPeriodPlanningLeaf.ProductInStockingPoint_MP().ProductID() and |
| | | // tempSSLL.startTime() <= sourceProductInStockingPointInPeriodPlanningLeaf.Start().Date() and |
| | | // tempSSLL.endTime() >= sourceProductInStockingPointInPeriodPlanningLeaf.End().Date() ); |
| | | // minimumAcceptableQuantity := minvalue( ifexpr( not isnull( targetReturnSplitShiftLotsizeLimit ) and not isnull( sourceNewSupply ) and targetReturnSplitShiftLotsizeLimit.lotsize() > sourceNewSupply.Quantity(), |
| | | // targetReturnSplitShiftLotsizeLimit.lotsize() - sourceNewSupply.Quantity(), |
| | | // Real::MaxReal() |
| | | // ), |
| | | // ifexpr( ( sourceProductInStockingPointInPeriodPlanningLeaf.MaxInventoryLevel() - sourceProductInStockingPointInPeriodPlanningLeaf.InventoryLevelEnd() ) > 0, |
| | | // sourceProductInStockingPointInPeriodPlanningLeaf.MaxInventoryLevel() - sourceProductInStockingPointInPeriodPlanningLeaf.InventoryLevelEnd(), |
| | | // 0.0 |
| | | // ) |
| | | // ); |
| | | // debuginfo( "è¦åæ´çæ¶é´ï¼", sourceProductInStockingPointInPeriodPlanningLeaf.Start().Date().Format( "Y-M2-D2" ), String::Tab(), |
| | | // "è¦åæ´çæå¤§åºåï¼", sourceProductInStockingPointInPeriodPlanningLeaf.MaxInventoryLevel(), String::Tab(), |
| | | // "è¦åæ´çç°æåºåï¼", sourceProductInStockingPointInPeriodPlanningLeaf.InventoryLevelEnd(), String::Tab(), |
| | | // "è¦åæ´çä¾åºæ°éï¼", guard( sourceNewSupply.Quantity(), 0 ), String::Tab(), |
| | | // "æ¯å¦åå¨lotsizeï¼", ifexpr( isnull( targetReturnSplitShiftLotsizeLimit ), "ä¸åå¨", "åå¨" ), String::Tab(), |
| | | // "lotsizeæ°éï¼", ifexpr( isnull( targetReturnSplitShiftLotsizeLimit ), -1, targetReturnSplitShiftLotsizeLimit.lotsize() ), String::Tab(), |
| | | // "è¦åæ´çæå°æ¥çº³æ°éï¼", minimumAcceptableQuantity |
| | | // ); |
| | | // |
| | | // minimumQuantityThatCanBeBorrowed := minvalue( minimumQuantityThatCanBeBorrowed, minimumAcceptableQuantity ); |
| | | // } |
| | | // debuginfo( "nextUnitPeriodTimeBaseçå½å卿任å¡ä¾åºæ°éï¼", pto.Quantity(), " 卿任å¡è½åçæä½æ°éï¼", minimumQuantityThatCanBeBorrowed ); |
| | | // |
| | | // minimumCapacityThatCanBeBorrowed := minimumQuantityThatCanBeBorrowed / pto.Operation().Throughput(); |
| | | // unifiedProcessingTimeOfRounding := minvalue( timeDifference, minimumCapacityThatCanBeBorrowed ); |
| | | // debuginfo( "å©ä½åæ´ç产è½ï¼", timeDifference, " nextUnitPeriodTimeBaseçå½å卿任å¡ä¾åºæ°éï¼", pto.Quantity(), " è½åç产è½ï¼", minimumCapacityThatCanBeBorrowed, " ç»ä¸åç产è½ï¼", unifiedProcessingTimeOfRounding ); |
| | | // this.A_unifiedProcessingOfRoundingLogic( unifiedProcessingTimeOfRounding, unitPeriodTimeBase, pto, macroPlan ); |
| | | // timeDifference := timeDifference - unifiedProcessingTimeOfRounding; |
| | | // } |
| | | // |
| | | // if ( isnull( nextUnitPeriodTimeBase.Next() ) ) { |
| | | // nextUnitPeriodTimeBase := select( unitPeriodTimeBases, Elements, tempUPTB, tempUPTB.Start() = nextUnitPeriodTimeBase.End() ); |
| | | // } else { |
| | | // nextUnitPeriodTimeBase := nextUnitPeriodTimeBase.Next().astype( UnitPeriodTimeBase ); |
| | | // } |
| | | // debuginfo( "ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã" ); |
| | | //} |
| | | |
| | | debuginfo( "ä¸èè任使¡ä»¶åæ´ä½¿å
¶å°è¾¾æ´ç" ); |
| | | nextUnitPeriodTimeBase := ifexpr( isnull( uptb.Next().astype( UnitPeriodTimeBase ) ), select( uptbs, Elements, tempUPTB, tempUPTB.Start() = uptb.End() ), uptb.Next().astype( UnitPeriodTimeBase ) ); |
| | | while ( timeDifference > 0 and not isnull( nextUnitPeriodTimeBase ) ) { |
| | | debuginfo( "å¼å§åæ¶é´ä¸ºï¼", nextUnitPeriodTimeBase.StartDate().Format( "Y-M2-D2" ), "ç产è½å¨æå" ); |
| | | traverse ( nextUnitPeriodTimeBase, PeriodTaskOperation, pto, guard( pto.Operation().RoutingStep().Routing().Start(), uptb.StartDate() ) <= uptb.StartDate() and |
| | | guard( pto.Operation().RoutingStep().Routing().End(), uptb.End().Date() ) >= uptb.End().Date() and |
| | | timeDifference > 0 ) { |
| | | minimumCapacityThatCanBeBorrowed := pto.Quantity() / pto.Operation().Throughput(); |
| | | unifiedProcessingTimeOfRounding := minvalue( timeDifference, minimumCapacityThatCanBeBorrowed ); |
| | | debuginfo( "å©ä½åæ´ç产è½ï¼", timeDifference, " nextUnitPeriodTimeBaseçå½å卿任å¡ä¾åºæ°éï¼", pto.Quantity(), " è½åç产è½ï¼", minimumCapacityThatCanBeBorrowed, " ç»ä¸åç产è½ï¼", unifiedProcessingTimeOfRounding ); |
| | | this.UnifiedProcessingOfRoundingLogic( unifiedProcessingTimeOfRounding, uptb, pto, macroPlan ); |
| | | timeDifference := timeDifference - unifiedProcessingTimeOfRounding; |
| | | } |
| | | |
| | | if ( isnull( nextUnitPeriodTimeBase.Next() ) ) { |
| | | nextUnitPeriodTimeBase := select( uptbs, Elements, tempUPTB, tempUPTB.Start() = nextUnitPeriodTimeBase.End() ); |
| | | } else { |
| | | nextUnitPeriodTimeBase := nextUnitPeriodTimeBase.Next().astype( UnitPeriodTimeBase ); |
| | | } |
| | | } |
| | | *] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Method IsRoundingOrZeroFilling3 ( |
| | | MacroPlan macroPlan, |
| | | UnitPeriodTimeBases uptbs |
| | | ) |
| | | { |
| | | TextBody: |
| | | [* |
| | | traverse ( uptbs, Elements, uptb, true ) { |
| | | if ( ( uptb.End().Date() - uptb.StartDate() ) > 1 ) { |
| | | debuginfo( "å¼å§æ¶é´ï¼", uptb.StartDate().Format( "Y-M2-D2" ), " ç»ææ¶é´ï¼", uptb.End().Date().Format( "Y-M2-D2" ), " æ¶é´åºé´ï¼", ( uptb.End().Date() - uptb.StartDate() ) ); |
| | | this.ProcessingTimeIntervalIsGreaterThanOneDay( macroPlan, uptb, uptbs ); |
| | | } else if ( ( uptb.End().Date() - uptb.StartDate() ) = 1 ) { |
| | | debuginfo( "å¼å§æ¶é´ï¼", uptb.StartDate().Format( "Y-M2-D2" ), " ç»ææ¶é´ï¼", uptb.End().Date().Format( "Y-M2-D2" ), " æ¶é´åºé´ï¼", ( uptb.End().Date() - uptb.StartDate() ) ); |
| | | this.ProcessingTimeIntervalIsEqualToOneDay( macroPlan, uptb, uptbs ); |
| | | } |
| | | debuginfo( "--------------------------------------------------------------------------------" ); |
| | | Transaction::Transaction().Propagate(); |
| | | } |
| | | *] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Method PostProcessing2 ( |
| | | MacroPlan macroPlan |
| | | ) |
| | | { |
| | | TextBody: |
| | | [* |
| | | // 产线æ´ç |
| | | traverse ( macroPlan, Unit, unit, unit.IsToFill() and unit.HasCapacityTypeTime() ) { |
| | | unitName := unit.Name(); |
| | | debuginfo( "æ´ç产线: ", unitName ); |
| | | |
| | | // ææ¶é´ç»UnitPeriodTimeBaseæåº |
| | | uptbs := selectsortedset( unit, UnitPeriod.astype( UnitPeriodTimeBase ), tempUPTB, not tempUPTB.IsPeriodFrozen() and tempUPTB.IsPlanning(), tempUPTB.Start() ); |
| | | |
| | | // åæ´æè¡¥é¶å½åäº§çº¿ä¸æç产ç产å |
| | | this.IsRoundingOrZeroFilling3( macroPlan, uptbs ); // åè¿é»è¾ |
| | | Transaction::Transaction().Propagate(); |
| | | |
| | | // // 平衡å½åäº§çº¿ä¸æç产ç产ååºåï¼åºå < æå¤§åºåï¼ |
| | | // // this.A_balanceInventory( macroPlan, unitPeriodTimeBases ); |
| | | // // Transaction::Transaction().Propagate(); |
| | | // |
| | | // // 设置å½åäº§çº¿å¨æé´ä¸ºæ¥ç计å䏿¯å¤©åªç产ä¸ç±»äº§å |
| | | // // this.A_produceAProductForAPeriodOfTime( macroPlan, unitPeriodTimeBases ); |
| | | // |
| | | // // Lotsizeé»è¾å¤ç |
| | | // // this.A_lotsize( macroPlan, scenarioManager, unitPeriodTimeBases ); |
| | | // info( "é»è¾ä¸==>ææç次-----------------------------------------------------------------------------------------------------------------------" ); |
| | | // |
| | | // // ææç次 |
| | | // this.A_processingShift( macroPlan, unitPeriodTimeBases, unitPeriodTimeBases.Element( 0 ).StartDate(), true ); |
| | | // Transaction::Transaction().Propagate(); |
| | | // |
| | | // info( "é»è¾å=>å¤ççæ¬¡ï¼å®ç°ä¸ä¸ªç次åªç产ä¸ç±»äº§å-----------------------------------------------------------------------------------------------------------------------" ); |
| | | // |
| | | // // å¤ççæ¬¡ï¼å®ç°ä¸ä¸ªç次åªç产ä¸ç±»äº§å |
| | | // // this.A_processingShiftToProduceClassProducts( macroPlan, unitPeriodTimeBases, unitName ); |
| | | // this.A_processingShiftToProduceClassProducts2( macroPlan, unitPeriodTimeBases, unitName ); |
| | | // Transaction::Transaction().Propagate(); |
| | | // |
| | | // // éç½®éæ± |
| | | // this.A_generateRequirements( macroPlan, unit.ID() ); |
| | | // Transaction::Transaction().Propagate(); |
| | | // } |
| | | } |
| | | |
| | | // è½¦éæ´ç |
| | | traverse ( macroPlan, Unit, unit, unit.IsToFill() and unit.HasCapacityTypeTransportQuantity() ) { |
| | | unitName := unit.Name(); |
| | | debuginfo( "车é产线: ", unitName ); |
| | | } |
| | | *] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Method ProcessingTimeIntervalIsEqualToOneDay ( |
| | | MacroPlan macroPlan, |
| | | UnitPeriodTimeBase uptb, |
| | | UnitPeriodTimeBases uptbs |
| | | ) |
| | | { |
| | | Description: 'å¤çæ¶é´åºé´çäº1天' |
| | | TextBody: |
| | | [* |
| | | if ( uptb.UsedCapacity() = uptb.TotalAvailableCapacity() ) { |
| | | debuginfo( "å¤©å·²ç»æ¯æ´çï¼æ éå¤çï¼ä½¿ç¨äº§è½çäºå¯ç¨äº§è½ï¼" ); |
| | | } else if ( uptb.UsedCapacity().HoursAsReal() = 0 ) { |
| | | debuginfo( "å¤©å·²ç»æ¯æ´çï¼æ éå¤çï¼ä½¿ç¨äº§è½çäº0ï¼" ); |
| | | } else if ( uptb.UsedCapacity() < uptb.TotalAvailableCapacity() and uptb.UsedCapacity().HoursAsReal() > 0 ) { |
| | | whetherToFillInZero := true; // åå§åé»è®¤è¡¥é¶æ¡ä»¶ |
| | | debuginfo( "天䏿¯æ´çï¼éè¦å¤ç" ); |
| | | traverse ( uptb, PeriodTaskOperation, pto, whetherToFillInZero ) { |
| | | debuginfo( "å½å卿任å¡è¾åºç产å个æ°ï¼", pto.NewSupply( relsize ) ); |
| | | traverse( pto, NewSupply, ns, whetherToFillInZero ) { |
| | | debuginfo( "å½åä¾åºç产åï¼", ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(), " å½åä¾åºç产åçå©ä½åºåï¼", ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd(), " å½åä¾åºç产åçæå°åºåï¼", ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel(), " å½åä¾åºç产åçæå¤§åºåï¼", ns.ProductInStockingPointInPeriodPlanningLeaf().MaxInventoryLevel()," å½å产åå¨è¯¥å¨æä»»å¡çä¾åºéï¼", ns.Quantity() ); |
| | | if ( ( ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.Quantity() ) < ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel() ) { |
| | | debuginfo( "å½å卿任å¡ä¸è½è¡¥é¶" ); |
| | | whetherToFillInZero := false; |
| | | } |
| | | } |
| | | debuginfo( ".........." ); |
| | | } |
| | | // whetherToFillInZero := false; |
| | | if ( whetherToFillInZero ) { |
| | | debuginfo( "æ§è¡è¡¥é¶" ); |
| | | this.ZeroCapacityReplenishment( macroPlan, uptb.UsedCapacity().HoursAsReal(), uptb, uptbs ); |
| | | } else { |
| | | debuginfo( "æ§è¡åæ´" ); |
| | | this.CapacityRounding( macroPlan, uptb.TotalAvailableCapacity().HoursAsReal() - uptb.UsedCapacity().HoursAsReal(), uptb, uptbs ); |
| | | } |
| | | } else { |
| | | debuginfo( "天åºç°å¼å¸¸" ); |
| | | } |
| | | *] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Method ProcessingTimeIntervalIsGreaterThanOneDay ( |
| | | MacroPlan macroPlan, |
| | | UnitPeriodTimeBase uptb, |
| | | UnitPeriodTimeBases uptbs |
| | | ) |
| | | { |
| | | Description: 'å¤çæ¶é´åºé´å¤§äº1天' |
| | | TextBody: |
| | | [* |
| | | if ( uptb.UsedCapacity() = uptb.TotalAvailableCapacity() ) { |
| | | debuginfo( "å¨å·²ç»æ¯æ´çï¼æ éå¤ç" ); |
| | | } else if ( uptb.UsedCapacity() < uptb.TotalAvailableCapacity() and uptb.UsedCapacity().HoursAsReal() > 0 ) { |
| | | roundedCapacity := 0.0; |
| | | capacityForZeroCompensation := 0.0; |
| | | indexStartTime := uptb.StartDate(); |
| | | indexEndTime := uptb.End().Date(); |
| | | remainingCapacity := uptb.UsedCapacity().HoursAsReal(); |
| | | debuginfo( "使ç¨ç产è½ï¼", remainingCapacity ); |
| | | while ( indexStartTime < indexEndTime and roundedCapacity = 0 and capacityForZeroCompensation = 0 ) { |
| | | indexStartTimeAvailableCapacity := WholeShift::GenerateDailyCapacity( macroPlan, indexStartTime, uptb.UnitID() ).HoursAsReal(); |
| | | if ( ( remainingCapacity - indexStartTimeAvailableCapacity ) < 0 ) { |
| | | roundedCapacity := abs( remainingCapacity - indexStartTimeAvailableCapacity ); |
| | | capacityForZeroCompensation := remainingCapacity; |
| | | remainingCapacity := remainingCapacity - indexStartTimeAvailableCapacity; |
| | | } else { |
| | | remainingCapacity := remainingCapacity - indexStartTimeAvailableCapacity; |
| | | } |
| | | debuginfo( "ç´¢å¼å¼å§æ¶é´ï¼", indexStartTime, " å¯ç¨äº§è½ï¼", indexStartTimeAvailableCapacity, " 使ç¨ç产è½-å¯ç¨äº§è½ï¼å©ä½äº§è½ï¼ï¼", remainingCapacity ); |
| | | indexStartTime := indexStartTime + 1; |
| | | } |
| | | |
| | | debuginfo( "åæ´äº§è½ï¼", roundedCapacity, " è¡¥é¶äº§è½ï¼", capacityForZeroCompensation ); |
| | | |
| | | if ( roundedCapacity = 0 and capacityForZeroCompensation = 0 ) { |
| | | debuginfo( "å·²å°è¾¾æ´çææ" ); |
| | | } else { |
| | | whetherToFillInZero := true; |
| | | tempCapacityForZeroCompensation := capacityForZeroCompensation; |
| | | traverse ( uptb, PeriodTaskOperation, pto, whetherToFillInZero ) { |
| | | quantityOfMinimumSupplyRound := Real::MaxReal(); |
| | | traverse ( pto, NewSupply, ns, whetherToFillInZero ) { |
| | | quantityOfMinimumSupplyRound := minvalue( minvalue( ifexpr( ( ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel() ) > 0, ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel(), 0.0 ), |
| | | ns.Quantity() |
| | | ) / pto.Operation().Throughput(), |
| | | quantityOfMinimumSupplyRound |
| | | ); |
| | | } |
| | | tempCapacityForZeroCompensation := tempCapacityForZeroCompensation - quantityOfMinimumSupplyRound; |
| | | if ( tempCapacityForZeroCompensation < 0 ) { |
| | | whetherToFillInZero := false; |
| | | } |
| | | debuginfo( "å½å卿任å¡ä¾åºæ°éï¼", pto.Quantity(), " æå°è¡¥é¶äº§è½ï¼", quantityOfMinimumSupplyRound, " è¡¥é¶åè¿å©ï¼", tempCapacityForZeroCompensation ); |
| | | } |
| | | |
| | | // whetherToFillInZero := true; |
| | | |
| | | if ( not whetherToFillInZero ) { |
| | | debuginfo( "æ§è¡è¡¥é¶" ); |
| | | this.ZeroCapacityReplenishment( macroPlan, capacityForZeroCompensation, uptb, uptbs ); |
| | | } else { |
| | | debuginfo( "æ§è¡åæ´" ); |
| | | this.CapacityRounding( macroPlan, roundedCapacity, uptb, uptbs ); |
| | | } |
| | | } |
| | | } else { |
| | | debuginfo( "å¨åºç°å¼å¸¸" ); |
| | | } |
| | | *] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Method UnifiedProcessingOfComplementZeroLogic ( |
| | | Real unifiedProcessingTimeOfRounding, |
| | | PeriodTaskOperation sourcePeriodTaskOperation, |
| | | UnitPeriodTimeBase targetUnitPeriodTimeBase, |
| | | MacroPlan macroPlan |
| | | ) |
| | | { |
| | | TextBody: |
| | | [* |
| | | targetPeriodTaskOperation := select( targetUnitPeriodTimeBase, PeriodTaskOperation, tempOTO, tempOTO.Operation() = sourcePeriodTaskOperation.Operation() ); |
| | | |
| | | if ( isnull( targetPeriodTaskOperation ) ) { |
| | | debuginfo( "ç®æ 产è½å¨æä¸åå¨ç®æ 卿任å¡" ); |
| | | sourcePeriodTaskOperation.Update( sourcePeriodTaskOperation.Quantity() - ( sourcePeriodTaskOperation.Operation().Throughput() * unifiedProcessingTimeOfRounding ), false ); |
| | | targetPeriodTaskOperation := PeriodTaskOperation::Create( sourcePeriodTaskOperation.Operation(), targetUnitPeriodTimeBase, sourcePeriodTaskOperation.Operation().Throughput() * unifiedProcessingTimeOfRounding, false ); |
| | | Transaction::Transaction().Propagate(); |
| | | |
| | | // info( "æ°å建ç卿任塿å ä¸ªéæ±ï¼", targetPeriodTaskOperation.DependentDemand( relsize ), " 卿任å¡ID为ï¼", targetPeriodTaskOperation.Key().AsQUILL() ); |
| | | traverse ( targetPeriodTaskOperation, DependentDemand, dd, true ) { |
| | | targetDependentDemand := select( sourcePeriodTaskOperation, DependentDemand, tempDD, tempDD.ProcessInput().astype( OperationInput ).Name() = dd.ProcessInput().astype( OperationInput ).Name() ); |
| | | targetTempDependentDemandInputGroup := select( macroPlan, TempDependentDemandInputGroup, tempTDDIG, tempTDDIG.ID() = guard( targetDependentDemand.Key().AsQUILL(), "" ) ); |
| | | if ( not isnull( targetTempDependentDemandInputGroup ) ) { |
| | | // info( "å建äºä¾èµéæ±ï¼ID为ï¼", dd.Key().AsQUILL() ); |
| | | macroPlan.TempDependentDemandInputGroup( relnew, ID := dd.Key().AsQUILL(), |
| | | Divisor := targetTempDependentDemandInputGroup.Divisor(), |
| | | UnitID := targetTempDependentDemandInputGroup.UnitID(), |
| | | ProductInStockingName := targetTempDependentDemandInputGroup.ProductInStockingName() ); |
| | | } |
| | | } |
| | | Transaction::Transaction().Propagate(); |
| | | } else { |
| | | debuginfo( "ç®æ 产è½å¨æåå¨ç®æ 卿任å¡" ); |
| | | sourcePeriodTaskOperation.Update( sourcePeriodTaskOperation.Quantity() - ( sourcePeriodTaskOperation.Operation().Throughput() * unifiedProcessingTimeOfRounding ), false ); |
| | | targetPeriodTaskOperation.Update( targetPeriodTaskOperation.Quantity() + ( targetPeriodTaskOperation.Operation().Throughput() * unifiedProcessingTimeOfRounding ), false ); |
| | | Transaction::Transaction().Propagate(); |
| | | } |
| | | *] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Method UnifiedProcessingOfRoundingLogic ( |
| | | Real unifiedProcessingTimeOfRounding, |
| | | UnitPeriodTimeBase sourceUnitPeriodTimeBase, |
| | | PeriodTaskOperation periodTaskOperation, |
| | | MacroPlan macroPlan |
| | | ) |
| | | { |
| | | TextBody: |
| | | [* |
| | | sourcePeriodTaskOperation := select( sourceUnitPeriodTimeBase, PeriodTaskOperation, tempOTO, tempOTO.Operation() = periodTaskOperation.Operation() ); |
| | | |
| | | if ( isnull( sourcePeriodTaskOperation ) ) { |
| | | debuginfo( "æºäº§è½å¨æä¸åå¨ç®æ 卿任å¡" ); |
| | | periodTaskOperation.Update( periodTaskOperation.Quantity() - ( periodTaskOperation.Operation().Throughput() * unifiedProcessingTimeOfRounding ), false ); |
| | | sourcePeriodTaskOperation := PeriodTaskOperation::Create( periodTaskOperation.Operation(), sourceUnitPeriodTimeBase, periodTaskOperation.Operation().Throughput() * unifiedProcessingTimeOfRounding, false ); |
| | | Transaction::Transaction().Propagate(); |
| | | |
| | | // info( "æ°å建ç卿任塿å ä¸ªéæ±ï¼", sourcePeriodTaskOperation.DependentDemand( relsize ), " 卿任å¡ID为ï¼", sourcePeriodTaskOperation.Key().AsQUILL() ); |
| | | traverse ( sourcePeriodTaskOperation, DependentDemand, dd, true ) { |
| | | targetDependentDemand := select( periodTaskOperation, DependentDemand, tempDD, tempDD.ProcessInput().astype( OperationInput ).Name() = dd.ProcessInput().astype( OperationInput ).Name() ); |
| | | targetTempDependentDemandInputGroup := select( macroPlan, TempDependentDemandInputGroup, tempTDDIG, tempTDDIG.ID() = guard( targetDependentDemand.Key().AsQUILL(), "" ) ); |
| | | if ( not isnull( targetTempDependentDemandInputGroup ) ) { |
| | | // info( "å建äºä¾èµéæ±ï¼ID为ï¼", dd.Key().AsQUILL() ); |
| | | macroPlan.TempDependentDemandInputGroup( relnew, ID := dd.Key().AsQUILL(), |
| | | Divisor := targetTempDependentDemandInputGroup.Divisor(), |
| | | UnitID := targetTempDependentDemandInputGroup.UnitID(), |
| | | ProductInStockingName := targetTempDependentDemandInputGroup.ProductInStockingName() ); |
| | | } |
| | | } |
| | | Transaction::Transaction().Propagate(); |
| | | } else { |
| | | debuginfo( "æºäº§è½å¨æåå¨ç®æ 卿任å¡" ); |
| | | periodTaskOperation.Update( periodTaskOperation.Quantity() - ( periodTaskOperation.Operation().Throughput() * unifiedProcessingTimeOfRounding ), false ); |
| | | sourcePeriodTaskOperation.Update( sourcePeriodTaskOperation.Quantity() + ( sourcePeriodTaskOperation.Operation().Throughput() * unifiedProcessingTimeOfRounding ), false ); |
| | | Transaction::Transaction().Propagate(); |
| | | } |
| | | *] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Method ZeroCapacityReplenishment ( |
| | | MacroPlan macroPlan, |
| | | Real timeDifference, |
| | | UnitPeriodTimeBase uptb, |
| | | UnitPeriodTimeBases uptbs |
| | | ) |
| | | { |
| | | TextBody: |
| | | [* |
| | | debuginfo( "éè¦è¡¥é¶çæ¶é´ï¼åä½ï¼å°æ¶ï¼", timeDifference, " éè¦è¡¥é¶ç产è½å¨æçå¼å§æ¶é´ï¼", uptb.StartDate().Format( "Y-M2-D2" ) ); |
| | | |
| | | //debuginfo( "èèåºåãlotsize" ); |
| | | //traverse ( unitPeriodTimeBase, PeriodTaskOperation, pto, timeDifference > 0 ) { |
| | | // minimumQuantityThatCanBeBorrowed := Real::MaxReal(); |
| | | // minimumCapacityThatCanBeBorrowed := Real::MaxReal(); |
| | | // traverse ( pto, NewSupply, ns, true ) { |
| | | // targetBorrowSplitShiftLotsizeLimit := select( scenarioManager, SplitShiftLotsizeLimit, tempSSLL, tempSSLL.unitID() = unitPeriodTimeBase.UnitID() and |
| | | // tempSSLL.productID() = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() and |
| | | // tempSSLL.startTime() <= ns.Start().Date() and |
| | | // tempSSLL.endTime() >= ns.End().Date() ); |
| | | // minimumQuantityThatCanBeBorrowed := minvalue( |
| | | // minvalue( ifexpr( not isnull( targetBorrowSplitShiftLotsizeLimit ) and targetBorrowSplitShiftLotsizeLimit.lotsize() < ns.Quantity(), |
| | | // ns.Quantity() - targetBorrowSplitShiftLotsizeLimit.lotsize(), |
| | | // Real::MaxReal() ), |
| | | // minvalue( |
| | | // ifexpr( ( ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel() ) > 0, |
| | | // ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel(), |
| | | // 0.0 |
| | | // ), |
| | | // ns.Quantity() |
| | | // ) |
| | | // ), |
| | | // minimumQuantityThatCanBeBorrowed |
| | | // ); |
| | | // } |
| | | // minimumCapacityThatCanBeBorrowed := minimumQuantityThatCanBeBorrowed / pto.Operation().Throughput(); |
| | | // nextUnitPeriodTimeBase := ifexpr( isnull( unitPeriodTimeBase.Next().astype( UnitPeriodTimeBase ) ), select( unitPeriodTimeBases, Elements, tempUPTB, tempUPTB.Start() = unitPeriodTimeBase.End() ), unitPeriodTimeBase.Next().astype( UnitPeriodTimeBase ) ); |
| | | // while ( timeDifference > 0 and not isnull( nextUnitPeriodTimeBase ) and minimumCapacityThatCanBeBorrowed > 0 ) { |
| | | // acceptableCapacity := ifexpr( ( nextUnitPeriodTimeBase.TotalAvailableCapacity().HoursAsReal() - nextUnitPeriodTimeBase.UsedCapacity().HoursAsReal() ) > 0, |
| | | // nextUnitPeriodTimeBase.TotalAvailableCapacity().HoursAsReal() - nextUnitPeriodTimeBase.UsedCapacity().HoursAsReal(), |
| | | // 0.0 ); |
| | | // unifiedProcessingTimeOfComplementZero := minvalue( timeDifference, minimumCapacityThatCanBeBorrowed, acceptableCapacity ); |
| | | // debuginfo( "æ¥çº³ç卿æ¶é´ï¼", nextUnitPeriodTimeBase.StartDate().Format( "Y-M2-D2" ), String::Tab(), |
| | | // "æ¥çº³çå¨æè½æ¥åç产è½ï¼", acceptableCapacity, String::Tab(), |
| | | // "å©ä½è¡¥é¶ç产è½ï¼", timeDifference, String::Tab(), |
| | | // "ç»ä¸è½¬ç§»ç产è½ï¼", unifiedProcessingTimeOfComplementZero, String::Tab() |
| | | // ); |
| | | // this.A_unifiedProcessingOfComplementZeroLogic( unifiedProcessingTimeOfComplementZero, pto, nextUnitPeriodTimeBase, macroPlan ); |
| | | // minimumCapacityThatCanBeBorrowed := minimumCapacityThatCanBeBorrowed - unifiedProcessingTimeOfComplementZero; |
| | | // timeDifference := timeDifference - unifiedProcessingTimeOfComplementZero; |
| | | // if ( isnull( nextUnitPeriodTimeBase.Next() ) ) { |
| | | // nextUnitPeriodTimeBase := select( unitPeriodTimeBases, Elements, tempUPTB, tempUPTB.Start() = nextUnitPeriodTimeBase.End() ); |
| | | // } else { |
| | | // nextUnitPeriodTimeBase := nextUnitPeriodTimeBase.Next().astype( UnitPeriodTimeBase ); |
| | | // } |
| | | // } |
| | | //} |
| | | |
| | | debuginfo( "ä¸èèåºåãlotsize使å
¶è¾¾å°æ´ç" ); |
| | | traverse ( uptb, PeriodTaskOperation, pto, timeDifference > 0 ) { |
| | | minimumQuantityThatCanBeBorrowed := Real::MaxReal(); |
| | | minimumCapacityThatCanBeBorrowed := Real::MaxReal(); |
| | | traverse ( pto, NewSupply, ns, true ) { |
| | | minimumQuantityThatCanBeBorrowed := minvalue( |
| | | minvalue( |
| | | ifexpr( ( ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel() ) > 0, |
| | | ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel(), |
| | | 0.0 |
| | | ), |
| | | ns.Quantity() |
| | | ), |
| | | minimumQuantityThatCanBeBorrowed |
| | | ); |
| | | } |
| | | minimumCapacityThatCanBeBorrowed := minimumQuantityThatCanBeBorrowed / pto.Operation().Throughput(); |
| | | nextUnitPeriodTimeBase := ifexpr( isnull( uptb.Next().astype( UnitPeriodTimeBase ) ), select( uptbs, Elements, tempUPTB, tempUPTB.Start() = uptb.End() ), uptb.Next().astype( UnitPeriodTimeBase ) ); |
| | | while ( timeDifference > 0 and not isnull( nextUnitPeriodTimeBase ) and minimumCapacityThatCanBeBorrowed > 0 ) { |
| | | acceptableCapacity := ifexpr( ( nextUnitPeriodTimeBase.TotalAvailableCapacity().HoursAsReal() - nextUnitPeriodTimeBase.UsedCapacity().HoursAsReal() ) > 0, |
| | | nextUnitPeriodTimeBase.TotalAvailableCapacity().HoursAsReal() - nextUnitPeriodTimeBase.UsedCapacity().HoursAsReal(), |
| | | 0.0 ); |
| | | unifiedProcessingTimeOfComplementZero := minvalue( timeDifference, minimumCapacityThatCanBeBorrowed, acceptableCapacity ); |
| | | debuginfo( "æ¥çº³ç卿æ¶é´ï¼", nextUnitPeriodTimeBase.StartDate().Format( "Y-M2-D2" ), String::Tab(), |
| | | "æ¥çº³çå¨æè½æ¥åç产è½ï¼", acceptableCapacity, String::Tab(), |
| | | "å©ä½è¡¥é¶ç产è½ï¼", timeDifference, String::Tab(), |
| | | "ç»ä¸è½¬ç§»ç产è½ï¼", unifiedProcessingTimeOfComplementZero, String::Tab() |
| | | ); |
| | | this.UnifiedProcessingOfComplementZeroLogic( unifiedProcessingTimeOfComplementZero, pto, uptb, macroPlan ); |
| | | minimumCapacityThatCanBeBorrowed := minimumCapacityThatCanBeBorrowed - unifiedProcessingTimeOfComplementZero; |
| | | timeDifference := timeDifference - unifiedProcessingTimeOfComplementZero; |
| | | if ( isnull( nextUnitPeriodTimeBase.Next() ) ) { |
| | | nextUnitPeriodTimeBase := select( uptbs, Elements, tempUPTB, tempUPTB.Start() = nextUnitPeriodTimeBase.End() ); |
| | | } else { |
| | | nextUnitPeriodTimeBase := nextUnitPeriodTimeBase.Next().astype( UnitPeriodTimeBase ); |
| | | } |
| | | } |
| | | } |
| | | *] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | StaticMethod GenerateDailyCapacity ( |
| | | MacroPlan macroPlan, |
| | | Date indexDate, |
| | | String unitID |
| | | ) as Duration |
| | | { |
| | | TextBody: |
| | | [* |
| | | returnCapacity := Duration::Zero(); |
| | | |
| | | traverse ( macroPlan, Unit.UnitPeriod.astype( UnitPeriodTimeBase ), this, this.UnitID() = unitID and |
| | | this.StartDate() <= indexDate and |
| | | this.End().Date() > indexDate and |
| | | /*this.IsBase() and*/ |
| | | this.IsPlanning() ) { |
| | | // Determined by the used shift pattern, the efficiency rate, maintenance considering its maintenance factor, allocation, max load percentage and calendar elements. |
| | | // debuginfo( "éåçæ¶é´èç¹ï¼å¼å§æ¶é´ï¼ï¼", this.StartDate(), " ç»ææ¶é´ï¼", this.End() ); |
| | | value := Duration::Zero(); |
| | | |
| | | datetimevector := DateTimeVector::Construct(); |
| | | durationvector := RealVector::Construct(); |
| | | |
| | | if( this.IsPlanning() or this.IsBase() ) |
| | | { |
| | | planningup := ifexpr( this.IsPlanning(), |
| | | this, // Case 1: planning UnitPeriod: aggregate values from associated period tasks |
| | | this.PlanningUP().astype( UnitPeriodTimeBase ) ); // Case 2: base, non planning UnitPeriod: disaggregate value from planning UnitPeriod |
| | | |
| | | if( not isnull( planningup ) ) |
| | | { |
| | | if( not isnull( planningup.Period_MP() ) |
| | | and not isnull( planningup.ShiftPattern() ) |
| | | and not planningup.Period_MP().IsInHour() ) //gdn1 HourlyPeriod is not applicable for ShiftPattern |
| | | { |
| | | lastshiftday := planningup.StartDate() - planningup.Period_MP().Start().StartOfWeek().Date() + 1 |
| | | |
| | | nrdaysinthisperiod := planningup.Duration().DaysAsReal(); |
| | | |
| | | firstday := planningup.Period_MP().Start(); |
| | | numberofshiftday := planningup.ShiftPattern().ShiftDay( relsize ); |
| | | |
| | | if( not isnull( planningup.Previous() ) ) |
| | | { |
| | | lastshiftday := planningup.Previous().astype( UnitPeriodTimeBase ).PreviousPeriodLastShiftDay() + 1; |
| | | |
| | | } |
| | | |
| | | for( i := 0; i < nrdaysinthisperiod and firstday + Duration::Days( i ) >= planningup.Unit().StartDate().DateTime() ; i++ ) |
| | | { |
| | | shiftday := lastshiftday + i; |
| | | |
| | | if( shiftday > numberofshiftday ) |
| | | { |
| | | shiftday := shiftday mod numberofshiftday; |
| | | |
| | | if( shiftday = 0 ) |
| | | { |
| | | shiftday := numberofshiftday; |
| | | } |
| | | } |
| | | |
| | | shift := select( planningup.ShiftPattern(), ShiftDay, shift, shift.Day() = shiftday, true ); |
| | | unavailable := planningup.Unit().UnavailableTime( firstday + Duration::Days( i ), firstday + Duration::Days( i + 1 ) ); |
| | | |
| | | if( not isnull( shift ) ) |
| | | { |
| | | shiftduration := maxvalue( ( shift.Capacity() - unavailable ), Duration::Zero() ); |
| | | //value := value + shiftduration; |
| | | datetimevector.Append( firstday + Duration ::Days( i ) ); |
| | | durationvector.Append( shiftduration.HoursAsReal() ); |
| | | } |
| | | if ( /*this.UnitID() = unitID and this.IsBase() and this.IsPlanning() and*/ ( this.StartDate() + i ) = indexDate ) { |
| | | // debuginfo( "å½åå¼å§æ¶é´ï¼", this.StartDate() + i, " å½å产è½ï¼", maxvalue( ( shift.Capacity() - unavailable ), Duration::Zero() ) ); |
| | | // this.MacroPlan().UnitPeriodTimeBaseDailyCapacity( relnew, startDate := this.StartDate() + i, |
| | | // capacity := maxvalue( ( shift.Capacity() - unavailable ), Duration::Zero() ) ); |
| | | returnCapacity := maxvalue( ( shift.Capacity() - unavailable ), Duration::Zero() ); |
| | | } |
| | | } // for |
| | | |
| | | value := this.GetPlanningCapacity( datetimevector, durationvector ); |
| | | }// if planning period not in hour |
| | | else if ( planningup.Period_MP().DurationInDays() < 1 ) //gdn1 HourlyPeriod is always same as PeriodDuration |
| | | { |
| | | value := planningup.Unit().UnitCalendar().AvailableTime( planningup.Start(), planningup.End(), 0.00000001 ); // Check calendar to make hourly period work with the calendar |
| | | } |
| | | |
| | | value := maxvalue( ( value * planningup.Efficiency() * planningup.Allocation() - ( planningup.Maintenance() * this.PlanningSystemRatio() ) )* planningup.NrOfOpen(), Duration::Zero() ); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | |
| | | value := sum( this.GetChildrenOfPeriodDimension(), Elements.astype( UnitPeriodTimeBase ), e, e.BaseAvailableCapacity() ); |
| | | } |
| | | |
| | | // this.BaseAvailableCapacity( value ); |
| | | } |
| | | |
| | | return returnCapacity; |
| | | *] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | StaticMethod OnServerStartup |
| | | { |
| | | TextBody: |
| | | [* |
| | | // lihongji May-15-2024 (created) |
| | | folder := DomainModel::Domain().MDSFolderDefinitions().FindFolder( "/root" ); |
| | | |
| | | datasetName := typeof( WholeShift ).Name(); |
| | | |
| | | oinfo := MDSEditor::Editor().ObjectInfos( datasetName, folder.FolderID(), datasetName ); |
| | | |
| | | o := select( oinfo, Elements, o, not o.IsLoaded() ); |
| | | emptydataset := isnull( o ); |
| | | |
| | | if ( emptydataset ) { |
| | | MDSWholeShift::CreateMDS( datasetName, DMF_Utility::GetStorageState() ); |
| | | } else { |
| | | MDSWholeShift::LoadMDSAndConvert( o.MDSID(), DMF_Utility::GetStorageState() ); |
| | | } |
| | | *] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #root |
| | | #parent: #DomainModel |
| | | Type WholeShift |
| | | { |
| | | #keys: '5[413988.0.1256611417][413988.0.1256611415][0.0.0][413988.0.1256611416][413988.0.1256611418]' |
| | | BaseType: Object |
| | | StructuredName: 'WholeShifts' |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | TypeDataInterface Entity |
| | | { |
| | | TypeKey: '[127710.1.1013709077]' |
| | | ImageDataMember ImgIsToFill |
| | | { |
| | | #keys: '1[413988.0.1254350815]' |
| | | ImageSpecifications: |
| | | [ |
| | | ImageDataMemberImageSpecification |
| | | { |
| | | Image: 'CHECKEDCHECKBOX' |
| | | Quill: "( object.DisplayCapacityType() = 'Time' or object.DisplayCapacityType() = 'Transport quantity' ) and object.IsToFill()" |
| | | Value: 'Fill' |
| | | } |
| | | ImageDataMemberImageSpecification |
| | | { |
| | | Image: 'EMPTYCHECKBOX' |
| | | Quill: "( object.DisplayCapacityType() = 'Time' or object.DisplayCapacityType() = 'Transport quantity' ) and not object.IsToFill()" |
| | | Value: 'NotFill' |
| | | } |
| | | ] |
| | | } |
| | | } |
| | |
| | | Component ComponentMenu347 { #keys: '[413988.0.1172464302]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'FormTest1' Text: '' ] } |
| | | Component ComponentMenu357 { #keys: '[414996.0.395684386]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'frmStandardAnalysis589' Text: 'Archive Execution Status' ] } |
| | | Component ComponentMenu702 { #keys: '[413988.0.1234424010]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'frmStandardAnalysis822' Text: 'Interface Dataset' ] } |
| | | Component menuSeparator891 { #keys: '[413988.0.1263894630]' BaseType: 'Menu' Properties: [ Separator: true ] } |
| | | Component MenuWholeShift { #keys: '[413988.0.1263894682]' BaseType: 'Menu' Properties: [ Image: 'FISH_BOWL' Text: 'æµè¯æ´ç' ] } |
| | | ] |
| | | Properties: |
| | | [ |
| | |
| | | c: ComponentMenu702 |
| | | c: menuSeparator222 |
| | | c: ComponentMenu347 |
| | | c: menuSeparator891 |
| | | c: MenuWholeShift |
| | | } |
| | | ] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: mbMainMenu/MenuWholeShift |
| | | Response OnClick () id:Response_MacroPlanner_mbMainMenu_MenuWholeShift_OnClick |
| | | { |
| | | #keys: '[413988.0.1263894734]' |
| | | Body: |
| | | [* |
| | | WholeShift.PostProcessing2( MacroPlan ); |
| | | *] |
| | | CanBindMultiple: false |
| | | DefinitionID: 'Responsedef_Menu_OnClick' |
| | | Precondition: |
| | | [* |
| | | return not isnull( MacroPlan ) and not isnull( WholeShift ); |
| | | *] |
| | | } |
| | |
| | | #keys: '[414702.2.1843141002]' |
| | | CanBindMultiple: false |
| | | DefinitionID: 'Responsedef_WebButton_OnClick' |
| | | Precondition: |
| | | [* |
| | | return not isnull( MacroPlan ) and not isnull( WholeShift ); |
| | | *] |
| | | QuillAction |
| | | { |
| | | Body: |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | Component pnlActions |
| | | { |
| | | #keys: '[413988.0.1274023099]' |
| | | BaseType: 'WebPanel' |
| | | Children: |
| | | [ |
| | | Component btnOk |
| | | { |
| | | #keys: '[413988.0.1274023103]' |
| | | BaseType: 'WebButton' |
| | | Properties: |
| | | [ |
| | | Label: 'OK' |
| | | Taborder: 0 |
| | | ] |
| | | } |
| | | Component btnCancel |
| | | { |
| | | #keys: '[413988.0.1274023105]' |
| | | BaseType: 'WebButton' |
| | | Properties: |
| | | [ |
| | | Label: 'Cancel' |
| | | Taborder: 1 |
| | | ] |
| | | } |
| | | ] |
| | | Properties: |
| | | [ |
| | | Alignment: 'trailing' |
| | | Border: true |
| | | ExcludeFromActiveComponent: true |
| | | FixedSize: true |
| | | Orientation: 'horizontal' |
| | | Padding: 'true' |
| | | Style: 'footer' |
| | | Taborder: 1 |
| | | ] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | Component pnlContent |
| | | { |
| | | #keys: '[413988.0.1274023097]' |
| | | BaseType: 'WebPanel' |
| | | Children: |
| | | [ |
| | | Component npCylinderBlock |
| | | { |
| | | #keys: '[413988.0.1273522242]' |
| | | BaseType: 'WebNumberPicker' |
| | | Properties: |
| | | [ |
| | | DataBinding: 'MacroPlan.CylinderBlock' |
| | | Label: '缸ä½(pcs)' |
| | | Taborder: 0 |
| | | ] |
| | | } |
| | | Component npCylinderHead |
| | | { |
| | | #keys: '[413988.0.1273522255]' |
| | | BaseType: 'WebNumberPicker' |
| | | Properties: |
| | | [ |
| | | DataBinding: 'MacroPlan.CylinderHead' |
| | | Label: '缸ç(pcs)' |
| | | Taborder: 1 |
| | | ] |
| | | } |
| | | Component npConnectingRod |
| | | { |
| | | #keys: '[413988.0.1273522267]' |
| | | BaseType: 'WebNumberPicker' |
| | | Properties: |
| | | [ |
| | | DataBinding: 'MacroPlan.ConnectingRod' |
| | | Label: 'è¿æ(pcs)' |
| | | Taborder: 2 |
| | | ] |
| | | } |
| | | Component npCrankshaft |
| | | { |
| | | #keys: '[413988.0.1273522280]' |
| | | BaseType: 'WebNumberPicker' |
| | | Properties: |
| | | [ |
| | | DataBinding: 'MacroPlan.Crankshaft' |
| | | Label: 'æ²è½´(pcs)' |
| | | Taborder: 3 |
| | | ] |
| | | } |
| | | Component npBalanceAxis |
| | | { |
| | | #keys: '[413988.0.1273522292]' |
| | | BaseType: 'WebNumberPicker' |
| | | Properties: |
| | | [ |
| | | DataBinding: 'MacroPlan.BalanceAxis' |
| | | Label: '平衡轴(pcs)' |
| | | Taborder: 4 |
| | | ] |
| | | } |
| | | ] |
| | | Properties: |
| | | [ |
| | | Padding: 'true' |
| | | Taborder: 0 |
| | | ] |
| | | } |
ÎļþÃû´Ó _Main/UI/MacroPlannerWebApp/Component_DialogWholeShiftSystem/Response_pnlActions_btnCancel_OnClick.def ÐÞ¸Ä |
| | |
| | | #parent: pnlActions/btnCancel |
| | | Response OnClick () id:Response_pnlActions_btnCancel_OnClick |
| | | { |
| | | #keys: '[414702.2.1844994368]' |
| | | #keys: '[413988.0.1274023109]' |
| | | DefinitionID: 'Responsedef_WebButton_OnClick' |
| | | GroupServerCalls: true |
| | | QuillAction |
ÎļþÃû´Ó _Main/UI/MacroPlannerWebApp/Component_DialogWholeShiftSystem/Response_pnlActions_btnOk_OnClick.def ÐÞ¸Ä |
| | |
| | | #parent: pnlActions/btnOk |
| | | Response OnClick () id:Response_pnlActions_btnOk_OnClick |
| | | { |
| | | #keys: '[414702.2.1844994367]' |
| | | #keys: '[413988.0.1274023108]' |
| | | DefinitionID: 'Responsedef_WebButton_OnClick' |
| | | GroupServerCalls: true |
| | | QuillAction |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #root |
| | | #parent: MacroPlannerWebApp |
| | | OrphanComponent DialogTransferMinimumQuantity |
| | | { |
| | | #keys: '[413988.0.1274023095]' |
| | | BaseType: 'WebForm' |
| | | Children: |
| | | [ |
| | | #child: pnlContent |
| | | #child: pnlActions |
| | | ] |
| | | Properties: |
| | | [ |
| | | Alignment: 'trailing' |
| | | EnterButton: 'btnOk' |
| | | EscapeButton: 'btnCancel' |
| | | ExcludeFromActiveComponent: true |
| | | Padding: 'false' |
| | | ] |
| | | } |
| | |
| | | BaseType: 'WebDataSetLevel' |
| | | Properties: |
| | | [ |
| | | Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeAllConstraint","columnid":"All constraints","title":"All constraints","subtotals":"","tooltip":"","width":-1,"display":"shown"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayName","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"DisplayName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayCapacityType","title":"Capacity type","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"DisplayCapacityType"}}]' |
| | | Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeAllConstraint","columnid":"All constraints","title":"All constraints","subtotals":"","tooltip":"","width":-1,"display":"shown"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayName","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"DisplayName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayCapacityType","title":"Capacity type","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"DisplayCapacityType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgIsToFill","title":"ImgIsToFill","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgIsToFill"}}]' |
| | | ContextMenu: 'listContextMenu902' |
| | | FixedFilter: 'not object.GetIsSystem() and object.IsUnit();' |
| | | RelationFromParent: 'ChildEntity' |
| | |
| | | ] |
| | | Properties: |
| | | [ |
| | | Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeAllConstraint","columnid":"All constraints","title":"All constraints","subtotals":"","tooltip":"","width":-1,"display":"shown"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayName","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"DisplayName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayCapacityType","title":"Capacity type","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"DisplayCapacityType"}}]' |
| | | Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeAllConstraint","columnid":"All constraints","title":"All constraints","subtotals":"","tooltip":"","width":-1,"display":"shown"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayName","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"DisplayName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayCapacityType","title":"Capacity type","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"DisplayCapacityType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgIsToFill","title":"ImgIsToFill","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgIsToFill"}}]' |
| | | ContextMenu: 'listContextMenu902' |
| | | RelationFromParent: 'ChildEntity' |
| | | SortCriteria: 'DisplayIndex' |
| | |
| | | Title: 'Select all' |
| | | ] |
| | | } |
| | | Component mEnable |
| | | { |
| | | #keys: '[413988.0.1257262758]' |
| | | BaseType: 'WebMenu' |
| | | Properties: |
| | | [ |
| | | Image: 'CHECKEDCHECKBOX' |
| | | Taborder: 4 |
| | | Title: 'Enable' |
| | | ] |
| | | } |
| | | Component mDisable |
| | | { |
| | | #keys: '[413988.0.1254331512]' |
| | | BaseType: 'WebMenu' |
| | | Properties: |
| | | [ |
| | | Image: 'EMPTYCHECKBOX' |
| | | Taborder: 5 |
| | | Title: 'Disable' |
| | | ] |
| | | } |
| | | ] |
| | | Properties: |
| | | [ |
| | |
| | | BaseType: 'WebPanel' |
| | | Children: |
| | | [ |
| | | Component btnOk |
| | | { |
| | | #keys: '[414702.2.1844994362]' |
| | | BaseType: 'WebButton' |
| | | Properties: |
| | | [ |
| | | Label: 'OK' |
| | | Taborder: 0 |
| | | ] |
| | | } |
| | | Component btnCancel |
| | | { |
| | | #keys: '[414702.2.1844994364]' |
| | | BaseType: 'WebButton' |
| | | Properties: |
| | | [ |
| | | Label: 'Cancel' |
| | | Taborder: 1 |
| | | ] |
| | | } |
| | | #child: pnlActionsRight_106 |
| | | #child: pnlActionsLeft_522 |
| | | ] |
| | | Properties: |
| | | [ |
| | | Alignment: 'trailing' |
| | | Border: true |
| | | ExcludeFromActiveComponent: true |
| | | FixedSize: true |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | Component pnlActionsLeft id:pnlActionsLeft_522 |
| | | { |
| | | #keys: '[413988.0.1271132689]' |
| | | BaseType: 'WebPanel' |
| | | Children: |
| | | [ |
| | | Component bTransferMinimumQuantity |
| | | { |
| | | #keys: '[413988.0.1271132690]' |
| | | BaseType: 'WebButton' |
| | | Properties: |
| | | [ |
| | | Label: 'è°æ¨æå°å
è£
æ°é' |
| | | Taborder: 0 |
| | | ] |
| | | } |
| | | ] |
| | | Properties: |
| | | [ |
| | | Orientation: 'horizontal' |
| | | Taborder: 0 |
| | | ] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | Component pnlActionsRight id:pnlActionsRight_106 |
| | | { |
| | | #keys: '[413988.0.1271132759]' |
| | | BaseType: 'WebPanel' |
| | | Children: |
| | | [ |
| | | Component btnOk id:btnOk_568 |
| | | { |
| | | #keys: '[413988.0.1273560747]' |
| | | BaseType: 'WebButton' |
| | | Properties: |
| | | [ |
| | | Label: 'OK' |
| | | Taborder: 0 |
| | | ] |
| | | } |
| | | Component btnCancel id:btnCancel_925 |
| | | { |
| | | #keys: '[413988.0.1273560814]' |
| | | BaseType: 'WebButton' |
| | | Properties: |
| | | [ |
| | | Label: 'Cancel' |
| | | Taborder: 1 |
| | | ] |
| | | } |
| | | ] |
| | | Properties: |
| | | [ |
| | | Alignment: 'trailing' |
| | | FixedSize: true |
| | | Orientation: 'horizontal' |
| | | Taborder: 1 |
| | | ] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | Method OnOK () id:Method_DialogWholeShiftSystem_OnOK |
| | | { |
| | | #keys: '[413988.0.1261831139]' |
| | | Body: |
| | | [* |
| | | Form.ApplyChanges(); |
| | | |
| | | WholeShift.PostProcessing2( MacroPlan ); |
| | | |
| | | Form.Close(); |
| | | *] |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: ListEntity |
| | | Response OnClick ( |
| | | Entity selection |
| | | ) id:Response_ListEntity_mDisable_OnClick |
| | | { |
| | | #keys: '[413988.0.1254381266]' |
| | | DefinitionID => /ListEntity/Responsedef_ListEntity_WebMenu_OnClick |
| | | Initiator: 'mDisable' |
| | | QuillAction |
| | | { |
| | | Body: |
| | | [* |
| | | selection.IsToFill( false ); |
| | | *] |
| | | GroupServerCalls: false |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: ListEntity |
| | | Response OnClick ( |
| | | Entity selection |
| | | ) id:Response_ListEntity_mEnable_OnClick |
| | | { |
| | | #keys: '[413988.0.1256872893]' |
| | | DefinitionID => /ListEntity/Responsedef_ListEntity_WebMenu_OnClick |
| | | Initiator: 'mEnable' |
| | | QuillAction |
| | | { |
| | | Body: |
| | | [* |
| | | selection.IsToFill( true ); |
| | | *] |
| | | GroupServerCalls: false |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: pnlActionsLeft_522/bTransferMinimumQuantity |
| | | Response OnClick () id:Response_pnlActionsLeft_522_bTransferMinimumQuantity_OnClick |
| | | { |
| | | #keys: '[413988.0.1271132688]' |
| | | CanBindMultiple: false |
| | | DefinitionID: 'Responsedef_WebButton_OnClick' |
| | | Precondition: |
| | | [* |
| | | return not isnull( MacroPlan ); |
| | | *] |
| | | QuillAction |
| | | { |
| | | Body: |
| | | [* |
| | | dlg := construct( DialogTransferMinimumQuantity ); |
| | | |
| | | ApplicationMacroPlanner.ShowFormModal( dlg ); |
| | | *] |
| | | GroupServerCalls: false |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: pnlActionsRight_106/btnCancel_925 |
| | | Response OnClick () id:Response_pnlActions_btnCancel_OnClick_836 |
| | | { |
| | | #keys: '[413988.0.1273560813]' |
| | | DefinitionID: 'Responsedef_WebButton_OnClick' |
| | | GroupServerCalls: true |
| | | QuillAction |
| | | { |
| | | Body: |
| | | [* |
| | | Form.Close(); |
| | | *] |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Quintiq file version 2.0 |
| | | #parent: pnlActionsRight_106/btnOk_568 |
| | | Response OnClick () id:Response_pnlActions_btnOk_OnClick_393 |
| | | { |
| | | #keys: '[413988.0.1273560746]' |
| | | DefinitionID: 'Responsedef_WebButton_OnClick' |
| | | QuillAction |
| | | { |
| | | Body: |
| | | [* |
| | | Form.OnOK(); |
| | | *] |
| | | GroupServerCalls: false |
| | | } |
| | | } |
| | |
| | | EnterButton: 'btnOk' |
| | | EscapeButton: 'btnCancel' |
| | | ExcludeFromActiveComponent: true |
| | | MinimumColumns: 100 |
| | | MinimumRows: 100 |
| | | MinimumColumns: 110 |
| | | MinimumRows: 35 |
| | | Padding: 'false' |
| | | Title: 'WholeShiftSystem' |
| | | ] |