基于存货总线设计的单据审核后台函数(plpgsql)

简介: 基于存货总线设计的单据审核后台函数(plpgsql)

单据审核plpgsql函数

根据存货总线设计要求,存货类单据填写完成后流转到【审核】步骤,前端查看后认为没有问题时,对所操作单据标记审核,审核后登记。

在标记审核时,将审核指令发送到后台数据库中,由后台函数完成审核标记或相关处理。

一般地,审核标记前可能需要对单据做以下处理:

1、验证:对当前步骤操作前单据状态进行检验。

2、运算:需要进行的计算类操作。

3、正确完成后返回当前用户,否则返回提示信息。

其中一部分单据允许新增,如销售订单、采购订单,有的单据禁止新增,如出库单等。

单据审核函数代码

CREATE OR REPLACE FUNCTION public.x9_djsp(
  ssdqyh character varying,
  ssbjmc character varying,
  ssdjmc character varying,
  ssdjoid character varying,
  ssczmc character varying,
  ssspfx boolean)
    RETURNS character varying
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$
DECLARE
   ssmsg text;ssdet text;sstname text;sshint text;ssctt text; --错误处理
  rs VARCHAR;
  ssxhff bool;ssnrwid INT;
  ssczry varchar(100);ssny char(6);ssrwgn varchar(30);  -- 用于生成任务记录
   sshtbh varchar(30);ssckmc varchar(50);
  ssjjzl varchar(10);ssgymc varchar(50);sschxh varchar;sschdh varchar(20);
   sstskm varchar(50);
BEGIN
  rs:='';
   IF $6 = false THEN
    -- 反向操作 取消  -- 反向操作不需要处理。
    RETURN $1;
  END IF;
  IF $5 = '审核' THEN
    -- 审批前可以进行自定义验证
    -- 存货单据 需求、计划、完成、交付 先验证货号(CHXH),本系统使用自动货号。再验证仓库名称
    IF $3 = '销售订单' OR $3 = '需求计算单' OR
      $3 = '采购订单' OR $3 = '委外订单' OR $3 = '生产计划单' OR
      $3 = '盘点入库单' OR $3 = '采购入库单' OR $3 = '完工入库单' OR $3 = '委外入库单' OR
      $3 = '销售出库单' OR $3 = '领用出库单' OR $3 = '委外出库单'  THEN
      ssxhff:=x9_chxh_dj($1,$3,$4);
      IF ssxhff = false THEN
        -- 货号审核后验证存货属性、存量控制、价格管理并加标记,要求登记前全部完成设置
        UPDATE mlchxm SET sxyzbj = (CASE WHEN bzdw <> '' AND mjsl <= 0 AND sxsh = false THEN '*' ELSE '' END)
          || (CASE WHEN mllb <> '自制' AND ghdw = '' AND sxsh = false THEN '*' ELSE '' END)
          || (CASE WHEN mllb = '自制' AND scdw = '' AND sxsh = false THEN '*' ELSE '' END)
          WHERE sxsh = false;
        UPDATE mlchxm SET clyzbj = (CASE WHEN bzcl <= 0 AND clsh = false THEN '*' ELSE '' END)
          || (CASE WHEN jhpl = 0 THEN '*' ELSE '' END)
          WHERE clsh = false;
        UPDATE mlchxm SET jgyzbj = (CASE WHEN mllb = '外协' AND jgdj <= 0 AND jgsh = false THEN '*' ELSE '' END)
          || (CASE WHEN jhjj <= 0 AND jgsh = false THEN '*' ELSE '' END)
          WHERE xmsh = false OR jgsh = false;
        -- 验证包装单位
        IF exists(SELECT oid FROM djchm WHERE oid = $4 AND bzdw <> '' AND (mjsl = 0 OR bzjs = 0)) THEN
          rs:='单据' || $4 || '存在未正确填写每件数量或包装件数的数据行';
          RETURN rs;
        END IF;
        -- 出入库类单据验证仓库名称 position('om' in 'Thomas')
        IF position('入库' IN $3) > 0 OR position('出库' IN $3) > 0 THEN
          SELECT ckmc INTO ssckmc FROM djcho WHERE oid = $4;
          IF exists(SELECT x.ckmc FROM djchm m INNER JOIN mlchxm x ON m.chxh = x.chxh
              WHERE m.oid = $4 AND x.ckmc <> ssckmc) THEN
            UPDATE djchm m SET bz = x.ckmc||' '||m.bz FROM mlchxm x WHERE m.chxh = x.chxh
              AND m.oid = $4 AND x.ckmc <> ssckmc;
            rs:= '单据' || $4 || '中某些行不属于仓库' || ssckmc || '请按不同仓库分别填制出入库类单据';
            RETURN rs;
          END IF;
        END IF;
        UPDATE djcho SET shrq = CURRENT_DATE WHERE oid = $4;
        rs:=$1 ;
      ELSE
        rs:='存货序号审核未能通过';
      END IF;
      RETURN rs;
    END IF;
   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 ssmsg;   
END;
$BODY$;
本段代码在postgresql15.1中运行通过。

单据头表结构

djcho字段列表:
oid       varchar      30 计划单号          textread          
djmc      varchar      60 单据名称          textread          
ny        bpchar        6 年月            textread          
rq        date          0 日期            dateedit  yyyy-MM-dd
dqbz      varchar      40 当前步骤          textread          
ywlb      varchar      40 业务类别          textedit          
wldw      varchar     200 往来单位          buttonedit          
jswb      varchar      40 结算外币          textread          
scbm      varchar     100 生产部门          listedit          
ckmc      varchar     100 仓库名称          listedit          
htbh      varchar      50 合同编号          textedit          
jfrq      date          0 交付日期          dateedit  yyyy-MM-dd
ywy       varchar      60 业务员           comboedit         
glbj      varchar     100 关联标记          textedit          
bz        varchar     100 备注            textedit          
tzr       varchar      20 制表人           textread          
shr       varchar      20 审核人           textread          
djr       varchar      20 登记人           textread  

单据体表结构

djchm字段列表:
mid       int4         32 计划序号          textread          
oid       varchar      30 计划单号          textread          
djmc      varchar      60 单据名称          textread          
ny        bpchar        6 年月            textread          
dqbz      varchar      40 当前步骤          textread          
chxh      varchar      20 货号            buttonedit          
chdh      varchar      30 存货代号          buttonedit          
chmc      varchar     100 存货名称          textread          
xh1       varchar     100 型号            buttonedit          
xh2       varchar     100 规格            buttonggxh          
xh3       varchar     400 参数            textedit          
gg1       varchar     100 颜色            comboedit     edit
gg2       varchar     100 材质            textedit          
gg3       varchar     100 图号            textedit          
bzdw      varchar      40 包装            notenter          
mjsl      numeric      16 每件            textedit  0.00;0.00;#
jldw      varchar      20 单位            notenter          
bzjs      int4         32 件数            textedit     0;0;#
xqsl      numeric      16 需求数量          textedit  #,###.00;-#,###.00;#
xqdj      numeric      16 需求单价          textedit  #,###.00;-#,###.00;#
xqje      numeric      16 需求金额          textedit  #,###.00;-#,###.00;#
jhsl      numeric      16 计划数量          textread  #,###.00;-#,###.00;#
jhdj      numeric      16 计划单价          textedit  #,###.00;-#,###.00;#
jhje      numeric      16 计划金额          textedit  #,###.00;-#,###.00;#
rksl      numeric      16 入库数量          textedit  #,###.00;-#,###.00;#
rkdj      numeric      16 入库单价          textedit  #,###.00;-#,###.00;#
rkje      numeric      16 入库金额          textedit  #,###.00;-#,###.00;#
cksl      numeric      16 出库数量          textedit  #,###.00;-#,###.00;#
ckdj      numeric      16 出库单价          textedit  #,###.00;-#,###.00;#
ckje      numeric      16 出库金额          textedit  #,###.00;-#,###.00;#
jgsl      numeric      16 加工数量          textedit  #,###.00;-#,###.00;#
jgdj      numeric      16 加工单价          textedit  #,###.00;-#,###.00;#
jgje      numeric      16 加工金额          textedit  #,###.00;-#,###.00;#
xssl      numeric      16 销售数量          textedit  #,###.00;-#,###.00;#
xsdj      numeric      16 销售单价          textedit  #,###.00;-#,###.00;#
xsje      numeric      16 销售金额          textedit  #,###.00;-#,###.00;#
wbje      numeric      16 外币金额          textedit  #,###.00;-#,###.00;#
zzsl      numeric      16 税率            textedit        n2
zzse      numeric      16 税额            textedit        n2
wbse      numeric      16 外币税额          textedit        n2
tp1       varchar     400 图片            fileedit          
clyt      varchar      20 材料用途          textread          
djrq      timestamp     0 登记日期          dateedit  yyyy-MM-dd
bz        varchar     400 备注            buttontextedit          
mhh       int4         32 行号            textedit          
sfsh      bool          0 是否审核          checkedit         
sfdj      bool          0 是否登记          checkread         

存货细目表结构

mlchxm字段列表:
chxh      varchar      20 货号            textedit          
sjdh      varchar      20 上级代号          textedit          
bjdh      varchar      20 本级代号          textedit          
jc        int4         32 级次            textedit          
chdh      varchar      30 存货代号          textread          
chmc      varchar     100 存货名称          textread          
xh1       varchar     100 型号            textedit          
xh2       varchar     100 规格            textedit          
xh3       varchar     400 参数            textedit          
gg1       varchar     100 颜色            comboedit     edit
gg2       varchar     100 材质            textedit          
gg3       varchar     100 图号            textedit          
bzdw      varchar      40 包装            textread          
mjsl      numeric      16 每件            textedit  0.00;0.00;''
jldw      varchar      40 单位            textread          
jhjj      numeric      16 计划进价          textedit        n2
jhsj      numeric      16 计划售价          textedit        n2
bzcl      numeric      16 标准存量          textedit        n2
jgdj      numeric      16 加工单价          textedit        n2
jhpl      numeric      16 计划批量          textedit        n2
mllb      varchar      20 材料类别          textedit          
zjm       varchar     100 助记码           textedit          
ckmc      varchar     100 仓库名称          listedit          
scdw      varchar     100 生产部门          buttonedit          
ghdw      varchar     200 供货单位          buttonedit          
sydw      varchar     100 使用单位          textedit          
sxyzbj    varchar      10 属性验证标记        textedit          
sxsh      bool          0 是否审核          checkedit         
sxshry    varchar      40 审核人员          textedit          
jgyzbj    varchar      10 价格验证标记        textedit          
jgsh      bool          0 价格审核          checkedit         
jgshry    varchar      40 审核人员          textedit          
clyzbj    varchar      10 存量验证标记        textedit          
clsh      bool          0 存量审核          checkedit         
clshry    varchar      40 存量审核人员        textedit          
xmsh      bool          0 细目审核          checkedit         
xmshry    varchar      40 细目审核人员        textedit          
sfsd      bool          0 是否锁定          checkedit         
sfqy      bool          0 是否启用          checkedit        

实际使用中,可能还会涉及更多的表,此略。

本人新设计的存货总线物料管理方案,规范并简化了物料管理的信息管理方式,可能更直观、更快速地操作并反映物料状况,易于完成需求计算。具体请参考相关文章。如有需要可参考,亦可联系作者。

相关文章
|
2月前
存货总线数量明细总账设计(plpgsql)
存货总线数量明细总账设计(plpgsql)
|
2月前
|
存储
物料需求计算存储过程设计
物料需求计算存储过程设计
|
2月前
|
小程序
外卖小程序-购物车模块表结构设计和后端代码
外卖小程序-购物车模块表结构设计和后端代码
26 0
|
2月前
基于存货总线设计的单据登记后台函数(plpgsql)
基于存货总线设计的单据登记后台函数(plpgsql)
|
2月前
|
数据可视化
基于存货总线设计的物料需求计算后台函数(plpgsql)
基于存货总线设计的物料需求计算后台函数(plpgsql)
|
安全 数据可视化 Java
管理订单状态,该用上状态机吗?
说到底Spring StateMachine上手难度非常大,如果没有用来做重型状态机的需求,十分不推荐普通的小项目进行接入。 最最重要的是,由于Spring StateMachine状态机实例不是无状态的,无法做到线程安全,所以代码要么需要使用锁同步,要么需要用Threadlocal,非常的痛苦和难用。 例如下面的Spring StateMachine代码就用了重量级锁保证线程安全,在高并发的互联网应用中,这种频繁的获取释放锁会造成严重的性能问题。
1434 0
管理订单状态,该用上状态机吗?
SAP WM中阶明明设置了TO自动产生为啥冻结物料后没有TO单据产生?
SAP WM中阶明明设置了TO自动产生为啥冻结物料后没有TO单据产生?
SAP WM中阶明明设置了TO自动产生为啥冻结物料后没有TO单据产生?
SAP WM初阶之MIGO过账后自动调用LT06事务代码
SAP WM初阶之MIGO过账后自动调用LT06事务代码
SAP WM初阶之MIGO过账后自动调用LT06事务代码
SAP WM高阶IM层面冻结物料库存过账后WM层面有三个不同的移动类型?
SAP WM高阶IM层面冻结物料库存过账后WM层面有三个不同的移动类型?
SAP WM高阶IM层面冻结物料库存过账后WM层面有三个不同的移动类型?
SAP WM高阶之同一个货架上相同物料不同批次的库存可以有同一个SU号码?
SAP WM高阶之同一个货架上相同物料不同批次的库存可以有同一个SU号码?
SAP WM高阶之同一个货架上相同物料不同批次的库存可以有同一个SU号码?