聚网通社区电子商务ERP专区BOM物料清单打印有问题

1  /  1  页   1 跳转 查看:494

标题: BOM物料清单打印有问题

BOM物料清单打印有问题

发现一个问题!!

系统中打印物料清单时,如果出现以下情况打印就会有问题

父项:A    数量:1
子项:B    数量:2



父项:B    数量:1
子项:C    数量:1



按照原来的物料清单打印,打印结果是:

父项:A 
子项:B  数量:2
    子项:C  数量:1


这个打印结果容易引起误导!!


个人认为正确结果是:

父项:A 
子项:B  数量:2
    子项:C  数量:2


因此要改变打印报表算法;
以下推荐一个算法:

/********广度历遍算法*********/
alter PROC P_FIND_BILL(@ITEM NVARCHAR(10))
AS
BEGIN
DECLARE  @FIND_BILL TABLE
(PARENT NVARCHAR(10),
LEVEL1 INT,
COMPONENT NVARCHAR(10),
QUANTITY INT )
  BEGIN
  DECLARE @LEVEL INT
  SET @LEVEL=1
  IF EXISTS(SELECT PARENT FROM DESIGN_BILL WHERE PARENT=@ITEM)
  BEGIN
  INSERT INTO @FIND_BILL(PARENT,LEVEL1,COMPONENT,QUANTITY)
  SELECT PARENT,@LEVEL,COMPONENT,QUANTITY FROM DESIGN_BILL WHERE PARENT=@ITEM
  WHILE @@ROWCOUNT>0
    BEGIN
    SET @LEVEL=@LEVEL+1
    INSERT INTO @FIND_BILL(PARENT,LEVEL1,COMPONENT,QUANTITY)
    SELECT A.PARENT,@LEVEL,a.COMPONENT,A.QUANTITY*B.QUANTITY FROM  DESIGN_BILL AS A
    JOIN @FIND_BILL AS B ON A.PARENT =B.COMPONENT AND B.LEVEL1=@LEVEL-1
    END
  END
  ELSE
  BEGIN
  SET ROWCOUNT 1
  INSERT INTO @FIND_BILL(PARENT,LEVEL1)
  SELECT  PARENT,@LEVEL FROM DESIGN_BILL WHERE PARENT=@ITEM
  SET @LEVEL=@LEVEL+1
  END
  END
SELECT A.PARENT,B.ITEM_DESC1 PITEM_DESC,A.COMPONENT,C.ITEM_DESC1 AS CITEM_DESC,A.LEVEL1,QUANTITY
FROM @FIND_BILL AS A
JOIN MATERIAL_MST AS B ON A.PARENT=B.ITEM
LEFT OUTER JOIN MATERIAL_MST AS C ON A.COMPONENT=C.ITEM
END
go

EXEC P_FIND_BILL '000150'


感谢MECCO的小余鼎力支持提供的计算方法!!
Abel Zhao Implement Consultant GIGA ========================================= 上海哲勤信息技术有限公司 Shanghai Gigapp Solutions Inc
Add:上海浦东桃林路18号环球大厦B栋32楼
Tel:021-68556520-606 13564525061
Fax:021-68556521
引用
 

回复:BOM物料清单打印有问题

晕死,我这是用于从物料清单中查找物料的算法。。。。
根据一个物料,从出material_bill表中找出所有子项包括该物料的最顶层父项(或此物料是本身就是最顶层)。。。
引用
 

回复:BOM物料清单打印有问题

要改为这样,
父项:A 
子项:B  数量:2
    子项:C  数量:2
在原有算法的基础上加一列,用父项的数量乘以子项的数量就行了,根本不要这个的啊
CREATE FUNCTION F_GETBOM1(@PARENT NVARCHAR(10))

RETURNS @BOM TABLE (PARENT NVARCHAR(10),
        P_ITEM_DESC NVARCHAR(60),
        COM_LEVEL INT,
        SORT_COLUMN NVARCHAR(20),
        C_LEVEL NVARCHAR(20),
        COMPONENT NVARCHAR(10),
        CITEM_DESC NVARCHAR(60),
        COM_TYP NVARCHAR(10),
        QUANTITY NUMERIC(10,6),
        SCRAP_PCNT NUMERIC(10,6),
        MB NVARCHAR(10),
        Coefficient NUMERIC(10,6))
WITH ENCRYPTION
AS
BEGIN
    DECLARE @LEVEL INT
    SET @LEVEL=1
    INSERT @BOM(PARENT,COM_LEVEL,SORT_COLUMN,C_LEVEL,COMPONENT,CITEM_DESC,COM_TYP,QUANTITY,SCRAP_PCNT,MB,Coefficient)
    select Parent,@LEVEL,
    CASE WHEN SEQN>90 THEN CAST(SEQN/10 AS NVARCHAR(10)) ELSE '0'+CAST(SEQN/10 AS NVARCHAR(10)) END,
    CAST(SEQN/10 AS NVARCHAR(10)),
    component,C.item_desc1,
    COM_TYP,
    quantity,scrap_pcnt,
    MATERIAL_DTL2.MB,1*quantity
    from material_bill join material_mst AS C on material_bill.component=C.item
    JOIN MATERIAL_DTL2 ON COMPONENT=MATERIAL_DTL2.ITEM
    WHERE MATERIAL_BILL.PARENT=@PARENT

    WHILE @@ROWCOUNT>0
    BEGIN
        SET @LEVEL=@LEVEL+1
        INSERT @BOM(PARENT,COM_LEVEL,SORT_COLUMN,C_LEVEL,COMPONENT,CITEM_DESC,COM_TYP,QUANTITY,SCRAP_PCNT,MB,Coefficient)
        SELECT A.PARENT,@LEVEL,
            B.SORT_COLUMN+'.'+CASE WHEN A.SEQN>90 THEN CAST(A.SEQN/10 AS NVARCHAR(10)) ELSE '0'+CAST(A.SEQN/10 AS NVARCHAR(10)) END,
            B.C_LEVEL+'.'+CAST(SEQN/10 AS NVARCHAR(10)),
            A.COMPONENT,C.ITEM_DESC1,
            A.COM_TYP,
           
            A.QUANTITY,B.SCRAP_PCNT,
            D.MB,Coefficient*A.QUANTITY
   
        FROM MATERIAL_BILL AS A JOIN @BOM AS B ON A.PARENT=B.COMPONENT
        JOIN MATERIAL_MST AS C  ON A.COMPONENT=C.ITEM
        LEFT OUTER JOIN MATERIAL_DTL2 AS D ON A.COMPONENT=D.ITEM
        WHERE B.COM_LEVEL=@LEVEL-1
    END
RETURN
END
引用
 

回复: BOM物料清单打印有问题

按照原来的物料清单打印,打印结果是:
父项:A 
子项:B  数量:2
    子项:C  数量:1

这个打印结果容易引起误导!!

个人认为正确结果是:
父项:A 
子项:B  数量:2
    子项:C  数量:2
====如果是缩排式的BOM清单 报表,则我认为,ABEL所提的BOM的格式反而是容易引起误解的。
数量字段表示的是,在某个物料下面的子项单台数量。如果按ABEL的打印的结果,就会出现在BILL屏幕查询的时候,屏幕 显示的数量与打印的数量不一致的情况。

有时项目实施,要考虑改变用户的习惯 。而不能过多的牵就。

另外,强烈建议不要使用存储过程中来打印报表。一是速度慢,二如果是多用户情况,怎么办?
引用
 

回复:BOM物料清单打印有问题

按照原来的物料清单打印,打印结果是:
父项:A 
子项:B  数量:2
    子项:C  数量:1
这种方式,确实得不到普通用户的认同,因为他们根本不明白这种结构是怎么来形成的,

另外,问一下崔总,
“强烈建议不要使用存储过程中来打印报表。一是速度慢,二如果是多用户情况,怎么办?”
不太明白?
引用
 

回复: BOM物料清单打印有问题


慧源思哲,天道酬勤
聚网通-完全在线的企业建站平台,http://www.zhiga.net
引用
 
1  /  1  页   1 跳转

版权所有 聚网通社区  聚网通社区 聚网通  Sitemap

Powered by Discuz!NT 2.0.1115    Copyright © 2001-2009 Comsenz Inc.
Processed in 0.015625 second(s) , 4 queries.
返顶部