编程与数学 03-008 《看潮企业管理软件》项目开发 06 数据库 3-2

编程与数学 03-008 《看潮企业管理软件》项目开发 06 数据库 3-2

摘要:本文档详细阐述了《看潮企业管理软件》的数据库架构设计与初始化方案。基于PostgreSQL 16构建的kc01账套采用"无触发器、无外键、全函数"设计哲学,通过PL/pgSQL函数实现业务逻辑与数据完整性控制。系统支持多组织、多账期、多币种业务模式,涵盖从需求计划到财务总账的全流程工业版ERP功能。文档重点介绍了账套初始化函数x9_start的实现机制,以及静态基础数据(科目、物料、往来单位等)的预置要求,为企业ERP系统上线提供了完整的技术实施指南。
关键词:ERP系统、PostgreSQL、数据库架构、账套初始化、管理软件开发、PL/pgSQL、企业信息化
人工智能助手:DeepSeek、Kimi


三、主要表结构

sql 复制代码
-- Table: public.djcho

-- DROP TABLE IF EXISTS public.djcho;

CREATE TABLE IF NOT EXISTS public.djcho
(
    oid character varying(30) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    djmc character varying(60) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    ny character(6) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::bpchar,
    rq date,
    dqbz character varying(40) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    ywlb character varying(40) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    wldw character varying(200) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    jswb character varying(40) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    scbm character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    ckmc character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    htbh character varying(50) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    jfrq date,
    ywy character varying(60) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    glbj character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    tzrq timestamp without time zone,
    shrq timestamp without time zone,
    djrq timestamp without time zone,
    bz character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    tzr character varying(20) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    shr character varying(20) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    djr character varying(20) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    CONSTRAINT djcho_pkey PRIMARY KEY (oid)
)

TABLESPACE pg_default;

ALTER TABLE IF EXISTS public.djcho
    OWNER to postgres;
    
    -- Table: public.djchm

-- DROP TABLE IF EXISTS public.djchm;

CREATE TABLE IF NOT EXISTS public.djchm
(
    mid integer NOT NULL DEFAULT 0,
    oid character varying(30) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    djmc character varying(60) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    ny character(6) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::bpchar,
    dqbz character varying(40) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    chxh character varying(20) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    chdh character varying(30) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    chmc character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    xh1 character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    xh2 character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    xh3 character varying(400) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    gg1 character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    gg2 character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    gg3 character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    bzdw character varying(40) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    mjsl numeric(16,2) NOT NULL DEFAULT 0,
    jldw character varying(20) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    bzjs integer NOT NULL DEFAULT 0,
    xqsl numeric(16,2) NOT NULL DEFAULT 0,
    xqdj numeric(16,2) NOT NULL DEFAULT 0,
    xqje numeric(16,2) NOT NULL DEFAULT 0,
    jhsl numeric(16,2) NOT NULL DEFAULT 0,
    jhdj numeric(16,2) NOT NULL DEFAULT 0,
    jhje numeric(16,2) NOT NULL DEFAULT 0,
    rksl numeric(16,2) NOT NULL DEFAULT 0,
    rkdj numeric(16,2) NOT NULL DEFAULT 0,
    rkje numeric(16,2) NOT NULL DEFAULT 0,
    cksl numeric(16,2) NOT NULL DEFAULT 0,
    ckdj numeric(16,2) NOT NULL DEFAULT 0,
    ckje numeric(16,2) NOT NULL DEFAULT 0,
    jgsl numeric(16,2) NOT NULL DEFAULT 0,
    jgdj numeric(16,2) NOT NULL DEFAULT 0,
    jgje numeric(16,2) NOT NULL DEFAULT 0,
    cgsl numeric(16,2) NOT NULL DEFAULT 0,
    cgdj numeric(16,2) NOT NULL DEFAULT 0,
    cgje numeric(16,2) NOT NULL DEFAULT 0,
    xssl numeric(16,2) NOT NULL DEFAULT 0,
    xsdj numeric(16,2) NOT NULL DEFAULT 0,
    xsje numeric(16,2) NOT NULL DEFAULT 0,
    wbje numeric(16,2) NOT NULL DEFAULT 0,
    zzsl numeric(16,2) NOT NULL DEFAULT 0,
    zzse numeric(16,2) NOT NULL DEFAULT 0,
    wbse numeric(16,2) NOT NULL DEFAULT 0,
    tp1 character varying(400) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    clyt character varying(20) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    djrq timestamp without time zone,
    bz character varying(400) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    mhh integer NOT NULL DEFAULT 0,
    sfsh boolean NOT NULL DEFAULT false,
    sfdj boolean NOT NULL DEFAULT false,
    CONSTRAINT djchm_pkey PRIMARY KEY (mid)
)

TABLESPACE pg_default;

ALTER TABLE IF EXISTS public.djchm
    OWNER to postgres;
    
    -- Table: public.mlch

-- DROP TABLE IF EXISTS public.mlch;

CREATE TABLE IF NOT EXISTS public.mlch
(
    chdh character varying(30) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    bjdh character varying(5) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    sjdh character varying(30) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    chmc character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    ggxl character varying(40) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    gymc character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    xh1 character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    xh2 character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    xh3 character varying(400) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    gg1 character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    gg2 character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    gg3 character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    bzdw character varying(40) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    jldw character varying(40) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    mllb character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    ckmc character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    zjm character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    jc smallint NOT NULL DEFAULT 0,
    dcmx boolean NOT NULL DEFAULT false,
    sfqy boolean NOT NULL DEFAULT false,
    CONSTRAINT mlch_pkey PRIMARY KEY (chdh)
)

TABLESPACE pg_default;

ALTER TABLE IF EXISTS public.mlch
    OWNER to postgres;
    
    -- Table: public.mlchxm

-- DROP TABLE IF EXISTS public.mlchxm;

CREATE TABLE IF NOT EXISTS public.mlchxm
(
    chxh character varying(20) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    sjdh character varying(20) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    bjdh character varying(20) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    jc integer NOT NULL DEFAULT 0,
    chdh character varying(30) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    chmc character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    xh1 character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    xh2 character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    xh3 character varying(400) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    gg1 character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    gg2 character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    gg3 character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    bzdw character varying(40) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    mjsl numeric(16,2) NOT NULL DEFAULT 0,
    jldw character varying(40) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    jhjj numeric(16,2) NOT NULL DEFAULT 0,
    jhsj numeric(16,2) NOT NULL DEFAULT 0,
    bzcl numeric(16,2) NOT NULL DEFAULT 0,
    jgdj numeric(16,2) NOT NULL DEFAULT 0,
    jhpl numeric(16,2) NOT NULL DEFAULT 0,
    mllb character varying(20) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    zjm character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    ckmc character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    scdw character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    ghdw character varying(200) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    sydw character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    sxyzbj character varying(10) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    sxsh boolean NOT NULL DEFAULT false,
    sxshry character varying(40) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    jgyzbj character varying(10) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    jgsh boolean NOT NULL DEFAULT false,
    jgshry character varying(40) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    clyzbj character varying(10) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    clsh boolean NOT NULL DEFAULT false,
    clshry character varying(40) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    xmsh boolean NOT NULL DEFAULT false,
    xmshry character varying(40) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    sfsd boolean NOT NULL DEFAULT false,
    sfqy boolean NOT NULL DEFAULT false,
    CONSTRAINT mlchxm_pkey PRIMARY KEY (chxh)
)

TABLESPACE pg_default;

ALTER TABLE IF EXISTS public.mlchxm
    OWNER to postgres;
    
    -- Table: public.mlny

-- DROP TABLE IF EXISTS public.mlny;

CREATE TABLE IF NOT EXISTS public.mlny
(
    ny character(6) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::bpchar,
    CONSTRAINT mlny_pkey PRIMARY KEY (ny)
)

TABLESPACE pg_default;

ALTER TABLE IF EXISTS public.mlny
    OWNER to postgres;
    
    -- Table: public.utzzch

-- DROP TABLE IF EXISTS public.utzzch;

CREATE TABLE IF NOT EXISTS public.utzzch
(
    id integer NOT NULL DEFAULT nextval('utzzch_id_seq'::regclass),
    ny character(6) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::bpchar,
    ckmc character varying(100) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    chxh character varying(20) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    jldw character varying(20) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    qcjs integer NOT NULL DEFAULT 0,
    qcsl numeric(16,2) NOT NULL DEFAULT 0,
    qcdj numeric(16,2) NOT NULL DEFAULT 0,
    qcje numeric(16,2) NOT NULL DEFAULT 0,
    xqjs integer NOT NULL DEFAULT 0,
    xqsl numeric(16,2) NOT NULL DEFAULT 0,
    xqje numeric(16,2) NOT NULL DEFAULT 0,
    jhjs integer NOT NULL DEFAULT 0,
    jhsl numeric(16,2) NOT NULL DEFAULT 0,
    jhje numeric(16,2) NOT NULL DEFAULT 0,
    srjs integer NOT NULL DEFAULT 0,
    srsl numeric(16,2) NOT NULL DEFAULT 0,
    srje numeric(16,2) NOT NULL DEFAULT 0,
    fcjs integer NOT NULL DEFAULT 0,
    fcsl numeric(16,2) NOT NULL DEFAULT 0,
    fcje numeric(16,2) NOT NULL DEFAULT 0,
    jcjs integer NOT NULL DEFAULT 0,
    jcsl numeric(16,2) NOT NULL DEFAULT 0,
    jcdj numeric(16,2) NOT NULL DEFAULT 0,
    jcje numeric(16,2) NOT NULL DEFAULT 0,
    CONSTRAINT utzzch_pkey PRIMARY KEY (id)
)

TABLESPACE pg_default;

ALTER TABLE IF EXISTS public.utzzch
    OWNER to postgres;
    
    -- Table: public.utmxch

-- DROP TABLE IF EXISTS public.utmxch;

CREATE TABLE IF NOT EXISTS public.utmxch
(
    id integer NOT NULL DEFAULT nextval('utmxch_id_seq'::regclass),
    ny character(6) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::bpchar,
    rq character varying(20) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    oid character varying(30) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    zy character varying(400) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    jldw character varying(20) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    rksl numeric(18,2) NOT NULL DEFAULT 0,
    rkdj numeric(18,2) NOT NULL DEFAULT 0,
    rkje numeric(18,2) NOT NULL DEFAULT 0,
    cksl numeric(18,2) NOT NULL DEFAULT 0,
    ckdj numeric(18,2) NOT NULL DEFAULT 0,
    ckje numeric(18,2) NOT NULL DEFAULT 0,
    jcsl numeric(18,2) NOT NULL DEFAULT 0,
    jcdj numeric(18,2) NOT NULL DEFAULT 0,
    jcje numeric(18,2) NOT NULL DEFAULT 0,
    pcxh character varying(10) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    zzxh integer NOT NULL DEFAULT 0,
    CONSTRAINT utmxch_pkey PRIMARY KEY (id)
)

TABLESPACE pg_default;

ALTER TABLE IF EXISTS public.utmxch
    OWNER to postgres;

四、主要函数

SQL 复制代码
-- FUNCTION: public.x9_chxh_dj(character varying, character varying, character varying)

-- DROP FUNCTION IF EXISTS public.x9_chxh_dj(character varying, character varying, character varying);

CREATE OR REPLACE FUNCTION public.x9_chxh_dj(
	ssdqyh character varying,
	ssdjmc character varying,
	ssdjoid character varying)
    RETURNS boolean
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$
   -- Description:	审核存货序号
   -- 1、返回值为货号是否非法 
   -- 2、直接改单据行中的CHXH。
   -- 3、只要有一行非法单据不应通过审核。本版将以前版本中的数值改为字符。如遇不足8位的,直接改为8位字符串。
   -- 4、生成货号
   -- 5、每次审核一张单据
   -- 6、每件数据即包装大小应在规格中加以区别
DECLARE
   ssmsg text;ssdet text;sstname text;sshint text;ssctt text; --错误处理
	rs bool;
	sssfzj bool;
	ssscdw varchar(50);
	ssghdw varchar(100);
	rd record;
	cs_djm refcursor;
	ssixh int;
	ssichxh varchar(20);
BEGIN
	-- 声明游标
	rs:=false;
	IF $2 = '销售订单' OR $2 = '采购订单' OR $2 = '委外订单' OR
		$2 = '盘点入库单' OR $2 = '采购入库单' OR $2 = '完工入库单' OR $2 = '委外入库单' THEN
		OPEN cs_djm FOR
		SELECT mid, chxh, chdh, xh1,xh2,xh3, gg1, gg2, gg3,jldw,bzdw,mjsl
			FROM  djchm	WHERE (oid = $3);
		sssfzj:=true;
	END IF;
	IF $2 = '销售出库单' OR $2 = '领用出库单' OR $2 = '委外出库单' OR $2 = '生产计划单' OR $2 = '需求计算单' THEN
		OPEN cs_djm  FOR
		SELECT mid, chxh, chdh, xh1,xh2,xh3, gg1, gg2, gg3,jldw,bzdw,mjsl
			FROM  djchm	WHERE (oid = $3);
		sssfzj:=false;
	END IF;
	IF $2 = '成本核算单' THEN
		OPEN cs_djm FOR
		SELECT mid, chxh, chdh, xh1,xh2,xh3,gg1, gg2, gg3,jldw,'' AS bzdw,0 AS mjsl
			FROM  djcbhsm	WHERE (oid = $3);
		sssfzj:=false;
	END IF;
	IF $2 = '工序统计单' THEN
		OPEN cs_djm FOR
		SELECT mid, chxh, chdh, xh1,xh2,xh3,gg1, gg2, gg3,jldw ,'' AS bzdw,0 AS mjsl
			FROM  djgxtjm	WHERE (oid = $3);
		sssfzj:=false;
	END IF;
	IF $2 = '质量检验单' THEN
		OPEN cs_djm FOR
		SELECT mid, chxh, chdh, xh1,xh2,xh3,gg1, gg2, gg3,jldw,'' AS bzdw,0 AS mjsl
			FROM  djjym	WHERE (oid = $3);
		sssfzj:=false;
	END IF;
	LOOP
		FETCH cs_djm INTO rd;
		EXIT WHEN NOT FOUND;
		-- 这里使用的是全部型号规格字段,根据需要可以减少
		IF exists(SELECT chxh FROM mlchxm WHERE chdh = rd.chdh AND
			xh1 = rd.xh1 AND xh2 = rd.xh2 AND xh3 = rd.xh3 AND
			gg1 = rd.gg1 AND gg2 = rd.gg2 AND gg3 = rd.gg3 AND jldw = rd.jldw) THEN
			-- 正确无误。启用存货目录。不需要对当前单据内容做出更改。
			UPDATE mlch SET sfqy = true WHERE rd.chdh LIKE (chdh || '%') AND sfqy = false;
			-- 启用目录
		ELSE
			-- 允许增加
			IF sssfzj = true THEN
				ssixh:=NULL;
				ssixh:=x9_djmid('mlchxm','chxh');
				IF NOT ssixh IS NULL THEN
					ssichxh:=to_char(ssixh,'FM00000000');
					SELECT scdw,ghdw INTO ssscdw,ssghdw FROM mlchxm WHERE chdh = rd.chdh ORDER BY chxh DESC LIMIT 1;
					INSERT INTO mlchxm (chxh,sjdh,bjdh,chdh,chmc,xh1,xh2,xh3,gg1,gg2,gg3,
							jldw,bzdw,mjsl,ckmc,mllb,ghdw,scdw,zjm,sfsd,jc)
						SELECT ssichxh AS chxh,'' AS sjdh,ssichxh AS bjdh,chdh,chmc,rd.xh1,rd.xh2,rd.xh3,
							rd.gg1,rd.gg2,rd.gg3,jldw,bzdw,rd.mjsl,ckmc,mllb,ssghdw,ssscdw,zjm,true AS sfsd,1 as jc 
						FROM mlch	WHERE (chdh = rd.chdh);
					UPDATE mlch SET sfqy = TRUE WHERE rd.chdh LIKE (chdh || '%') AND sfqy=false; -- 启用目录
            END IF;
			END IF;
		END IF;
		ssichxh:=NULL;
		IF exists(SELECT chdh FROM mlch WHERE chdh = rd.chdh AND dcmx = true) THEN
			SELECT chxh INTO ssichxh FROM mlchxm
				WHERE chdh = rd.chdh AND xh1 = rd.xh1 AND xh2 = rd.xh2 AND xh3 = rd.xh3 AND
					gg1 = rd.gg1 AND gg2 = rd.gg2 AND gg3 = rd.gg3 AND jldw = rd.jldw;
		END IF;
		IF ssichxh IS NULL THEN
			 ssichxh:='';
			 rs:=true;
		END IF;
		IF ssichxh <> rd.chxh OR ssichxh = '' THEN
         IF $2 = '销售订单' OR $2 = '需求计算单' OR
            $2 = '采购订单' OR $2 = '委外订单' OR $2 = '生产计划单' OR
            $2 = '盘点入库单' OR $2 = '采购入库单' OR $2 = '完工入库单' OR $2 = '委外入库单' OR
            $2 = '销售出库单' OR $2 = '领用出库单' OR $2 = '委外出库单' THEN
            UPDATE djchm SET chxh = ssichxh WHERE mid = rd.mid;
         END IF;
         IF $2 = '成本核算单' THEN
            UPDATE djcbhsm SET chxh = ssixh WHERE mid = rd.mid;
         END IF;
         IF $2 = '工序统计单' THEN
            UPDATE djgxtjm SET chxh = ssixh WHERE mid = rd.mid;
         END IF;
         IF $2 = '质量检验单' THEN
            UPDATE djjym SET chxh = ssixh WHERE mid = rd.mid;
         END IF;
		END IF;
	END LOOP;
	CLOSE cs_djm;
	RETURN rs;
   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 false;   
END;
$BODY$;

ALTER FUNCTION public.x9_chxh_dj(character varying, character varying, character varying)
    OWNER TO postgres;
    
    -- FUNCTION: public.x9_djdj(character varying, character varying, character varying, character varying)

-- DROP FUNCTION IF EXISTS public.x9_djdj(character varying, character varying, character varying, character varying);

CREATE OR REPLACE FUNCTION public.x9_djdj(
	ssdqyh character varying,
	ssbjmc character varying,
	ssdjmc character varying,
	ssdjoid character varying)
    RETURNS character varying
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$

   -- Description:	单据登记
   -- 完成返回登记人,否则返回错误信息
DECLARE
   sssfdj bool;
	ssdjjg varchar;			-- 登记结果
   rsxx varchar;
	ssglbj varchar(30);
BEGIN
	-- 一、非账项登记类单据,直接标记登记并返回当前用户,也可反登记
	IF $3 = '质量检验单' THEN
		RETURN $1;
	END IF;
	IF $3 = '工序统计单' THEN
		RETURN $1;
	END IF;
	-- 二 、登记前验证 可以多次验证 只验证当前单据涉及物料
	IF $3 = '销售订单' OR $3 = '需求计算单' OR
         $3 = '采购订单' OR $3 = '委外订单' OR $3 = '生产计划单' OR
         $3 = '完工入库单' OR $3 = '委外入库单' OR $3 = '委外订单' OR
         $3 = '销售出库单' OR $3 = '领用出库单' OR $3 = '委外出库单'  THEN
		IF exists(SELECT chxh FROM mlchxm WHERE (chxh IN (SELECT chxh FROM djchm WHERE oid = $4))
							AND (sxyzbj <> '' OR clyzbj <> '' OR jgyzbj <> '')) THEN
			rsxx:='各类存货单据登记之前,请确定:' || chr(13) || chr(10)
				|| chr(13) || chr(10) || '正确设置物料的仓库名称、供货单位、生产单位;'
				|| chr(13) || chr(10) || '正确设置物料的标准存量、计划批量、具有包装单位物料的每件数量;'
				|| chr(13) || chr(10) || '正确设置物料的计划进价、计划售价、加工单价;'
				|| chr(13) || chr(10) || '单据名称:' || $3 || ',单据号:' || $4;
			RETURN rsxx;
		END IF;
	END IF;
	IF $3 = '盘点入库单' THEN
      IF exists(SELECT chxh FROM djchm WHERE oid = $4 AND (rkdj = 0 OR rkje = 0)) THEN
         rsxx:= $3 || $4 || ',单据要求输入入库单价和金额!' ;
         RETURN rsxx;
      END IF;
	END IF;
	IF $3 = '采购入库单' THEN
		IF exists(SELECT chxh FROM djchm WHERE oid = $4 AND (cgdj = 0 OR cgje = 0)) THEN
			rsxx:=$3 || $4 || ',单据要求输入入库单价和金额!' ;
			RETURN rsxx;
		END IF;
	END IF;
	IF $3 = '需求计算单' THEN
		SELECT glbj INTO ssglbj FROM djcho WHERE oid = $4;
		IF exists(SELECT oid FROM djcho WHERE djmc = '销售订单' AND oid = ssglbj AND glbj <> '') THEN
				rsxx:='销售订单' || ssglbj || ',已经登记过关联的需求计算单,本单不能重复登记!';
			RETURN rsxx;
		END IF;
	END IF;
	-- 三、登记
		-- 存货单据 需求、计划、完成、交付
	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
		SELECT CASE WHEN djr <> '' OR shr = '' THEN true ELSE false END INTO sssfdj FROM djcho WHERE oid = $4;
		IF sssfdj = true THEN
			rsxx:=$3 || $4 || '已经登记或未经审核,本单据不支持反登记!';
		ELSE
         IF $3 = '销售订单' OR $3 = '需求计算单' THEN
            ssdjjg:=x9_djdj_01xq($1,$3,$4);
         END IF;
         IF $3 = '采购订单' OR $3 = '委外订单' OR $3 = '生产计划单' THEN
            ssdjjg:=x9_djdj_02jh($1,$3,$4);
         END IF;
         IF $3 = '采购入库单' OR $3 = '完工入库单' OR $3 = '委外入库单' OR $3 = '盘点入库单' THEN
            ssdjjg:=x9_djdj_03wc($1,$3,$4);
         END IF;
         IF $3 = '销售出库单' OR $3 = '领用出库单' OR $3 = '委外出库单' THEN
            ssdjjg:=x9_djdj_04jf($1,$3,$4);
         END IF;
         IF ssdjjg = '登记完成' THEN
            UPDATE djcho SET djrq = CURRENT_DATE WHERE oid = $4;
            rsxx:=$1;
         ELSE
            rsxx:= $3 || $4 || '登记未能完成'|| chr(10)||ssdjjg ;
         END IF;
		END IF;
		RETURN rsxx;
	END IF;
	IF $3 = '计件工作量统计表' THEN
      IF exists(SELECT oid FROM gzjjo WHERE shr = '' AND oid = $4) THEN
         rsxx:=$3 || $4 || '未经审核';
      ELSE
         rsxx = $1;
      END IF;
      RETURN rsxx;
	END IF;
	IF $3 = '收款单' OR $3 = '付款单' THEN
      SELECT CASE WHEN djr <> '' OR shr = '' THEN true ELSE false END into sssfdj FROM djcno WHERE oid = $4;
      IF sssfdj = true THEN
         rsxx:= $3 || $4 || '已经登记或未经审核';
      ELSE
         ssdjjg:=x9_djdj_06cn($1,$3,$4);
         IF ssdjjg = '登记完成' THEN
            rsxx:= $1;
         ELSE
            rsxx:= $3 || $4 || '登记未能完成'|| chr(10)||ssdjjg ;
         END IF ;
      END IF;
      RETURN rsxx;
	END IF;
	IF $3 = '记账凭证' THEN
			SELECT CASE WHEN djr <> '' THEN true ELSE false END INTO sssfdj FROM djjzpzo WHERE oid = $4;
			IF sssfdj = true THEN
				-- 反记账
				ssdjjg:=x9_djdj_05jzfx($1,$3,$4);
            IF ssdjjg = '登记完成' THEN
               rsxx:= $1;
            ELSE
               rsxx:= $3 || $4 || '反记账未能完成'|| chr(10)||ssdjjg ;
            END IF ;
			ELSE
				ssdjjg:=x9_djdj_05jz($1,$3,$4);
            IF ssdjjg = '登记完成' THEN
               rsxx:= $1;
            ELSE
               rsxx:= $3 || $4 || '登记未能完成'|| chr(10)||ssdjjg ;
            END IF ;
			END IF;
			RETURN rsxx;
	END IF;
	IF $3 = '成本归集单' THEN
		SELECT CASE WHEN djr <> '' THEN true ELSE false END INTO sssfdj FROM djcbgjo WHERE oid = $4;
		IF sssfdj = true THEN
         DELETE FROM djcbgjs where oid=$4;
      END IF;
      rsxx:=$1;
		RETURN rsxx;
	END IF;
	IF $3 = '成本核算单' THEN
		SELECT CASE WHEN djr <> '' THEN true ELSE false END INTO sssfdj FROM djcbhso WHERE oid = $4;
		IF sssfdj = true THEN
         update djcbhsm set cpcb=0,zjcl=0,zjrg=0,jjcl=0,jjrg=0,zzfy=0,glfy=0,cpml=0,dwcb=0 where oid=$4;
      END IF;
		rsxx:=$1;
		RETURN rsxx;
	END IF;
END;
$BODY$;

ALTER FUNCTION public.x9_djdj(character varying, character varying, character varying, character varying)
    OWNER TO postgres;

-- FUNCTION: public.x9_djdj_01xq(character varying, character varying, character varying)

-- DROP FUNCTION IF EXISTS public.x9_djdj_01xq(character varying, character varying, character varying);

CREATE OR REPLACE FUNCTION public.x9_djdj_01xq(
	ssdqyh character varying,
	ssdjmc 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; --错误处理
	rd record;
	ssny char(6);ssjhjj decimal(16,2);ssjcdj decimal(16,2);ssglbj varchar(30);
	cs_xq CURSOR FOR
		SELECT dj.mid,dj.chxh,dj.bzjs,dj.xqsl,dj.xqje,xm.ckmc
			FROM djchm dj INNER JOIN mlchxm xm ON dj.chxh = xm.chxh WHERE dj.oid = $3;
BEGIN
	-- 单据头数据 单据头不输入仓库名称,直接取自MLCHXM
	-- 标记登记\更新单据体日期
   ssny:=x9_dqny();
	IF $2 = '销售订单' THEN
      -- select * from djchm
		-- 优先使用结存单价,其次使用计划进价
		UPDATE djchm SET xqsl = xssl,sfdj = true,djrq = CURRENT_DATE WHERE oid = $3;
		UPDATE djchm dd SET xqdj = zz.jcdj FROM utzzch zz where zz.chxh = dd.chxh
			AND zz.jcdj > 0 AND dd.oid = $3 AND zz.ny = ssny;
		UPDATE djchm dd SET xqdj = xm.jhjj FROM mlchxm xm where xm.chxh = dd.chxh
			AND dd.oid = $3 AND dd.xqdj = 0;
		UPDATE djchm SET xqje = xqsl * xqdj WHERE oid = $3;
	END IF;
	IF $2 = '需求计算单' THEN
		SELECT glbj into ssglbj FROM djcho WHERE oid = $3 ;
		UPDATE djcho SET glbj = $3 WHERE oid = ssglbj;		-- 销售订单中标记需求计算单号
      UPDATE djchm SET sfdj = true,djrq = CURRENT_DATE WHERE oid = $3;
		UPDATE djchm dd SET xqdj = zz.jcdj FROM utzzch zz where zz.chxh = dd.chxh
			AND zz.jcdj > 0 AND dd.oid = $3 AND zz.ny = ssny;
		UPDATE djchm dd SET xqdj = xm.jhjj FROM mlchxm xm WHERE xm.chxh = dd.chxh
			AND dd.oid = $3 AND dd.xqdj = 0;
		UPDATE djchm SET xqje = xqsl * xqdj WHERE oid = $3;
		WITH sjxm (chxh,sydw) AS
			(SELECT dj.chxh,CASE mllb WHEN '自制' THEN scdw WHEN '外协' THEN ghdw ELSE '' END AS sydw
				FROM mlchxm xm INNER JOIN djchm dj ON dj.clyt = xm.chxh
				WHERE dj.oid = $3 AND dj.clyt <> '')
		UPDATE mlchxm xm SET sydw = sj.sydw FROM sjxm sj where sj.chxh = xm.chxh AND sj.sydw <> '';
	END IF;
	-- 标记登记
	UPDATE djcho SET djr = $1 WHERE oid = $3;
	-- 声明游标CS_XQ
	OPEN cs_xq;
	LOOP
		FETCH cs_xq INTO rd;
		EXIT WHEN NOT FOUND;
			-- 增加新账
			IF NOT exists(SELECT * FROM utzzch WHERE ny = ssny AND ckmc = rd.ckmc AND chxh = rd.chxh	) THEN
				INSERT INTO utzzch(ny,ckmc,chxh) VALUES (ssny,rd.ckmc,rd.chxh);
			END IF;
			-- 登记总账
			UPDATE utzzch SET xqjs = xqjs + rd.bzjs,xqsl = xqsl + rd.xqsl,xqje = xqje + rd.xqje
				WHERE ny = ssny AND ckmc = rd.ckmc	AND chxh = rd.chxh;
	END LOOP;
	CLOSE cs_xq;
	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$;

ALTER FUNCTION public.x9_djdj_01xq(character varying, character varying, character varying)
    OWNER TO postgres;

-- FUNCTION: public.x9_djdj_02jh(character varying, character varying, character varying)

-- DROP FUNCTION IF EXISTS public.x9_djdj_02jh(character varying, character varying, character varying);

CREATE OR REPLACE FUNCTION public.x9_djdj_02jh(
	ssdqyh character varying,
	ssdjmc 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; --错误处理
	rd record;
	ssny char(6);
	ssjhjj decimal(16,2);
	ssjcdj decimal(16,2);
	cs_jh CURSOR FOR
		SELECT dj.mid,dj.chxh,dj.bzjs,dj.jhsl,dj.jhje,dj.jgsl,dj.jgje,dj.cgsl,dj.cgje,dj.zzse,xm.ckmc
			FROM djchm dj INNER JOIN mlchxm xm ON dj.chxh = xm.chxh
			WHERE dj.oid = $3;

BEGIN
	-- 单据头数据 不在单据头中输入仓库名称,直接取自MLCHXM
	-- 标记登记\更新单据体日期
	UPDATE djchm SET sfdj = true,djrq = CURRENT_DATE WHERE oid = $3;
	-- 标记登记
	UPDATE djcho SET djr = $1 WHERE oid = $3;
	IF $2 = '采购订单' THEN
		UPDATE djchm SET jhsl = cgsl,jhdj = (cgje - zzse) / cgsl,jhje = cgje - zzse WHERE oid = $3;
	END IF;
	ssny:=x9_dqny();
	OPEN cs_jh;
	LOOP
		FETCH cs_jh INTO rd;
		EXIT WHEN NOT FOUND;
		-- 增加新账
		IF NOT exists(SELECT * FROM utzzch WHERE ny = ssny AND ckmc = rd.ckmc AND chxh = rd.chxh	) THEN
			INSERT INTO utzzch(ny,ckmc,chxh) VALUES (ssny,rd.ckmc,rd.chxh);
		END IF;
		-- 登记总账
		IF $2 = '采购订单' THEN
			UPDATE utzzch SET jhjs = jhjs + rd.bzjs,jhsl = jhsl + rd.jhsl,jhje = jhje + rd.jhje
				WHERE ny = ssny AND ckmc = rd.ckmc	AND chxh = rd.chxh;
		END IF;
		IF $2 = '委外订单' THEN
			-- 委外订单,输入JGJS,JGSL,JGDJ,JGJE,加工数在总账中不体现,只登记计划数:JHJE,JHSL,JHDJ,JHJE.
			-- 计划进价为全价,含加工费。先取结存单价,没有取计划进价,所以计划数不涉及税额
			SELECT jhjj INTO ssjhjj FROM mlchxm WHERE chxh = rd.chxh;
			SELECT jcdj INTO ssjcdj FROM utzzch WHERE ny = ssny AND ckmc = rd.ckmc AND chxh = rd.chxh;
			rd.jhje:=x9_iif(ssjcdj > 0,ssjcdj,ssjhjj) * rd.jgsl;
			UPDATE utzzch SET jhjs = jhjs + rd.bzjs,jhsl = jhsl + rd.jgsl,jhje = jhje + rd.jhje
				WHERE ny = ssny AND ckmc = rd.ckmc	AND chxh = rd.chxh;
			UPDATE djchm SET jhsl = jgsl,jhdj = CASE WHEN ssjcdj > 0 THEN ssjcdj ELSE ssjhjj END,
				jhje = rd.jhje WHERE mid = rd.mid;
		END IF;
		IF $2 = '生产计划单' THEN
			-- 计划进价为全价,含加工费。先取结存单价,没有取计划进价
			SELECT jhjj INTO ssjhjj FROM mlchxm WHERE chxh = rd.chxh;
			SELECT jcdj INTO ssjcdj FROM utzzch WHERE ny = ssny AND ckmc = rd.ckmc AND chxh = rd.chxh;
			rd.jhje:=x9_iif(ssjcdj > 0,ssjcdj,ssjhjj) * rd.jhsl;
			UPDATE utzzch SET jhjs = jhjs + rd.bzjs,jhsl = jhsl + rd.jhsl,jhje = jhje + rd.jhje
				WHERE ny = ssny AND ckmc = rd.ckmc	AND chxh = rd.chxh;
			UPDATE djchm SET jhdj = CASE WHEN ssjcdj > 0 THEN ssjcdj ELSE ssjhjj END,
				jhje = rd.jhje WHERE mid = rd.mid;
		END IF;
	END LOOP;
	CLOSE cs_jh;
	IF $2 = '生产计划单' THEN
		--生成车间作业计划
      INSERT INTO utcjzy (mid,oid,ny,rq,chxh,chdh,chmc,xh1,xh2,xh3,gg1,ckmc,scbm,jfrq,jldw,
					jhsl,pcsl,pcrq,pcyq,sfsh,shr,mhh)
			SELECT m.mid,m.oid,m.ny,o.rq,m.chxh,m.chdh,m.chmc,m.xh1,m.xh2,m.xh3,m.gg1,
				o.ckmc,o.scbm,o.jfrq,m.jldw,m.jhsl,m.jhsl AS pcsl,o.rq AS pcrq,'' AS pcyq,sfsh,shr,mid AS mhh
				FROM djcho o INNER JOIN djchm m ON o.oid = m.oid WHERE o.oid = $3;
	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$;

ALTER FUNCTION public.x9_djdj_02jh(character varying, character varying, character varying)
    OWNER TO postgres;
    
    -- FUNCTION: public.x9_djdj_03wc(character varying, character varying, character varying)

-- DROP FUNCTION IF EXISTS public.x9_djdj_03wc(character varying, character varying, character varying);

CREATE OR REPLACE FUNCTION public.x9_djdj_03wc(
	ssdqyh character varying,
	ssdjmc 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; --错误处理
	rd record;
	ssny char(6);ssjhjj decimal(16,2);ssjcdj decimal(16,2);ssrkdj decimal(16,2);
	ssjswb varchar(20);ssckmc varchar(50);sswldw varchar(150);
	cs_wc CURSOR FOR
		SELECT mid,chxh,bzjs,rksl,rkje,jgje,cgje,wbje,zzse
			FROM djchm WHERE oid = $3;
BEGIN
	-- 单据头数据
	SELECT jswb,ckmc,wldw INTO ssjswb,ssckmc,sswldw FROM djcho WHERE oid = $3 ;
	-- 标记登记\更新单据体日期
	UPDATE djchm SET sfdj = true,djrq = CURRENT_DATE WHERE oid = $3;
	IF $2 = '委外入库单' THEN
		UPDATE djchm SET rksl = jgsl WHERE oid = $3;
	END IF;
	IF $2 = '采购入库单' THEN
		UPDATE djchm SET rksl = cgsl,rkdj = (cgje - zzse) / cgsl,rkje = cgje - zzse WHERE oid = $3;
	END IF;
	-- 标记登记
	UPDATE djcho SET djr = $1 WHERE oid = $3;
	-- 声明变量 单据体数据
	ssny:=x9_dqny();
	OPEN cs_wc;
	LOOP
		FETCH cs_wc INTO rd;
		EXIT WHEN NOT FOUND;
      -- 增加新账
      IF NOT exists(SELECT * FROM utzzch WHERE ny = ssny AND ckmc = ssckmc AND chxh = rd.chxh	) THEN
         INSERT INTO utzzch(ny,ckmc,chxh) VALUES (ssny,ssckmc,rd.chxh);
      END IF;
      IF sswldw <> '' AND (NOT exists(SELECT * FROM utzzwl WHERE ny = ssny AND wldw = sswldw)) THEN
         INSERT INTO utzzwl(ny,wldw,wbmc) VALUES (ssny,sswldw,ssjswb);
         UPDATE mlwl SET sfqy = true WHERE sfqy = false AND sswldw LIKE wldh || '%';		-- 启用目录
      END IF;
      -- 登记总账
      IF $2 = '盘点入库单' THEN
         UPDATE utzzch SET srjs = srjs + rd.bzjs,jcjs = jcjs + rd.bzjs,srsl = srsl + rd.rksl,jcsl = jcsl + rd.rksl,
            srje = srje + rd.rkje,jcje = jcje + rd.rkje
         WHERE ny = ssny AND ckmc = ssckmc AND chxh = rd.chxh;
      END IF;
      IF $2 = '采购入库单' THEN
         -- 金额含税 存货账不含税,往来账含税,外币金额为含税
         UPDATE utzzch SET srjs = srjs + rd.bzjs,jcjs = jcjs + rd.bzjs,srsl = srsl + rd.rksl,
               jcsl = jcsl + rd.rksl,srje = srje + rd.rkje,jcje = jcje + rd.rkje
            WHERE ny = ssny AND ckmc = ssckmc	AND chxh = rd.chxh;
         UPDATE utzzwl SET dffs = dffs + rd.cgje,ymye = ymye - rd.cgje,
               wbdf = wbdf + rd.wbje,wbym = wbym - rd.wbje
            WHERE ny = ssny AND wldw = sswldw;
      END IF;
      IF $2 = '完工入库单' THEN
         -- 只输入数量。
         -- 计划进价为全价,含加工费。先取结存单价,没有再取计划进价
         SELECT jhjj INTO ssjhjj FROM mlchxm WHERE chxh = rd.chxh;
         SELECT jcdj INTO ssjcdj FROM utzzch WHERE ny = ssny AND ckmc = ssckmc AND chxh = rd.chxh;
         ssrkdj:=x9_iif(ssjcdj > 0,ssjcdj,ssjhjj);
         rd.rkje:=ssrkdj * rd.rksl;
         UPDATE utzzch SET srjs = srjs + rd.bzjs,jcjs = jcjs + rd.bzjs,srsl = srsl + rd.rksl,jcsl = jcsl + rd.rksl,
               srje = srje + rd.rkje,jcje = jcje + rd.rkje
            WHERE ny = ssny AND ckmc = ssckmc	AND chxh = rd.chxh;
         UPDATE djchm SET rkdj = ssrkdj,rkje = rd.rkje WHERE mid = rd.mid;
      END IF;
      IF $2 = '委外入库单' THEN
         -- 计划进价为成本价,不含税,含加工费。先取结存单价,没有取计划进价
         -- 加工金额为含税,委外单位无外币结算
         SELECT jhjj INTO ssjhjj FROM mlchxm WHERE chxh = rd.chxh;
         SELECT jcdj INTO ssjcdj FROM utzzch WHERE ny = ssny AND ckmc = ssckmc AND chxh = rd.chxh;
         ssrkdj:=x9_iif(ssjcdj > 0,ssjcdj,ssjhjj);
         rd.rkje:=ssrkdj * rd.rksl;
         UPDATE utzzch SET srjs = srjs + rd.bzjs,jcjs = jcjs + rd.bzjs,srsl = srsl + rd.rksl,jcsl = jcsl + rd.rksl,
               srje = srje + rd.rkje,jcje = jcje + rd.rkje
            WHERE ny = ssny AND ckmc = ssckmc	AND chxh = rd.chxh;
         UPDATE djchm SET rkdj = ssrkdj,rkje = rd.rkje WHERE mid = rd.mid;
         UPDATE utzzwl SET dffs = dffs + rd.jgje,ymye = ymye - (rd.jgje)
            WHERE ny = ssny AND wldw = sswldw;
      END IF;
      UPDATE utzzch SET jcdj = jcje / jcsl
         WHERE ny = ssny AND ckmc = ssckmc	AND chxh = rd.chxh AND jcsl <> 0;
      UPDATE mlck SET sfqy = true WHERE sfqy = false AND ssckmc LIKE ckmc || '%';		-- 启用仓库目录
   END LOOP;
	CLOSE cs_wc;
	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$;

ALTER FUNCTION public.x9_djdj_03wc(character varying, character varying, character varying)
    OWNER TO postgres;

-- FUNCTION: public.x9_djdj_04jf(character varying, character varying, character varying)

-- DROP FUNCTION IF EXISTS public.x9_djdj_04jf(character varying, character varying, character varying);

CREATE OR REPLACE FUNCTION public.x9_djdj_04jf(
	ssdqyh character varying,
	ssdjmc 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; --错误处理
	rd record;
	ssny char(6);ssjcdj decimal(16,2);
	ssjswb varchar(20);ssckmc varchar(50);sswldw varchar(150);
	cs_jf CURSOR FOR
		SELECT mid,chxh,bzjs,cksl,ckje,xssl,xsje,wbje,zzse,wbse
			FROM djchm WHERE oid = $3;
BEGIN
	-- 单据头数据
	SELECT jswb,ckmc,wldw INTO ssjswb,ssckmc,sswldw FROM djcho WHERE oid = $3 ;
	-- 标记登记\更新单据体日期
	UPDATE djchm SET sfdj = true,djrq = CURRENT_DATE WHERE oid = $3;
	-- 标记登记
	UPDATE djcho SET djr = $1 WHERE oid = $3;
	-- 声明变量 单据体数据
	 ssny:=x9_dqny();
	OPEN cs_jf;
	LOOP
		FETCH cs_jf INTO rd;
		EXIT WHEN NOT FOUND;
      -- 增加新账
      IF NOT exists(SELECT * FROM utzzch WHERE ny = ssny AND ckmc = ssckmc	AND chxh = rd.chxh	) THEN
         SELECT jhjj INTO ssjcdj FROM mlchxm WHERE chxh = rd.chxh ;
         INSERT INTO utzzch(ny,ckmc,chxh,jcdj) VALUES (ssny,ssckmc,rd.chxh,ssjcdj);
      END IF;
      IF sswldw <> '' AND (NOT exists(SELECT * FROM utzzwl WHERE ny = ssny AND wldw = sswldw)) THEN
         INSERT INTO utzzwl(ny,wldw,wbmc) VALUES (ssny,sswldw,ssjswb);
         UPDATE mlwl SET sfqy = true WHERE sfqy = false AND sswldw LIKE wldh || '%';		-- 启用目录
      END IF;
      -- 登记总账和单据中的出库单价、金额
      IF $2 = '领用出库单' THEN
         SELECT jcdj INTO ssjcdj FROM utzzch WHERE ny = ssny AND ckmc = ssckmc	AND chxh = rd.chxh;
         UPDATE utzzch SET fcjs = fcjs + rd.bzjs,jcjs = jcjs - rd.bzjs,fcsl = fcsl + rd.cksl,
               jcsl = jcsl - rd.cksl,fcje = fcje + rd.cksl * ssjcdj,jcje = jcje - rd.cksl * ssjcdj
         WHERE ny = ssny AND ckmc = ssckmc	AND chxh = rd.chxh;
         UPDATE djchm SET ckdj = ssjcdj,ckje = rd.cksl * ssjcdj WHERE mid = rd.mid;
      END IF;
      IF 	$2 = '委外出库单' THEN
         SELECT jcdj INTO ssjcdj FROM utzzch WHERE ny = ssny AND ckmc = ssckmc	AND chxh = rd.chxh;
         UPDATE utzzch SET fcjs = fcjs + rd.bzjs,jcjs = jcjs - rd.bzjs,fcsl = fcsl + rd.cksl,
               jcsl = jcsl - rd.cksl,fcje = fcje + ssjcdj * rd.cksl,jcje = jcje - rd.cksl * ssjcdj
            WHERE ny = ssny AND ckmc = ssckmc	AND chxh = rd.chxh;
         UPDATE djchm SET ckdj = ssjcdj,ckje = rd.cksl * ssjcdj WHERE mid = rd.mid;
      END IF;
      IF $2 = '销售出库单' THEN
         IF NOT exists(SELECT * FROM utzzxs WHERE ny = ssny AND wldw = sswldw AND
            jswb = ssjswb AND chxh = rd.chxh	) THEN
               -- 增加新账,销售总账
            INSERT INTO utzzxs(ny,wldw,jswb,chxh) VALUES (ssny,sswldw,ssjswb,rd.chxh);
         END IF;
            -- 输入的是XSJS,XSSL,XSJE,需求登记CKJS,CKSL,CKJE和销售账项
            rd.cksl = rd.xssl;
            SELECT jcdj INTO ssjcdj FROM utzzch WHERE ny = ssny AND ckmc = ssckmc	AND chxh = rd.chxh;
            UPDATE utzzch SET fcjs = fcjs + rd.bzjs,jcjs = jcjs - rd.bzjs,fcsl = fcsl + rd.cksl,
                  jcsl = jcsl - rd.cksl,fcje = fcje + ssjcdj * rd.cksl,jcje = jcje - rd.cksl * ssjcdj
               WHERE ny = ssny AND ckmc = ssckmc	AND chxh = rd.chxh;
            UPDATE utzzxs SET xsjs = xsjs + rd.bzjs,xssl = xssl + rd.cksl,xsje = xsje + rd.xsje - rd.zzse,
                  xsse = xsse + rd.zzse,wbje = wbje + rd.wbje,wbse = wbse + rd.wbse
               WHERE ny = ssny AND wldw = sswldw AND chxh = rd.chxh;
            UPDATE djchm SET cksl = rd.cksl,ckdj = ssjcdj,ckje = rd.cksl * ssjcdj WHERE mid = rd.mid;
            UPDATE utzzwl SET jffs = jffs + rd.xsje,ymye = ymye + rd.xsje,
                        wbjf = wbjf + rd.wbje,wbym = wbym + rd.wbje
                     WHERE ny = ssny AND wldw = sswldw;
      END IF;
      UPDATE utzzch SET jcdj = jcje / jcsl
         WHERE ny = ssny AND ckmc = ssckmc	AND chxh = rd.chxh AND jcsl <> 0;
      UPDATE utzzxs SET xsdj = xsje / xssl
         WHERE ny = ssny AND wldw = sswldw AND chxh = rd.chxh AND xssl <> 0;
      UPDATE utzzxs xs SET xscbdj = ch.fcje / ch.fcsl,
            xscbje = CASE WHEN xs.xssl = ch.fcsl THEN ch.fcje ELSE xs.xssl * (ch.fcje / ch.fcsl) END
         FROM utzzch ch WHERE xs.ny = ch.ny AND xs.chxh = ch.chxh
            AND xs.ny = ssny AND xs.wldw = sswldw AND xs.chxh = rd.chxh AND ch.fcsl <> 0;
      UPDATE mlck SET sfqy = true WHERE sfqy = false AND ssckmc LIKE ckmc || '%';		-- 启用仓库目录
   END LOOP;
	CLOSE cs_jf;
	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$;

ALTER FUNCTION public.x9_djdj_04jf(character varying, character varying, character varying)
    OWNER TO postgres;
-- FUNCTION: public.x9_djdj_05jz(character varying, character varying, character varying)

-- DROP FUNCTION IF EXISTS public.x9_djdj_05jz(character varying, character varying, character varying);

CREATE OR REPLACE FUNCTION public.x9_djdj_05jz(
	ssdqyh character varying,
	ssdjmc 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; --错误处理
	rd record;
	ssrq date;
	ssny char(6);sssy char(6);sszzxh int;
	cs_jz CURSOR FOR
		SELECT kmdh,wldw,wlry,hsbm,hbmc,jfje, dfje, slwb,mid
		FROM djjzpzm
		WHERE (oid = $3) AND sfsh = true
		ORDER BY kmdh,wldw,wlry,hsbm,hbmc;

BEGIN
	-- 允许登记到本月及上月凭证
	-- 登记单据
	SELECT rq INTO ssrq FROM djjzpzo WHERE oid = $3 ;
	UPDATE djjzpzm SET rq = ssrq WHERE oid = $3;
	sssy:=x9_dqsy();
	SELECT ny INTO ssny FROM djjzpzo WHERE oid = $3;
	sszzxh:=0;
	OPEN cs_jz;
	LOOP
		FETCH cs_jz INTO rd;
		EXIT WHEN NOT FOUND;
		-- 登记会计总账
		IF exists(SELECT * FROM utzzkj WHERE ny = ssny AND kmdh = rd.kmdh AND wldw = rd.wldw
			AND wlry = rd.wlry AND hsbm = rd.hsbm AND hbmc = rd.hbmc) THEN
			IF rd.slwb <> 0 THEN
				IF rd.jfje <> 0 THEN
					UPDATE utzzkj SET sljf = sljf + rd.slwb,slym = slym + rd.slwb
						WHERE ny = ssny AND kmdh = rd.kmdh AND wldw = rd.wldw AND wlry = rd.wlry
							AND hsbm = rd.hsbm AND hbmc = rd.hbmc;
				ELSE
					UPDATE utzzkj SET sldf = sldf + rd.slwb,slym = slym - rd.slwb
						WHERE ny = ssny AND kmdh = rd.kmdh AND wldw = rd.wldw AND wlry = rd.wlry
							AND hsbm = rd.hsbm AND hbmc = rd.hbmc;
				END IF;
			END IF;
			UPDATE utzzkj SET jejf = jejf + rd.jfje,jedf = jedf + rd.dfje,jeym = jeym + rd.jfje - rd.dfje ,zzxh = zzxh + 1
				WHERE ny = ssny AND kmdh = rd.kmdh AND wldw = rd.wldw AND wlry = rd.wlry
					AND hsbm = rd.hsbm AND hbmc = rd.hbmc;
			SELECT zzxh INTO sszzxh FROM utzzkj
				WHERE ny = ssny AND kmdh = rd.kmdh AND wldw = rd.wldw AND wlry = rd.wlry
					AND hsbm = rd.hsbm AND hbmc = rd.hbmc;
			UPDATE djjzpzm SET zzxh = sszzxh
				WHERE mid = rd.mid;
		ELSE
			IF rd.jfje <> 0 THEN
				INSERT INTO utzzkj(ny,kmdh,wldw,wlry,hsbm,hbmc,slyc,sljf,sldf,slym,jeyc,jejf,jedf,jeym)
					VALUES(ssny,rd.kmdh,rd.wldw,rd.wlry,rd.hsbm,rd.hbmc,0 ,rd.slwb,0,rd.slwb,0,rd.jfje,0,rd.jfje);
			ELSE
				INSERT INTO utzzkj(ny,kmdh,wldw,wlry,hsbm,hbmc,slyc,sljf,sldf,slym,jeyc,jejf,jedf,jeym)
					VALUES(ssny,rd.kmdh,rd.wldw,rd.wlry,rd.hsbm,rd.hbmc,0 ,0,rd.slwb,0 - rd.slwb,0,0,rd.dfje,0 - rd.dfje);
			END IF;
		END IF;
	END LOOP;
	CLOSE cs_jz;
	UPDATE djjzpzo SET djr = $1 WHERE oid = $3 AND shr <> '';
	UPDATE djjzpzm SET sfdj = true WHERE oid = $3 AND sfsh = true;
	IF ssny = sssy THEN
		-- 更新当月会计总账期初数及期末数,即可以登记到上月
		WITH syzz (kmdh, hsbm ,wldw,wlry,hbmc, slyc, sljf, sldf, slym, jeyc, jejf, jedf, jeym) AS
			(SELECT kmdh, hsbm ,wldw,wlry,hbmc, slyc, sljf, sldf, slym, jeyc, jejf, jedf, jeym
				FROM utzzkj WHERE (ny = sssy))
		UPDATE utzzkj dyzz SET slyc = syzz.slym,jeyc = syzz.jeym
			FROM syzz WHERE (dyzz.kmdh = syzz.kmdh AND
				dyzz.hsbm = syzz.hsbm AND dyzz.wldw = syzz.wldw
				AND dyzz.wlry = syzz.wlry AND dyzz.hbmc = syzz.hbmc)
			   AND dyzz.ny = ssny;
		UPDATE utzzkj SET slym = slyc + sljf - sldf,jeym = jeyc + jejf - jedf
			WHERE ny = ssny;
		-- 生成空账
		INSERT INTO utzzkj (ny, kmdh, hsbm ,wldw,wlry,hbmc, slyc, sljf, sldf, slym, jeyc, jejf, jedf, jeym, zzxh)
			SELECT ssny AS ny, kmdh, hsbm, wldw,wlry, hbmc, slym AS slyc,
					0 AS sljf, 0 AS sldf, slym, jeym AS jeyc, 0 AS jejf, 0 AS jedf,
					jeym, zzxh
				FROM utzzkj AS syzz
				WHERE (ny = sssy) AND (kmdh || hsbm || wldw || wlry || hbmc) NOT IN
					 (SELECT kmdh || hsbm || wldw || wlry || hbmc FROM utzzkj AS dyzz WHERE ny = ssny);
	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$;

ALTER FUNCTION public.x9_djdj_05jz(character varying, character varying, character varying)
    OWNER TO postgres;
-- FUNCTION: public.x9_djdj_05jzfx(character varying, character varying, character varying)

-- DROP FUNCTION IF EXISTS public.x9_djdj_05jzfx(character varying, character varying, character varying);

CREATE OR REPLACE FUNCTION public.x9_djdj_05jzfx(
	ssdqyh character varying,
	ssdjmc character varying,
	ssdjoid character varying)
    RETURNS character varying
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$
   -- Author:	岳国军
   -- Create date: 2022-08-07
   -- complete date:2022-09-13
   -- Description:	单据登记_记账凭证 反记账
DECLARE
   ssmsg text;ssdet text;sstname text;sshint text;ssctt text; --错误处理
	rd record;
	rdny record;
	ssny char(6);
	sszzxh INT;
	cs_jzfx CURSOR FOR
		SELECT kmdh,wldw,wlry,hsbm,hbmc,jfje, dfje, slwb,mid
		FROM djjzpzm WHERE (oid = $3) ORDER BY kmdh,wldw,wlry,hsbm,hbmc;
	sssyny char(6);
	cs_kjny CURSOR FOR
		SELECT ny FROM mlny WHERE ny > ssny;
BEGIN
	-- 登记单据
	SELECT ny INTO ssny FROM djjzpzo WHERE oid = $3;
	sszzxh:=0;
	OPEN cs_jzfx;
	LOOP
		FETCH cs_jzfx INTO rd;
		EXIT WHEN NOT FOUND;
		-- 登记会计总账 反向
		IF exists(SELECT * FROM utzzkj WHERE ny = ssny AND kmdh = rd.kmdh AND
				wldw = rd.wldw AND wlry = rd.wlry AND hsbm = rd.hsbm AND hbmc = rd.hbmc) THEN
			IF rd.slwb <> 0 THEN
				IF rd.jfje <> 0 THEN
					UPDATE utzzkj SET sljf = sljf - rd.slwb,slym = slym - rd.slwb
					WHERE ny = ssny AND kmdh = rd.kmdh AND wldw = rd.wldw AND
						wlry = rd.wlry AND hsbm = rd.hsbm AND hbmc = rd.hbmc;
				ELSE
					UPDATE utzzkj SET sldf = sldf - rd.slwb,slym = slym + rd.slwb
					WHERE ny = ssny AND kmdh = rd.kmdh AND wldw = rd.wldw AND
						wlry = rd.wlry AND hsbm = rd.hsbm AND hbmc = rd.hbmc;
				END IF;
			END IF;
			UPDATE utzzkj SET jejf = jejf - rd.jfje,jedf = jedf - rd.dfje,jeym = jeym - rd.jfje + rd.dfje ,zzxh = zzxh + 1
				WHERE ny = ssny AND kmdh = rd.kmdh AND wldw = rd.wldw AND
						wlry = rd.wlry AND hsbm = rd.hsbm AND hbmc = rd.hbmc;
			SELECT zzxh INTO sszzxh FROM utzzkj
				WHERE ny = ssny AND kmdh = rd.kmdh AND wldw = rd.wldw AND
						wlry = rd.wlry AND hsbm = rd.hsbm AND hbmc = rd.hbmc;
			UPDATE djjzpzm SET zzxh = sszzxh
				WHERE mid = rd.mid;
		END IF;
	END LOOP;
	CLOSE cs_jzfx;
	UPDATE djjzpzo SET djr = '' WHERE oid = $3;
	UPDATE djjzpzm SET sfdj = false WHERE oid = $3;
	-- 更新以后年度总账
	IF ssny < x9_dqny() THEN
		sssyny:=ssny;
		OPEN cs_kjny;
		LOOP
			FETCH cs_kjny INTO rdny;
			EXIT WHEN NOT FOUND;
			-- 更新UTZZKJ
			WITH syzz (kmdh, hsbm ,wldw,wlry,hbmc, slyc, sljf, sldf, slym, jeyc, jejf, jedf, jeym) AS
				(SELECT kmdh, hsbm ,wldw,wlry,hbmc, slyc, sljf, sldf, slym, jeyc, jejf, jedf, jeym
				FROM utzzkj WHERE (ny = sssyny))
			UPDATE utzzkj dyzz SET slyc = syzz.slym,jeyc = syzz.jeym
				FROM syzz WHERE (dyzz.kmdh = syzz.kmdh AND
					dyzz.hsbm = syzz.hsbm AND dyzz.wldw = syzz.wldw AND
					dyzz.wlry = syzz.wlry AND dyzz.hbmc = syzz.hbmc)
				   AND dyzz.ny = ssdqny;
			UPDATE utzzkj SET slym = slyc + sljf - sldf,jeym = jeyc + jejf - jedf
				WHERE ny = ssdqny;
			-- 生成空账
			INSERT INTO utzzkj (ny, kmdh, hsbm ,wldw,wlry,hbmc, slyc, sljf, sldf, slym, jeyc, jejf, jedf, jeym, zzxh)
				SELECT ssdqny AS ny, kmdh, hsbm, wldw,wlry, hbmc, slym AS slyc,
					0 AS sljf, 0 AS sldf, slym, jeym AS jeyc, 0 AS jejf, 0 AS jedf,
					jeym, zzxh
				FROM utzzkj AS syzz
				WHERE (ny = sssyny) AND (kmdh || hsbm || wldw || wlry || hbmc) NOT IN
				(SELECT kmdh || hsbm || wldw || wlry || hbmc FROM utzzkj AS dyzz WHERE ny = rdny.ny);
			sssyny = rdny.ny;
		END LOOP;
		CLOSE cs_kjny;
	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$;

ALTER FUNCTION public.x9_djdj_05jzfx(character varying, character varying, character varying)
    OWNER TO postgres;
-- FUNCTION: public.x9_djdj_06cn(character varying, character varying, character varying)

-- DROP FUNCTION IF EXISTS public.x9_djdj_06cn(character varying, character varying, character varying);

CREATE OR REPLACE FUNCTION public.x9_djdj_06cn(
	ssdqyh character varying,
	ssdjmc 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; --错误处理
	rd record;
	ssrq DATE;sswldw varchar(50);ssjswb varchar(20);
	ssny char(6);
	cs_skfk CURSOR FOR
		SELECT mid,cnkmdh,cnkmmc,skje,skzr,fkje,fkzr,skjewb,skzrwb,fkjewb,fkzrwb
		FROM djcnm WHERE oid = $3;
BEGIN
	SELECT rq,wldw,jswb INTO ssrq,sswldw,ssjswb FROM djcno WHERE oid = $3 ;
	UPDATE djcnm SET rq = ssrq WHERE oid = $3;
	UPDATE djcno SET djr = $1 WHERE oid = $3;
	UPDATE djcnm SET sfdj = true WHERE oid = $3;
	ssny:=x9_dqny();
	OPEN cs_skfk;
	LOOP
		FETCH cs_skfk INTO rd;
		EXIT WHEN NOT FOUND;
		-- 登记出纳总账
		IF NOT exists(SELECT * FROM utzzcn WHERE ny = ssny AND cnkmdh = rd.cnkmdh) THEN
			INSERT INTO utzzcn(ny,cnkmdh,cnkmmc,wbmc) VALUES (ssny,rd.cnkmdh,rd.cnkmmc,ssjswb);
		END IF;
		UPDATE utzzcn SET jffs = jffs + rd.skje,dffs = dffs + rd.fkje,ymye = ymye + rd.skje - rd.fkje,
				wbjf = wbjf + rd.skjewb,wbdf = wbdf + rd.fkjewb,wbym = wbym + rd.skjewb - rd.fkjewb
			WHERE ny = ssny AND cnkmdh = rd.cnkmdh;
		-- 登记往来总账
		IF NOT exists(SELECT * FROM utzzwl WHERE ny = ssny AND wldw = sswldw) THEN
			INSERT INTO utzzwl(ny,wldw,wbmc) VALUES (ssny,sswldw,ssjswb);
		END IF;
		UPDATE utzzwl SET
			dffs = dffs + rd.skje + rd.skzr,jffs = jffs + rd.fkje + rd.fkzr,ymye = ymye + rd.fkje + rd.fkzr - rd.skje - rd.skzr,
			wbdf = wbdf + rd.skjewb + rd.skzrwb,wbjf = wbjf + rd.fkjewb + rd.fkzrwb,
			wbym = wbym + rd.fkjewb + rd.fkzrwb - rd.skjewb - rd.skzrwb
			WHERE ny = ssny AND wldw = sswldw;
	END LOOP;
	CLOSE cs_skfk;
	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$;

ALTER FUNCTION public.x9_djdj_06cn(character varying, character varying, character varying)
    OWNER TO postgres;
相关推荐
eWidget2 小时前
Shell通配符与正则:*?[]{} 通配,基础正则匹配(grep 入门)
运维·数据库·运维开发·kingbase·kingbasees·金仓数据库
huhy~4 小时前
基于CentOS7.9搭建MySQL高可用集群【MGR单主】
数据库·mysql
℡終嚸♂6804 小时前
sql注入知识点(正则回溯绕过waf,CTF ez—RCE题目解析)
数据库·sql·oracle
了一梨6 小时前
SQLite3学习笔记4:打开和关闭数据库 + 创建表(C API)
数据库·学习·sqlite
Hgfdsaqwr11 小时前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
charlotte1024102412 小时前
数据库概述
数据库
清平乐的技术专栏12 小时前
HBase集群连接方式
大数据·数据库·hbase
ʚB҉L҉A҉C҉K҉.҉基҉德҉^҉大14 小时前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
哈__14 小时前
多模融合 一体替代:金仓数据库 KingbaseES 重构企业级统一数据基座
数据库·重构