From d6e278442ccf32b1ca1f58afc622d595842d21a3 Mon Sep 17 00:00:00 2001
From: admin <admin@admin.com>
Date: 星期三, 30 十月 2024 11:50:03 +0800
Subject: [PATCH] 上线计划优化

---
 _Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_PostLayingProcessing.qbl |   59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 59 insertions(+), 0 deletions(-)

diff --git a/_Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_PostLayingProcessing.qbl b/_Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_PostLayingProcessing.qbl
index b1f1cf1..9674eb9 100644
--- a/_Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_PostLayingProcessing.qbl
+++ b/_Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_PostLayingProcessing.qbl
@@ -5,4 +5,63 @@
 )
 {
   Description: '閾虹嚎鍚庣画澶勭悊'
+  TextBody:
+  [*
+    // 鎵�鏈変笂绾胯鍒掍骇绾�
+    pls    := selectuniquevalues( macroPlan, NewAssemblyOnlinePlanRow, tempNAOPR, true, tempNAOPR.ProductionLine() );
+    
+    // 鏄惁鎵ц澶勭悊鏍囧織
+    isFlag := false;
+    
+    traverse ( pls, Elements, pl, pl = "CC MoMo" ) {              
+      traverse ( macroPlan, NewAssemblyOnlinePlanColumn, naopc
+                 , naopc.StartDate() <= Date::Construct( 2025, 2, 15 ) 
+                ) {
+        // 闇�瑕佸鐞嗙殑鏁伴噺
+        targetQuantity := ifexpr( pl = "CC MoMo", guard( macroPlan.AssemblyOnlineQuantity().CCMoMo(), 0 ),
+                                  ifexpr( pl = "DL MoMo", guard( macroPlan.AssemblyOnlineQuantity().DLMoMo(), 0 ), guard( macroPlan.AssemblyOnlineQuantity().DLZKM(), 0 ) )
+                                 );
+        
+        currentCells := selectset( naopc, NewAssemblyOnlinePlanCell, tempNAOPCell, tempNAOPCell.NewAssemblyOnlinePlanRow().ProductionLine() = pl and tempNAOPCell.Quantity() > 0 );
+        isFlag       := ifexpr( exists( currentCells, Elements, tempNAOPCell, tempNAOPCell.LineLayingOrEmptying() = "閾虹嚎" ), true, 
+                                ifexpr( exists( currentCells, Elements, tempNAOPCell, tempNAOPCell.LineLayingOrEmptying() = "鎷夌┖" ), false, isFlag ) );
+        info( "鏃ユ湡锛�", naopc.StartDate().Format( "Y-M2-D2" ), "   鏄惁澶勭悊锛�", isFlag, "    褰撳墠鍗曞厓鏍兼暟閲忥細", currentCells.Size(), "----------------------------" );
+        
+        // 澶勭悊閾虹嚎鍚庣殑閫昏緫
+        if ( isFlag and currentCells.Size() > 0 ) {
+          targetNAOPC := minselect( macroPlan, NewAssemblyOnlinePlanColumn, tempNAOPC, 
+                                    exists( tempNAOPC, NewAssemblyOnlinePlanCell, tempNAOPCell, tempNAOPCell.NewAssemblyOnlinePlanRow().ProductionLine() = pl and tempNAOPCell.OrderNr() > 0, tempNAOPCell.Quantity() > 0 ) and
+                                    tempNAOPC.StartDate() > naopc.StartDate(), tempNAOPC.StartDate() );
+          
+          if ( not isnull( targetNAOPC ) ) {
+    //        info( "鏈�灏忓垪鏃堕棿锛�", targetNAOPC.StartDate().Format( "Y-M2-D2" ) );
+            targetCells   := selectset( targetNAOPC, NewAssemblyOnlinePlanCell, tempNAOPCell, tempNAOPCell.NewAssemblyOnlinePlanRow().ProductionLine() = pl );
+            
+            // 鐩爣鍗曞厓鏍�
+            targetCell    := minselect( targetCells, Elements, tempNAOPCell, tempNAOPCell.OrderNr() > 0 and tempNAOPCell.Quantity() > 0, tempNAOPCell.OrderNr() );
+            finalQuantity := minvalue( targetQuantity, targetCell.Quantity() );
+            currentCell   := select( naopc, NewAssemblyOnlinePlanCell, tempNAOPCell, tempNAOPCell.NewAssemblyOnlinePlanRow() = targetCell.NewAssemblyOnlinePlanRow() );
+            
+            while ( targetQuantity > 0 and finalQuantity > 0 ) {
+              targetCell.Quantity( targetCell.Quantity() - finalQuantity );
+              currentCell.Quantity( currentCell.Quantity() + finalQuantity );
+              if ( currentCell.OrderNr() <= 0 ) {
+                orderNr := maxselect( naopc, NewAssemblyOnlinePlanCell, tempNAOPCell, 
+                                      tempNAOPCell.NewAssemblyOnlinePlanRow().ProductionLine() = pl and tempNAOPCell.Quantity() > 0, 
+                                      tempNAOPCell.OrderNr() ).OrderNr() + 1;
+                info( orderNr );
+                currentCell.OrderNr( orderNr );
+                currentCell.Order( "#" + orderNr.Format( "N(LPad0(2))" ) );
+              }
+              
+              targetQuantity := targetQuantity - [Number]finalQuantity;
+              targetCell    := minselect( targetCells, Elements, tempNAOPCell, tempNAOPCell.OrderNr() > 0 and tempNAOPCell.Quantity() > 0, tempNAOPCell.OrderNr() );
+              finalQuantity := minvalue( targetQuantity, targetCell.Quantity() );
+              currentCell   := select( naopc, NewAssemblyOnlinePlanCell, tempNAOPCell, tempNAOPCell.NewAssemblyOnlinePlanRow() = targetCell.NewAssemblyOnlinePlanRow() );
+            }
+          }
+        }
+      }
+    }
+  *]
 }

--
Gitblit v1.9.3