基于存货总线设计的物料需求计算后台函数(plpgsql)

简介: 基于存货总线设计的物料需求计算后台函数(plpgsql)

物料需求计算函数

有了存货总线数据后,需求计算将变得十分简单。本例需求计算根据销售订单计算,并生成需求计算单,销售订单+需求计算单=存货总线需求。在存货总线中,需求、计算、完成、交付与结存是直观体现的,不是传统的存货账项数据,为物料决策提供快速、准确的依据。

本例在需求计算单填制功能中,使用调入数据获得单据数据,此时完成需求计算。需求计算单与销售订单是一一对应的。

一、物料清单表数据字典

mlqd字段列表:
qdid      int4         32 清单序号          textedit          
cpchxh    varchar      20 产品货号          textedit     00000
cpchdh    varchar      30 产品代号          textedit          
jgdh      varchar      30 结构代号          textedit          
jc        int4         32 级次            textedit          
chxh      varchar      20 货号            buttonedit          
chdh      varchar      30 存货代号          buttonedit          
chmc      varchar     100 存货名称          textread          
xh1       varchar     100 型号            buttonedit          
xh2       varchar     100 规格            textedit          
xh3       varchar     400 参数            textedit          
gg1       varchar     100 颜色            comboedit     edit
gg2       varchar     100 材质            textedit          
gg3       varchar     100 图号            textedit          
jldw      varchar     100 单位            textread          
cllb      varchar      20 材料类别          textread          
desl      numeric      16 定额数量          textedit  0.0000;-0,0000;#
desh      numeric      16 定额损耗          textedit  0.00;-0,00;#
wldw      varchar     200 往来单位          buttonedit          
scbm      varchar     100 生产部门          textedit          
ckmc      varchar     100 仓库名称          listedit          
jsjd      int4         32 计算精度          textedit          
hh        int4         32 行号            textedit          
rq        date          0 日期            dateedit  yyyy-MM-dd
sfsh      bool          0 是否审核          checkedit         
shry      varchar      40 审核人员          textedit        

存货单据数据字典在前面文章中已经给出。

二、物料需求计算函数

CREATE OR REPLACE FUNCTION public.x9_xqjs(
  ssdqyh character varying,
  ssdjoid character varying)
    RETURNS character varying
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$
   -- description:需求计算单计算程序,根据销售订单计算。原为根据生产计划单计算
   -- 本例用于需求计算单调入数据时使用。需求计算单与销售订单一一对应。  
DECLARE
  ssmsg text;ssdet text;sstname text;sshint text;ssctt text; --错误处理
   ssdqjc int;
  ssdqny char(6);
  ssrkerr varchar(200);
BEGIN
  -- 需求计算前要对关联物料清单进行验证
  IF NOT exists(SELECT shr FROM djcho WHERE djmc = '销售订单' AND oid = $2 AND shr <> '' AND djr <> '')  THEN
    ssrkerr:='单据' || $2 || '不存在或未登记!' ;
    CALL x9_jlproc(ssrkerr,'','djcho','登记销售订单','需求计算');
    RETURN ssrkerr;
  END IF;
  IF exists(SELECT oid FROM djchm dd INNER JOIN mlqd qd ON qd.cpchxh = dd.chxh WHERE dd.oid = $2 AND qd.sfsh = false) THEN
    ssrkerr:='单据' || $2 || '的物料清单未被审核,无法进行需求计算' ;
    CALL x9_jlproc(ssrkerr,'','mlqd','清单审核','需求计算');
    RETURN ssrkerr;
  END IF;
  --  步骤
  --  1.删除原有计算结果
  DELETE FROM utwlxq WHERE oid = $2;
  ssdqny:=x9_dqny();
  --  2.生成当前单据的一级物料需求行
  INSERT INTO utwlxq  (oid,ny,cpchxh,jgdh,sjchxh,clchxh,jc,cllb,xqsl)
    SELECT $2 AS oid,ssdqny AS ny,mlqd.cpchxh, mlqd.jgdh, '' AS sjchxh,mlqd.cpchxh, mlqd.jc,
      mlqd.cllb,  sum(round((djchm.xqsl * mlqd.desl) * (1 + mlqd.desh / 100), mlqd.jsjd)) AS xqsl
    FROM djchm INNER JOIN mlqd ON djchm.chxh = mlqd.cpchxh
    GROUP BY djchm.oid,mlqd.cpchxh,mlqd.jgdh,mlqd.chxh,mlqd.jc,mlqd.cllb
    HAVING (djchm.oid = $2) AND (mlqd.jc = 1);
  --  3.分级计算
  ssdqjc:=1;
  LOOP
    EXIT WHEN ssdqjc > 5;
    -- 生成下一级物料需求
    INSERT INTO utwlxq (oid,ny,cpchxh, jgdh, sjchxh,clchxh, jc, cllb,xqsl)
    SELECT $2 AS oid,ssdqny AS ny, mlqd.cpchxh, mlqd.jgdh,wlxq.clchxh AS sjchxh,mlqd.chxh, mlqd.jc,
      mlqd.cllb, sum(round((wlxq.xqsl * mlqd.desl) * (1 + mlqd.desh / 100), mlqd.jsjd)) AS xqsl
    FROM utwlxq AS wlxq INNER JOIN mlqd ON wlxq.cpchxh = mlqd.cpchxh AND mlqd.jgdh like wlxq.jgdh || '%'
    WHERE (wlxq.oid = $2) AND (wlxq.jc = ssdqjc) AND (wlxq.xqsl > 0) AND (mlqd.jc = ssdqjc + 1)
      GROUP BY mlqd.cpchxh, mlqd.jgdh,wlxq.clchxh,mlqd.chxh,mlqd.jc,mlqd.cllb;
    ssdqjc:=ssdqjc + 1;
  END LOOP;
   RETURN '计算完成';
EXCEPTION WHEN others THEN
  GET stacked DIAGNOSTICS ssmsg = MESSAGE_TEXT,ssdet = pg_exception_detail,
    sstname = TABLE_NAME, sshint = pg_exception_hint, ssctt = pg_exception_context;
  CALL x9_jlproc( ssmsg,ssdet ,sstname,sshint,ssctt);
   RETURN ssdjoid || '需求计算出现错误';
END;
$BODY$;

三、总结

存货总线设计的目的是使用物料管理业务简化的同进行规范化,为小企业ERP实施成功提供更大可能。使复杂的数据关系变得简单好懂并且可视化。为传统管理模式向先进管理模式的过度提供了更多机会。

相关文章
|
7月前
存货总线数量明细总账设计(plpgsql)
存货总线数量明细总账设计(plpgsql)
|
7月前
|
存储
物料需求计算存储过程设计
物料需求计算存储过程设计
|
7月前
|
存储 监控 Go
【机组】单元模块实验的综合调试与驻机键盘和液晶显示器的使用方式
【机组】单元模块实验的综合调试与驻机键盘和液晶显示器的使用方式
120 0
|
前端开发
【前端设计】寄存器与主功能电路为异步时钟时的功能影响探索
【前端设计】寄存器与主功能电路为异步时钟时的功能影响探索
111 0
|
7月前
|
存储 Ruby 内存技术
【机组期末速成】CPU的结构与功能|CPU结构|指令周期概述|指令流水线|中断系统
【机组期末速成】CPU的结构与功能|CPU结构|指令周期概述|指令流水线|中断系统
276 1
|
5月前
|
缓存 运维 JavaScript
函数计算产品使用问题之要在一个应用中创建多个函数,该如何操作
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
7月前
|
监控
GE通用电气 IC670MDL644 现场控制逻辑快速输入模块
GE Fanuc 的IC670MDL644是一款24V DC正/负输入模块,具备16个输入端和独立LED显示。它提供电源状态监控及250V AC用户输入到逻辑隔离。模块含并行到串行转换器,数据经处理后通过总线接口以串行格式传输。连接正确时,电源LED显示状态,总线接口读取转换后的输入数据。支持正、负输入,配备盒式或隔离式端子板便于现场布线,内置电阻电容网络实现输入阈值和滤波。
|
7月前
基于存货总线设计的单据登记后台函数(plpgsql)
基于存货总线设计的单据登记后台函数(plpgsql)
|
7月前
|
前端开发 数据库
基于存货总线设计的单据审核后台函数(plpgsql)
基于存货总线设计的单据审核后台函数(plpgsql)
|
监控 程序员 C++
[虚幻引擎] UE里面监控每帧循环里面 C++ 函数的性能,监控函数效率,函数执行时间。
在使用C++开发UE引擎,有时候需要监控函数的执行的执行效率,这个时候有两种方式可以使用。
213 0

热门文章

最新文章