yunchai
2023-09-25 030dc8a61839890da90149c05fe76664e16a8fb6
20230925合并代码前备份
已重命名1个文件
已修改20个文件
已添加6个文件
已删除14个文件
774 ■■■■ 文件已修改
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetMaterialData.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_InitialForcastData.qbl 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_InitialForcastDataEx.qbl 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_MaterialReverse.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedging.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderReverseOrAuthorize.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_UpdateOrderForecastRealQty.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_OrderForecastRealQty/Attribute_CustomCode.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_OrderForecastRealQty/Attribute_CustomID.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_OrderForecastRealQty/Attribute_Department.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_OrderForecastRealQty/Attribute_ForecastQty.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_OrderForecastRealQty/Attribute_Month.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_OrderForecastRealQty/Attribute_OrderCode.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_OrderForecastRealQty/Attribute_SKU.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_OrderForecastRealQty/Attribute_SKUName.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_OrderForecastRealQty/Attribute_StockingPointID.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_OrderForecastRealQty/Attribute_Unit.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_OrderForecastRealQty/Attribute_VCode.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_List832_OnDoubleClick.def 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_OnCreated.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_Panel351.def 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_Panel383.def 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_Panel647.def 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_Panel849.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_liH_Forecast.def 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_listActionBarPage963.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_listContextMenu687.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_list_ForecastView_FOF#670.def 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_OnCreated.def 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel351_btn_Add_Material_FOF503_OnClick#222.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel351_btn_Add_Order_FOF449_OnClick#880.def 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel351_btn_Query_FOF_OnClick.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel383_btn_Query_FOF_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel647_btn_Add_Material_FOF_OnClick.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel647_btn_Add_Order_FOF_OnClick.def 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel647_btn_InitialData_OnClick.def 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_liH_Forecast_OnDoubleClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_list_ForecastView_FOF_OnDoubleClick.def 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_list_ForecastView_FOF_OnSelectionChanged.def 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/_ROOT_Component_FrmOrderForecast.def 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/_ROOT_Component_Frm_TEST.def 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetMaterialData.qbl
@@ -87,6 +87,10 @@
                                    ,ID := H_FunctionClass::SM_GenerateID( "MI"),MaterialType := "原材料",NeedDate := NDate
                                    ,NeedQty := [Number](ProductQty*0.8).Round( 0),Unit := "PCS"
                                    ,StockPoint :="测试",MaterialName := "测试数据" );
        Owner.H_MaterialInfo(relnew,ParentSKU := ParentSKU,SKU := "SKU_M"+ (nCount+1).AsQUILL() ,ForecastID := ForecastId,OrgCode := "ORG_000",VCode := VCode
                                    ,ID := H_FunctionClass::SM_GenerateID( "MI"),MaterialType := "半成品",NeedDate := NDate
                                    ,NeedQty := [Number](ProductQty*0.8).Round( 0),Unit := "PCS"
                                    ,StockPoint :="测试",MaterialName := "测试数据" );
      }
      bStatus := true;
      strMsg :="";
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_InitialForcastData.qbl
@@ -10,7 +10,7 @@
    /**********************************初始化订单预测信息***************************************
    *注:未确定上游预测订单更新逻辑和数据有效性,这里进行二次处理,新生成一个列表,避免上游信息变动严重
    *    å½±å“åŠŸèƒ½
    *
    *---------------------该函数已作废----------------------
    *****************************************************************************************/
    // åˆå§‹åŒ–结果
    bStatus := false;
@@ -70,25 +70,25 @@
                               StockingPointID := Obj.StockingPointID(),
                               Department:=DepartMent);
         // å†™å…¥é¢„测实时信息
         ObjOrderRealQty := select( Owner,H_OrderForecastRealQty,ObjO,ObjO.CustomID()=CustomName and ObjO.SKU()=Obj.ProductID()
         ObjOrderRealQty := select( Owner,H_OrderForecastRealQty,ObjO,ObjO.CustomCode()=CustomName and ObjO.SKU()=Obj.ProductID()
                                    and ObjO.Month().StartOfMonth() = Obj.EndDate().StartOfMonth() )
         if( isnull( ObjOrderRealQty))
         {
             Owner.H_OrderForecastRealQty(relnew,CustomID := CustomName,CustomName := CustomName,ForecatsQty := [Number]Obj.Quantity().Round( 0)
             Owner.H_OrderForecastRealQty(relnew,CustomCode := CustomName,CustomName := CustomName,ForecastQty := [Number]Obj.Quantity().Round( 0)
                                           ,ForecatsRealQty := [Number]Obj.Quantity().Round( 0),ID := H_FunctionClass::SM_GenerateID( "OR")
                                           ,Month := Obj.EndDate(),OrderCode := strOrderCode,SKU := Obj.ProductID(),Unit := Obj.UnitOfMeasureName());
                                           ,Month := Obj.EndDate(),SKU := Obj.ProductID(),Unit := Obj.UnitOfMeasureName());
         }
         else
         {
            if( [Number]Obj.Quantity().Round( 0)<> ObjOrderRealQty.ForecatsQty())
            if( [Number]Obj.Quantity().Round( 0)<> ObjOrderRealQty.ForecastQty())
            {
                  RQty := [Number]Obj.Quantity().Round( 0) - ObjOrderRealQty.ForecatsQty();
                  RQty := [Number]Obj.Quantity().Round( 0) - ObjOrderRealQty.ForecastQty();
                  RQty := ObjOrderRealQty.ForecatsRealQty() + RQty;
                  if( RQty<0)
                  {
                      RQty :=0;
                  }
                  ObjOrderRealQty.ForecatsQty([Number]Obj.Quantity().Round( 0));
                  ObjOrderRealQty.ForecastQty([Number]Obj.Quantity().Round( 0));
                  ObjOrderRealQty.ForecatsRealQty(RQty);
            }
         }
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_InitialForcastDataEx.qbl
@@ -2,7 +2,8 @@
#parent: #root
StaticMethod SM_InitialForcastDataEx (
  MacroPlan Owner,
  Boolean IsNew
  Boolean IsNew,
  String VersionCode
) as owning JSON
{
  Description: '初始化订单预测信息'
@@ -11,36 +12,43 @@
    /**********************************初始化订单预测信息***************************************
    *注:未确定上游预测订单更新逻辑和数据有效性,这里进行二次处理,新生成一个列表,避免上游信息变动严重
    *    å½±å“åŠŸèƒ½
    *
    *参数:IsNew æ˜¯å¦æ—¶å…¨æ–°æ•°æ®ï¼Œå…¨æ–°æ•°æ®ä¼šå°†æ—§çš„æ•°æ®æ¸…除,然后重新填充,不是全新数据,将累计和更新
    *****************************************************************************************/
    // åˆå§‹åŒ–结果
    bStatus := false;
    strMsg :="";
    
    try{
      // æ¸…除旧数据,重新拉取
      if(Owner.H_Forecast(relget ).Size()>0)
      // 20230925 ä¼˜åŒ–的业务逻辑,如果时新数据,则预测数据全部干掉,然后重新生成
      if( IsNew)
      {
        traverse( Owner,H_Forecast,Obj,not isnull( Obj))
        if( Owner.H_OrderForecastRealQty(relsize )>0)
        {
          Owner.H_Forecast(reldelete, Obj);
          traverse( Owner,H_OrderForecastRealQty,Obj,not isnull( Obj))
          {
            Owner.H_OrderForecastRealQty(reldelete, Obj);
          }
        }
      }
      
      // èŽ·å–é¢„æµ‹è®¢å•ï¼šå½“æœˆå’Œä¹‹åŽçš„3个月预测数据 ä¸”预测数量>0的
      AllData:= selectset( Owner, Product_MP.SalesDemand.astype( Forecast ),object,object.EndDate().DateTime().Date() >= Date::ActualDate().StartOfMonth()
                           and object.EndDate().DateTime().Date() <= Date::ActualDate().StartOfNextMonth().StartOfNextMonth().StartOfNextMonth().StartOfNextMonth()
      AllData:= selectset( Owner, Product_MP.SalesDemand.astype( Forecast ),object,
                           object.EndDate().DateTime().Date() >= Date::ActualDate().StartOfMonth()
                           // éœ€æ±‚给未来4个月的数据,但可能并不准确,暂时注释掉,四个月限制
                           //and object.EndDate().DateTime().Date() <= Date::ActualDate().StartOfNextMonth().StartOfNextMonth().StartOfNextMonth().StartOfNextMonth()
                           and object.Quantity()>0 );
      
      CustomName:="";
      DepartMent:="";
      idx:=0;
      strOrderCode:="";
      RQty:=0;
      ObjOrderRealQty:=null( H_OrderForecastRealQty,constcontent );
    //  ObjPruduct :=null( MappingProduct,constcontent );
      traverse( AllData,Elements,Obj,not isnull(Obj))
      {
        // æ²¡æœ‰å®¢æˆ·ä¿¡æ¯å’Œéƒ¨é—¨ä¿¡æ¯ï¼ŒSalesSegmentName=事业部+“-”+客户名称
        CustomName := Obj.SalesSegmentName();
        DepartMent := Obj.SalesSegmentName();
        // è¿™é‡Œç”¨æŸ¥æ‰¾åŽæˆªå–,因为不确定有几个横线,以第一个为准
        idx:=Obj.SalesSegmentName().FindString( "-",0);
        if(idx>0)
@@ -48,61 +56,32 @@
          DepartMent:=Obj.SalesSegmentName().SubString( 0,idx);
          CustomName := Obj.SalesSegmentName().SubString( idx+1, Obj.SalesSegmentName().Length() - (idx+1));
        }
        else
        {
          CustomName :=Obj.SalesSegmentName();
          DepartMent := "部门数据获取失败!"
        }
    //    // ä»Žç‰©æ–™è¡¨èŽ·å–ç‰©æ–™ä¿¡æ¯
    //    ObjPruduct := H_FunctionClass::SM_GetProductInfo( Owner,Obj.ProductID());
    //    if( not isnull( ObjPruduct))
    //    {
    //
    //    }
         // å†™å…¥é¢„测订单信息表
         strOrderCode:=H_FunctionClass::SM_GenerateID( "OF");
         Owner.H_Forecast(relnew,OrderCode := strOrderCode,
                                SKU := Obj.ProductID(),
                               CustomCode := CustomName,
                               CustomName := CustomName,
                               Util:=Obj.UnitOfMeasureName(),
                               NeedTime:=Obj.EndDate(),
                               ForecastQty:=[Number]Obj.Quantity().Round( 0),
                               StockingPointID := Obj.StockingPointID(),
                               Department:=DepartMent);
         // å†™å…¥é¢„测实时信息
         ObjOrderRealQty := select( Owner,H_OrderForecastRealQty,ObjO,ObjO.CustomID()=CustomName and ObjO.SKU()=Obj.ProductID()
         // æ›´æ–°é¢„测信息,非新数据更新信息。
         ObjOrderRealQty := select( Owner,H_OrderForecastRealQty,ObjO,ObjO.CustomCode()=CustomName and ObjO.SKU()=Obj.ProductID()
                                    and ObjO.Month().StartOfMonth() = Obj.EndDate().StartOfMonth() )
         if( isnull( ObjOrderRealQty))
         if( IsNew or isnull( ObjOrderRealQty))
         {
             Owner.H_OrderForecastRealQty(relnew,CustomID := CustomName,CustomName := CustomName,ForecatsQty := [Number]Obj.Quantity().Round( 0)
           Owner.H_OrderForecastRealQty(relnew,CustomCode := CustomName,CustomName := CustomName,ForecastQty := [Number]Obj.Quantity().Round( 0)
                                           ,ForecatsRealQty := [Number]Obj.Quantity().Round( 0),ID := H_FunctionClass::SM_GenerateID( "OR")
                                           ,Month := Obj.EndDate(),OrderCode := strOrderCode,SKU := Obj.ProductID(),Unit := Obj.UnitOfMeasureName());
                                         ,Month := Obj.EndDate(),SKU := Obj.ProductID(),Unit := Obj.UnitOfMeasureName()
                                         ,Department := DepartMent,VCode := VersionCode);
         }
         else
         {
           if( IsNew)
           // æ›´æ–°äº†é¢„测数据,则计算实时数据增减
            if( [Number]Obj.Quantity().Round( 0)<> ObjOrderRealQty.ForecastQty())
           {
              ObjOrderRealQty.ForecatsQty([Number]Obj.Quantity().Round( 0));
              ObjOrderRealQty.ForecatsRealQty([Number]Obj.Quantity().Round( 0));
           }
           else
           {
              if( [Number]Obj.Quantity().Round( 0)<> ObjOrderRealQty.ForecatsQty())
              {
                    RQty := [Number]Obj.Quantity().Round( 0) - ObjOrderRealQty.ForecatsQty();
                  RQty := [Number]Obj.Quantity().Round( 0) - ObjOrderRealQty.ForecastQty();
                    RQty := ObjOrderRealQty.ForecatsRealQty() + RQty;
                    if( RQty<0)
                    {
                        RQty :=0;
                    }
                    ObjOrderRealQty.ForecatsQty([Number]Obj.Quantity().Round( 0));
                  ObjOrderRealQty.ForecastQty([Number]Obj.Quantity().Round( 0));
                    ObjOrderRealQty.ForecatsRealQty(RQty);
              }
           }
         }
      }
      
      bStatus := true;
      strMsg :="订单预测初始化成功!";
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_MaterialReverse.qbl
@@ -39,7 +39,7 @@
        nNoHaveForecastQty:=0;//五预测数量
        // èŽ·å–é¢„æµ‹æ•°é‡ï¼ˆå®¢æˆ·+SKU+月份 ç†è®ºæ˜¯æ²¡æœ‰ç‰©æ–™é¢„测)
        OrderForecast := select(Owner, H_OrderForecastRealQty , Obj, Obj.SKU() = SKU 
                                              and Obj.CustomID() = CustomerCode
                                              and Obj.CustomCode() = CustomerCode
                                              and Obj.Month().Format( "YM2") = Date::ActualDate().Format( "YM2"));                                   
        if ( not isnull(OrderForecast))
        {
@@ -195,10 +195,9 @@
          {
            Owner.H_OrderForecastRealQty(relnew,ID := H_FunctionClass::SM_GenerateID( "OF"),SKU := SKU,
                                                                                            Month := Date::ActualDate(),
                                                                                            CustomID := CustomerCode,
                                                                                            CustomCode := CustomerCode,
                                                                                            CustomName := "客户表获取",
                                                                                            OrderCode := "-",
                                                                                            ForecatsQty :=0,
                                                                                            ForecastQty := 0,
                                                                                            ForecatsRealQty :=nForecastQtyNew,
                                                                                            Unit := "SKU åˆ°ç‰©æ–™è¡¨èŽ·å–");
          } 
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedging.qbl
@@ -26,7 +26,7 @@
      if( not isnull( Owner))
      {
        // åˆå§‹åŒ–预测信息
        JResult := H_FunctionClass::SM_InitialForcastDataEx( Owner,IsNew);
        JResult := H_FunctionClass::SM_InitialForcastDataEx( Owner,IsNew,"--");
        if( JResult.Get( "Status").GetBoolean())
        {
          traverse( Owner,SalesDemand.astype( CustomerOrder ),ObjOrder,not isnull( ObjOrder))
@@ -44,7 +44,7 @@
           
            // èŽ·å–é¢„æµ‹æ•°é‡ï¼ˆå®¢æˆ·+SKU+月份 ç†è®ºæ˜¯æ²¡æœ‰ç‰©æ–™é¢„测)
            OrderForecast := select(Owner, H_OrderForecastRealQty , Obj, Obj.SKU() = ObjOrder.ProductID() 
                                                  and Obj.CustomID() = ObjOrder.CustomerName()
                                                  and Obj.CustomCode() = ObjOrder.CustomerName()
                                                  and Obj.Month().Format( "YM2") =ObjOrder.EndDate().Format( "YM2"));
            if ( not isnull(OrderForecast))
            {
@@ -168,10 +168,9 @@
            {
              Owner.H_OrderForecastRealQty(relnew,ID := H_FunctionClass::SM_GenerateID( "OF"),SKU := ObjOrder.ProductID(),
                                                                                              Month := ObjOrder.EndDate(),
                                                                                              CustomID := ObjOrder.CustomerName(),
                                                                                              CustomCode := ObjOrder.CustomerName(),
                                                                                              CustomName := ObjOrder.CustomerName(),
                                                                                              OrderCode := "-",
                                                                                              ForecatsQty :=0,
                                                                                              ForecastQty := 0,
                                                                                              ForecatsRealQty :=nForecastQtyNew,
                                                                                              Unit := ObjOrder.UnitOfMeasureName());
            } 
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderReverseOrAuthorize.qbl
@@ -42,7 +42,7 @@
        nNoHaveForecastQty:=0;//五预测数量
        // èŽ·å–é¢„æµ‹æ•°é‡ï¼ˆå®¢æˆ·+SKU+月份 ç†è®ºæ˜¯æ²¡æœ‰ç‰©æ–™é¢„测)
        OrderForecast := select(Owner, H_OrderForecastRealQty , Obj, Obj.SKU() = SKU 
                                              and Obj.CustomID() = CustomerCode
                                              and Obj.CustomCode() = CustomerCode
                                              and Obj.Month().Format( "YM2") = Date::ActualDate().Format( "YM2"));
        if ( not isnull(OrderForecast))
        {
@@ -189,10 +189,9 @@
          {
            Owner.H_OrderForecastRealQty(relnew,ID := H_FunctionClass::SM_GenerateID( "OF"),SKU := SKU,
                                                                                            Month := Date::ActualDate(),
                                                                                            CustomID := CustomerCode,
                                                                                            CustomCode := CustomerCode,
                                                                                            CustomName := CustomName,
                                                                                            OrderCode := "-",
                                                                                            ForecatsQty :=0,
                                                                                            ForecastQty := 0,
                                                                                            ForecatsRealQty :=nForecastQtyNew,
                                                                                            Unit := Unit);
          } 
_Main/BL/Type_H_FunctionClass/StaticMethod_UpdateOrderForecastRealQty.qbl
@@ -24,7 +24,7 @@
        for ( x := 1; x <= 10; x := x + 1 )
        {
            Owner.H_OrderForecastRealQty(relnew,ID := "AAAAA_"+ x.AsQUILL(),SKU := "OTN-01-ACC-00"+ x.AsQUILL() , Month := Date::ActualDate(),CustomName := "小米",
                                          CustomID := "XM0001",OrderCode:="OD0001",ForecatsQty:=1000,ForecatsRealQty:=1000, Unit := "PCS");
                                          CustomCode := "XM0001",ForecastQty := 1000,ForecatsRealQty:=1000, Unit := "PCS");
        }
      }
      //H_FunctionClass := Owner.H_FunctionClass(relnew,VCode_Material := VCode,UpdateTime_Material := Date::ActualDate());
_Main/BL/Type_H_OrderForecastRealQty/Attribute_CustomCode.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute CustomCode
{
  #keys: '3[414724.0.174571651][414724.0.174571650][414724.0.174571652]'
  Description: '客户ID,唯一建之一'
  ValueType: String
}
_Main/BL/Type_H_OrderForecastRealQty/Attribute_CustomID.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_H_OrderForecastRealQty/Attribute_Department.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Department
{
  #keys: '3[414724.0.174571661][414724.0.174571660][414724.0.174571662]'
  Description: '部门,没有价值,显示使用'
  ValueType: String
}
_Main/BL/Type_H_OrderForecastRealQty/Attribute_ForecastQty.qbl
ÎļþÃû´Ó _Main/BL/Type_H_OrderForecastRealQty/Attribute_ForecatsQty.qbl ÐÞ¸Ä
@@ -1,6 +1,6 @@
Quintiq file version 2.0
#parent: #root
Attribute ForecatsQty
Attribute ForecastQty
{
  #keys: '3[414724.0.46380358][414724.0.46380357][414724.0.46380359]'
  Description: '预测数量'
_Main/BL/Type_H_OrderForecastRealQty/Attribute_Month.qbl
@@ -3,6 +3,6 @@
Attribute Month
{
  #keys: '3[414724.0.46380308][414724.0.46380307][414724.0.46380309]'
  Description: '月份'
  Description: '月份,唯一键之一'
  ValueType: Date
}
_Main/BL/Type_H_OrderForecastRealQty/Attribute_OrderCode.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_H_OrderForecastRealQty/Attribute_SKU.qbl
@@ -3,6 +3,6 @@
Attribute SKU
{
  #keys: '3[414724.0.46380348][414724.0.46380347][414724.0.46380349]'
  Description: 'SKU编码'
  Description: 'SKU编码,唯一键之一'
  ValueType: String
}
_Main/BL/Type_H_OrderForecastRealQty/Attribute_SKUName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute SKUName
{
  #keys: '3[414724.0.174572228][414724.0.174572227][414724.0.174572229]'
  Description: 'SKU名称'
  ValueType: String
}
_Main/BL/Type_H_OrderForecastRealQty/Attribute_StockingPointID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute StockingPointID
{
  #keys: '3[414724.0.174571671][414724.0.174571670][414724.0.174571672]'
  Description: '库存点,没有价值,显示使用'
  ValueType: String
}
_Main/BL/Type_H_OrderForecastRealQty/Attribute_Unit.qbl
@@ -3,6 +3,6 @@
Attribute Unit
{
  #keys: '3[414724.0.46380378][414724.0.46380377][414724.0.46380379]'
  Description: '单位'
  Description: '单位,没有价值,显示使用'
  ValueType: String
}
_Main/BL/Type_H_OrderForecastRealQty/Attribute_VCode.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute VCode
{
  #keys: '3[414724.0.174571641][414724.0.174571640][414724.0.174571642]'
  Description: '版本号,暂时不适用,默认-'
  ValueType: String
}
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_List832_OnDoubleClick.def
@@ -13,19 +13,31 @@
    [*
      if( not isnull( selection))
      {
        // é¢„测订单基本信息
        CustomCode:="";
        CustomName:="";
        SValueJsonString:="";
        // èŽ·å–å®¢æˆ·åç§°å’Œå®¢æˆ·ID
        if(txtSaveForecastData_FM.Text().Length()>0)
        {
           jForecast := JSON::Parse( txtSaveForecastData_FM.Text());
           CustomCode := jForecast.Get( "CustomCode").GetString();
           CustomName := jForecast.Get( "CustomName").GetString();
        }
        if(selection.MaterialType()="半成品")
        {
          OrderCode:="";
          ForecastID:="";
          if( txtSaveForecastData_FM.Text().Length()>0)
          {
            JForecast := JSON::Parse( txtSaveForecastData_FM.Text());
            OrderCode := JForecast.Get( "OrderCode").GetString();
            ForecastID := JForecast.Get( "ForecastID").GetString();
          }
         jResult := H_FunctionClass::SM_GetMaterialData( MacroPlan,selection.SKU(),selection.NeedQty(), OrderCode,"-",selection.NeedDate());
         jResult := H_FunctionClass::SM_GetMaterialData( MacroPlan,selection.SKU(),selection.NeedQty(), ForecastID,"-",selection.NeedDate());
          if(jResult.Get( "Status").GetBoolean())
          {
                de_dh_FM_ProductMP.FixedFilter( "object.ParentSKU() = " +  selection.SKU().AsQUILL()
                                                + " and object.ForecastID() = " + OrderCode.AsQUILL()
                                                + " and object.ForecastID() = " + ForecastID.AsQUILL()
                                                );
          }
          else
@@ -35,7 +47,27 @@
        }
        else
        {
            // å¼¹å‡ºç‰©æ–™åç­¾æŽˆæƒ
          SelectItem :=  select( MacroPlan,H_MessagePassing,Obj,Obj.FKey()="FrmMaterial" and Obj.ItemKey()="ListSelect");
          if(not isnull(selection))
          {
            SValueJsonString:= JSON::Object().Add( "SKU",selection.SKU())
                        .Add( "MaterialName",selection.MaterialName())
                        .Add( "MaterialType",selection.MaterialType())
                        .Add( "OrgCode",selection.OrgCode())
                        .Add( "Unit",selection.Unit())
                        .Add( "CustomCode",CustomCode)
                        .Add( "ParentSKU",lb_SUK_FM.Text())
                        .Add( "CustomName",CustomName).Build().AsString();
          }
          if(isnull( SelectItem))
          {
            MacroPlan.H_MessagePassing(relnew,FKey := "FrmMaterial",ItemKey := "ListSelect", ValueJsonString:=SValueJsonString);
          }
          else
          {
            SelectItem.ValueJsonString( SValueJsonString);
          }
          Application.OpenForm( "FrmAuthorizeAndCountersign_Material","modal");
        }
      }
    *]
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_OnCreated.def
@@ -21,7 +21,7 @@
          JSelect := JSON::Parse( SelectItem.ValueJsonString());
          lb_SUK_FM.Text(JSelect.Get( "SKU").GetString());
          de_dh_FM_ProductMP.FixedFilter( "object.ParentSKU() = " + JSelect.Get( "SKU").GetString().AsQUILL()
                                          + " and object.ForecastID() = " + JSelect.Get( "OrderCode").GetString().AsQUILL()
                                          + " and object.ForecastID() = " + JSelect.Get( "ForecastID").GetString().AsQUILL()
                                          );
        }
      }
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_Panel351.def
@@ -85,6 +85,29 @@
        Taborder: 3
      ]
    }
    Component txt_QueryContent_FOF
    {
      #keys: '[414724.0.172390935]'
      BaseType: 'WebEditField'
      Properties:
      [
        PlaceHolder: '模糊搜索'
        Taborder: 4
      ]
    }
    Component btn_Query_FOF
    {
      #keys: '[414724.0.172390951]'
      BaseType: 'WebButton'
      Properties:
      [
        ButtonSize: 'compact'
        Description: '查询'
        Image: 'VIEW'
        Label: '查询'
        Taborder: 5
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_Panel383.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_Panel647.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_Panel849.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_liH_Forecast.def
@@ -11,8 +11,8 @@
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'structured[H_Forecast]'
        Source: 'dh_FOF_H_Forecast'
        DataType: 'structured[H_OrderForecastRealQty]'
        Source: 'dh_FOF_H_OrderForecastRealQty'
        Taborder: 0
        Transformation: 'Elements'
      ]
@@ -28,7 +28,7 @@
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderCode","title":"订单编号","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SKU","title":"SKU编码","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SKU"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastQty","title":"预测数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecastQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NeedTime","title":"需求时间","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NeedTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Util","title":"单位","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Util"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomName","title":"客户名称","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Department","title":"销售部门","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Department"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Month","title":"月份","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Month"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomName","title":"客户名称","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SKU","title":"SKU编号","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SKU"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecatsQty","title":"预测数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecatsQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecatsRealQty","title":"纯预测数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecatsRealQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Unit","title":"单位","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Unit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Department","title":"部门","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Department"}}]'
        ContextMenu: 'listContextMenu367'
        Taborder: 2
      ]
@@ -36,6 +36,6 @@
  ]
  Properties:
  [
    Taborder: 7
    Taborder: 3
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_listActionBarPage963.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_listContextMenu687.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_list_ForecastView_FOF#670.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_OnCreated.def
@@ -9,14 +9,16 @@
  {
    Body:
    [*
      // åˆå§‹åŒ–查询参数月份
      ds_Month_FOF.Date(Date::ActualDate());
      // åˆå§‹åŒ–预测数据
      JResult := H_FunctionClass::SM_InitialForcastData( MacroPlan);
      JResult := H_FunctionClass::SM_InitialForcastDataEx( MacroPlan,true,"-");
      if(not JResult.Get( "Status").GetBoolean())
      {
          WebMessageBox::Warning( JResult.Get( "Msg").GetString());
      }
      else
      {
        WebMessageBox::Information( JResult.Get( "Msg").GetString());
      }
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel351_btn_Add_Material_FOF503_OnClick#222.def
@@ -1,7 +1,7 @@
Quintiq file version 2.0
#parent: Panel351/btn_Add_Material_FOF503
Response OnClick (
  H_Forecast selection
  H_OrderForecastRealQty selection
) id:Response_Panel351_btn_Add_Material_FOF503_OnClick_222
{
  #keys: '[414724.0.145178766]'
@@ -17,28 +17,26 @@
        if( isnull( SelectItem))
        {
           MacroPlan.H_MessagePassing(relnew,FKey :="FrmOrderForecast",ItemKey := "ListSelect",
                                       Value := selection.SKU()+";"+selection.Util()+";"+selection.CustomCode()+";"+selection.CustomName(),
                                       ValueJsonString := JSON::Object().Add( "SKU",selection.SKU())
                                                                         .Add( "Util",selection.Util())
                                                                       .Add( "Util",selection.Unit())
                                                                         .Add( "CustomCode",selection.CustomCode())
                                                                         .Add( "CustomName",selection.CustomName())
                                                                         .Add( "ForecastQty",selection.ForecastQty())
                                                                         .Add( "NeedTime",selection.NeedTime().AsQUILL())
                                                                         .Add( "OrderCode",selection.OrderCode()).Build().AsString());
                                                                       .Add( "ForecastID",selection.ID())
                                                                       .Add( "NeedTime",selection.Month().AsQUILL()).Build().AsString());
        }
        else
        {
          SelectItem.Value(selection.SKU()+";"+selection.Util()+";"+selection.CustomCode()+";"+selection.CustomName());
          SelectItem.ValueJsonString(JSON::Object().Add( "SKU",selection.SKU())
                                   .Add( "Util",selection.Util())
                                                   .Add( "Util",selection.Unit())
                                   .Add( "CustomCode",selection.CustomCode())
                                   .Add( "CustomName",selection.CustomName())
                                   .Add( "ForecastQty",selection.ForecastQty())
                                   .Add( "NeedTime",selection.NeedTime().AsQUILL())
                                   .Add( "OrderCode",selection.OrderCode()).Build().AsString());
                                                   .Add( "ForecastID",selection.ID())
                                                   .Add( "NeedTime",selection.Month().AsQUILL()).Build().AsString());
        }
        
        jResult := H_FunctionClass::SM_GetMaterialData( MacroPlan,selection.SKU(),selection.ForecastQty(),selection.OrderCode(),"-",selection.NeedTime());
        jResult := H_FunctionClass::SM_GetMaterialData( MacroPlan,selection.SKU(),selection.ForecastQty(),selection.ID(),"-",selection.Month());
        if(jResult.Get( "Status").GetBoolean())
        {
            Application.OpenForm( "FrmMaterial","popout");
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel351_btn_Add_Order_FOF449_OnClick#880.def
@@ -1,7 +1,7 @@
Quintiq file version 2.0
#parent: Panel351/btn_Add_Order_FOF449
Response OnClick (
  H_Forecast selection
  H_OrderForecastRealQty selection
) id:Response_Panel351_btn_Add_Order_FOF449_OnClick_880
{
  #keys: '[414724.0.141244111]'
@@ -17,17 +17,15 @@
        if( isnull( SelectItem))
        {
           MacroPlan.H_MessagePassing(relnew,FKey :="FrmOrderForecast",ItemKey := "ListSelect",
                                       Value := selection.SKU()+";"+selection.Util()+";"+selection.CustomCode()+";"+selection.CustomName(),
                                       ValueJsonString := JSON::Object().Add( "SKU",selection.SKU())
                                                                         .Add( "Util",selection.Util())
                                                                       .Add( "Util",selection.Unit())
                                                                         .Add( "CustomCode",selection.CustomCode())
                                                                         .Add( "CustomName",selection.CustomName()).Build().AsString());
        }
        else
        {
          SelectItem.Value(selection.SKU()+";"+selection.Util()+";"+selection.CustomCode()+";"+selection.CustomName());
          SelectItem.ValueJsonString(JSON::Object().Add( "SKU",selection.SKU())
                                   .Add( "Util",selection.Util())
                                                   .Add( "Util",selection.Unit())
                                   .Add( "CustomCode",selection.CustomCode())
                                   .Add( "CustomName",selection.CustomName()).Build().AsString());
        }
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel351_btn_Query_FOF_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: Panel351/btn_Query_FOF
Response OnClick () id:Response_Panel351_btn_Query_FOF_OnClick
{
  #keys: '[414724.0.172390950]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      de_dh_FOF_H_Foecast.FixedFilter( "object.SKU().LikeUserLocale( " + txt_QueryContent_FOF.Text().AsQUILL() + " )"
                                                   + " or " + "object.CustomName().LikeUserLocale( " + txt_QueryContent_FOF.Text().AsQUILL() + " )"
                                                   + " or " + "object.Unit().LikeUserLocale( " + txt_QueryContent_FOF.Text().AsQUILL() + " )"
                                                   + " or " + "object.Department().LikeUserLocale( " + txt_QueryContent_FOF.Text().AsQUILL() + " )"
                                                   + " or " + "object.StockingPointID().LikeUserLocale( " + txt_QueryContent_FOF.Text().AsQUILL() + " )"
                                      );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel383_btn_Query_FOF_OnClick.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel647_btn_Add_Material_FOF_OnClick.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel647_btn_Add_Order_FOF_OnClick.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel647_btn_InitialData_OnClick.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_liH_Forecast_OnDoubleClick.def
@@ -1,7 +1,7 @@
Quintiq file version 2.0
#parent: liH_Forecast
Response OnDoubleClick (
  H_Forecast selection
  H_OrderForecastRealQty selection
) id:Response_liH_Forecast_OnDoubleClick
{
  #keys: '[414724.0.111761136]'
@@ -15,28 +15,26 @@
      if( isnull( SelectItem))
      {
         MacroPlan.H_MessagePassing(relnew,FKey :="FrmOrderForecast",ItemKey := "ListSelect",
                                     Value := selection.SKU()+";"+selection.Util()+";"+selection.CustomCode()+";"+selection.CustomName(),
                                     ValueJsonString := JSON::Object().Add( "SKU",selection.SKU())
                                                                       .Add( "Util",selection.Util())
                                                                       .Add( "Util",selection.Unit())
                                                                       .Add( "CustomCode",selection.CustomCode())
                                                                       .Add( "CustomName",selection.CustomName())
                                                                       .Add( "ForecastQty",selection.ForecastQty())
                                                                       .Add( "NeedTime",selection.NeedTime().AsQUILL())
                                                                       .Add( "OrderCode",selection.OrderCode()).Build().AsString());
                                                                       .Add( "ForecastID",selection.ID())
                                                                       .Add( "NeedTime",selection.Month().AsQUILL()).Build().AsString());
      }
      else
      {
        SelectItem.Value(selection.SKU()+";"+selection.Util()+";"+selection.CustomCode()+";"+selection.CustomName());
        SelectItem.ValueJsonString(JSON::Object().Add( "SKU",selection.SKU())
                                 .Add( "Util",selection.Util())
                                                 .Add( "Util",selection.Unit())
                                 .Add( "CustomCode",selection.CustomCode())
                                 .Add( "CustomName",selection.CustomName())
                                 .Add( "ForecastQty",selection.ForecastQty())
                                 .Add( "NeedTime",selection.NeedTime().AsQUILL())
                                 .Add( "OrderCode",selection.OrderCode()).Build().AsString());
                                                 .Add( "ForecastID",selection.ID())
                                                 .Add( "NeedTime",selection.Month().AsQUILL()).Build().AsString());
      }
      
      jResult := H_FunctionClass::SM_GetMaterialData( MacroPlan,selection.SKU(),selection.ForecastQty(),selection.OrderCode(),"-",selection.NeedTime());
      jResult := H_FunctionClass::SM_GetMaterialData( MacroPlan,selection.SKU(),selection.ForecastQty(),selection.ID(),"-",selection.Month());
      if(jResult.Get( "Status").GetBoolean())
      {
        Application.OpenForm( "FrmMaterial","popout");
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_list_ForecastView_FOF_OnDoubleClick.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_list_ForecastView_FOF_OnSelectionChanged.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/_ROOT_Component_FrmOrderForecast.def
@@ -7,100 +7,12 @@
  BaseType: 'WebForm'
  Children:
  [
    #child: Panel849
    #child: list_ForecastView_FOF
    Component dh_FOF_Data
    {
      #keys: '[414724.0.86151860]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[SalesDemandBase]*'
      Children:
      [
        Component de_dh_FOF_Data
        {
          #keys: '[414724.0.86151875]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[SalesDemandBase]'
            Source: 'dh_FOF_ChildrenData'
            Taborder: 0
            Transformation: 'Elements'
          ]
        }
        Component DataExtractor819
        {
          #keys: '[414724.0.107645127]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'MacroPlan'
            Source: 'MacroPlan'
            Taborder: 1
            Transformation: 'SalesDemand'
          ]
        }
      ]
      Properties:
      [
        Taborder: 4
      ]
    }
    #child: Panel961
    Component dh_FOF_ChildrenData
    {
      #keys: '[414724.0.106541535]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[SalesDemandBase]*'
      Children:
      [
        Component de_FOF_ChildrenData_0
        {
          #keys: '[414724.0.106541577]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[Product_MP]'
            Source: 'ApplicationMacroPlanner.DataHolderProduct'
            Taborder: 0
            Transformation: 'Elements.SalesDemand'
          ]
        }
        Component de_FOF_ChildrenData_1
        {
          #keys: '[414724.0.106541594]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[StockingPoint_MP]'
            Source: 'ApplicationMacroPlanner.DataHolderStockingPoint'
            Taborder: 1
            Transformation: 'Elements.SalesDemand'
          ]
        }
        Component de_FOF_ChildrenData_2
        {
          #keys: '[414724.0.106541611]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[SalesSegment_MP]'
            Source: 'ApplicationMacroPlanner.DataHolderSalesSegment'
            Taborder: 2
            Transformation: 'Elements.SalesDemand'
          ]
        }
      ]
      Properties:
      [
        Taborder: 3
      ]
    }
    Component dh_FOF_H_Forecast
    Component dh_FOF_H_OrderForecastRealQty
    {
      #keys: '[414724.0.109053093]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[H_Forecast]*'
      Databinding: 'structured[H_OrderForecastRealQty]*'
      Children:
      [
        Component de_dh_FOF_H_Foecast
@@ -112,13 +24,13 @@
            DataType: 'MacroPlan'
            Source: 'MacroPlan'
            Taborder: 0
            Transformation: 'H_Forecast'
            Transformation: 'H_OrderForecastRealQty'
          ]
        }
      ]
      Properties:
      [
        Taborder: 6
        Taborder: 2
      ]
    }
    #child: liH_Forecast
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/_ROOT_Component_Frm_TEST.def
@@ -50,6 +50,8 @@
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'HORSE'
        Label: '订单冲减'
        Taborder: 3
      ]
    }