xiaoding721
2024-10-28 52bd9a90e6e31eb2c458447fd7fec4e8f99a0fe7
修改班次信息的计算逻辑
已重命名7个文件
已复制1个文件
已添加10个文件
已修改3个文件
已删除3个文件
430 ■■■■■ 文件已修改
_Main/BL/Relations/Relation_DispatchShiftSchedulingDetail_DispatchShiftSchedulingProduct_Dispat.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_DispatchShiftSchedulingLine_RecycleBin_RecycleBin_DispatchShiftSche.qbl 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_DispatchShiftSchedulingProduct_DispatchShiftSchedulingLine_Dispatch.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftProductionInformation/Attribute_ProductID.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftProductionInformation/Attribute_ProductionQuantity.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftProductionInformation/_ROOT_Type_DispatchShiftSchedulingProduct.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformation/Attribute_LineID.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformation/Attribute_LineQuantity.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformation/Attribute_Product.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformation/Attribute_ShiftDate.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformation/Attribute_ShiftName.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformation/DefaultValue_ShiftName.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformation/Function_CalcLineQuantity.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformation/Method_CalculateLineQuantity.qbl 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_Dispatch.qbl 208 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformation/_ROOT_Type_DispatchShiftSchedulingInformation.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformation/_ROOT_Type_DispatchShiftSchedulingLine.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformationDetail/Attribute_ShiftEndDate.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformationDetail/Attribute_ShiftStartDate.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformationDetail/Attribute_ShiftVolume.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformationDetail/Attribute_SingleShiftName.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformationDetail/DefaultValue_SingleShiftName.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformationDetail/_ROOT_Type_DispatchShiftSchedulingDetail.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_DispatchShiftSchedulingDetail_DispatchShiftSchedulingProduct_Dispat.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation DispatchShiftSchedulingDetail_DispatchShiftSchedulingProduct_DispatchShiftSchedulingProduct_DispatchShiftSchedulingDetail
{
  #keys: '1[414996.1.172754837]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide DispatchShiftSchedulingProduct
  {
    #keys: '3[414996.1.172754839][414996.1.172754838][414996.1.172754840]'
    Cardinality: '0to1'
    ObjectDefinition: DispatchShiftSchedulingDetail
    OwningSide: 'Reference'
  }
  RelationSide.RightSide DispatchShiftSchedulingDetail
  {
    #keys: '3[414996.1.172754842][414996.1.172754841][414996.1.172754843]'
    Cardinality: '1toN'
    ObjectDefinition: DispatchShiftSchedulingProduct
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_DispatchShiftSchedulingLine_RecycleBin_RecycleBin_DispatchShiftSche.qbl
ÎļþÃû´Ó _Main/BL/Relations/Relation_DispatchShiftSchedulingInformation_RecycleBin_RecycleBin_DispatchSh.qbl ÐÞ¸Ä
@@ -1,6 +1,6 @@
Quintiq file version 2.0
#parent: #root
Relation DispatchShiftSchedulingInformation_RecycleBin_RecycleBin_DispatchShiftSchedulingInformation
Relation DispatchShiftSchedulingLine_RecycleBin_RecycleBin_DispatchShiftSchedulingLine
{
  #keys: '1[414996.1.67010175]'
  DefaultRelationStrategy
@@ -10,10 +10,10 @@
  {
    #keys: '3[414996.1.67010177][414996.1.67010176][414996.1.67010178]'
    Cardinality: '0to1'
    ObjectDefinition: DispatchShiftSchedulingInformation
    ObjectDefinition: DispatchShiftSchedulingLine
    OwningSide: 'Reference'
  }
  RelationSide.RightSide DispatchShiftSchedulingInformation
  RelationSide.RightSide DispatchShiftSchedulingLine
  {
    #keys: '3[414996.1.67010180][414996.1.67010179][414996.1.67010181]'
    Cardinality: '1toN'
_Main/BL/Relations/Relation_DispatchShiftSchedulingProduct_DispatchShiftSchedulingLine_Dispatch.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation DispatchShiftSchedulingProduct_DispatchShiftSchedulingLine_DispatchShiftSchedulingLine_DispatchShiftSchedulingProduct
{
  #keys: '1[414996.1.172754796]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide DispatchShiftSchedulingLine
  {
    #keys: '3[414996.1.172754798][414996.1.172754797][414996.1.172754799]'
    Cardinality: '0to1'
    ObjectDefinition: DispatchShiftSchedulingProduct
    OwningSide: 'Reference'
  }
  RelationSide.RightSide DispatchShiftSchedulingProduct
  {
    #keys: '3[414996.1.172754801][414996.1.172754800][414996.1.172754802]'
    Cardinality: '1toN'
    ObjectDefinition: DispatchShiftSchedulingLine
    OwningSide: 'Owned'
  }
}
_Main/BL/Type_DispatchShiftProductionInformation/Attribute_ProductID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductID
{
  #keys: '3[414996.1.172754823][414996.1.172754822][414996.1.172754824]'
  Description: '物料号'
  ValueType: String
}
_Main/BL/Type_DispatchShiftProductionInformation/Attribute_ProductionQuantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductionQuantity
{
  #keys: '3[414996.1.172754827][414996.1.172754826][414996.1.172754828]'
  Description: '产品产量'
  ValueType: Real
}
_Main/BL/Type_DispatchShiftProductionInformation/_ROOT_Type_DispatchShiftSchedulingProduct.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type DispatchShiftSchedulingProduct
{
  #keys: '5[414996.1.172754790][414996.1.172754788][0.0.0][414996.1.172754789][414996.1.172754791]'
  BaseType: Object
  Description: '下发班次排产信息 -- äº§å“'
  StructuredName: 'DispatchShiftSchedulingProducts'
}
_Main/BL/Type_DispatchShiftSchedulingInformation/Attribute_LineID.qbl
ÎļþÃû´Ó _Main/BL/Type_DispatchShiftSchedulingInformation/Attribute_ProductLine.qbl ÐÞ¸Ä
@@ -1,6 +1,6 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductLine
Attribute LineID
{
  #keys: '3[414996.1.67010068][414996.1.67010067][414996.1.67010069]'
  Description: '产线'
_Main/BL/Type_DispatchShiftSchedulingInformation/Attribute_LineQuantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute LineQuantity
{
  #keys: '3[414996.1.172754776][414996.1.172754775][414996.1.172754777]'
  Description: '产线产量'
  ValueType: Real
}
_Main/BL/Type_DispatchShiftSchedulingInformation/Attribute_Product.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_DispatchShiftSchedulingInformation/Attribute_ShiftDate.qbl
@@ -2,7 +2,7 @@
#parent: #root
Attribute ShiftDate
{
  #keys: '3[414996.1.67010092][414996.1.67010091][414996.1.67010093]'
  #keys: '3[414996.1.172754933][414996.1.172754932][414996.1.172754934]'
  Description: '班次日期'
  ValueType: Date
}
_Main/BL/Type_DispatchShiftSchedulingInformation/Attribute_ShiftName.qbl
@@ -2,7 +2,7 @@
#parent: #root
Attribute ShiftName
{
  #keys: '3[414996.1.67010106][414996.1.67010105][414996.1.67010107]'
  #keys: '3[414996.1.172754938][414996.1.172754937][414996.1.172754939]'
  Description: '班次名称'
  ValueType: String
}
_Main/BL/Type_DispatchShiftSchedulingInformation/DefaultValue_ShiftName.qbl
ÎļþÃû´Ó _Main/BL/Type_DispatchShiftSchedulingInformation/DefaultValue_ProductLine.qbl ÐÞ¸Ä
@@ -2,5 +2,5 @@
#parent: #root
DefaultValue
{
  TargetAttribute: ProductLine
  TargetAttribute: ShiftName
}
_Main/BL/Type_DispatchShiftSchedulingInformation/Function_CalcLineQuantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Function CalcLineQuantity
{
  TextBody:
  [*
    // Akari Oct-27-2024 (created)
    value := this.CalculateLineQuantity();
    this.LineQuantity( value );
  *]
}
_Main/BL/Type_DispatchShiftSchedulingInformation/Method_CalculateLineQuantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
Quintiq file version 2.0
#parent: #root
Method CalculateLineQuantity () const declarative remote as Real
{
  TextBody:
  [*
    // Akari Oct-27-2024 (created)
    value := sum( this,DispatchShiftSchedulingProduct,object,object.ProductionQuantity() );
    return value;
  *]
}
_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_Dispatch.qbl
@@ -10,7 +10,7 @@
  TextBody:
  [*
    // Akari Sep-4-2024 (created)
    owner.DispatchShiftSchedulingInformation( relflush );
    owner.DispatchShiftSchedulingLine( relflush );
    macroPlan := offlinePlan.MacroPlan();
    now := DateTime::Now();
    
@@ -30,26 +30,19 @@
      unitIndexTree.Root().AddChild( unitHandle,i );
    }
    
    // productLines := selectuniquevalues( offlinePlan,NewOfflinePlanRow,row,row.ProductionLine() );
    productLinesQuantityNameValueTree := NamedValueTree::Create();
    traverse( offlinePlan,NewOfflinePlanRow,row ){
      traverse( row,NewOfflinePlanCell,cell, startDate <= cell.NewOfflinePlanColumn().StartDate() and endDate >= cell.NewOfflinePlanColumn().EndDate()){
        productLinesQuantityHandle := productLinesQuantityNameValueTree.GetHandle( row.ProductionLine() + cell.NewOfflinePlanColumn().StartDate().AsQUILL() );
        productLinesQuantity := guard( productLinesQuantityNameValueTree.Root().Child( productLinesQuantityHandle ),null( NamedValue ));
        if( not isnull( productLinesQuantity )){
          productLinesQuantity.SetValue( productLinesQuantity.GetValueAsReal() + cell.Quantity() );
        }else{
          productLinesQuantityNameValueTree.Root().AddChild( productLinesQuantityHandle, cell.Quantity() );
        }
      }
    }
    lines := construct( DispatchShiftSchedulingLines );
    lineIndexTree := NamedValueTree::Create();
    
    products := construct( DispatchShiftSchedulingProducts );
    productIndexTree := NamedValueTree::Create();
    //productionDetails := construct( DispatchShiftSchedulingDetails );
    //productionDetailIndexTree := NamedValueTree::Create();
    traverse( offlinePlan,NewOfflinePlanRow,row ){
      productID := row.ProductID();
      productLine := row.ProductionLine();
      line := null( DispatchShiftSchedulingLine );
      factory := constnull( Unit );
      {
        unitHandle := unitIndexTree.GetHandle( productLine );
        unitHandle := unitIndexTree.GetHandle( row.ProductionLine() );
        unitIndex := guard( unitIndexTree.Root().Child( unitHandle ), null( NamedValue ));
        if( not isnull( unitIndex )){
          unit := units.Element( unitIndex.GetValueAsNumber() );
@@ -61,48 +54,169 @@
          }
          factory := temp2;
        }
        lineHandle := lineIndexTree.GetHandle( row.ProductionLine() );
        lineIndex := guard( lineIndexTree.Root().Child( lineHandle ),null( NamedValue ));
        if( isnull( lineIndex )){
          line := owner.DispatchShiftSchedulingLine( relnew,ID := IDHolder::GetGUID(),LineID := row.ProductionLine() );
          line.FactoryName( factory.Name() );
          line.InterfaceTime( now );
          line.VersionName( macroPlan.MDSMacroPlan().Description() );
          lines.Add( line );
          lineIndexTree.Root().AddChild( lineHandle,lines.Size() - 1 );
        }else{
          line := lines.Element( lineIndex.GetValueAsNumber() );
      }
      }
      traverse( row,NewOfflinePlanCell,cell, startDate <= cell.NewOfflinePlanColumn().StartDate() and endDate >= cell.NewOfflinePlanColumn().EndDate()){
        productLinesQuantityHandle := productLinesQuantityNameValueTree.GetHandle( row.ProductionLine() + cell.NewOfflinePlanColumn().StartDate().AsQUILL() );
        productLinesQuantity := guard( productLinesQuantityNameValueTree.Root().Child( productLinesQuantityHandle ).GetValueAsReal(),0.0 );
        shiftDate := cell.NewOfflinePlanColumn().StartDate();
        shiftName := cell.ShiftPatternName();
        shiftVolume := cell.Quantity();
        shiftDayTime := constnull( ShiftDayTime );
        product := null( DispatchShiftSchedulingProduct );
        {
          shiftPatternHandle := shiftPatternIndexTree.GetHandle( shiftName );
          shiftPatternIndex := guard( shiftPatternIndexTree.Root().Child( shiftPatternHandle ),null( NamedValue ));
          if( not isnull( shiftPatternIndex )){
            shiftPattern := shiftPatterns.Element( shiftPatternIndex.GetValueAsNumber() );
            shiftDayTime := select( shiftPattern,ShiftDayTime,object,true );
          productHandle := productIndexTree.GetHandle( row.ProductionLine() + row.ProductID() + cell.NewOfflinePlanColumn().StartDate().AsQUILL() );
          productIndex := guard( productIndexTree.Root().Child( productHandle ),null( NamedValue ));
          if( isnull( productIndex )){
            product := line.DispatchShiftSchedulingProduct( relnew,ProductID := row.ProductID() );
            product.ProductionQuantity( cell.Quantity() );
            line.ShiftDate( cell.NewOfflinePlanColumn().StartDate() );
            line.ShiftName( cell.ShiftPatternName() );
            products.Add( product );
            productIndexTree.Root().AddChild( productHandle,products.Size() - 1 );
          }else{
            product := products.Element( productIndex.GetValueAsNumber() );
          }
        }
        if( shiftVolume <> 0 ){
          shiftSchedulingInformations := DispatchShiftSchedulingInformation::SplitShifts( owner,shiftName,shiftVolume,productLinesQuantity );
      }
    }
        
        traverse( shiftSchedulingInformations,Elements,shiftSchedulingInformation ){
          shiftSchedulingInformation.InterfaceTime( now );
          shiftSchedulingInformation.VersionName( macroPlan.MDSMacroPlan().Description() );
          shiftSchedulingInformation.Product( productID );
          shiftSchedulingInformation.ProductLine( productLine );
          shiftSchedulingInformation.ShiftDate( shiftDate );
    //      shiftSchedulingInformation.InterfaceTime( now );
    //      shiftSchedulingInformation.InterfaceTime( now );
    //      shiftSchedulingInformation.InterfaceTime( now );
    //      shiftSchedulingInformation.InterfaceTime( now );
    traverse( lines,Elements,line ){
      line.CalculateLineQuantity();
          
      // 1000
      lineQuantity := line.LineQuantity();
          
          if( not isnull( shiftDayTime )){
            shiftSchedulingInformation.ShiftStartDate( shiftDayTime.StartDateTime() );
            shiftSchedulingInformation.ShiftEndDate( shiftDayTime.EndDateTIme() );
          }
          if( not isnull( factory )){
            shiftSchedulingInformation.FactoryName( factory.Name() );
      tempProducts := selectsortedset( line,DispatchShiftSchedulingProduct,object,object.ProductionQuantity() );
      if( line.ShiftName() = "3" ){
        singleShiftVolume1 := lineQuantity / 3;
        singleShiftVolume2 := lineQuantity / 3;
        singleShiftVolume3 := lineQuantity / 3;
        traverse( tempProducts,Elements,product ){
          productionQuantity := product.ProductionQuantity();
          if( singleShiftVolume1 > 0 and productionQuantity > 0){
            tempProductQuantity := singleShiftVolume1 - productionQuantity;
            detail := product.DispatchShiftSchedulingDetail( relnew,ShiftVolume := ifexpr( tempProductQuantity > 0 ,productionQuantity,singleShiftVolume1 ) ,SingleShiftName := "白班");
            singleShiftVolume1 := singleShiftVolume1 - productionQuantity;
            productionQuantity := productionQuantity - detail.ShiftVolume();
          }else if(singleShiftVolume2 > 0 and productionQuantity > 0){
            tempProductQuantity := singleShiftVolume2 - productionQuantity;
            detail := product.DispatchShiftSchedulingDetail( relnew,ShiftVolume := ifexpr( tempProductQuantity > 0 ,productionQuantity,singleShiftVolume2 ) ,SingleShiftName := "二班");
            singleShiftVolume2 := singleShiftVolume2 - productionQuantity;
            productionQuantity := productionQuantity - detail.ShiftVolume();
          }else if(singleShiftVolume3 > 0 and productionQuantity > 0){
            tempProductQuantity := singleShiftVolume3 - productionQuantity;
            detail := product.DispatchShiftSchedulingDetail( relnew,ShiftVolume := ifexpr( tempProductQuantity > 0 ,productionQuantity,singleShiftVolume3 ) ,SingleShiftName := "二班");
            singleShiftVolume3 := singleShiftVolume3 - productionQuantity;
            productionQuantity := productionQuantity - detail.ShiftVolume();
          }
        }
      }else if( line.ShiftName() = "2" ){
        // 500
        singleShiftVolume1 := lineQuantity / 2;
        singleShiftVolume2 := lineQuantity / 2;
        traverse( tempProducts,Elements,product ){
          productionQuantity := product.ProductionQuantity();
          if( singleShiftVolume1 > 0 and productionQuantity > 0){
            tempProductQuantity := singleShiftVolume1 - productionQuantity;
            detail := product.DispatchShiftSchedulingDetail( relnew,ShiftVolume := ifexpr( tempProductQuantity > 0 ,productionQuantity,singleShiftVolume1 ) ,SingleShiftName := "白班");
            singleShiftVolume1 := singleShiftVolume1 - productionQuantity;
            productionQuantity := productionQuantity - detail.ShiftVolume();
          }else if(singleShiftVolume2 > 0 and productionQuantity > 0){
            tempProductQuantity := singleShiftVolume2 - productionQuantity;
            detail := product.DispatchShiftSchedulingDetail( relnew,ShiftVolume := ifexpr( tempProductQuantity > 0 ,productionQuantity,singleShiftVolume1 ) ,SingleShiftName := "二班");
            singleShiftVolume2 := singleShiftVolume2 - productionQuantity;
            productionQuantity := productionQuantity - detail.ShiftVolume();
        }
      }
      }else if( line.ShiftName() = "1" ){
        singleShiftVolume1 := lineQuantity / 1;
        traverse( tempProducts,Elements,product ){
          productionQuantity := product.ProductionQuantity();
          if( singleShiftVolume1 > 0 and productionQuantity > 0){
            tempProductQuantity := singleShiftVolume1 - productionQuantity;
            detail := product.DispatchShiftSchedulingDetail( relnew,ShiftVolume := ifexpr( tempProductQuantity > 0 ,productionQuantity,singleShiftVolume1 ) ,SingleShiftName := "白班");
            singleShiftVolume1 := singleShiftVolume1 - productionQuantity;
            productionQuantity := productionQuantity - detail.ShiftVolume();
    }
        }
      }else{
        // singleShiftVolume := lineQuantity / 1;
      }
    }
    //traverse( offlinePlan,NewOfflinePlanRow,row ){
    //  productID := row.ProductID();
    //  productLine := row.ProductionLine();
    //  factory := constnull( Unit );
    //  {
    //    unitHandle := unitIndexTree.GetHandle( productLine );
    //    unitIndex := guard( unitIndexTree.Root().Child( unitHandle ), null( NamedValue ));
    //    if( not isnull( unitIndex )){
    //      unit := units.Element( unitIndex.GetValueAsNumber() );
    //      temp1 := unit;
    //      temp2 := unit.Parent();
    //      while( not isnull( temp1.Parent())){
    //        temp2 := temp1;
    //        temp1 := temp1.Parent();
    //      }
    //      factory := temp2;
    //    }
    //  }
    //  traverse( row,NewOfflinePlanCell,cell, startDate <= cell.NewOfflinePlanColumn().StartDate() and endDate >= cell.NewOfflinePlanColumn().EndDate()){
    //    productLinesQuantityHandle := productLinesQuantityNameValueTree.GetHandle( row.ProductionLine() + cell.NewOfflinePlanColumn().StartDate().AsQUILL() );
    //    productLinesQuantity := guard( productLinesQuantityNameValueTree.Root().Child( productLinesQuantityHandle ).GetValueAsReal(),0.0 );
    //
    //    shiftDate := cell.NewOfflinePlanColumn().StartDate();
    //    shiftName := cell.ShiftPatternName();
    //    shiftVolume := cell.Quantity();
    //    shiftDayTime := constnull( ShiftDayTime );
    //    {
    //      shiftPatternHandle := shiftPatternIndexTree.GetHandle( shiftName );
    //      shiftPatternIndex := guard( shiftPatternIndexTree.Root().Child( shiftPatternHandle ),null( NamedValue ));
    //      if( not isnull( shiftPatternIndex )){
    //        shiftPattern := shiftPatterns.Element( shiftPatternIndex.GetValueAsNumber() );
    //        shiftDayTime := select( shiftPattern,ShiftDayTime,object,true );
    //      }
    //    }
    //    if( shiftVolume <> 0 ){
    //      shiftSchedulingInformations := DispatchShiftSchedulingLine::SplitShifts( owner,shiftName,shiftVolume,productLinesQuantity );
    //
    //    traverse( shiftSchedulingInformations,Elements,shiftSchedulingInformation ){
    //      shiftSchedulingInformation.InterfaceTime( now );
    //      shiftSchedulingInformation.VersionName( macroPlan.MDSMacroPlan().Description() );
    //      shiftSchedulingInformation.Product( productID );
    //      shiftSchedulingInformation.ProductLine( productLine );
    //      shiftSchedulingInformation.ShiftDate( shiftDate );
    ////      shiftSchedulingInformation.InterfaceTime( now );
    ////      shiftSchedulingInformation.InterfaceTime( now );
    ////      shiftSchedulingInformation.InterfaceTime( now );
    ////      shiftSchedulingInformation.InterfaceTime( now );
    //
    //
    //      if( not isnull( shiftDayTime )){
    //        shiftSchedulingInformation.ShiftStartDate( shiftDayTime.StartDateTime() );
    //        shiftSchedulingInformation.ShiftEndDate( shiftDayTime.EndDateTIme() );
    //      }
    //      if( not isnull( factory )){
    //        shiftSchedulingInformation.FactoryName( factory.Name() );
    //      }
    //    }
    //    }
    //  }
    //}
  *]
}
_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_DispatchShiftSchedulingInformation/_ROOT_Type_DispatchShiftSchedulingInformation.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_DispatchShiftSchedulingInformation/_ROOT_Type_DispatchShiftSchedulingLine.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type DispatchShiftSchedulingLine
{
  #keys: '5[414996.1.67010064][414996.1.67010062][0.0.0][414996.1.67010063][414996.1.67010065]'
  BaseType: Object
  Description: '下发班次排产信息 -- äº§çº¿'
  StructuredName: 'DispatchShiftSchedulingLines'
}
_Main/BL/Type_DispatchShiftSchedulingInformationDetail/Attribute_ShiftEndDate.qbl
ÎļþÃû´Ó _Main/BL/Type_DispatchShiftSchedulingInformation/Attribute_ShiftEndDate.qbl ÐÞ¸Ä
@@ -2,7 +2,7 @@
#parent: #root
Attribute ShiftEndDate
{
  #keys: '3[414996.1.67010149][414996.1.67010148][414996.1.67010150]'
  #keys: '3[414996.1.172754762][414996.1.172754761][414996.1.172754763]'
  Description: '班次的结束时间'
  ValueType: DateTime
}
_Main/BL/Type_DispatchShiftSchedulingInformationDetail/Attribute_ShiftStartDate.qbl
ÎļþÃû´Ó _Main/BL/Type_DispatchShiftSchedulingInformation/Attribute_ShiftStartDate.qbl ÐÞ¸Ä
@@ -2,7 +2,7 @@
#parent: #root
Attribute ShiftStartDate
{
  #keys: '3[414996.1.67010139][414996.1.67010138][414996.1.67010140]'
  #keys: '3[414996.1.172754767][414996.1.172754766][414996.1.172754768]'
  Description: '班次起始时间'
  ValueType: DateTime
}
_Main/BL/Type_DispatchShiftSchedulingInformationDetail/Attribute_ShiftVolume.qbl
ÎļþÃû´Ó _Main/BL/Type_DispatchShiftSchedulingInformation/Attribute_ShiftVolume.qbl ÐÞ¸Ä
@@ -2,7 +2,7 @@
#parent: #root
Attribute ShiftVolume
{
  #keys: '3[414996.1.67010126][414996.1.67010125][414996.1.67010127]'
  #keys: '3[414996.1.172754772][414996.1.172754771][414996.1.172754773]'
  Description: '单班次产量'
  ValueType: Real
}
_Main/BL/Type_DispatchShiftSchedulingInformationDetail/Attribute_SingleShiftName.qbl
ÎļþÃû´Ó _Main/BL/Type_DispatchShiftSchedulingInformation/Attribute_SingleShiftName.qbl ÐÞ¸Ä
@@ -2,7 +2,7 @@
#parent: #root
Attribute SingleShiftName
{
  #keys: '3[414996.1.67010116][414996.1.67010115][414996.1.67010117]'
  #keys: '3[414996.1.172754757][414996.1.172754756][414996.1.172754758]'
  Description: '单班次名称'
  ValueType: String
}
_Main/BL/Type_DispatchShiftSchedulingInformationDetail/DefaultValue_SingleShiftName.qbl
copy from _Main/BL/Type_DispatchShiftSchedulingInformation/DefaultValue_ProductLine.qbl copy to _Main/BL/Type_DispatchShiftSchedulingInformationDetail/DefaultValue_SingleShiftName.qbl
Îļþ´Ó _Main/BL/Type_DispatchShiftSchedulingInformation/DefaultValue_ProductLine.qbl ¸´ÖÆ
@@ -2,5 +2,5 @@
#parent: #root
DefaultValue
{
  TargetAttribute: ProductLine
  TargetAttribute: SingleShiftName
}
_Main/BL/Type_DispatchShiftSchedulingInformationDetail/_ROOT_Type_DispatchShiftSchedulingDetail.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type DispatchShiftSchedulingDetail
{
  #keys: '5[414996.1.172754720][414996.1.172754718][0.0.0][414996.1.172754719][414996.1.172754721]'
  BaseType: Object
  StructuredName: 'DispatchShiftSchedulingDetails'
}