xiaoding721
2024-10-14 7cd2803f96760b4eacfc6e89518fcc45bc22380b
修复一些bug
已添加12个文件
已修改14个文件
368 ■■■■ 文件已修改
_Main/BL/Relations/Relation_OfflinePlanTableInfo_RecycleBin_RecycleBin_OfflinePlanTableInfo.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformation/Function_CalcFac.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Forecast/Attribute_Differnce.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Forecast/Function_CalcDiffernce.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport#1.qbl 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanTableInfo/Attribute_MacroPlanMDSID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanTableInfo/Attribute_MacroPlanName.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanTableInfo/Attribute_TableName.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanTableInfo/Attribute_TableSaveTime.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanTableInfo/StaticMethod_Create.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanTableInfo/_ROOT_Type_OfflinePlanTableInfo.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ProductionLineBatchData/Method_Enable.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageReport.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlanByMDSID.def 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlans.def 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelRibbon504#801.def 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_OnCreated.def 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_ButtonRibbon_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bComparison_OnClick.def 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated#57.def 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_ButtonCompare_OnClick.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_ListSalesDemands.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Response_ListSalesDemands_MenuCreate_OnClick#715.def 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_OfflinePlanTableInfo_RecycleBin_RecycleBin_OfflinePlanTableInfo.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation OfflinePlanTableInfo_RecycleBin_RecycleBin_OfflinePlanTableInfo
{
  #keys: '1[414996.1.124530089]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide RecycleBin
  {
    #keys: '3[414996.1.124530091][414996.1.124530090][414996.1.124530092]'
    Cardinality: '0to1'
    ObjectDefinition: OfflinePlanTableInfo
    OwningSide: 'Reference'
  }
  RelationSide.RightSide OfflinePlanTableInfo
  {
    #keys: '3[414996.1.124530094][414996.1.124530093][414996.1.124530095]'
    Cardinality: '1toN'
    ObjectDefinition: RecycleBin
    OwningSide: 'Owned'
  }
}
_Main/BL/Type_DispatchShiftSchedulingInformation/Function_CalcFac.qbl
@@ -6,9 +6,9 @@
  [*
    // Akari Aug-21-2024 (created)
    value := "";
    if( this.FactoryName() = "大连工厂" ){
    if( this.FactoryName().LikeUserLocale( "大连" ) or  this.FactoryName().LikeUserLocale( "DL" ) ){
      value := "DL";
    }else if( this.FactoryName() = "长春工厂"){
    }else if( this.FactoryName().LikeUserLocale( "长春" ) or  this.FactoryName().LikeUserLocale( "CC" )){
      value := "CC";
    }
    
_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl
@@ -12,19 +12,32 @@
    shiftSchedulingInformations := construct( DispatchShiftSchedulingInformations );
    if( shiftName = "3" ){
      shiftSchedulingInformation1 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 3 );
      shiftSchedulingInformation1.SingleShiftName( "1班" );
      shiftSchedulingInformation1.SingleShiftName( "白班" );
      shiftSchedulingInformations.Add( shiftSchedulingInformation1 );
      
      shiftSchedulingInformation2 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 3 );
      shiftSchedulingInformation2.SingleShiftName( "2班" );
      shiftSchedulingInformation2.SingleShiftName( "二班" );
      shiftSchedulingInformations.Add( shiftSchedulingInformation2 );
      
      shiftSchedulingInformation3 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 3 );
      shiftSchedulingInformation3.SingleShiftName( "3班" );
      shiftSchedulingInformation3.SingleShiftName( "三班" );
      shiftSchedulingInformations.Add( shiftSchedulingInformation3 );
    }else if( shiftName = "2" ){
      shiftSchedulingInformation1 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 2 );
      shiftSchedulingInformation1.SingleShiftName( "白班" );
      shiftSchedulingInformations.Add( shiftSchedulingInformation1 );
      shiftSchedulingInformation2 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 2 );
      shiftSchedulingInformation2.SingleShiftName( "二班" );
      shiftSchedulingInformations.Add( shiftSchedulingInformation2 );
    }else if( shiftName = "1" ){
      shiftSchedulingInformation1 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 1 );
      shiftSchedulingInformation1.SingleShiftName( "白班" );
      shiftSchedulingInformations.Add( shiftSchedulingInformation1 );
    }else{
      shiftSchedulingInformation := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume );
      shiftSchedulingInformations.Add( shiftSchedulingInformation );
      shiftSchedulingInformation1 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 1 );
      shiftSchedulingInformation1.SingleShiftName( "" );
      shiftSchedulingInformations.Add( shiftSchedulingInformation1 );
    }
    
    
_Main/BL/Type_Forecast/Attribute_Differnce.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Differnce
{
  #keys: '3[414996.1.124560122][414996.1.124560121][414996.1.124560123]'
  ValueType: Real
}
_Main/BL/Type_Forecast/Function_CalcDiffernce.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Function CalcDiffernce
{
  TextBody:
  [*
    // Akari Oct-14-2024 (created)
    value := this.Quantity() - this.FulfilledQuantity();
    this.Differnce( value );
  *]
}
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport#1.qbl
@@ -85,15 +85,16 @@
        workingDayCell.RealValue( workingDayCell.RealValue() + 1 );
        if( shiftPlan.IsHoliday() ){
          // èŠ‚å‡æ—¥åŠ ç­ 
          overtime := shiftPlan.GetBreakDayOvertimeHour( false );
          overtime := shiftPlan.GetHolidayOvertimeHour( false );
          holidayOvertimeHourCell.RealValue( holidayOvertimeHourCell.RealValue() + overtime );
          if( not isnull( nextShiftPlan )){
            nextDayOvertime := shiftPlan.GetBreakDayOvertimeHour( true );
            if( nextShiftPlan.IsHoliday()){
              // ä¸‹ä¸€å¤©æ˜¯èŠ‚å‡æ—¥
              nextDayOvertime := shiftPlan.GetHolidayOvertimeHour( true );
              holidayOvertimeHourCell.RealValue( holidayOvertimeHourCell.RealValue() + nextDayOvertime );
            }else if( shiftPlan.DefaultRemark().LikeUserLocale( "周六" ) or shiftPlan.DefaultRemark().LikeUserLocale( "周日" ) ){
              // ä¸‹ä¸€å¤©æ˜¯å‘¨å…­æˆ–周日
              nextDayOvertime := shiftPlan.GetBreakDayOvertimeHour( true );
              breakDayOvertimeHourCell.RealValue( breakDayOvertimeHourCell.RealValue() + nextDayOvertime );
            }else{
              // ä¸‹ä¸€å¤©æ˜¯å¹³å¸¸çš„工作日
@@ -106,12 +107,14 @@
          overtime := shiftPlan.GetBreakDayOvertimeHour( false );
          breakDayOvertimeHourCell.RealValue( breakDayOvertimeHourCell.RealValue() + overtime );
          if( not isnull( nextShiftPlan )){
            nextDayOvertime := shiftPlan.GetBreakDayOvertimeHour( true );
            if( nextShiftPlan.IsHoliday()){
              // ä¸‹ä¸€å¤©æ˜¯èŠ‚å‡æ—¥
              nextDayOvertime := shiftPlan.GetHolidayOvertimeHour( true );
              holidayOvertimeHourCell.RealValue( holidayOvertimeHourCell.RealValue() + nextDayOvertime );
            }else if( shiftPlan.DefaultRemark().LikeUserLocale( "周六" ) or shiftPlan.DefaultRemark().LikeUserLocale( "周日" ) ){
              // ä¸‹ä¸€å¤©æ˜¯å‘¨å…­æˆ–周日
              nextDayOvertime := shiftPlan.GetBreakDayOvertimeHour( true );
              breakDayOvertimeHourCell.RealValue( breakDayOvertimeHourCell.RealValue() + nextDayOvertime );
            }else{
              // ä¸‹ä¸€å¤©æ˜¯å¹³å¸¸çš„工作日
@@ -124,12 +127,13 @@
          overtime := shiftPlan.GetDefaultDayOvertimeHour( false );
          defaultDayOvertimeHourCell.RealValue( defaultDayOvertimeHourCell.RealValue() + overtime );
          if( not isnull( nextShiftPlan )){
            nextDayOvertime := shiftPlan.GetBreakDayOvertimeHour( true );
            if( nextShiftPlan.IsHoliday()){
              // ä¸‹ä¸€å¤©æ˜¯èŠ‚å‡æ—¥
              nextDayOvertime := shiftPlan.GetHolidayOvertimeHour( true );
              holidayOvertimeHourCell.RealValue( holidayOvertimeHourCell.RealValue() + nextDayOvertime );
            }else if( shiftPlan.DefaultRemark().LikeUserLocale( "周六" ) or shiftPlan.DefaultRemark().LikeUserLocale( "周日" ) ){
              // ä¸‹ä¸€å¤©æ˜¯å‘¨å…­æˆ–周日
              nextDayOvertime := shiftPlan.GetBreakDayOvertimeHour( true );
              breakDayOvertimeHourCell.RealValue( breakDayOvertimeHourCell.RealValue() + nextDayOvertime );
            }else{
              // ä¸‹ä¸€å¤©æ˜¯å¹³å¸¸çš„工作日
@@ -150,6 +154,12 @@
    defaultMultiplier := select( macroPlan,OvertimeMultiplier,object,object.Name() = "平时加班" );
    if( isnull( defaultMultiplier )){
      defaultMultiplier := macroPlan.OvertimeMultiplier( relnew,Name := "平时加班倍率",Multiplier := 1.5 );
    }
    // æ¬ å·¥å€çއ
    qiangongMultiplier := select( macroPlan,OvertimeMultiplier,object,object.Name() = "欠工" );
    if( isnull( qiangongMultiplier )){
      qiangongMultiplier := macroPlan.OvertimeMultiplier( relnew,Name := "欠工",Multiplier := 1 );
    }
    
    // ä¼‘息日加班倍率
@@ -174,11 +184,13 @@
      unit := units.Element( unitIndexTree.Root().Child( unitIndexTree.GetHandle( rowKey )).GetValueAsNumber() );
      
      jiejiariCell := LocalCell_Default::GetCell(  rowKey + column5.Name(), cellIndexTree, cells, row, column5 );
      jiejiarifeiCell := LocalCell_Default::GetCell(  rowKey + column6.Name(), cellIndexTree, cells, row, column6 );
      jiejiarifeiCell.RealValue( EmployeeCost::GetSalary( unit,defaultMultiplier,jiejiariCell.RealValue()));
      jiejiarifeiCell := LocalCell_Default::GetCell(  rowKey + column7.Name(), cellIndexTree, cells, row, column7 );
      jiejiarifeiCell.RealValue( EmployeeCost::GetSalary( unit,holidayMultiplier,jiejiariCell.RealValue()));
      
      qiangongCell := LocalCell_Default::GetCell(  rowKey + column4.Name(), cellIndexTree, cells, row, column4 );
      qiangongfeiCell := LocalCell_Default::GetCell(  rowKey + column7.Name(), cellIndexTree, cells, row, column7 );
      qiangongCell.RealValue( qiangongCell.RealValue() - 8 );
      qiangongfeiCell := LocalCell_Default::GetCell(  rowKey + column6.Name(), cellIndexTree, cells, row, column6 );
      qiangongfeiCell.RealValue( EmployeeCost::GetSalary( unit,defaultMultiplier,qiangongCell.RealValue() ));
    }
    
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl
@@ -157,6 +157,12 @@
      defaultMultiplier := macroPlan.OvertimeMultiplier( relnew,Name := "平时加班倍率",Multiplier := 1.5 );
    }
    
    // æ¬ å·¥å€çއ
    qiangongMultiplier := select( macroPlan,OvertimeMultiplier,object,object.Name() = "欠工" );
    if( isnull( qiangongMultiplier )){
      qiangongMultiplier := macroPlan.OvertimeMultiplier( relnew,Name := "欠工",Multiplier := 1 );
    }
    // ä¼‘息日加班倍率
    breakDayMultiplier := select( macroPlan,OvertimeMultiplier,object,object.Name() = "周末加班");
    if( isnull( breakDayMultiplier )){
@@ -178,28 +184,32 @@
      rowKey := row.CustomName();
      unit := units.Element( unitIndexTree.Root().Child( unitIndexTree.GetHandle( rowKey )).GetValueAsNumber() );
      
      // èŠ‚å‡æ—¥åŠ ç­è´¹
      jiejiariCell := LocalCell_Default::GetCell(  rowKey + column6.Name(), cellIndexTree, cells, row, column6 );
      jiejiarifeiCell := LocalCell_Default::GetCell(  rowKey + column10.Name(), cellIndexTree, cells, row, column10 );
      jiejiarifeiCell.RealValue( EmployeeCost::GetSalary( unit,defaultMultiplier,jiejiariCell.RealValue()));
      jiejiarifeiCell.RealValue( EmployeeCost::GetSalary( unit,holidayMultiplier,jiejiariCell.RealValue()));
      
      // ä¼‘息日加班费
      xiuxiCell := LocalCell_Default::GetCell(  rowKey + column5.Name(), cellIndexTree, cells, row, column5 );
      xiuxifeiCell := LocalCell_Default::GetCell(  rowKey + column9.Name(), cellIndexTree, cells, row, column9 );
      xiuxifeiCell.RealValue( EmployeeCost::GetSalary( unit,breakDayMultiplier,xiuxiCell.RealValue()));
      
      // å¹³æ—¶åŠ ç­è´¹
      jiabanCell := LocalCell_Default::GetCell(  rowKey + column4.Name(), cellIndexTree, cells, row, column4 );
      jiabanfeiCell := LocalCell_Default::GetCell(  rowKey + column8.Name(), cellIndexTree, cells, row, column8 );
      jiabanfeiCell.RealValue( EmployeeCost::GetSalary( unit,holidayMultiplier,jiabanCell.RealValue()));
      jiabanfeiCell.RealValue( EmployeeCost::GetSalary( unit,defaultMultiplier ,jiabanCell.RealValue()));
      
      // æ¬ å·¥è´¹
      qiangongCell := LocalCell_Default::GetCell(  rowKey + column7.Name(), cellIndexTree, cells, row, column7 );
      qiangongCell.RealValue( qiangongCell.RealValue() - 1 );
      qiangongCell.RealValue( qiangongCell.RealValue() - 8 );
      
      qiangongfeiCell := LocalCell_Default::GetCell(  rowKey + column11.Name(), cellIndexTree, cells, row, column11 );
      qiangongfeiCell.RealValue( EmployeeCost::GetSalary( unit,defaultMultiplier,qiangongCell.RealValue() ));
      qiangongfeiCell.RealValue( EmployeeCost::GetSalary( unit,qiangongMultiplier,qiangongCell.RealValue() ));
      
      
      // å·¥ä½œæ—¥
      workingDayCell := LocalCell_Default::GetCell(  rowKey + column3.Name(), cellIndexTree, cells, row, column3 );
      workingDayCell.RealValue( workingDayCell.RealValue() + 1 );
      workingDayCell.RealValue( workingDayCell.RealValue() );
    }
    
    return table;
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl
@@ -2,6 +2,7 @@
#parent: #root
StaticMethod Compared (
  RecycleBin recycleBin,
  const MacroPlan mactoPlan,
  String baseVersionPath,
  String compareVersionPath,
  String baseVersionName,
@@ -12,6 +13,17 @@
  [*
    // rislai Jun-20-2024 (created)
    localTable := recycleBin.LocalTable( relnew,Name := baseVersionName + "__" + compareVersionName );
    products := selectset( mactoPlan,Product_MP,product,not product.IsSystem() and product.IsUsed() );
    productIndexTree := NamedValueTree::Create();
    try{
      for( i := 0; i < products.Size(); i++){
        product := products.Element( i );
        productHandle := productIndexTree.GetHandle( product.Notes() );
        productIndexTree.Root().AddChild( productHandle,i )
      }
    }onerror{}
    
    baseVersionFile := OSFile::Construct();
    compareVersionFile := OSFile::Construct();
@@ -88,7 +100,17 @@
                             CompareVersionValue := ifexpr( isnull( compareVersionCell ),"空",compareVersionCell.Value()));
              column.IsAttrbuteColumn( true );
              if( columnName = "发动机零件号" ){
                row.ProductID( ifexpr( isnull( baseVersionCell ), ifexpr( isnull( compareVersionCell ),"空",compareVersionCell.Value()), baseVersionCell.Value()) );
                productID := ifexpr( isnull( baseVersionCell ), ifexpr( isnull( compareVersionCell ),"空",compareVersionCell.Value()), baseVersionCell.Value());
                productHanlde := productIndexTree.GetHandle( productID );
                productIndex := guard( productIndexTree.Root().Child( productHanlde ), null( NamedValue ));
                if( not isnull( productIndex )){
                  product := products.Element( productIndex.GetValueAsNumber() );
                  productID := product.ID();
                }
                row.ProductID( productID );
              }
              if( columnName = "车型" ){
                row.CustomName( " > " + ifexpr( isnull( baseVersionCell ), ifexpr( isnull( compareVersionCell ),"空",compareVersionCell.Value()), baseVersionCell.Value()) );
_Main/BL/Type_OfflinePlanTableInfo/Attribute_MacroPlanMDSID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute MacroPlanMDSID
{
  #keys: '3[414996.1.124530070][414996.1.124530069][414996.1.124530071]'
  ValueType: Key
}
_Main/BL/Type_OfflinePlanTableInfo/Attribute_MacroPlanName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute MacroPlanName
{
  #keys: '3[414996.1.124550976][414996.1.124550975][414996.1.124550977]'
  ValueType: String
}
_Main/BL/Type_OfflinePlanTableInfo/Attribute_TableName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute TableName
{
  #keys: '3[414996.1.124530080][414996.1.124530079][414996.1.124530081]'
  ValueType: String
}
_Main/BL/Type_OfflinePlanTableInfo/Attribute_TableSaveTime.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute TableSaveTime
{
  #keys: '3[414996.1.124540172][414996.1.124540171][414996.1.124540173]'
  ValueType: DateTime
}
_Main/BL/Type_OfflinePlanTableInfo/StaticMethod_Create.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Create (
  const constcontent MacroPlans macroPlans,
  RecycleBin owner
)
{
  TextBody:
  [*
    // Akari Oct-14-2024 (created)
    owner.OfflinePlanTableInfo( relflush );
    info( macroPlans.Size() );
    traverse( macroPlans,Elements,macroPlan ){
      mdsid := macroPlan.MDSID();
      name := macroPlan.MDSMacroPlan().Description();
      traverse( macroPlan,OfflinePlanTable,offlinePlanTable ){
        owner.OfflinePlanTableInfo( relnew,MacroPlanName := name,TableName := offlinePlanTable.SaveDateTime().Format( "Y-M2-D2 H:m:s" ),MacroPlanMDSID := mdsid ,TableSaveTime := offlinePlanTable.SaveDateTime());
      }
    }
    info( owner.OfflinePlanTableInfo( relsize ) );
  *]
}
_Main/BL/Type_OfflinePlanTableInfo/_ROOT_Type_OfflinePlanTableInfo.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type OfflinePlanTableInfo
{
  #keys: '5[414996.1.124560137][414996.1.124560135][0.0.0][414996.1.124560136][414996.1.124560138]'
  BaseType: Object
  Description: '下线计划对应的macroPlan信息'
  StructuredName: 'OfflinePlanTableInfos'
}
_Main/BL/Type_ProductionLineBatchData/Method_Enable.qbl
@@ -29,9 +29,9 @@
        
        tempPeriod_MPs := selectset( dayPeriod_MPs,Elements,period_MP,period_MP.StartDate() >= tempStartDate and period_MP.EndDate() <= tempEndDate );
        
        unitPeriodTimes1 := selectset( this.Unit1(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( tempPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()) and not isnull( unitPeriodTime.UnitAvailability()));
        unitPeriodTimes2 := selectset( this.Unit2(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( tempPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()) and not isnull( unitPeriodTime.UnitAvailability()));
        unitPeriodTimes3 := selectset( this.Unit3(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( tempPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()) and not isnull( unitPeriodTime.UnitAvailability()));
        unitPeriodTimes1 := selectset( this.Unit1(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( tempPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()));
        unitPeriodTimes2 := selectset( this.Unit2(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( tempPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()));
        unitPeriodTimes3 := selectset( this.Unit3(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( tempPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()));
        if( unitPeriodTimes1.Size() > 0 ){
          this.OnOK( unitPeriodTimes1,shiftPattern1 ); 
        }
@@ -49,11 +49,17 @@
        shiftPattern3 := tempShiftPattern;
      }
    }
    // è½®æ¢ç­æ¬¡ç¼“å­˜
    shiftPattern1 := this.ShiftPattern1();
    shiftPattern2 := this.ShiftPattern2();
    shiftPattern3 := this.ShiftPattern3();
    tempShiftPattern := shiftPattern1;
    if( weekPeriod_MPs.Size() <> 0 ){
      traverse( weekPeriod_MPs,Elements,period_MP ){
        unitPeriodTimes1 := selectset( this.Unit1(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,period_MP = unitPeriodTime.Period_MP() and not isnull( unitPeriodTime.UnitAvailability()));
        unitPeriodTimes2 := selectset( this.Unit2(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,period_MP = unitPeriodTime.Period_MP() and not isnull( unitPeriodTime.UnitAvailability()));
        unitPeriodTimes3 := selectset( this.Unit3(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,period_MP = unitPeriodTime.Period_MP() and not isnull( unitPeriodTime.UnitAvailability()));
        unitPeriodTimes1 := selectset( this.Unit1(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,period_MP = unitPeriodTime.Period_MP());
        unitPeriodTimes2 := selectset( this.Unit2(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,period_MP = unitPeriodTime.Period_MP());
        unitPeriodTimes3 := selectset( this.Unit3(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,period_MP = unitPeriodTime.Period_MP());
        
        if( unitPeriodTimes1.Size() > 0 ){
          this.OnOK( unitPeriodTimes1,shiftPattern1 ); 
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageReport.def
@@ -26,16 +26,6 @@
        Taborder: 2
      ]
    }
    Component dhMDSHandles
    {
      #keys: '[414996.1.116451655]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[internal[ExternalMDSHandle]]*'
      Properties:
      [
        Taborder: 3
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlanByMDSID.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
Quintiq file version 2.0
#parent: #root
Method GetMacroPlanByMDSID (
  OfflinePlanTableInfo offlinePlanInfo
) as MacroPlan id:Method_ApplicationMacroPlanner_GetMacroPlanByMDSID
{
  #keys: '[414996.1.122222878]'
  Body:
  [*
    componentmds := ApplicationScope.ComponentMDS();
    demandMacroPlan := null( MacroPlan );
    if( exists( ScenarioManager,ScenarioMP,scemp,scemp.IsLoaded() and scemp.DatasetMDSID() = offlinePlanInfo.MacroPlanMDSID() )){
      mdsinstance     := select( componentmds, ComponentMDSKinds.ComponentMDSInstances, m, m.MDSID().MDSKey() = offlinePlanInfo.MacroPlanMDSID() );
      handle          := mdsinstance.GetMDSHandle();
      demandMacroPlan := handle.AsMacroPlan();
    }else{
      error( "MacroPlan[ " + offlinePlanInfo.MacroPlanName() + "] is not load." );
    }
    return demandMacroPlan;
  *]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlans.def
@@ -7,14 +7,13 @@
  [*
    componentmds := ApplicationScope.ComponentMDS();
    
    dhMDSHandles.Data().Flush();
    
    macroPlans := construct( MacroPlans );
    scemps := selectset( ScenarioManager,ScenarioMP,mp,mp.IsLoaded());
    traverse( scemps,Elements,scemp ){
      mdsinstance     := select( componentmds, ComponentMDSKinds.ComponentMDSInstances, m, m.MDSID().MDSKey() = scemp.DatasetMDSID() );
      handle          := mdsinstance.GetMDSHandle();
      dhMDSHandles.Data().Add( handle );
      demandMacroPlan := handle.AsMacroPlan();
      macroPlans.Add( demandMacroPlan );
    }
_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelRibbon504#801.def
@@ -9,7 +9,7 @@
    {
      #keys: '[412672.1.78210474]'
      BaseType: 'WebDropDownList'
      Databinding: 'OfflinePlanTable'
      Databinding: 'OfflinePlanTableInfo'
      Children:
      [
        Component DataExtractorRibbon
@@ -18,7 +18,7 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[OfflinePlanTable]'
            DataType: 'structured[OfflinePlanTableInfo]'
            Source: 'dhOfflinePlanTables'
            Taborder: 0
            Transformation: 'Elements'
@@ -27,7 +27,7 @@
      ]
      Properties:
      [
        DisplayField: 'SaveDateTime'
        DisplayField: 'TableName'
        Label: '基准下线计划:'
        Taborder: 0
      ]
@@ -46,7 +46,7 @@
    {
      #keys: '[412672.1.78210579]'
      BaseType: 'WebDropDownList'
      Databinding: 'OfflinePlanTable'
      Databinding: 'OfflinePlanTableInfo'
      Children:
      [
        Component DataExtractorRibbon300
@@ -55,7 +55,7 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[OfflinePlanTable]'
            DataType: 'structured[OfflinePlanTableInfo]'
            Source: 'dhOfflinePlanTables'
            Taborder: 0
            Transformation: 'Elements'
@@ -64,7 +64,7 @@
      ]
      Properties:
      [
        DisplayField: 'SaveDateTime'
        DisplayField: 'TableName'
        Label: '对比下线计划:'
        Taborder: 1
      ]
@@ -73,10 +73,25 @@
    {
      #keys: '[414996.1.103241339]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[OfflinePlanTable]*'
      Databinding: 'structured[OfflinePlanTableInfo]*'
      Children:
      [
        Component deOfflinePlanTables
        {
          #keys: '[414996.1.124700546]'
          BaseType: 'WebDataExtractor'
      Properties:
      [
        Taborder: 3
            DataType: 'RecycleBin'
            Source: 'RecycleBin'
            Taborder: 0
            Transformation: 'OfflinePlanTableInfo'
          ]
        }
      ]
      Properties:
      [
        Taborder: 4
      ]
    }
    Component bExport
@@ -86,7 +101,7 @@
      Properties:
      [
        Image: 'EXPORT1'
        Taborder: 4
        Taborder: 5
      ]
    }
    Component dhXMLDataListener
@@ -112,7 +127,16 @@
      ]
      Properties:
      [
        Taborder: 5
        Taborder: 6
      ]
    }
    Component ButtonRibbon
    {
      #keys: '[414996.1.125429607]'
      BaseType: 'WebButton'
      Properties:
      [
        Taborder: 3
      ]
    }
  ]
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: #root
Response OnCreated () id:Response_FormOfflinePlanChanges_OnCreated
{
  #keys: '[414996.1.124740834]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
  }
}
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_ButtonRibbon_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: PanelRibbon504_801/ButtonRibbon
Response OnClick () id:Response_PanelRibbon504_801_ButtonRibbon_OnClick
{
  #keys: '[414996.1.125429626]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      macroPlans := ApplicationMacroPlanner.GetMacroPlans();
      OfflinePlanTableInfo::Create( macroPlans,RecycleBin );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bComparison_OnClick.def
@@ -9,8 +9,13 @@
  {
    Body:
    [*
      baseVersion := ddlBaseOfflinePlanTable.Data();
      compareVersion := ddlCompareOfflinePlanTable.Data();
      baseOfflineTableInfo := ddlBaseOfflinePlanTable.Data();
      baseMacroPlan := ApplicationMacroPlanner.GetMacroPlanByMDSID( baseOfflineTableInfo );
      baseVersion := select( baseMacroPlan ,OfflinePlanTable,table,table.SaveDateTime() = baseOfflineTableInfo.TableSaveTime() );
      compareOfflineTableInfo := ddlCompareOfflinePlanTable.Data();
      compareMacroPlan := ApplicationMacroPlanner.GetMacroPlanByMDSID( compareOfflineTableInfo );
      compareVersion := select( compareMacroPlan ,OfflinePlanTable,table,table.SaveDateTime() = compareOfflineTableInfo.TableSaveTime() );
      
      dhTable.Data( LocalCell_OfflinePlanComparison::Compared( RecycleBin,baseVersion,compareVersion ));
    *]
_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated#57.def
@@ -7,20 +7,6 @@
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      macroPlans := ApplicationMacroPlanner.GetMacroPlans();
      offlinePlanTables := selectset( macroPlans,Elements.OfflinePlanTable,table,true );
      traverse( macroPlans,Elements,element ){
        info( element.MDSID() );
      }
      info( dhMDSHandles.Data().Size() );
      traverse( dhMDSHandles.Data(),Elements,element ){
        info( element.AsMacroPlan().MDSMacroPlan().Description() );
      }
      this.Data( &offlinePlanTables );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_ButtonCompare_OnClick.def
@@ -10,7 +10,7 @@
    Body:
    [*
      
      table := LocalCell_DemandComparison::Compared( RecycleBin,dhBaseVersionPath.Data(),dhCompareVersionPath.Data(),lBaseVersionName.Text(),lCompareVersionName.Text() );
      table := LocalCell_DemandComparison::Compared( RecycleBin,MacroPlan, dhBaseVersionPath.Data(),dhCompareVersionPath.Data(),lBaseVersionName.Text(),lCompareVersionName.Text() );
      dhComparisonData.Data( table );
    *]
    GroupServerCalls: false
_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_ListSalesDemands.def
@@ -7,7 +7,7 @@
    {
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeAllConstraint","columnid":"All constraints","title":"All constraints","subtotals":"","tooltip":"","width":1,"display":"shown"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgNotLinkedToPeriod","title":"ImgNotLinkedToPeriod","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgNotLinkedToPeriod"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgIsPostponed","title":"ImgIsPostponed","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgIsPostponed"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPoint_MP.ID","title":"Stocking point","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"StockingPoint_MP.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegment_MP.Name","title":"Sales segment","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"SalesSegment_MP.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Product_MP.ID","title":"Product","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Product_MP.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"Start","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"End","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasure_MP.Name","title":"Quantity UoM","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"UnitOfMeasure_MP.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Original Qty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NettedQuantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"NettedQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FulfilledQuantity","title":"Fulfilled","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"FulfilledQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeChart","columnid":"Fulfillment Illustration","title":"Fulfillment","subtotals":"","tooltip":"","width":-1,"display":"shown","type":"stackbar","relative":true,"attributes":[{"name":"Fulfilled demand","color":"rgb(87,184,71)","expression":{"classtype":"WebApiDefinitionAttributeExpression","columnid":"Fulfillment","title":"Fulfilled demand","subtotals":"","tooltip":"","width":-1,"display":"shown","expressionbody":"object.FulfilledQuantity().Round(2)"}},{"name":"Unfulfilled demand","color":"rgb(232,123,0)","expression":{"classtype":"WebApiDefinitionAttributeExpression","columnid":"Unfulfilled demand","title":"Unfulfilled demand","subtotals":"","tooltip":"","width":-1,"display":"shown","expressionbody":"maxvalue(object.NettedQuantity()-object.FulfilledQuantity(),0.0).Round(2)"}}]}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriceUoM","title":"PriceUoM","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"PriceUoM"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Priority.Name","title":"Priority","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Priority.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DemandUncertaintyPercentage","title":"Uncertainty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandUncertaintyPercentage"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Origin","title":"Origin","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Origin"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeAllConstraint","columnid":"All constraints","title":"All constraints","subtotals":"","tooltip":"","width":1,"display":"shown"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgNotLinkedToPeriod","title":"ImgNotLinkedToPeriod","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgNotLinkedToPeriod"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgIsPostponed","title":"ImgIsPostponed","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgIsPostponed"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPoint_MP.ID","title":"Stocking point","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"StockingPoint_MP.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegment_MP.Name","title":"Sales segment","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"SalesSegment_MP.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Product_MP.ID","title":"Product","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Product_MP.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"Start","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"End","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasure_MP.Name","title":"Quantity UoM","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"UnitOfMeasure_MP.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Original Qty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NettedQuantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"NettedQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FulfilledQuantity","title":"Fulfilled","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"FulfilledQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeChart","columnid":"Fulfillment Illustration","title":"Fulfillment","subtotals":"","tooltip":"","width":-1,"display":"shown","type":"stackbar","relative":true,"attributes":[{"name":"Fulfilled demand","color":"rgb(87,184,71)","expression":{"classtype":"WebApiDefinitionAttributeExpression","columnid":"Fulfillment","title":"Fulfilled demand","subtotals":"","tooltip":"","width":-1,"display":"shown","expressionbody":"object.FulfilledQuantity().Round(2)"}},{"name":"Unfulfilled demand","color":"rgb(232,123,0)","expression":{"classtype":"WebApiDefinitionAttributeExpression","columnid":"Unfulfilled demand","title":"Unfulfilled demand","subtotals":"","tooltip":"","width":-1,"display":"shown","expressionbody":"maxvalue(object.NettedQuantity()-object.FulfilledQuantity(),0.0).Round(2)"}}]}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriceUoM","title":"PriceUoM","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"PriceUoM"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Priority.Name","title":"Priority","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Priority.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DemandUncertaintyPercentage","title":"Uncertainty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandUncertaintyPercentage"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Origin","title":"Origin","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Origin"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Differnce","title":"Differnce","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Differnce"}}]'
      ]
    }
  ]
_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Response_ListSalesDemands_MenuCreate_OnClick#715.def
@@ -2,16 +2,4 @@
#parent: ListSalesDemands
Response OnClick () inherited id:Response_ListSalesDemands_MenuCreate_OnClick_715 #extension
{
  QuillAction #extension
  {
    Body:
    [*
      //Create new sales demand
      dlg := construct( DialogCreateEditForecast );
      dlg.New();
      dlg.bSplitUsingCurve().Visible( true );
      dlg.PanelCurve().Visible( true );
    *]
  }
}