能生成4GL的代码吗,假设表名为bom_file,有主件A,A的元件有B、C、D,B的元件有E、F、G
时间: 2024-01-13 12:02:58 浏览: 27
好的,基于您提供的问题描述,以下是一个可能的4GL代码实现:
```
DEFINE VARIABLE nRootRecid AS INTEGER NO-UNDO.
DEFINE VARIABLE nCurRecid AS INTEGER NO-UNDO.
DEFINE VARIABLE nParentRecid AS INTEGER NO-UNDO.
DEFINE VARIABLE nQty AS INTEGER NO-UNDO.
DEFINE VARIABLE nCost AS DECIMAL NO-UNDO.
DEFINE VARIABLE nTotalCost AS DECIMAL NO-UNDO.
/* 获取主件A的记录ID */
FIND FIRST bom_file WHERE bom_file.id = "A" NO-LOCK NO-ERROR.
IF AVAILABLE bom_file THEN
nRootRecid = bom_file.RECID.
ELSE
MESSAGE "未找到主件A的记录" VIEW-AS ALERT-BOX.
/* 递归计算成本 */
PROCEDURE CalculateCost(nCurRecid AS INTEGER, nQty AS INTEGER):
FIND FIRST bom_file WHERE bom_file.RECID = nCurRecid NO-LOCK NO-ERROR.
IF NOT AVAILABLE bom_file THEN RETURN.
/* 计算该节点的成本 */
IF bom_file.mid = "" THEN /* 主件 */
nCost = 0.
FOR EACH bom_file WHERE bom_file.mid = STRING(bom_file.id) NO-LOCK:
RUN CalculateCost(bom_file.RECID, nQty * bom_file.qty).
nCost = nCost + (bom_file.cost * bom_file.qty).
END.
ELSE /* 元件 */
nCost = bom_file.cost * nQty.
END.
/* 更新该节点的成本 */
UPDATE bom_file SET cost = nCost WHERE bom_file.RECID = nCurRecid.
/* 更新祖先节点的成本 */
FIND FIRST bom_file WHERE bom_file.RECID = bom_file.parent_id NO-LOCK NO-ERROR.
IF AVAILABLE bom_file THEN
UPDATE bom_file SET cost = cost + nCost WHERE bom_file.RECID = bom_file.parent_id.
END PROCEDURE.
/* 从主件A开始递归计算成本 */
RUN CalculateCost(nRootRecid, 1).
/* 统计所有主件成本和半成品成本 */
FOR EACH bom_file WHERE bom_file.mid = "" NO-LOCK:
nTotalCost = nTotalCost + bom_file.cost.
END.
MESSAGE "所有主件成本和半成品成本为:" nTotalCost VIEW-AS ALERT-BOX.
```
以上代码逻辑大致如下:
1. 首先,根据主件A的料号查找其记录ID,作为递归计算成本的起点。
2. 然后,定义一个递归过程CalculateCost,该过程接受两个参数:当前节点的记录ID和当前节点的数量。在该过程中,先计算当前节点的成本,然后更新该节点的成本,最后更新祖先节点的成本。
3. 在递归过程中,对于每个元件节点,递归调用CalculateCost,传递其数量为当前节点的数量乘以元件的数量。
4. 在递归过程结束后,统计所有主件的成本和半成品的成本。
希望这个4GL代码实现能够对您有所帮助。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)