From a67dc2f0b8dd2803982cfa9c6ea42b77c191d22c Mon Sep 17 00:00:00 2001
From: lihongji <3117313295@qq.com>
Date: 星期一, 11 十一月 2024 12:02:56 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 _Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsCoefficientUpdate.qbl                           |    8 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsDLRentOtherCostUpdate.qbl                      |    8 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCLongTransCostUpdate.qbl                      |    8 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Method_CalcEstimateTotalCost.qbl                           |    9 
 _Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl                                               |    2 
 _Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Import.qbl                                   |   71 +++-
 _Main/BL/Type_CCEngineLogisticsCostCell/Method_CalcEstimateTotalCost.qbl                            |    7 
 _Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsRentInCostUpdate.qbl                            |    8 
 _Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl                                |   36 +-
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCRentStorCostUpdate.qbl                       |    8 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCoefficientUpdate.qbl                          |    8 
 _Main/Sys/Repr/Global/DLEngineLogisticsCostCell.qrp                                                 |  134 ++++++++
 _Main/BL/Type_FinancialProductionRow/Method_Initialize#110.qbl                                      |    2 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsEstimateTotalCostUpdate.qbl                    |    8 
 _Main/BL/Type_DispatchShiftPlan/StaticMethod_Publish.qbl                                            |   29 +
 _Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl                                     |    4 
 _Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl                                      |   17 -
 _Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl                                        |    7 
 _Main/BL/Type_OfflinePlanArchiveVersion/Method_GetRow.qbl                                           |   12 
 _Main/BL/Type_FinancialProductionReport/Method_GenerateShow.qbl                                     |    4 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsDLRentStorCostUpdate.qbl                       |    8 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Import.qbl                                  |  124 +++++--
 _Main/BL/Type_FinancialProductionReport/Method_GenerateColumn.qbl                                   |    7 
 _Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsRentStorCostUpdate.qbl                          |    8 
 _Main/Sys/Repr/Global/CCEngineLogisticsCostCell.qrp                                                 |   68 ++++
 _Main/BL/Type_DispatchShiftPlan/StaticMethod_Dispatch.qbl                                           |   44 +-
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsAllCostUpdate.qbl                              |    8 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsDLRentOutOfCostUpdate.qbl                      |    8 
 _Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsAllCostUpdate.qbl                               |    8 
 _Main/BL/Type_CCEngineLogisticsCostReport0/Method_Generate.qbl                                      |   19 +
 _Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl                               |    8 
 _Main/BL/Type_DispatchShiftPlan/Attribute_ShiftQty.qbl                                              |    7 
 _Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl                                           |   16 -
 _Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl                                   |    4 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsWerkToDLRentTransCostUpdate.qbl                |    8 
 _Main/BL/Type_InterfaceDataset/Method_PublishPlanReportData.qbl                                     |    1 
 _Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl                                 |    4 
 _Main/BL/Relations/Relation_DispatchShiftPlan_InterfaceLoginfo_InterfaceLoginfo_DispatchShiftPl.qbl |   23 +
 _Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsEstimateTotalCostUpdate.qbl                     |    8 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCRentOutOfCostUpdate.qbl                      |    8 
 _Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl                                   |    8 
 /dev/null                                                                                           |    7 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsDLRentInCostUpdate.qbl                         |    8 
 _Main/BL/Type_CCEngineLogisticsCostReport/Method_Generate.qbl                                       |   13 
 _Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsRentOutOfCostUpdate.qbl                         |    8 
 _Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsWerkToRentTransCostUpdate.qbl                   |    8 
 _Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl                                        |    4 
 _Main/BL/Type_FinancialSalesReport/Method_GenerateShow.qbl                                          |    4 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCRentInCostUpdate.qbl                         |    8 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCShorTransCostUpdate.qbl                      |    8 
 50 files changed, 663 insertions(+), 192 deletions(-)

diff --git a/_Main/BL/EDI/Broker_RB_DispatchShiftPlanBroker.qbl b/_Main/BL/EDI/Broker_RB_DispatchShiftPlanBroker.qbl
deleted file mode 100644
index 3e006d1..0000000
--- a/_Main/BL/EDI/Broker_RB_DispatchShiftPlanBroker.qbl
+++ /dev/null
@@ -1,119 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-EDIBroker RB_DispatchShiftPlanBroker
-{
-  MDSDefinition: RecycleBin
-  TimeZone: 'ACT'
-  UseOSTimeZone: false
-  EDIModelLink.Source DispatchShiftPlanSource
-  {
-    EDIMLTable DispatchShiftPlan
-    {
-      TargetType: DispatchShiftPlan
-      EDIMLColumn Fac { Attribute: Fac ValueType: String }
-      EDIMLColumn FactoryName { Attribute: FactoryName ValueType: String }
-      EDIMLColumn ID { Attribute: ID ValueType: String }
-      EDIMLColumn InterfaceTime { Attribute: InterfaceTime ValueType: DateTime }
-      EDIMLColumn ProductLine { Attribute: ProductLine ValueType: String }
-      EDIMLColumn ShiftDate { Attribute: ShiftDate ValueType: Date }
-      EDIMLColumn Tips { Attribute: Tips ValueType: String }
-      EDIMLColumn VersionFlag { Attribute: VersionFlag ValueType: String }
-      EDIMLColumn VersionName { Attribute: VersionName ValueType: String }
-    }
-  }
-  EDIODBCLink.Destination DispatchShiftPlanDestination
-  {
-    DataIntegrityStrategy: 'Disabled'
-    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.vwed'
-    EDIODBCLinkTable A_DispatchShiftPlan
-    {
-      MayCreateTable: true
-      MayDeleteRow: true
-      MayDropTable: true
-      MayFlushTable: true
-      MayInsertRow: true
-      Parameters: '/owner="dbo"'
-      PrimaryKeyColumns: ID
-      RecordModificationHintStrategy: 'None'
-      EDIODBCLinkColumn Fac
-      {
-        MayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn FactoryName
-      {
-        MayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ID
-      {
-        MayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn InterfaceTime
-      {
-        MayUpdateColumn: true
-        ValueType: DateTime
-      }
-      EDIODBCLinkColumn ProductLine
-      {
-        MayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ShiftDate
-      {
-        MayUpdateColumn: true
-        ValueType: DateTime
-      }
-      EDIODBCLinkColumn Tips
-      {
-        MayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn VersionFlag
-      {
-        MayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn VersionName
-      {
-        MayUpdateColumn: true
-        ValueType: String
-      }
-    }
-  }
-  EDITransformation.Transformation DispatchShiftPlanTransformation
-  {
-    EDITableTransformation
-    {
-      InputTable: DispatchShiftPlan
-      OutputTable: A_DispatchShiftPlan
-      EDIColumnMatch { InputColumn: Fac OutputColumn: Fac }
-      EDIColumnMatch { InputColumn: FactoryName OutputColumn: FactoryName }
-      EDIColumnMatch { InputColumn: ID OutputColumn: ID }
-      EDIColumnMatch { InputColumn: InterfaceTime OutputColumn: InterfaceTime }
-      EDIColumnMatch { InputColumn: ProductLine OutputColumn: ProductLine }
-      EDIColumnMatch
-      {
-        InputColumn: ShiftDate
-        OutputColumn: ShiftDate
-        Converter
-        {
-          XMLDefinition:
-          [*
-            <?xml version="1.0" encoding="UTF-16"?>
-            <DateToDateTime xmlns="http://www.quintiq.com/GEB/DateToDateTime" Key="@1">
-              <IsStandard>true</IsStandard>
-              <IsISO>false</IsISO>
-              <IsCustom>false</IsCustom>
-              <ConversionType>0</ConversionType>
-            </DateToDateTime>
-          *]
-        }
-      }
-      EDIColumnMatch { InputColumn: Tips OutputColumn: Tips }
-      EDIColumnMatch { InputColumn: VersionFlag OutputColumn: VersionFlag }
-      EDIColumnMatch { InputColumn: VersionName OutputColumn: VersionName }
-    }
-  }
-}
diff --git a/_Main/BL/Relations/Relation_DispatchShiftPlan_Archive_Archive_DispatchShiftPlan.qbl b/_Main/BL/Relations/Relation_DispatchShiftPlan_Archive_Archive_DispatchShiftPlan.qbl
deleted file mode 100644
index f45c374..0000000
--- a/_Main/BL/Relations/Relation_DispatchShiftPlan_Archive_Archive_DispatchShiftPlan.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation DispatchShiftPlan_Archive_Archive_DispatchShiftPlan
-{
-  #keys: '1[414996.1.121982603]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide Archive
-  {
-    #keys: '3[414996.1.121982605][414996.1.121982604][414996.1.121982606]'
-    Cardinality: '0to1'
-    ObjectDefinition: DispatchShiftPlan
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide DispatchShiftPlan
-  {
-    #keys: '3[414996.1.121982608][414996.1.121982607][414996.1.121982609]'
-    Cardinality: '1toN'
-    ObjectDefinition: Archive
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_DispatchShiftPlan_InterfaceLoginfo_InterfaceLoginfo_DispatchShiftPl.qbl b/_Main/BL/Relations/Relation_DispatchShiftPlan_InterfaceLoginfo_InterfaceLoginfo_DispatchShiftPl.qbl
new file mode 100644
index 0000000..7938196
--- /dev/null
+++ b/_Main/BL/Relations/Relation_DispatchShiftPlan_InterfaceLoginfo_InterfaceLoginfo_DispatchShiftPl.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation DispatchShiftPlan_InterfaceLoginfo_InterfaceLoginfo_DispatchShiftPlan
+{
+  #keys: '1[414996.1.203950081]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide InterfaceLoginfo
+  {
+    #keys: '3[414996.1.203950083][414996.1.203950082][414996.1.203950084]'
+    Cardinality: '0to1'
+    ObjectDefinition: DispatchShiftPlan
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide DispatchShiftPlan
+  {
+    #keys: '3[414996.1.203950086][414996.1.203950085][414996.1.203950087]'
+    Cardinality: '1toN'
+    ObjectDefinition: InterfaceLoginfo
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsAllCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsAllCostUpdate.qbl
new file mode 100644
index 0000000..13ca5ae
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsAllCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsAllCostUpdate
+{
+  #keys: '3[415136.0.1293740107][415136.0.1293740106][415136.0.1293740108]'
+  Description: '鎬昏垂鐢ㄦ槸鍚﹁瀵煎叆鏇存柊'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsCoefficientUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsCoefficientUpdate.qbl
new file mode 100644
index 0000000..30c095c
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsCoefficientUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsCoefficientUpdate
+{
+  #keys: '3[415136.0.1293740114][415136.0.1293740113][415136.0.1293740115]'
+  Description: '绯绘暟鏄惁琚鍏ユ洿鏂�'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsEstimateTotalCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsEstimateTotalCostUpdate.qbl
new file mode 100644
index 0000000..139e9d6
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsEstimateTotalCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsEstimateTotalCostUpdate
+{
+  #keys: '3[415136.0.1293740121][415136.0.1293740120][415136.0.1293740122]'
+  Description: '棰勮鎬昏垂鐢ㄦ槸鍚﹁瀵煎叆鏇存柊'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsRentInCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsRentInCostUpdate.qbl
new file mode 100644
index 0000000..3692cdc
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsRentInCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsRentInCostUpdate
+{
+  #keys: '3[415136.0.1293740128][415136.0.1293740127][415136.0.1293740129]'
+  Description: '澶栫搴撳叆搴撹垂鐢ㄦ槸鍚﹁瀵煎叆鏇存柊'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsRentOutOfCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsRentOutOfCostUpdate.qbl
new file mode 100644
index 0000000..33e2ee4
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsRentOutOfCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsRentOutOfCostUpdate
+{
+  #keys: '3[415136.0.1293740140][415136.0.1293740139][415136.0.1293740141]'
+  Description: '澶栫搴撳嚭搴撹垂鐢ㄦ槸鍚﹁瀵煎叆鏇存柊'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsRentStorCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsRentStorCostUpdate.qbl
new file mode 100644
index 0000000..8b164a3
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsRentStorCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsRentStorCostUpdate
+{
+  #keys: '3[415136.0.1293740147][415136.0.1293740146][415136.0.1293740148]'
+  Description: '澶栫搴撲粨鍌ㄨ垂鐢ㄦ槸鍚﹁瀵煎叆鏇存柊'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsUpdate.qbl
deleted file mode 100644
index 5082873..0000000
--- a/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsUpdate.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute IsUpdate
-{
-  #keys: '3[415136.0.1191950107][415136.0.1191950106][415136.0.1191950108]'
-  Description: '鏄惁琚鍏ユ洿鏂�'
-  ValueType: Boolean
-}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsWerkToRentTransCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsWerkToRentTransCostUpdate.qbl
new file mode 100644
index 0000000..c331e44
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsWerkToRentTransCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsWerkToRentTransCostUpdate
+{
+  #keys: '3[415136.0.1293740154][415136.0.1293740153][415136.0.1293740155]'
+  Description: '鍘傚唴鍒板绉熷簱杩愯緭璐圭敤鏄惁琚鍏ユ洿鏂�'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Function_CalcEstimateTotalCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Method_CalcEstimateTotalCost.qbl
similarity index 61%
rename from _Main/BL/Type_CCEngineLogisticsCostCell/Function_CalcEstimateTotalCost.qbl
rename to _Main/BL/Type_CCEngineLogisticsCostCell/Method_CalcEstimateTotalCost.qbl
index f4cd10b..d8a256e 100644
--- a/_Main/BL/Type_CCEngineLogisticsCostCell/Function_CalcEstimateTotalCost.qbl
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Method_CalcEstimateTotalCost.qbl
@@ -1,13 +1,12 @@
 Quintiq file version 2.0
 #parent: #root
-Function CalcEstimateTotalCost
+Method CalcEstimateTotalCost () as Real
 {
   TextBody:
   [*
-    // 鐢勫叞楦� Sep-24-2024 (created)
-    
+    // 鐢勫叞楦� Nov-11-2024 (created)
     value := this.RentInCost() + this.RentOutOfCost() + this.WerkToRentTransCost() + this.RentStorCost();
     
-    this.EstimateTotalCost( value );
+    return value;
   *]
 }
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsAllCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsAllCostUpdate.qbl
new file mode 100644
index 0000000..87960df
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsAllCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsAllCostUpdate
+{
+  #keys: '3[415136.0.1293750020][415136.0.1293750019][415136.0.1293750021]'
+  Description: '鎬昏垂鐢ㄦ槸鍚﹁瀵煎叆鏇存柊'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCLongTransCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCLongTransCostUpdate.qbl
new file mode 100644
index 0000000..9b793a1
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCLongTransCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsCCLongTransCostUpdate
+{
+  #keys: '3[415136.0.1293740011][415136.0.1293740010][415136.0.1293740012]'
+  Description: '闀挎槬闀块�旇繍杈撹垂鐢ㄦ槸鍚﹁瀵煎叆鏇存柊'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCRentInCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCRentInCostUpdate.qbl
new file mode 100644
index 0000000..cfe32cd
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCRentInCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsCCRentInCostUpdate
+{
+  #keys: '3[415136.0.1293740018][415136.0.1293740017][415136.0.1293740019]'
+  Description: '闀挎槬澶栫搴撳叆搴撹垂鐢ㄦ槸鍚﹁瀵煎叆鏇存柊'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCRentOutOfCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCRentOutOfCostUpdate.qbl
new file mode 100644
index 0000000..c56fd29
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCRentOutOfCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsCCRentOutOfCostUpdate
+{
+  #keys: '3[415136.0.1293740025][415136.0.1293740024][415136.0.1293740026]'
+  Description: '闀挎槬澶栫搴撳嚭搴撹垂鐢ㄦ槸鍚﹁瀵煎叆鏇存柊'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCRentStorCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCRentStorCostUpdate.qbl
new file mode 100644
index 0000000..3c93723
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCRentStorCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsCCRentStorCostUpdate
+{
+  #keys: '3[415136.0.1293740032][415136.0.1293740031][415136.0.1293740033]'
+  Description: '闀挎槬澶栫搴撲粨鍌ㄨ垂鐢ㄦ槸鍚﹁瀵煎叆鏇存柊'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCShorTransCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCShorTransCostUpdate.qbl
new file mode 100644
index 0000000..725d067
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCCShorTransCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsCCShorTransCostUpdate
+{
+  #keys: '3[415136.0.1293740039][415136.0.1293740038][415136.0.1293740040]'
+  Description: '闀挎槬鐭�旇繍杈撹垂鐢ㄦ槸鍚﹁瀵煎叆鏇存柊'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCoefficientUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCoefficientUpdate.qbl
new file mode 100644
index 0000000..5601da9
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsCoefficientUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsCoefficientUpdate
+{
+  #keys: '3[415136.0.1293740046][415136.0.1293740045][415136.0.1293740047]'
+  Description: '绯绘暟鏄惁琚鍏ユ洿鏂�'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsDLRentInCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsDLRentInCostUpdate.qbl
new file mode 100644
index 0000000..b58325b
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsDLRentInCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsDLRentInCostUpdate
+{
+  #keys: '3[415136.0.1293740053][415136.0.1293740052][415136.0.1293740054]'
+  Description: '澶ц繛澶栫搴撳叆搴撹垂鐢ㄦ槸鍚﹁瀵煎叆鏇存柊'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsDLRentOtherCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsDLRentOtherCostUpdate.qbl
new file mode 100644
index 0000000..5db9ba4
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsDLRentOtherCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsDLRentOtherCostUpdate
+{
+  #keys: '3[415136.0.1293740060][415136.0.1293740059][415136.0.1293740061]'
+  Description: '澶ц繛澶栫搴撳叾浠栬垂鐢ㄦ槸鍚﹁瀵煎叆鏇存柊'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsDLRentOutOfCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsDLRentOutOfCostUpdate.qbl
new file mode 100644
index 0000000..d095926
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsDLRentOutOfCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsDLRentOutOfCostUpdate
+{
+  #keys: '3[415136.0.1293740067][415136.0.1293740066][415136.0.1293740068]'
+  Description: '澶ц繛澶栫搴撳嚭搴撹垂鐢ㄦ槸鍚﹁瀵煎叆鏇存柊'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsDLRentStorCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsDLRentStorCostUpdate.qbl
new file mode 100644
index 0000000..2dcceb3
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsDLRentStorCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsDLRentStorCostUpdate
+{
+  #keys: '3[415136.0.1293740074][415136.0.1293740073][415136.0.1293740075]'
+  Description: '澶ц繛澶栫搴撲粨鍌ㄨ垂鐢ㄦ槸鍚﹁瀵煎叆鏇存柊'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsEstimateTotalCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsEstimateTotalCostUpdate.qbl
new file mode 100644
index 0000000..74fcef0
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsEstimateTotalCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsEstimateTotalCostUpdate
+{
+  #keys: '3[415136.0.1293740081][415136.0.1293740080][415136.0.1293740082]'
+  Description: '棰勮鎬昏垂鐢ㄦ槸鍚﹁瀵煎叆鏇存柊'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsUpdate.qbl
deleted file mode 100644
index e986266..0000000
--- a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsUpdate.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute IsUpdate
-{
-  #keys: '3[415136.0.1191950111][415136.0.1191950110][415136.0.1191950112]'
-  Description: '鏄惁琚鍏ユ洿鏂�'
-  ValueType: Boolean
-}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsWerkToDLRentTransCostUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsWerkToDLRentTransCostUpdate.qbl
new file mode 100644
index 0000000..878d341
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsWerkToDLRentTransCostUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsWerkToDLRentTransCostUpdate
+{
+  #keys: '3[415136.0.1293740088][415136.0.1293740087][415136.0.1293740089]'
+  Description: '鍘傚唴鍒板ぇ杩炲绉熷簱杩愯緭璐圭敤'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Function_CalcEstimateTotalCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Method_CalcEstimateTotalCost.qbl
similarity index 74%
rename from _Main/BL/Type_CCEngineLogisticsCostCell0/Function_CalcEstimateTotalCost.qbl
rename to _Main/BL/Type_CCEngineLogisticsCostCell0/Method_CalcEstimateTotalCost.qbl
index 1e59ade..d4c77b0 100644
--- a/_Main/BL/Type_CCEngineLogisticsCostCell0/Function_CalcEstimateTotalCost.qbl
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Method_CalcEstimateTotalCost.qbl
@@ -1,14 +1,13 @@
 Quintiq file version 2.0
 #parent: #root
-Function CalcEstimateTotalCost
+Method CalcEstimateTotalCost () as Real
 {
   TextBody:
   [*
-    // 鐢勫叞楦� Aug-12-2024 (created) 
-    
+    // 鐢勫叞楦� Nov-11-2024 (created)
     value := this.CCRentInCost() + this.CCRentOutOfCost() + this.CCLongTransCost() + this.CCShorTransCost() + this.CCRentStorCost()
-    + this.DLRentInCost() + this.DLRentOutOfCost() + this.WerkToDLRentTransCost() + this.DLRentStorCost() + this.DLRentOtherCost()
+    + this.DLRentInCost() + this.DLRentOutOfCost() + this.WerkToDLRentTransCost() + this.DLRentStorCost() + this.DLRentOtherCost();
     
-    this.EstimateTotalCost( value );
+    return value;
   *]
 }
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/Method_Generate.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/Method_Generate.qbl
index 62befe8..6d71205 100644
--- a/_Main/BL/Type_CCEngineLogisticsCostReport/Method_Generate.qbl
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/Method_Generate.qbl
@@ -54,18 +54,25 @@
           sumcell.WerkToRentTransCost( cell.WerkToRentTransCost() + sumcell.WerkToRentTransCost() );
           sumcell.RentStorCost( cell.RentStorCost() + sumcell.RentStorCost() );
         }
+        yearcell.EstimateTotalCost( yearcell.CalcEstimateTotalCost() );
         yearcell.AllCost( yearcell.EstimateTotalCost() * [Real]yearcell.CoefficientValue() );
       }
     }
     Transaction::Transaction().Propagate( attribute( CCEngineLogisticsCostCell, EstimateTotalCost ) );
     traverse( yearcolumn, Cell, cell ){
+      cell.EstimateTotalCost( cell.CalcEstimateTotalCost() );
       cell.AllCost( cell.EstimateTotalCost() * [Real]cell.CoefficientValue() );
     }
     traverse( sumrow, Cell, cell ){
+      cell.EstimateTotalCost( cell.CalcEstimateTotalCost() );
       cell.AllCost( cell.EstimateTotalCost() * [Real]cell.CoefficientValue() );
-      if( exists( cell.Column(), Cell, acell, acell.IsUpdate() ) ){
-        cell.IsUpdate( true );
-      }
+      cell.IsAllCostUpdate( exists( cell.Column(), Cell, acell, acell.IsAllCostUpdate() ) );
+      cell.IsCoefficientUpdate( exists( cell.Column(), Cell, acell, acell.IsCoefficientUpdate() ) );
+      cell.IsEstimateTotalCostUpdate( exists( cell.Column(), Cell, acell, acell.IsEstimateTotalCostUpdate() ) );
+      cell.IsRentInCostUpdate( exists( cell.Column(), Cell, acell, acell.IsRentInCostUpdate() ) );
+      cell.IsRentOutOfCostUpdate( exists( cell.Column(), Cell, acell, acell.IsRentOutOfCostUpdate() ) );
+      cell.IsRentStorCostUpdate( exists( cell.Column(), Cell, acell, acell.IsRentStorCostUpdate() ) );
+      cell.IsWerkToRentTransCostUpdate( exists( cell.Column(), Cell, acell, acell.IsWerkToRentTransCostUpdate() ) );
     }
   *]
 }
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Import.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Import.qbl
index 85f17fb..08d33da 100644
--- a/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Import.qbl
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Import.qbl
@@ -42,33 +42,54 @@
           cell                := selectobject( ccrow, Cell, cell, cell.Column() = column );
           traverse( sameproductcells, Elements.GeneralExcelImportAndExportDataRow, samerow ){
             attricell         := selectobject( samerow, GeneralExcelImportAndExportDataCell, attricell, attricell.GeneralExcelImportAndExportDataColumn() = attricolumn );
-            if( attricell.Value() = '鎬昏垂鐢�' ){
-              valuecell       := selectobject( samerow, GeneralExcelImportAndExportDataCell, valuecell, valuecell.GeneralExcelImportAndExportDataColumn() = excelcolumn );
-              if( valuecell.Value() <> cell.AllCost().Format( 'N(Dec)' ) ){
-                cell.AllCost( [Real]valuecell.Value() );
-                cell.IsUpdate( true );
-              }
-            }
-    //        if( not ( attricell.Value() = '棰勮鎬昏垂鐢�' or attricell.Value() = '鎬昏垂鐢�' ) ){
+    //        if( attricell.Value() = '鎬昏垂鐢�' ){
     //          valuecell       := selectobject( samerow, GeneralExcelImportAndExportDataCell, valuecell, valuecell.GeneralExcelImportAndExportDataColumn() = excelcolumn );
-    //          if( attricell.Value() = '澶栫搴撳叆搴撹垂鐢�' ){
-    //            cell.RentInCost( [Number]valuecell.Value() );
-    //          }else if( attricell.Value() = '澶栫搴撳嚭搴撹垂鐢�' ){
-    //            cell.RentOutOfCost( [Number]valuecell.Value() );
-    //          }else if( attricell.Value() = '鍘傚唴鍒板绉熷簱杩愯緭璐圭敤' ){
-    //            cell.WerkToRentTransCost( [Number]valuecell.Value() );
-    //          }else if( attricell.Value() = '澶栫搴撲粨鍌ㄨ垂鐢�' ){
-    //            cell.RentStorCost( [Number]valuecell.Value() );
+    //          if( valuecell.Value() <> cell.AllCost().Format( 'N(Dec)' ) ){
+    //            cell.AllCost( [Real]valuecell.Value() );
+    //            cell.IsUpdate( true );
     //          }
-    //          else if( attricell.Value() = '棰勮鎬昏垂鐢�' ){
-    //            cell.EstimatedTotalCost( [Number]valuecell.Value() );
-    //          }
-    //          else if( attricell.Value() = '绯绘暟' ){
-    //            cell.CoefficientValue( valuecell.Value() );
-    //          }
-    //          else if( attricell.Value() = '鎬昏垂鐢�' ){
-    //            cell.TotalCost( [Number]valuecell.Value() );
-    //          }
+    //        }
+    //        if( not ( attricell.Value() = '棰勮鎬昏垂鐢�' or attricell.Value() = '鎬昏垂鐢�' ) ){
+              valuecell       := selectobject( samerow, GeneralExcelImportAndExportDataCell, valuecell, valuecell.GeneralExcelImportAndExportDataColumn() = excelcolumn );
+              if( attricell.Value() = '澶栫搴撳叆搴撹垂鐢�' ){
+                if( valuecell.Value() <> cell.RentInCost().Format( 'N(Dec)' ) ){
+                  cell.RentInCost( [Real]valuecell.Value() );
+                  cell.IsRentInCostUpdate( true );
+                }
+              }else if( attricell.Value() = '澶栫搴撳嚭搴撹垂鐢�' ){
+                if( valuecell.Value() <> cell.RentOutOfCost().Format( 'N(Dec)' ) ){
+                  cell.RentOutOfCost( [Real]valuecell.Value() );
+                  cell.IsRentOutOfCostUpdate( true );
+                }
+              }else if( attricell.Value() = '鍘傚唴鍒板绉熷簱杩愯緭璐圭敤' ){
+                if( valuecell.Value() <> cell.WerkToRentTransCost().Format( 'N(Dec)' ) ){
+                  cell.WerkToRentTransCost( [Real]valuecell.Value() );
+                  cell.IsWerkToRentTransCostUpdate( true );
+                }
+              }else if( attricell.Value() = '澶栫搴撲粨鍌ㄨ垂鐢�' ){
+                if( valuecell.Value() <> cell.RentStorCost().Format( 'N(Dec)' ) ){
+                  cell.RentStorCost( [Real]valuecell.Value() );
+                  cell.IsRentStorCostUpdate( true );
+                }
+              }
+              else if( attricell.Value() = '棰勮鎬昏垂鐢�' ){
+                if( valuecell.Value() <> cell.EstimateTotalCost().Format( 'N(Dec)' ) ){
+                  cell.EstimateTotalCost( [Real]valuecell.Value() );
+                  cell.IsEstimateTotalCostUpdate( true );
+                }
+              }
+              else if( attricell.Value() = '绯绘暟' ){
+                if( valuecell.Value() <> cell.CoefficientValue() ){
+                  cell.CoefficientValue( valuecell.Value() );
+                  cell.IsCoefficientUpdate( true );
+                }
+              }
+              else if( attricell.Value() = '鎬昏垂鐢�' ){
+                if( valuecell.Value() <> cell.AllCost().Format( 'N(Dec)' ) ){
+                  cell.AllCost( [Real]valuecell.Value() );
+                  cell.IsAllCostUpdate( true );
+                }
+              }
     //        }
           }
         }
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl
index 23417e6..92fdf14 100644
--- a/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl
@@ -30,7 +30,7 @@
     //澶栫搴撳叆搴撹垂鐢細鍙栬嚜璐㈠姟浜ч噺鎶ヨ〃鐨勪骇閲忥紝鍦ㄤ骇鍝佽〃鏍规嵁鍙戝姩鏈哄彿鎵惧埌瀵瑰簲鐨凣eneration 鍜屾í绾靛埗锛屽湪鍙戝姩鏈烘垚鏈弬鏁拌〃閲屾壘鍒板搴旂殑鍖呰瀹归噺鍜屽叆搴撳崟浠凤紝鐢ㄥ叕寮忚绠楋紝鏈堝害杩涜姹囨��
     traverse( owner, FinancialProductionSource, source, not source.IsImport() ){//璐㈠姟浜ч噺鎶ヨ〃闈炲鍏�
       traverse( source, FinancialProductionReport, report, not report.IsShow() ){//璐㈠姟浜ч噺鎶ヨ〃涓嶆樉绀�
-        traverse( report, FinancialProductionRow, row, row.Unit() = ccunit and exists( row, FinancialProductionCell, cell, cell.Value() <> '0' and not cell.FinancialProductionColumn().IsDay() ) ){//璐㈠姟浜ч噺鎶ヨ〃閲岀殑闀挎槬浜ч噺, 涓嶄负0
+        traverse( report, FinancialProductionRow, row, row.Unit() = ccunit and exists( row, FinancialProductionCell, cell, cell.Value() <> '0') ){//璐㈠姟浜ч噺鎶ヨ〃閲岀殑闀挎槬浜ч噺, 涓嶄负0
           product             := row.Product_MP();
           productparents      := product.GetAllParent();
           if( exists( productparents, Elements, e, e.ID() = produtparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
@@ -41,7 +41,7 @@
             if( not isnull( enginecosts ) and enginecosts.Size() > 0 ){
               ccrow           := table.GetRow( row.Name() );
               products.Add( product );
-              traverse( row, FinancialProductionCell, cell, cell.Value() <> '0' and not cell.FinancialProductionColumn().IsDay() ){
+              traverse( row, FinancialProductionCell, cell, cell.Value() <> '0' ){
                 cellcolumn    := cell.FinancialProductionColumn();
                 enginecost    := selectobject( enginecosts, Elements, engine, engine.StartDate() <= cellcolumn.Period() and engine.EndDate() >= cellcolumn.Period() );
                 if( not isnull( enginecost ) ){
@@ -60,7 +60,7 @@
     //澶栫搴撳嚭搴撹垂鐢細鍑哄簱閲忕瓑浜庨暱鏄ラ攢閲忥紝鍙栬嚜璐㈠姟閿�閲忔姤琛ㄧ殑閿�閲忥紝鍦ㄤ骇鍝佽〃鏍规嵁鍙戝姩鏈哄彿鎵惧埌瀵瑰簲鐨凣eneration 鍜屾í绾靛埗锛屽湪鍙戝姩鏈烘垚鏈弬鏁拌〃閲屾壘鍒板搴旂殑鍖呰瀹归噺鍜屽嚭搴撳崟浠凤紝鐢ㄥ叕寮忚绠楋紝鏈堝害杩涜姹囨��
     traverse( owner, FinancialSalesSource, source, not source.IsImport() ){//璐㈠姟閿�閲忔姤琛ㄩ潪瀵煎叆
       traverse( source, FinancialSalesReport, report, not report.IsShow() ){//璐㈠姟閿�閲忔姤琛ㄤ笉鏄剧ず
-        traverse( report, FinancialSalesRow, row, row.Unit() = ccunit and exists( row, FinancialSalesCell, cell, cell.Value() <> '0' and not cell.FinancialSalesColumn().IsDay() ) ){//璐㈠姟閿�閲忔姤琛ㄩ噷鐨勯暱鏄ヤ骇閲�, 涓嶄负0
+        traverse( report, FinancialSalesRow, row, row.Unit() = ccunit and exists( row, FinancialSalesCell, cell, cell.Value() <> '0' ) ){//璐㈠姟閿�閲忔姤琛ㄩ噷鐨勯暱鏄ヤ骇閲�, 涓嶄负0
           product             := row.Product_MP();
           productparents      := product.GetAllParent();
           if( exists( productparents, Elements, e, e.ID() = produtparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
@@ -71,7 +71,7 @@
             if( not isnull( enginecosts ) and enginecosts.Size() > 0 ){
               ccrow           := table.GetRow( row.Name() );
               products.Add( product );
-              traverse( row, FinancialSalesCell, cell, cell.Value() <> '0' and not cell.FinancialSalesColumn().IsDay() ){
+              traverse( row, FinancialSalesCell, cell, cell.Value() <> '0' ){
                 cellcolumn    := cell.FinancialSalesColumn();
                 enginecost    := selectobject( enginecosts, Elements, engine, engine.StartDate() <= cellcolumn.Period() and engine.EndDate() >= cellcolumn.Period() );
                 if( not isnull( enginecost ) ){
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_Generate.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_Generate.qbl
index 108b822..d5d4fcc 100644
--- a/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_Generate.qbl
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_Generate.qbl
@@ -79,18 +79,31 @@
           sumcell.WerkToDLRentTransCost( cell.WerkToDLRentTransCost() + sumcell.WerkToDLRentTransCost() );
           sumcell.DLRentStorCost( cell.DLRentStorCost() + sumcell.DLRentStorCost() );
         }
+        yearcell.EstimateTotalCost( yearcell.CalcEstimateTotalCost() );
         yearcell.AllCost( yearcell.EstimateTotalCost() * [Real]yearcell.CoefficientValue() );
       }
     }
     Transaction::Transaction().Propagate( attribute( DLEngineLogisticsCostCell, EstimateTotalCost ) );
     traverse( yearcolumn, Cell, cell ){
+      cell.EstimateTotalCost( cell.CalcEstimateTotalCost() );
       cell.AllCost( cell.EstimateTotalCost() * [Real]cell.CoefficientValue() );
     }
     traverse( sumrow, Cell, cell ){
+      cell.EstimateTotalCost( cell.CalcEstimateTotalCost() );
       cell.AllCost( cell.EstimateTotalCost() * [Real]cell.CoefficientValue() );
-      if( exists( cell.Column(), Cell, acell, acell.IsUpdate() ) ){
-        cell.IsUpdate( true );
-      }
+      cell.IsAllCostUpdate( exists( cell.Column(), Cell, acell, acell.IsAllCostUpdate() ) );
+      cell.IsCCLongTransCostUpdate( exists( cell.Column(), Cell, acell, acell.IsCCLongTransCostUpdate() ) );
+      cell.IsCCRentInCostUpdate( exists( cell.Column(), Cell, acell, acell.IsCCRentInCostUpdate() ) );
+      cell.IsCCRentOutOfCostUpdate( exists( cell.Column(), Cell, acell, acell.IsCCRentOutOfCostUpdate() ) );
+      cell.IsCCRentStorCostUpdate( exists( cell.Column(), Cell, acell, acell.IsCCRentStorCostUpdate() ) );
+      cell.IsCCShorTransCostUpdate( exists( cell.Column(), Cell, acell, acell.IsCCShorTransCostUpdate() ) );
+      cell.IsCoefficientUpdate( exists( cell.Column(), Cell, acell, acell.IsCoefficientUpdate() ) );
+      cell.IsDLRentInCostUpdate( exists( cell.Column(), Cell, acell, acell.IsDLRentInCostUpdate() ) );
+      cell.IsDLRentOtherCostUpdate( exists( cell.Column(), Cell, acell, acell.IsDLRentOtherCostUpdate() ) );
+      cell.IsDLRentOutOfCostUpdate( exists( cell.Column(), Cell, acell, acell.IsDLRentOutOfCostUpdate() ) );
+      cell.IsDLRentStorCostUpdate( exists( cell.Column(), Cell, acell, acell.IsDLRentStorCostUpdate() ) );
+      cell.IsEstimateTotalCostUpdate( exists( cell.Column(), Cell, acell, acell.IsEstimateTotalCostUpdate() ) );
+      cell.IsWerkToDLRentTransCostUpdate( exists( cell.Column(), Cell, acell, acell.IsWerkToDLRentTransCostUpdate() ) );
     }
     info( '-------------------------g------------end---------------------------------' );
   *]
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Import.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Import.qbl
index ce05c55..7ef4c7e 100644
--- a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Import.qbl
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Import.qbl
@@ -25,59 +25,97 @@
     attricolumn               := selectobject( source, GeneralExcelImportAndExportDataTable.GeneralExcelImportAndExportDataColumn, column, column.ColumnIndex() = 1 );
     //鐢熸垚鏂拌〃鐨勬棩鏈熷垪
     table                     := DLEngineLogisticsCostReport::InitiateSearch( owner );
-    traverse( source, GeneralExcelImportAndExportDataTable.GeneralExcelImportAndExportDataRow, excelrow ){
-      productcell             := selectobject( excelrow, GeneralExcelImportAndExportDataCell, excelcell, excelcell.GeneralExcelImportAndExportDataColumn() = productcolumn );
+    sameproductvalues         := selectuniquevalues( productcolumn, GeneralExcelImportAndExportDataCell, productcell, productcell.Value() );
+    traverse( sameproductvalues, Elements, productvalue ){
       //澶勭悊鏈鍚屾鐨勪骇鍝�
-      if( not exists( products, Elements, product, product.ID() = productcell.Value() ) ){
-        product               := selectobject( owner, Product_MP, product, product.ID() = productcell.Value() );
+      if( not exists( products, Elements, product, product.ID() = productvalue ) ){
+        product               := selectobject( owner, Product_MP, product, product.ID() = productvalue );
         products.Add( product );
-        ccrow                 := table.GetRow( productcell.Value() );
+        ccrow                 := table.GetRow( productvalue );
         //鑾峰彇鐩稿悓鐨勪骇鍝�
-        sameproductcells      := selectset( productcolumn, GeneralExcelImportAndExportDataCell, excelcell, excelcell.Value() = productcell.Value() );
+        sameproductcells      := selectset( productcolumn, GeneralExcelImportAndExportDataCell, excelcell, excelcell.Value() = productvalue );
         //浠庢棩鏈熷垪寮�濮嬪鐞�
-        traverse( excelrow, GeneralExcelImportAndExportDataCell, excelcell, excelcell.GeneralExcelImportAndExportDataColumn().ColumnIndex() > 1 ){
-          excelcolumn         := excelcell.GeneralExcelImportAndExportDataColumn();
+        traverse( source, GeneralExcelImportAndExportDataTable.GeneralExcelImportAndExportDataColumn, excelcolumn, excelcolumn.ColumnIndex() > 1 ){
           column              := selectobject( table, Column, column, column.Name() = excelcolumn.Name() );
           cell                := selectobject( ccrow, Cell, cell, cell.Column() = column );
           traverse( sameproductcells, Elements.GeneralExcelImportAndExportDataRow, samerow ){
             attricell         := selectobject( samerow, GeneralExcelImportAndExportDataCell, attricell, attricell.GeneralExcelImportAndExportDataColumn() = attricolumn );
-            if( attricell.Value() = '鎬昏垂鐢�' ){
-              valuecell       := selectobject( samerow, GeneralExcelImportAndExportDataCell, valuecell, valuecell.GeneralExcelImportAndExportDataColumn() = excelcolumn );
-              if( valuecell.Value() <> cell.AllCost().Format( 'N(Dec)' ) ){
-                cell.AllCost( [Real]valuecell.Value() );
-                cell.IsUpdate( true );
-              }
-            }
-    //        if( not ( attricell.Value() = '棰勮鎬昏垂鐢�' or attricell.Value() = '鎬昏垂鐢�' ) ){
+    //        if( attricell.Value() = '鎬昏垂鐢�' ){
     //          valuecell       := selectobject( samerow, GeneralExcelImportAndExportDataCell, valuecell, valuecell.GeneralExcelImportAndExportDataColumn() = excelcolumn );
-    //          if( attricell.Value() = '闀挎槬澶栫搴撳叆搴撹垂鐢�' ){
-    //            cell.CCRentInCost( [Number]valuecell.Value() );
-    //          }else if( attricell.Value() = '闀挎槬澶栫搴撳嚭搴撹垂鐢�' ){
-    //            cell.CCRentOutOfCost( [Number]valuecell.Value() );
-    //          }else if( attricell.Value() = '闀挎槬闀块�旇繍杈撹垂鐢�' ){
-    //            cell.CCLongTransCost( [Number]valuecell.Value() );
-    //          }else if( attricell.Value() = '闀挎槬鐭�旇繍杈撹垂鐢�' ){
-    //            cell.CCShorTransCost( [Number]valuecell.Value() );
-    //          }else if( attricell.Value() = '闀挎槬澶栫搴撲粨鍌ㄨ垂鐢�' ){
-    //            cell.CCRentStorCost( [Number]valuecell.Value() );
-    //          }else if( attricell.Value() = '澶ц繛澶栫搴撳叆搴撹垂鐢�' ){
-    //            cell.DLRentInCost( [Number]valuecell.Value() );
-    //          }else if( attricell.Value() = '澶ц繛澶栫搴撳嚭搴撹垂鐢�' ){
-    //            cell.DLRentOutOfCost( [Number]valuecell.Value() );
-    //          }else if( attricell.Value() = '鍘傚唴鍒板绉熷簱杩愯緭璐圭敤' ){
-    //            cell.WerkToDLRentTransCost( [Number]valuecell.Value() );
-    //          }else if( attricell.Value() = '澶ц繛澶栫搴撲粨鍌ㄨ垂鐢�' ){
-    //            cell.DLRentStorCost( [Number]valuecell.Value() );
+    //          info( '------------------', valuecell.Value(), cell.AllCost().Format( 'N(Dec)' ),valuecell.Value() <> cell.AllCost().Format( 'N(Dec)' ));
+    //          if( valuecell.Value() <> cell.AllCost().Format( 'N(Dec)' ) ){
+    //            cell.AllCost( [Real]valuecell.Value() );
+    //            cell.IsUpdate( true );
     //          }
-    ////          else if( attricell.Value() = '棰勮鎬昏垂鐢�' ){
-    ////            cell.EstimatedTotalCost( [Number]valuecell.Value() );
-    ////          }
-    //          else if( attricell.Value() = '绯绘暟' ){
-    //            cell.CoefficientValue( valuecell.Value() );
-    //          }
-    ////          else if( attricell.Value() = '鎬昏垂鐢�' ){
-    ////            cell.TotalCost( [Number]valuecell.Value() );
-    ////          }
+    //        }
+    //        if( not ( attricell.Value() = '棰勮鎬昏垂鐢�' or attricell.Value() = '鎬昏垂鐢�' ) ){
+              valuecell       := selectobject( samerow, GeneralExcelImportAndExportDataCell, valuecell, valuecell.GeneralExcelImportAndExportDataColumn() = excelcolumn );
+              if( attricell.Value() = '闀挎槬澶栫搴撳叆搴撹垂鐢�' ){
+                if( valuecell.Value() <> cell.CCRentInCost().Format( 'N(Dec)' ) ){
+                  cell.CCRentInCost( [Real]valuecell.Value() );
+                  cell.IsCCRentInCostUpdate( true );
+                }
+              }else if( attricell.Value() = '闀挎槬澶栫搴撳嚭搴撹垂鐢�' ){
+                if( valuecell.Value() <> cell.CCRentOutOfCost().Format( 'N(Dec)' ) ){
+                  cell.CCRentOutOfCost( [Real]valuecell.Value() );
+                  cell.IsCCRentOutOfCostUpdate( true );
+                }
+              }else if( attricell.Value() = '闀挎槬闀块�旇繍杈撹垂鐢�' ){
+                if( valuecell.Value() <> cell.CCLongTransCost().Format( 'N(Dec)' ) ){
+                  cell.CCLongTransCost( [Real]valuecell.Value() );
+                  cell.IsCCLongTransCostUpdate( true );
+                }
+              }else if( attricell.Value() = '闀挎槬鐭�旇繍杈撹垂鐢�' ){
+                if( valuecell.Value() <> cell.CCShorTransCost().Format( 'N(Dec)' ) ){
+                  cell.CCShorTransCost( [Real]valuecell.Value() );
+                  cell.IsCCShorTransCostUpdate( true );
+                }
+              }else if( attricell.Value() = '闀挎槬澶栫搴撲粨鍌ㄨ垂鐢�' ){
+                if( valuecell.Value() <> cell.CCRentStorCost().Format( 'N(Dec)' ) ){
+                  cell.CCRentStorCost( [Real]valuecell.Value() );
+                  cell.IsCCRentStorCostUpdate( true );
+                }
+              }else if( attricell.Value() = '澶ц繛澶栫搴撳叆搴撹垂鐢�' ){
+                if( valuecell.Value() <> cell.DLRentInCost().Format( 'N(Dec)' ) ){
+                  cell.DLRentInCost( [Real]valuecell.Value() );
+                  cell.IsDLRentInCostUpdate( true );
+                }
+              }else if( attricell.Value() = '澶ц繛澶栫搴撳嚭搴撹垂鐢�' ){
+                if( valuecell.Value() <> cell.DLRentOutOfCost().Format( 'N(Dec)' ) ){
+                  cell.DLRentOutOfCost( [Real]valuecell.Value() );
+                  cell.IsDLRentOutOfCostUpdate( true );
+                }
+              }else if( attricell.Value() = '鍘傚唴鍒板绉熷簱杩愯緭璐圭敤' ){
+                if( valuecell.Value() <> cell.WerkToDLRentTransCost().Format( 'N(Dec)' ) ){
+                  cell.WerkToDLRentTransCost( [Real]valuecell.Value() );
+                  cell.IsWerkToDLRentTransCostUpdate( true );
+                }
+              }else if( attricell.Value() = '澶ц繛澶栫搴撲粨鍌ㄨ垂鐢�' ){
+                if( valuecell.Value() <> cell.DLRentStorCost().Format( 'N(Dec)' ) ){
+                  cell.DLRentStorCost( [Real]valuecell.Value() );
+                  cell.IsDLRentStorCostUpdate( true );
+                }
+              }else if( attricell.Value() = '澶ц繛澶栫搴撳叾浠栬垂鐢�' ){
+                if( valuecell.Value() <> cell.DLRentOtherCost().Format( 'N(Dec)' ) ){
+                  cell.DLRentOtherCost( [Real]valuecell.Value() );
+                  cell.IsDLRentOtherCostUpdate( true );
+                }
+              }else if( attricell.Value() = '棰勮鎬昏垂鐢�' ){
+                if( valuecell.Value() <> cell.EstimateTotalCost().Format( 'N(Dec)' ) ){
+                  cell.EstimateTotalCost( [Real]valuecell.Value() );
+                  cell.IsEstimateTotalCostUpdate( true );
+                }
+              }else if( attricell.Value() = '绯绘暟' ){
+                if( valuecell.Value() <> cell.CoefficientValue() ){
+                  cell.CoefficientValue( valuecell.Value() );
+                  cell.IsCoefficientUpdate( true );
+                }
+              }else if( attricell.Value() = '鎬昏垂鐢�' ){
+                if( valuecell.Value() <> cell.AllCost().Format( 'N(Dec)' ) ){
+                  cell.AllCost( [Real]valuecell.Value() );
+                  cell.IsAllCostUpdate( true );
+                }
+              }
     //        }
           }
         }
diff --git a/_Main/BL/Type_DispatchShiftPlan/Attribute_ShiftQty.qbl b/_Main/BL/Type_DispatchShiftPlan/Attribute_ShiftQty.qbl
new file mode 100644
index 0000000..3f1cccd
--- /dev/null
+++ b/_Main/BL/Type_DispatchShiftPlan/Attribute_ShiftQty.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ShiftQty
+{
+  #keys: '3[414996.1.206760016][414996.1.206760015][414996.1.206760017]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_DispatchShiftPlan/Attribute_VersionFlag.qbl b/_Main/BL/Type_DispatchShiftPlan/Attribute_VersionFlag.qbl
deleted file mode 100644
index 047acd8..0000000
--- a/_Main/BL/Type_DispatchShiftPlan/Attribute_VersionFlag.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute VersionFlag
-{
-  #keys: '3[414996.1.17706927][414996.1.17706926][414996.1.17706928]'
-  Description: '鐗堟湰鏍囪瘑'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_DispatchShiftPlan/StaticMethod_Dispatch.qbl b/_Main/BL/Type_DispatchShiftPlan/StaticMethod_Dispatch.qbl
index 5d69146..fd802d5 100644
--- a/_Main/BL/Type_DispatchShiftPlan/StaticMethod_Dispatch.qbl
+++ b/_Main/BL/Type_DispatchShiftPlan/StaticMethod_Dispatch.qbl
@@ -1,18 +1,33 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Dispatch (
+  InterfaceDataset interfaceDataset,
   const MacroPlan macroPlan,
-  Archive owner,
-  String versionFlag
+  String executor
 )
 {
   TextBody:
   [*
     // Akari Aug-21-2024 (created)
-    // owner.DispatchShiftPlan( relflush );
-    // owner.RB_DispatchShiftPlanBroker().Source().FlatQuery( "truncate table A_DispatchShiftPlan" );
+    now := DateTime::Now();
     
-    dispatchShiftPlans := selectset( owner,DispatchShiftPlan,dispatchShiftPlan,true );
+    interfaceLoginfo := maxselect( interfaceDataset,InterfaceLoginfo,loginfo,loginfo.Name() = Translations::InterfaceDataset_ShiftPlanPPPSPush_Name() ,loginfo.InterfaceDateTime() );
+    if( not isnull( interfaceLoginfo )){
+      if( not interfaceLoginfo.IsShow() ){
+        interfaceLoginfo.Delete();
+      }else{
+        interfaceLoginfo.Last( false );
+      }
+    }
+    
+    interfaceLoginfo := interfaceDataset.InterfaceLoginfo( relnew,
+                                                           ExecuteUser := executor,
+                                                           Name := Translations::InterfaceDataset_ShiftPlanPPPSPush_Name(),
+                                                           InterfaceDateTime := now,
+                                                           Last := true,
+                                                           Message := '鐝璁″垝锛圥PA+IDS锛夋暟鎹帹閫�' );
+    
+    dispatchShiftPlans := selectset( interfaceLoginfo,DispatchShiftPlan,dispatchShiftPlan,true );
     dispatchShiftPlanIndexTree := NamedValueTree::Create();
     for( i := 0 ; i < dispatchShiftPlans.Size() ; i++){
       dispatchShiftPlan := dispatchShiftPlans.Element( i );
@@ -41,21 +56,20 @@
          dispatchShiftPlan := dispatchShiftPlans.Element( dispatchShiftPlanIndex.GetValueAsNumber() );
          dispatchShiftPlan.Tips( shiftPlan.Remark() );
          dispatchShiftPlan.VersionName( macroPlanName );
-         dispatchShiftPlan.VersionFlag( versionFlag );
          dispatchShiftPlan.InterfaceTime( now );
        }else{
-         owner.DispatchShiftPlan( relnew,ID := OS:: GenerateGUIDAsString(),
-                                  ProductLine := productLine,
-                                  FactoryName := factory.ID(),
+         interfaceLoginfo.DispatchShiftPlan( relnew,ID := OS:: GenerateGUIDAsString(),
+                                             ProductLine := productLine,
+                                             FactoryName := factory.ID(),
+                                             ShiftQty := shiftPlan.Outcome(),
                                   
-                                  ShiftDate := shiftDate,
-                                  Tips := shiftPlan.Remark(),
-                                  VersionName := macroPlanName,
-                                  VersionFlag := versionFlag,
-                                  InterfaceTime := now );
+                                             ShiftDate := shiftDate,
+                                             Tips := shiftPlan.Remark(),
+                                             VersionName := macroPlanName,
+                                             InterfaceTime := now );
        }
     }
-    
+    DispatchShiftPlan::Publish( interfaceLoginfo );
     // owner.RB_DispatchShiftPlanBroker().AsyncExecute();
   *]
 }
diff --git a/_Main/BL/Type_DispatchShiftPlan/StaticMethod_Publish.qbl b/_Main/BL/Type_DispatchShiftPlan/StaticMethod_Publish.qbl
new file mode 100644
index 0000000..2dbe5b1
--- /dev/null
+++ b/_Main/BL/Type_DispatchShiftPlan/StaticMethod_Publish.qbl
@@ -0,0 +1,29 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Publish (
+  InterfaceLoginfo loginfo
+)
+{
+  TextBody:
+  [*
+    //// 鐢勫叞楦� Jul-17-2024 (created)
+    jsonarray          := JSON::Array();
+    traverse( loginfo, DispatchShiftPlan, shiftPlan ){
+      shiftPlanjson          := JSON::Object()
+                                    .Add( "productLine", shiftPlan.ProductLine() )
+                                    .Add( "shiftDate", shiftPlan.ShiftDate().Format( 'Y-M2-D2' ) )//"2024-10-01" 
+                                    .Add( "shiftQty", shiftPlan.ShiftQty() )
+                                    .Add( "tips", shiftPlan.Tips() )
+                                    .Add( "versionName", shiftPlan.VersionName() )
+                                    .Add( "factoryName", shiftPlan.FactoryName() )
+                                    .Add( "fac", shiftPlan.Fac() )
+                                    .Add( "interfaceTime", shiftPlan.InterfaceTime().Format( 'Y-M2-D2 H:m:s' ) )/*"2024-10-01 12:00:00" )*/
+                                    .Build();
+      jsonarray.Add( shiftPlanjson );
+    }
+    loginfo.RequestBody( jsonarray.Build().AsString() );
+    info( loginfo.RequestBody() );
+    data     := InterfaceLoginfo::CallInterfaceForDataCenter( loginfo.InterfaceDataset(), loginfo );
+    info( '----------------', data.AsString() );
+  *]
+}
diff --git a/_Main/BL/Type_FinancialProductionColumn/Attribute_IsDay.qbl b/_Main/BL/Type_FinancialProductionColumn/Attribute_IsDay.qbl
deleted file mode 100644
index 175d66f..0000000
--- a/_Main/BL/Type_FinancialProductionColumn/Attribute_IsDay.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute IsDay
-{
-  #keys: '3[415136.0.1144791862][415136.0.1144791861][415136.0.1144791863]'
-  ValueType: Boolean
-}
diff --git a/_Main/BL/Type_FinancialProductionReport/Method_GenerateColumn.qbl b/_Main/BL/Type_FinancialProductionReport/Method_GenerateColumn.qbl
index e74d045..f7f8483 100644
--- a/_Main/BL/Type_FinancialProductionReport/Method_GenerateColumn.qbl
+++ b/_Main/BL/Type_FinancialProductionReport/Method_GenerateColumn.qbl
@@ -11,13 +11,10 @@
     startofyear               := startofplanning.StartOfYear();
     startofnextyear           := startofplanning.StartOfNextYear();
     
-    for( start := startofyear; start < startofnextyear; start := start + Duration::Days( 1 ) ){
+    for( start := startofyear; start < startofnextyear; start := start.StartOfMonth() ){
       periodtime := start.Date();
       periodname := periodtime.Format( "M2/D2/Y" );
-      this.FinancialProductionColumn( relnew, Name := periodname, Period := periodtime, IsDay := true );
-      if( start = start.StartOfMonth() ){
-        this.FinancialProductionColumn( relnew, Name := periodname, Period := periodtime );
-      }
+      this.FinancialProductionColumn( relnew, Name := periodname, Period := periodtime );
     }
   *]
 }
diff --git a/_Main/BL/Type_FinancialProductionReport/Method_GenerateShow.qbl b/_Main/BL/Type_FinancialProductionReport/Method_GenerateShow.qbl
index 683c9ad..c5dff64 100644
--- a/_Main/BL/Type_FinancialProductionReport/Method_GenerateShow.qbl
+++ b/_Main/BL/Type_FinancialProductionReport/Method_GenerateShow.qbl
@@ -31,8 +31,8 @@
           yearcell            := yearcolumn.FinancialProductionCell( relnew, Quantity := 0 );
           showrow.FinancialProductionCell( relinsert, yearcell );
         }
-        traverse( row, FinancialProductionCell, cell, not cell.FinancialProductionColumn().IsDay() ){
-          column              := selectobject( this, FinancialProductionColumn, column, column.Name() = cell.FinancialProductionColumn().Name() and not column.IsDay() );
+        traverse( row, FinancialProductionCell, cell ){
+          column              := selectobject( this, FinancialProductionColumn, column, column.Name() = cell.FinancialProductionColumn().Name() );
           if( isnull( column ) ){
             column            := this.FinancialProductionColumn( relnew, Name := cell.FinancialProductionColumn().Name(), Period := cell.FinancialProductionColumn().Period() );
           }
diff --git "a/_Main/BL/Type_FinancialProductionRow/Method_Initialize\043110.qbl" "b/_Main/BL/Type_FinancialProductionRow/Method_Initialize\043110.qbl"
index 5662263..bdd6e85 100644
--- "a/_Main/BL/Type_FinancialProductionRow/Method_Initialize\043110.qbl"
+++ "b/_Main/BL/Type_FinancialProductionRow/Method_Initialize\043110.qbl"
@@ -13,7 +13,7 @@
     cell := column.FinancialProductionCell( relnew, Quantity := 0 );
     
     this.FinancialProductionCell( relinsert, cell );
-    if( unit <> FinancialProductionReport::GetDefaultAllUnit() and not column.IsDay()){
+    if( unit <> FinancialProductionReport::GetDefaultAllUnit() ){
       importdata := product.MacroPlan().FPImportData( relnew, Generation := product.Generation()
                                                       , MqbMlb := product.MQBMLB()
                                                       , Power := product.Power()
diff --git a/_Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl b/_Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl
index bad03e0..72d3e6d 100644
--- a/_Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl
+++ b/_Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl
@@ -29,10 +29,6 @@
         if( isnull( unitrow ) ){
           unitrow           := table.FinancialProductionRow( relnew, Name := product.Value(), Unit := unit.Value() );
         }
-    //    allrow  := selectobject( table, FinancialProductionRow, allrow, allrow.Name() = product.Value() and allrow.Unit() = allunit );
-    //    if( isnull( unitrow ) ){
-    //      allrow            := table.FinancialProductionRow( relnew, Name := product.Value(), Unit := allunit );
-    //    }
         
         //璇诲彇姣忎竴琛岀殑鍗曞厓鏍�
         traverse( row, FinancialProductionCell, cell, cell.Value() <> '0' and cell.FinancialProductionColumn() <> productcolumn and cell.FinancialProductionColumn() <> unitcolumn and cnv2.Convert( cell.FinancialProductionColumn().Name() ) <> beforeyearday ){
@@ -44,24 +40,13 @@
             previouscell    := selectobject( row, FinancialProductionCell, previouscell, previouscell.FinancialProductionColumn() = previouscolumn );
             quantity        := [Real]cell.Value() + [Real]previouscell.Value();
           }
-    //      info( '-----------------', period );
           //鑾峰彇琚鍏ユ姤琛ㄧ殑鏃ユ湡鍒�
-          tablecolumn       := selectobject( table, FinancialProductionColumn, column, not column.IsDay() and column.Name() = periodname );
+          tablecolumn       := selectobject( table, FinancialProductionColumn, column, column.Name() = periodname );
           if( isnull( tablecolumn ) ){
             tablecolumn     := table.FinancialProductionColumn( relnew, Name := periodname, Period := yearday.Date() );
           }
           //鑾峰彇琚鍏ユ姤琛ㄧ殑鍗曞厓鏍�
           unitcell          := selectobject( unitrow, FinancialProductionCell, unitcell, unitcell.FinancialProductionColumn() = tablecolumn );
-    //      allcell           := selectobject( allrow, FinancialProductionCell, allcell, allcell.FinancialProductionColumn() = tablecolumn );
-    //      if( isnull( allcell ) ){
-    //        allcell         := tablecolumn.FinancialProductionCell( relnew, Quantity := [Real]cell.Value(), Value := cell.Value() );
-    //        allrow.FinancialProductionCell( relinsert, allcell );
-    //      }else{
-    //        if( allcell.Quantity() <> quantity ){
-    //          allcell.Quantity( quantity );
-    //          allcell.IsUpdate( true );
-    //        }
-    //      }
           if( isnull( unitcell ) ){
             unitcell        := tablecolumn.FinancialProductionCell( relnew, Quantity := [Real]cell.Value(), Value := cell.Value() );
             unitrow.FinancialProductionCell( relinsert, unitcell );
diff --git a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl
index 2188d1d..8b86387 100644
--- a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl
+++ b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl
@@ -27,8 +27,8 @@
     //Unit
     unitcolumnelement             := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, 'Unit' );
     
-    minindex                      := min( table, FinancialProductionColumn, column, not column.IsDay(), column.Index() );
-    traverse ( table, FinancialProductionColumn, column, not column.IsDay() ) {
+    minindex                      := min( table, FinancialProductionColumn, column, column.Index() );
+    traverse ( table, FinancialProductionColumn, column ) {
       columnelement               := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, column.Name() );
       
       cells                       := selectsortedset( column, FinancialProductionCell, cell, cell.FinancialProductionRow().RowNr() );
diff --git a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
index 7e014c0..31b5a4b 100644
--- a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
@@ -39,8 +39,8 @@
             periodtime        := dayperiodtime.StartOfMonth();
             periodname        := periodtime.Format( "M2/D2/Y" );
     //        quantity          := [Number]pispip.NewSupplyQuantity();//鍥涜垗浜斿叆
-            daycolumn         := selectobject( table, FinancialProductionColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime and column.IsDay() );
-            column            := selectobject( table, FinancialProductionColumn, column, column.Name() = periodname and column.Period() = periodtime and not column.IsDay() );
+            daycolumn         := selectobject( table, FinancialProductionColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime );
+            column            := selectobject( table, FinancialProductionColumn, column, column.Name() = periodname and column.Period() = periodtime );
             factoryrow.Initialize( daycolumn, pispip.NewSupplyQuantity() );
             factoryrow.Initialize( column, pispip.NewSupplyQuantity() );
     //        allrow.Initialize( column, pispip.NewSupplyQuantity() );
diff --git a/_Main/BL/Type_FinancialSalesColumn/Attribute_IsDay.qbl b/_Main/BL/Type_FinancialSalesColumn/Attribute_IsDay.qbl
deleted file mode 100644
index 76487f5..0000000
--- a/_Main/BL/Type_FinancialSalesColumn/Attribute_IsDay.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute IsDay
-{
-  #keys: '3[415136.0.1144791876][415136.0.1144791875][415136.0.1144791877]'
-  ValueType: Boolean
-}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl b/_Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl
index 8fa3b08..592acd8 100644
--- a/_Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl
+++ b/_Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl
@@ -11,13 +11,10 @@
     startofyear               := startofplanning.StartOfYear();
     startofnextyear           := startofplanning.StartOfNextYear();
     
-    for( start := startofyear; start < startofnextyear; start := start + Duration::Days( 1 ) ){
+    for( start := startofyear; start < startofnextyear; start := start.StartOfMonth() ){
       periodtime := start.Date();
       periodname := periodtime.Format( "M2/D2/Y" );
-      this.FinancialSalesColumn( relnew, Name := periodname, Period := periodtime, IsDay := true );
-      if( start = start.StartOfMonth() ){
-        this.FinancialSalesColumn( relnew, Name := periodname, Period := periodtime );
-      }
+      this.FinancialSalesColumn( relnew, Name := periodname, Period := periodtime );
     }
   *]
 }
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_GenerateShow.qbl b/_Main/BL/Type_FinancialSalesReport/Method_GenerateShow.qbl
index e56d045..52030a0 100644
--- a/_Main/BL/Type_FinancialSalesReport/Method_GenerateShow.qbl
+++ b/_Main/BL/Type_FinancialSalesReport/Method_GenerateShow.qbl
@@ -33,8 +33,8 @@
           showrow.FinancialSalesCell( relinsert, yearcell );
         }
         
-        traverse( row, FinancialSalesCell, cell, not cell.FinancialSalesColumn().IsDay() ){
-          column        := selectobject( this, FinancialSalesColumn, column, column.Name() = cell.FinancialSalesColumn().Name() and not column.IsDay());
+        traverse( row, FinancialSalesCell, cell ){
+          column        := selectobject( this, FinancialSalesColumn, column, column.Name() = cell.FinancialSalesColumn().Name() );
           if( isnull( column ) ){
             column            := this.FinancialSalesColumn( relnew, Name := cell.FinancialSalesColumn().Name(), Period := cell.FinancialSalesColumn().Period() );
           }
diff --git a/_Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl b/_Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl
index a6d4f72..1e7726c 100644
--- a/_Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl
+++ b/_Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl
@@ -13,7 +13,7 @@
     cell := column.FinancialSalesCell( relnew, Value := '0' );
     
     this.FinancialSalesCell( relinsert, cell );
-    if( unit <> FinancialProductionReport::GetDefaultAllUnit() and not column.IsDay() ){
+    if( unit <> FinancialProductionReport::GetDefaultAllUnit() ){
       importdata := product.MacroPlan().FSImportData( relnew, Generation := product.Generation()
                                                       , MqbMlb := product.MQBMLB()
                                                       , Power := product.Power()
diff --git a/_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl b/_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl
index a57f712..2abd5c6 100644
--- a/_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl
+++ b/_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl
@@ -25,10 +25,6 @@
         if( isnull( unitrow ) ){
           unitrow           := table.FinancialSalesRow( relnew, Name := product.Value(), Unit := unit.Value() );
         }
-    //    allrow              := selectobject( table, FinancialSalesRow, allrow, allrow.Name() = product.Value() and allrow.Unit() = allunit );
-    //    if( isnull( unitrow ) ){
-    //      allrow            := table.FinancialSalesRow( relnew, Name := product.Value(), Unit := allunit );
-    //    }
         
         traverse( row, FinancialSalesCell, cell, cell.Value() <> '0' and cell.FinancialSalesColumn() <> productcolumn and cell.FinancialSalesColumn() <> unitcolumn and cnv2.Convert( cell.FinancialSalesColumn().Name() ) <> beforeyearday  ){
           column            := cell.FinancialSalesColumn();
@@ -42,7 +38,7 @@
           }
           tablecolumn       := construct( FinancialSalesColumn );
           //鑾峰彇琚鍏ユ姤琛ㄧ殑鏃ユ湡鍒�
-          tablecolumn       := selectobject( table, FinancialSalesColumn, fscolumn, not fscolumn.IsDay() and fscolumn.Name() = periodname );
+          tablecolumn       := selectobject( table, FinancialSalesColumn, fscolumn, fscolumn.Name() = periodname );
           if( isnull( tablecolumn ) ){
             tablecolumn     := table.FinancialSalesColumn( relnew, Name := periodname, Period := yearday.Date() );
           }
@@ -56,16 +52,6 @@
               unitcell.IsUpdate( true );
             }
           }
-    //      allcell  := selectobject( allrow, FinancialSalesCell, allcell, allcell.FinancialSalesColumn() = tablecolumn  );
-    //      if( isnull( allcell ) ){
-    //        allcell         := tablecolumn.FinancialSalesCell( relnew, Value := cell.Value() );
-    //        allrow.FinancialSalesCell( relinsert, allcell );
-    //      }else{
-    //        if( [Real]allcell.Value() <> quantity ){
-    //          allcell.Value( [String]( [Number]quantity ) );
-    //          allcell.IsUpdate( true );
-    //        }
-    //      }
         }
       }
     }
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl
index a0bf9ca..6602944 100644
--- a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl
@@ -27,8 +27,8 @@
     //Unit
     unitcolumnelement             := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, 'Unit' );
     
-    minindex                      := min( table, FinancialSalesColumn, column, not column.IsDay(), column.Index() );
-    traverse ( table, FinancialSalesColumn, column, not column.IsDay() ) {
+    minindex                      := min( table, FinancialSalesColumn, column, column.Index() );
+    traverse ( table, FinancialSalesColumn, column ) {
       columnelement               := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, column.Name() );
       
       cells := selectsortedset( column, FinancialSalesCell, cell, cell.FinancialSalesRow().RowNr() );
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl
index 7fa7381..5b6933e 100644
--- a/_Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl
@@ -56,8 +56,8 @@
           periodtime         := dayperiodtime.StartOfMonth();
           periodname         := periodtime.Format( "M2/D2/Y" );
     //      info( '-------------------------', periodname, periodtime );
-          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() );
+          daycolumn          := selectobject( table, FinancialSalesColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime );
+          column             := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
     //      info( '-------------------------', column.Name() );
           quantity   := [Number]psdip.Quantity();//鍥涜垗浜斿叆
           
@@ -81,8 +81,8 @@
             dayperiodname   := dayperiodtime.Format( "M2/D2/Y" );
             periodtime      := dayperiodtime.StartOfMonth();
             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() );
+            daycolumn       := selectobject( table, FinancialSalesColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime );
+            column          := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
             quantity        := [Number]pispip.NewSupplyQuantity();//鍥涜垗浜斿叆
             
             factoryrow.Initialize( column, quantity );//鍙朤otal Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
diff --git a/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl
index 612bf56..48b168e 100644
--- a/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl
@@ -40,8 +40,8 @@
     ccsvaluecumulant          := [Real]0;
     
     traverse( table, FinancialWeeklyColumn, column ){
-      productioncolumn      := selectobject( productiontable, FinancialProductionColumn, pcolumn, pcolumn.Name() = column.Name() and pcolumn.Period() = column.Period() and not pcolumn.IsDay() );
-      salescolumn           := selectobject( salestable, FinancialSalesColumn, scolumn, scolumn.Name() = column.Name() and scolumn.Period() = column.Period() and not scolumn.IsDay() );
+      productioncolumn      := selectobject( productiontable, FinancialProductionColumn, pcolumn, pcolumn.Name() = column.Name() and pcolumn.Period() = column.Period() );
+      salescolumn           := selectobject( salestable, FinancialSalesColumn, scolumn, scolumn.Name() = column.Name() and scolumn.Period() = column.Period() );
       
       //浜ч噺姹囨��
       dlpvalue              := [Real]0;
diff --git a/_Main/BL/Type_InterfaceDataset/Method_PublishPlanReportData.qbl b/_Main/BL/Type_InterfaceDataset/Method_PublishPlanReportData.qbl
index 61d041a..a1bbc96 100644
--- a/_Main/BL/Type_InterfaceDataset/Method_PublishPlanReportData.qbl
+++ b/_Main/BL/Type_InterfaceDataset/Method_PublishPlanReportData.qbl
@@ -21,6 +21,7 @@
       InterfaceDataset::PushOfflinePlanData( macroplan, this, executor );
     }
     if( isshiftplan ){//鐝璁″垝
+      DispatchShiftPlan::Dispatch(this, macroplan,executor );
     //  CustomerDemandIDS::GenerateData( this, recyclebin, archive );
     }
     if( isassembleonlineplan ){//瑁呴厤涓婄嚎璁″垝
diff --git a/_Main/BL/Type_OfflinePlanArchiveVersion/Method_GetRow.qbl b/_Main/BL/Type_OfflinePlanArchiveVersion/Method_GetRow.qbl
index a6201d7..0345029 100644
--- a/_Main/BL/Type_OfflinePlanArchiveVersion/Method_GetRow.qbl
+++ b/_Main/BL/Type_OfflinePlanArchiveVersion/Method_GetRow.qbl
@@ -11,11 +11,13 @@
     
     if( isnull( row ) ){
       product := selectobject( noprow.NewOfflinePlanTable().MacroPlan(), Product_MP, product, product.ID() = noprow.ProductID() );
-      unit    := ifexpr( noprow.ProductionLine().FindString( "CC", 0 ) > -1, FinancialProductionReport::GetDefaultCCUnit(), FinancialProductionReport::GetDefaultDLUnit() );
-      row     := this.Row( relnew, Name := noprow.ProductID(), ProductionLine := noprow.ProductionLine(), Type := noprow.Type(), Unit := unit
-                           , ProductID := ifexpr( exists( product.GetAllParent(), Elements, e, e.ID() = EnginePipelineReport::GetDefaultProductParent() ), product.Notes(), product.ID() ) );
-      //鍒濆鍖栧崟鍏冩牸
-      row.InitializeCell();
+      if( not isnull( product ) ){
+        unit    := ifexpr( noprow.ProductionLine().FindString( "CC", 0 ) > -1, FinancialProductionReport::GetDefaultCCUnit(), FinancialProductionReport::GetDefaultDLUnit() );
+        row     := this.Row( relnew, Name := noprow.ProductID(), ProductionLine := noprow.ProductionLine(), Type := noprow.Type(), Unit := unit
+                             , ProductID := ifexpr( exists( product.GetAllParent(), Elements, e, e.ID() = EnginePipelineReport::GetDefaultProductParent() ), product.Notes(), product.ID() ) );
+        //鍒濆鍖栧崟鍏冩牸
+        row.InitializeCell();
+      }
     }
     
     return row;
diff --git a/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl b/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl
index ee7c9fd..de27233 100644
--- a/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl
+++ b/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl
@@ -35,24 +35,26 @@
     }
     traverse( noptable, NewOfflinePlanRow, noprow ){
       row                  := table.GetRow( noprow );
-      traverse( noprow, NewOfflinePlanCell, nopcell ){
-        column             := selectobject( table, Column, column, column.TimeUnit() = Translations::MP_GlobalParameters_Day() and column.StartDate() = nopcell.NewOfflinePlanColumn().StartDate() );
-        cell               := selectobject( row, Cell, cell, cell.Column() = column );
-        actproductionKey   := noprow.ProductID() + column.StartDate().AsQUILL();
-        actproductionhandle:= actproductiontree.GetHandle( actproductionKey );
-        actproductionindex := guard( actproductiontree.Root().Child( actproductionhandle ),null( NamedValue ));
-        
-        actproductionqty       := 0.0;
-        if( not isnull( actproductionindex )){
-          actproduction        := actproductiondatas.Element( actproductionindex.GetValueAsNumber() );
-          actproductionqty     := actproduction.ActualOut();
+      if( not isnull( row ) ){
+        traverse( noprow, NewOfflinePlanCell, nopcell ){
+          column             := selectobject( table, Column, column, column.TimeUnit() = Translations::MP_GlobalParameters_Day() and column.StartDate() = nopcell.NewOfflinePlanColumn().StartDate() );
+          cell               := selectobject( row, Cell, cell, cell.Column() = column );
+          actproductionKey   := noprow.ProductID() + column.StartDate().AsQUILL();
+          actproductionhandle:= actproductiontree.GetHandle( actproductionKey );
+          actproductionindex := guard( actproductiontree.Root().Child( actproductionhandle ),null( NamedValue ));
+          
+          actproductionqty       := 0.0;
+          if( not isnull( actproductionindex )){
+            actproduction        := actproductiondatas.Element( actproductionindex.GetValueAsNumber() );
+            actproductionqty     := actproduction.ActualOut();
+          }
+          cell.ActualProductionQty( actproductionqty );
+          cell.InventoryWeight( nopcell.InventoryWeight() );
+      //      cell.ProductionSerialNumber( nopcell.ProductionSerialNumber() );
+          cell.Quantity( nopcell.Quantity() );
+      //      cell.Shift( nopcell.Shift() );
+      //      cell.Value( nopcell.Value() );
         }
-        cell.ActualProductionQty( actproductionqty );
-        cell.InventoryWeight( nopcell.InventoryWeight() );
-    //      cell.ProductionSerialNumber( nopcell.ProductionSerialNumber() );
-        cell.Quantity( nopcell.Quantity() );
-    //      cell.Shift( nopcell.Shift() );
-    //      cell.Value( nopcell.Value() );
       }
     }
     showtable.Generate( search );
diff --git a/_Main/Sys/Repr/Global/CCEngineLogisticsCostCell.qrp b/_Main/Sys/Repr/Global/CCEngineLogisticsCostCell.qrp
index ddb28c0..098ad47 100644
--- a/_Main/Sys/Repr/Global/CCEngineLogisticsCostCell.qrp
+++ b/_Main/Sys/Repr/Global/CCEngineLogisticsCostCell.qrp
@@ -11,7 +11,7 @@
       DataRepresentation.Conditional
       {
         BackgroundColor: '$FF6666'
-        ConditionBody: 'object.IsUpdate()'
+        ConditionBody: 'object.IsAllCostUpdate()'
         ConversionBody: ''
         DefaultBackgroundColor: false
         InheritConversion: false
@@ -22,31 +22,97 @@
   {
     AttributeKey: '[415136.0.1188511346]'
     Synonym: '绯绘暟'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsCoefficientUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   AttributeRepresentation EstimateTotalCost
   {
     AttributeKey: '[415136.0.1160240036]'
     Synonym: '棰勮鎬昏垂鐢�'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsEstimateTotalCostUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   AttributeRepresentation RentInCost
   {
     AttributeKey: '[415136.0.1160164662]'
     Synonym: '澶栫搴撳叆搴撹垂鐢�'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsRentInCostUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   AttributeRepresentation RentOutOfCost
   {
     AttributeKey: '[415136.0.1160164672]'
     Synonym: '澶栫搴撳嚭搴撹垂鐢�'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsRentOutOfCostUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   AttributeRepresentation RentStorCost
   {
     AttributeKey: '[415136.0.1160164707]'
     Synonym: '澶栫搴撲粨鍌ㄨ垂鐢�'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsRentStorCostUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   AttributeRepresentation WerkToRentTransCost
   {
     AttributeKey: '[415136.0.1160240024]'
     Synonym: '鍘傚唴鍒板绉熷簱杩愯緭璐圭敤'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsWerkToRentTransCostUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   RelationRepresentation Column { RelationKey: '[415136.0.986881392]' Visibility: 'Normal' }
 }
diff --git a/_Main/Sys/Repr/Global/DLEngineLogisticsCostCell.qrp b/_Main/Sys/Repr/Global/DLEngineLogisticsCostCell.qrp
index dff9aa5..97494ec 100644
--- a/_Main/Sys/Repr/Global/DLEngineLogisticsCostCell.qrp
+++ b/_Main/Sys/Repr/Global/DLEngineLogisticsCostCell.qrp
@@ -11,7 +11,7 @@
       DataRepresentation.Conditional
       {
         BackgroundColor: '$FF6666'
-        ConditionBody: 'object.IsUpdate()'
+        ConditionBody: 'object.IsAllCostUpdate()'
         ConversionBody: ''
         DefaultBackgroundColor: false
         InheritConversion: false
@@ -22,61 +22,193 @@
   {
     AttributeKey: '[415136.0.1160164734]'
     Synonym: '闀挎槬闀块�旇繍杈撹垂鐢�'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsCCLongTransCostUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   AttributeRepresentation CCRentInCost
   {
     AttributeKey: '[415136.0.1160164742]'
     Synonym: '闀挎槬澶栫搴撳叆搴撹垂鐢�'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsCCRentInCostUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   AttributeRepresentation CCRentOutOfCost
   {
     AttributeKey: '[415136.0.1160164750]'
     Synonym: '闀挎槬澶栫搴撳嚭搴撹垂鐢�'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsCCRentOutOfCostUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   AttributeRepresentation CCRentStorCost
   {
     AttributeKey: '[415136.0.1160164771]'
     Synonym: '闀挎槬澶栫搴撲粨鍌ㄨ垂鐢�'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsCCRentStorCostUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   AttributeRepresentation CCShorTransCost
   {
     AttributeKey: '[415136.0.1160164779]'
     Synonym: '闀挎槬鐭�旇繍杈撹垂鐢�'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsCCShorTransCostUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   AttributeRepresentation CoefficientValue
   {
     AttributeKey: '[415136.0.1188511355]'
     Synonym: '绯绘暟'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsCoefficientUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   AttributeRepresentation DLRentInCost
   {
     AttributeKey: '[415136.0.1160164787]'
     Synonym: '澶ц繛澶栫搴撳叆搴撹垂鐢�'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsDLRentInCostUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   AttributeRepresentation DLRentOtherCost
   {
     AttributeKey: '[415136.0.1184074681]'
     Synonym: '澶ц繛澶栫搴撳叾浠栬垂鐢�'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsDLRentOtherCostUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   AttributeRepresentation DLRentOutOfCost
   {
     AttributeKey: '[415136.0.1160164795]'
     Synonym: '澶ц繛澶栫搴撳嚭搴撹垂鐢�'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsDLRentOutOfCostUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   AttributeRepresentation DLRentStorCost
   {
     AttributeKey: '[415136.0.1160164806]'
     Synonym: '澶ц繛澶栫搴撲粨鍌ㄨ垂鐢�'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsDLRentStorCostUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   AttributeRepresentation EstimateTotalCost
   {
     AttributeKey: '[415136.0.1160164814]'
     Synonym: '棰勮鎬昏垂鐢�'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsEstimateTotalCostUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   AttributeRepresentation WerkToDLRentTransCost
   {
     AttributeKey: '[415136.0.1160164822]'
     Synonym: '鍘傚唴鍒板绉熷簱杩愯緭璐圭敤'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsWerkToDLRentTransCostUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
   }
   RelationRepresentation Column { RelationKey: '[415136.0.992900194]' Visibility: 'Normal' }
 }

--
Gitblit v1.9.3