技术开发 频道

制造业ERP10年从业小结

    Part II: Critical Program Logic

    1.BOM Explosion / 展BOM

    BOM表的结构抽象化之后一般如下:

    A
    |
    --------------------------
    |                               |
    B(2)                         C(1)
    |
    -----------------------
    |                           |
    D(1)                     E(1)
    |
    --------------------
    |                       |
    F(1)                 G(1)

    Table Name: BOM
    BOMId        ItemId        ItemType        BOMType        BOMQty        FromDate        ToDate
    A                B                 BOM                Item               2               
    A                C                 Item                Item               1                                         2009-05-31
    B                D                 BOM                Phantom        1               
    B                E                 Item                Item               1               
    D                F                 Item                Item               1               
    D                G                 Item                Item               1  

    经典的展BOM程序如下:
   
    void BOMExplosion(_TopBOMId, _BOMId, _BOMDate = today(), _BOMQty = 1)
    {
        while select BOM
               where BOM.BOMId == _BOMId
                  && (!BOM.FromDate || BOM.FromDate <= _BOMDate)
                  && (!BOM.ToDate     || BOM.ToDate     >= _BOMDate)
        {
            if (BOM.ItemType != BOM)
            {
                TmpBOM.TopBOMId  = _TopBOMId;
                TmpBOM.ItemId       = BOM.ItemId;
                TmpBOM.BOMQty     = BOM.BOMQty * _BOMQty;
                TmpBOM.insert();
            }
            else
            {
                if (BOM.BOMType == Item)
                {
                    TmpBOM.TopBOMId  = _TopBOMId;
                    TmpBOM.ItemId       = BOM.ItemId;
                    TmpBOM.BOMQty     = BOM.BOMQty * _BOMQty;
                    TmpBOM.insert();
                }
                BOMExplosion(_TopBOMId, BOM.ItemId, _BOMDate, BOM.BOMQty * _BOMQty);
            }
        }
    }

    根据以上程序展开的BOM结果如下:

    Table Name: TmpBOM
    TopBOMId        ItemId        BOMQty
    A                      B                 2
    A                      C                 1
    A                      D                 2
    A                      E                 2
    A                      F                 2
    A                      G                 2

0
相关文章