Agile PLM bom表結構學習筆記


BOM表字段說明:

id:bom表主鍵,每次變更單對BOM有任務修改都會追加記錄,而不是直接修改原紀錄

item:父物料id,關聯item表

component:子物料id,關聯item表

item_number:子物料編碼

flag:bom子項狀態(目前僅第4,第5位數有效)。第4位:0代表無效,1代表有效。第5位:0代表已過時,1代表最新。

prior_bom:如果不為空,代表該行數據變更了另一行數據,值為另一行BOM表ID

Change_in:子物料被加入的變更單ID。如果為0代表是走變更之前(初始狀態)就添加到BOM中的。

Change_out:子物料被刪除的變更單ID。當這個字段值>0時代表當前這個子行已經被這個變更單作廢了。

quantity:子料用量,文本字段。可支持分數,例如:1/6

BOM注釋:通過id和agile_flex表的row_id字段關聯查詢,還有attid=1036 and class="10000"

find_number:查找編號,目前沒用起來

 

場景說明:

  1. 變更單C0095696,狀態為:新建,受影響物件為90.01.002271
    1. 在父料中新增1行子料03.10.000488,則BOM表會新增1行記錄,flag=00000,change_in=該變更單ID,change_out=空,prior_bom=空
    2. 在父料中刪除1行子料06.06.034701,則BOM表會新增1行記錄,flag=00000,change_in=該變更單ID,change_out=該變更單ID,prior_bom=被刪除的數據ID
    3. 在父料中將1行子料03.15.030311修改為03.15.010001R,則BOM表會新增1行記錄,flag=00000,change_in=該變更單ID,change_out=空,prior_bom=被刪除的數據ID
    4. 在父料中將1行子料02.80.603667的用量從6改成5,則BOM表會新增1行記錄,flag=00000,change_in=該變更單ID,change_out=空,prior_bom=被修改的數據ID
  2. 變更單C0095696,狀態變為:審核,受影響物件為90.01.002271
    1. 以上數據均無任何變化
  3. 變更單C0095696,狀態變為:發放,受影響物件為90.01.002271
    1. 在父料中新增1行子料03.10.000488,則BOM表會新增1行記錄,flag變為00011,change_in為該變更單ID,change_out為空,prior_bom為空
    2. 在父料中刪除1行子料06.06.034701,則BOM表會新增1行記錄,flag依然為00000,change_in為該變更單ID,change_out為該變更單ID,prior_bom指向被刪除的數據ID;被刪除的數據flag從00011變為00010,change_out變為當前變更單ID
    3. 在父料中將1行子料03.15.030311修改為03.15.010001R,則BOM表會新增1行記錄,flag變為00011,change_in為該變更單ID,change_out為空,prior_bom指向被刪除的數據ID;被刪除的數據flag從00011變為00010,change_out變為當前變更單ID
    4. 在父料中將1行子料02.80.603667的用量從6改成5,則BOM表會新增1行記錄,flag變為00011,change_in為該變更單ID,change_out為空,prior_bom指向被修改的數據ID;被刪除的數據flag從00011變為00010,change_out變為當前變更單ID

根據變更單或者受影響物件編號查詢BOM變更內容的SQL

 1 with e as (
 2     select c.change_number
 3     ,i.item_number as parent_item_number,i.description as parent_item_name
 4     ,case when (change_out > 0 and prior_bom > 0) then 2 else 1 end as op_type
 5     ,ci.description as item_name
 6     ,b.item_number,b.id,b.prior_bom,b.quantity as qty,b.FLAGS,b.created,b.last_upd,b.change_in,b.change_out
 7     ,f.text as remark
 8     ,decode(b.prior_bom,0,b.id,b.prior_bom) as order_id
 9     from AGILE.Change C
10     INNER JOIN AGILE.REV R ON R.CHANGE = C.ID
11     INNER JOIN AGILE.bom b on r.item = b.item and b.change_in = c.id
12     inner join AGILE.item i on r.item = i.id 
13     inner join AGILE.item ci on b.component = ci.id
14     left join agile.agile_flex f on b.id = f.row_id and f.class = 10000 and f.attid = 1036
15     LEFT JOIN AGILE.LISTENTRY LDELAY ON R.LIST01 = LDELAY.ENTRYID AND LDELAY.LANGID = 4
16     where 1=1 
17     ${if(trim(changeNumber) == '',""," and c.change_number = '"+changeNumber+"'")}
18     ${if(trim(pitemNumber) == '',""," and i.item_number = '"+pitemNumber+"'")}
19 )
20 select * from (
21     -- 操作BOM
22     select e.* from e
23     union all
24     -- 被操作的BOM
25     select e.change_number
26     ,e.parent_item_number,e.parent_item_name
27     ,2 as op_type
28     ,ci.description as item_name
29     ,b.item_number,b.id,b.prior_bom,b.quantity as qty,b.FLAGS,b.created,b.last_upd,b.change_in,b.change_out
30     ,f.text as remark
31     ,decode(b.prior_bom,0,b.id,b.prior_bom) as order_id
32     from agile.bom b
33     inner join e on b.id = e.prior_bom 
34     inner join AGILE.item ci on b.component = ci.id
35     left join agile.agile_flex f on b.id = f.row_id and f.class = 10000 and f.attid = 1036
36     where e.change_in != e.change_out
37 ) t order by t.parent_item_number,t.change_number,t.order_id

 將上述SQL,放到FineReport報表工具中,開發成報表的最終呈現結果如下圖(重要信息已做馬賽克處理):

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM