lazhen
2024-08-15 ea1c035b2abbbf99b05eb95ccc5293b8490412cf
涉及到调拨计划的报表调整
已修改2个文件
已添加1个文件
120 ■■■■■ 文件已修改
_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Initialize.qbl 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachiningPipelineRow/Method_SetCellTransferValue.qbl 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Initialize.qbl
@@ -146,28 +146,36 @@
      product                 := selectobject( owner, Product_MP, product, product.ID() = tprow.ProductID() );
      productparents          := product.GetAllParent();
      if( exists( productparents, Elements, e, e.ID() = produtparent ) ){//查询产品类型是发动机
        //查询对应的发动机成本
         enginecost           := selectobject( owner, LogisticsCostEngine, engine, engine.Generation() = product.Generation()
                                               and engine.MLB_MQB() = product.MQBMLB()
                                               and engine.Factory() = ccunit
                                               and exists( productparents, Elements, e, e.ID() = engine.Product() ) );
         //在运输成本参数表里找到发动机对应运输单价和装载容量
         transcost            := selectobject( owner, LogisticsCostTransport, trans, trans.Origin() = dlline
                                                and trans.Destination() = dlrent
                                                and exists( productparents, Elements, e, e.ID() = trans.Product() ) );
         if( not isnull( enginecost ) and not isnull( transcost ) ){
           row                := table.GetRow( product.ID() );
           products.Add( product );
           traverse( tprow,TransferPlanCell, tpcell ){
             periodtime       := tpcell.TransferPlanColumn().ColumnDate().StartOfMonth();
             periodname       := periodtime.Format( "M2/D2/Y" );
             column           := selectobject( table, Column, column, column.Name() = periodname and column.StartDate() = periodtime );
             cost             := ceil( ceil( [Number]tpcell.Value() / enginecost.PackagingCapacity() ) / transcost.LoadingCapacity() ) * transcost.TransportPrice();
             cell             := selectobject( row, Cell, cell, cell.Column() = column );
             cell.CCLongTransCoat( cell.CCLongTransCoat() + cost );
           }
         }
        //起始库存点是否是大连
        originsp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = tprow.SourceStockpoingPointID() );
        isdl                   := table.IsInUnit( originsp, dlunit );
        //目的地库存点是否是长春
        destisp                := selectobject( owner, StockingPoint_MP, sp, sp.ID() = tprow.TargetStockpoingPointID() );
        iscc                   := table.IsInUnit( destisp, ccunit );
        if( isdl and iscc ){
          //查询对应的发动机成本
          enginecost           := selectobject( owner, LogisticsCostEngine, engine, engine.Generation() = product.Generation()
                                                 and engine.MLB_MQB() = product.MQBMLB()
                                                 and engine.Factory() = ccunit
                                                 and exists( productparents, Elements, e, e.ID() = engine.Product() ) );
          //在运输成本参数表里找到发动机对应运输单价和装载容量
          transcost            := selectobject( owner, LogisticsCostTransport, trans, trans.Origin() = dlline
                                                  and trans.Destination() = dlrent
                                                  and exists( productparents, Elements, e, e.ID() = trans.Product() ) );
          if( not isnull( enginecost ) and not isnull( transcost ) ){
            row                := table.GetRow( product.ID() );
            products.Add( product );
            traverse( tprow,TransferPlanCell, tpcell ){
              periodtime       := tpcell.TransferPlanColumn().ColumnDate().StartOfMonth();
              periodname       := periodtime.Format( "M2/D2/Y" );
              column           := selectobject( table, Column, column, column.Name() = periodname and column.StartDate() = periodtime );
              cost             := ceil( ceil( [Number]tpcell.Value() / enginecost.PackagingCapacity() ) / transcost.LoadingCapacity() ) * transcost.TransportPrice();
              cell             := selectobject( row, Cell, cell, cell.Column() = column );
              cell.CCLongTransCoat( cell.CCLongTransCoat() + cost );
            }
          }
        }
      }
    }
    //长春短途运输费用:客户需求数量/包装容量/装载容量*运输单价,客户需求数量取自forecast里sales segment为长春的数量汇总,再用公式计算,月度进行汇总(取客户需求数量换算成车次)
_Main/BL/Type_MachiningPipelineRow/Method_SetCellTransferValue.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: #root
Method SetCellTransferValue (
  MachiningPipelineColumn column,
  Boolean iscc,
  Real quantity
)
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-24-2024 (created)
    cell := selectobject( this, Cell, cell, cell.Column() = column );
    if( iscc ){
      cell.CCTransferQty( cell.CCTransferQty() + quantity );
    } else {
      cell.DLTransferQty( cell.DLTransferQty() + quantity );
    }
  *]
}
_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
@@ -76,8 +76,6 @@
              if( iscc or isdl ){
                row.SetCellInventoryValue( daycolumn, iscc, [Real]inventoryquantity );
                if( weekcolumn.EndDate() = pispip.Start().Date() or pispip.Period_MP() = endperiod ){
    //            if( pispip.Start() = weekstart + Duration::Days( 6 ) or pispip.Period_MP() = endperiod ){
    //              weekstart      := ( weekstart + Duration::Days( 7 ) ).Date();
                  row.SetCellInventoryValue( weekcolumn, iscc, [Real]inventoryquantity );
                }
              }
@@ -88,25 +86,33 @@
    }
    
    //生成调拨数据
    traverse( owner, TransferPlanRow, tprow, ( tprow.SourceStockpoingPointID() = 'CC' and tprow.TargetStockpoingPointID() = 'DL' ) or ( tprow.SourceStockpoingPointID() = 'DL' and tprow.TargetStockpoingPointID() = 'CC' ) ){
      row := selectobject( table, Row, row, row.Name() = tprow.Name() );
      traverse( table, Column, column ){
        cell := selectobject( row, Cell, cell, cell.Column() = column );
        if( column.TimeUnit() = Translations::MP_GlobalParameters_Day() ){
          tpcell := selectobject( tprow, TransferPlanCell, tpcell, tpcell.TransferPlanColumn().ColumnDate() = column.StartDate() );
          if( tprow.SourceStockpoingPointID() = 'CC' and tprow.TargetStockpoingPointID() = 'DL' ){
            cell.CCTransferQty( [Real]tpcell.Value() );
          }else if( tprow.SourceStockpoingPointID() = 'DL' and tprow.TargetStockpoingPointID() = 'CC' ){
            cell.DLTransferQty( [Real]tpcell.Value() );
          }
        }else if( column.TimeUnit() = Translations::MP_GlobalParameters_Week() ){
          period := column.StartDate() + Duration::Days( 6 );
          tpcell := selectobject( tprow, TransferPlanCell, tpcell, tpcell.TransferPlanColumn().ColumnDate() = period.Date() );
          if( tprow.SourceStockpoingPointID() = 'CC' and tprow.TargetStockpoingPointID() = 'DL' ){
            cell.CCTransferQty( [Real]tpcell.Value() );
          }else if( tprow.SourceStockpoingPointID() = 'DL' and tprow.TargetStockpoingPointID() = 'CC' ){
            cell.DLTransferQty( [Real]tpcell.Value() );
    traverse( owner, TransferPlanRow, tprow ){
      product               := selectobject( owner, Product_MP, product, product.ID() = tprow.ProductID() );
      productparents        := product.GetAllParent();
      if( exists( productparents, Elements, e, e.ID() = productparent ) ){//查询产品类型是发动机
        //起始库存点是否是大连or长春
        originsp              := selectobject( owner, StockingPoint_MP, sp, sp.ID() = tprow.SourceStockpoingPointID() );
        originunit            := originsp.Unit();
        originparentunits     := originunit.GetAllParent();
        originiscc            := originsp.ID() = ccunit or originunit.ID() = ccunit or exists( originparentunits, Elements, punit, punit.ID() = ccunit );
        originisdl            := originsp.ID() = dlunit or originunit.ID() = dlunit or exists( originparentunits, Elements, punit, punit.ID() = dlunit );
        //目的地是否是长春外租库
        destisp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = tprow.TargetStockpoingPointID() );
        destiunit             := originsp.Unit();
        destiparentunits      := destiunit.GetAllParent();
        destiiscc             := destisp.ID() = ccunit or destiunit.ID() = ccunit or exists( destiparentunits, Elements, punit, punit.ID() = ccunit );
        destiisdl             := destisp.ID() = dlunit or destiunit.ID() = dlunit or exists( destiparentunits, Elements, punit, punit.ID() = dlunit );
        if( ( originiscc and destiisdl ) or ( originisdl and destiiscc ) ){
          row := selectobject( table, Row, row, row.Name() = tprow.Name() );
          traverse( tprow, TransferPlanCell, tpcell ){
            //天
            daycolumn        := table.GetColumnByUnit( Translations::MP_GlobalParameters_Day(), tpcell.TransferPlanColumn().ColumnDate() );
            //周
            weekcolumn       := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(), tpcell.TransferPlanColumn().ColumnDate() );
            quantity         := [Real]tpcell.Value();//四舍五入
            row.SetCellTransferValue( daycolumn, ( originiscc and destiisdl ), quantity );
            row.SetCellTransferValue( weekcolumn, ( originiscc and destiisdl ), quantity );
          }
        }
      }