制造企业产品成本核算是成长控制、成本决策、销售决策的基础。如何快速、准确地完成成本核算,是企业应用中的高级部分,是在存货管理已经正常进行,已经做到账实一致、及时反映、信息完善的前提下才能进行的,还要有及时的会计总账核算结果(期间费用等),在充分 满足一些基础条件后,就可以开展成长核算的业务处理了。本例基于存货总线概念,是整套ERP系统中的一个组成部分,核算结果可直接用于成本控制和成本决策。本文讲述业务逻辑及后台编程。

一、确定成本核算对象:成本核算单

1、成本核算单需要填制、审核、登记。成本核算单是成本核算目标对象,可以直接填制所有成本核算单,不必等到前面的核算完成再填制后面的。
2、成本核算单主要核算对象包括:外协物料、半成品物料、产成品物料。
3、本例分为四个阶段:外协品、初级半成品(机箱)、二级半成品(祼机)、产成品。
4、其中,外协品只分配发出的材料(直接材料)。不分配人工及制造费用。
5、初级半成品分配直接材料、直接人工、制造费用(钣金车间)。
6、二级半成品分配直接材料、直接人工、制造费用(组装车间)。
7、产成品分配直接材料、直接人工、制造费用(检测车间)、管理费用。
8、本例共填制四张成本核算单,来自于委外入库数据和三个车间的完工入库数据。
9、产品入库时,已经按计划价格入库,因此在查询时是可以看到价格的,成本核算时将替换原有一价格,核算不正确时,可以重复进行,直到正确为止。
10、下面内容是要边归集边分配边核算。即必需是前面的分配并核算完成后,再分配核算后面的,因为后面的归集数据来自于前面的分配核算结果。成本核算单可一次全部填制完成,归集单要等到上一步核算完成后才能填制。
11、会计核算要将制造费用内容核算完毕。

二、成本归集与核算:成本归集单

成本归集、分配、核算要按产品层次依次进行,实际应用中,根据真实的层次确定核算的层次,就是说要前一层次核算产生结果后,用于后面层次的计算。

(一)、外协品成本核算

1、成本归集,只有一张单据,来源是委外出库单数据。填制、审核、登记。
2、成本分配(业务处理)。成本分配的结果被存储在djcbgjs表中,并在单据头中加上是否分配的标记。
3、成本核算。将分配结果更新到成本核算单,再由成本核算单更新到入库单。成本核算时自动存货核算,不需要单独操作。
4、成本分配与成本核算可以重复进行。
5、成本归集单允许反登记。
6、成本核算单允许反登记。反登记将清除原有分配的结果。但更新到入库单上的入库金额将无法恢复,直到重新计算出正确的结果后再更新。当然可以在后台用语句或建立业务处理功能,将其他恢复为计划成本价格。
7、使用成本账项查询功能,查询并核对核算结果的正确性。
8、查询核算后的入库单。
9、查询存货账项。

(二)、初级半成品成本核算

1、核算钣金车间生产的机箱的入库成本。
2、成本归集:直接材料、直接人工、制造费用。审核登记。
3、需要先行在会计核算中核算制造费用,因此我们回到会计核算。
4、成本分配。
5、成本核算。
6、单据查询:成本归集单、成本核算单。
7、账项查询:成本类账项。核实分配结果的正确性。

(三)、次级半成品成本核算

1、核算组装车间生产的祼机的入库成本。
2、成本归集:直接材料、直接人工、制造费用。审核登记。
3、成本分配。
4、成本核算。
5、单据查询:成本归集单、成本核算单。
6、账项查询:成本类账项。核实分配结果的正确性。

(四)产成品成本核算

1、核算检测车间生产的产成品的入库成本。
2、成本归集:直接材料、直接人工、制造费用、管理费用。审核登记。
3、成本分配。
4、成本核算。
5、单据查询:成本归集单、成本核算单。

三、成本核算原则

1、决策导向。分配标准以不影响销售决策为准。即售价较高的产品可以多摊成本,反之少摊成本。
2、订单决策。以订单决策为目标,而不是单一产品决策。即只要某一订单满足毛利指标要求即可,不求其中每一种产品都是满足要求的。
3、及时完成。在没有实际成本时,以标准成本或计划成本为依据完成计算。
4、本期完工的成本核算对象承担间接成本和期间费用。
5、完全成本。期间费用分配到产成品成本,不分配给半成品。

四、主要数据表结构

-- 成本核算单单据头
djcbhso字段列表:
oid         varchar        30   单据号             textread
djmc        varchar        60   单据名称            textread
ny          bpchar          6   年月              textread
dqbz        varchar        40   当前步骤            textread
rq          date            0   日期              dateedit    yyyy-MM-dd
scbm        varchar       100   生产部门            textedit
hslb        varchar        40   核算类别            comboedit       edit
bz          varchar       300   备注              textedit
tzr         varchar        20   填制人             textedit
shr         varchar        20   审核人             textedit
djr         varchar        20   登记人             textedit
sfhs        bool            0   是否核算            checkedit
-- 成本核算单单据体,存储成本核算对象和核算结果
djcbhsm字段列表:
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   存货代号            notenter
chmc        varchar       100   存货名称            notenter
xh1         varchar       100   型号              textread
xh2         varchar       100   规格              textread
xh3         varchar       400   参数              textedit
gg1         varchar       200   颜色              textedit
gg2         varchar       200   材质              textread
gg3         varchar       200   图号              textread
jldw        varchar        20   单位              notenter
scbm        varchar       100   生产部门            textedit
wldw        varchar       100   往来单位            textedit
hssl        numeric        16   核算数量            textedit          n2
xsje        numeric        16   销售金额            textedit          n2
dwcb        numeric        16   单位成本            textedit          n2
cpcb        numeric        16   产品成本            textedit          n2
dwml        numeric        16   单位毛利            textedit          n2
cpml        numeric        16   产品毛利            textedit          n2
bz          varchar       100   备注              textedit
mhh         int4           32   行号              textedit
zjcl        numeric        16   直接材料            textedit          n2
zjrg        numeric        16   直接人工            textedit          n2
jjcl        numeric        16   间接材料            textedit          n2
jjrg        numeric        16   间接人工            textedit          n2
zzfy        numeric        16   制造费用            textedit          n2
glfy        numeric        16   管理费用            textedit          n2
sfsh        bool            0   是否审核            checkedit
sfdj        bool            0   是否登记            checkedit
-- 成本归集单单据头
djcbgjo字段列表:
oid         varchar        30   单据号             textread
djmc        varchar        60   单据名称            textread
ny          bpchar          8   年月              textread
dqbz        varchar        40   当前步骤            textread
rq          date            0   日期              dateedit    yyyy-MM-dd
scbm        varchar       100   生产部门            textedit
xmdh        varchar        12   项目代号            buttonedit
xmmc        varchar       100   项目名称            textread
xmlx        varchar        60   项目类型            comboedit
fpfw        varchar       500   分配范围            buttontextedit
bz          varchar       300   备注              textedit
tzr         varchar        20   填制人             textedit
shr         varchar        20   审核人             textedit
djr         varchar        20   登记人             textedit
sffp        bool            0   是否分配            checkedit
-- 成本归集单单据体
djcbgjm字段列表:
mid         int4           32   序号              textread
oid         varchar        30   单据号             textread
djmc        varchar        60   单据名称            textread
ny          bpchar          6   年月              textread
dqbz        varchar        40   当前步骤            textread
cbmc        varchar       150   成本名称            buttonedit
jldw        varchar        12   单位              textread      select
gjsl        numeric        16   归集数量            textedit          n2
cbdj        numeric        16   成本单价            textedit          n2
cbje        numeric        16   成本金额            textedit          n2
fpje        numeric        16   分配金额            textedit          n2
cbyt        varchar        20   成本用途            textedit       00000
scbm        varchar       100   生产部门            listedit
wldw        varchar       200   往来单位            textedit
lyxh        varchar        20   来源货号            textedit
bz          varchar       100   备注              textedit
mhh         int4           32   行号              textedit
sfsh        bool            0   是否审核            checkedit
sfdj        bool            0   是否登记            checkedit
sffp        bool            0   是否分配            checkedit
-- 成本归集单分配结果
djcbgjs字段列表:
id          int4           32   键号              textedit
ny          bpchar          6   年月              textread
djmc        varchar        60   单据名称            textread
oid         varchar        30   单据号             textread
mid         int4           32   序号              textread
cbmc        varchar       100   成本名称            textedit
jldw        varchar        12   单位              buttonedit
gjsl        numeric        16   归集数量            textedit          n2
cbdj        numeric        16   成本单价            textedit          n2
cbje        numeric        16   成本金额            textedit          n2
cbyt        varchar        20   成本用途            textedit
hsoid       varchar        30                   textedit
bz          varchar       100   备注              textedit
xmdh        varchar        12   项目代号            buttonedit
xmmc        varchar       100   项目名称            textread
xmlx        varchar        20   项目类型            comboedit
scbm        varchar       100   生产部门            listedit
wldw        varchar       200   往来单位            buttonedit
sfdj        bool            0   是否登记            checkread

五、关键代码

本例使用plpgsql语言编写。

(一)、成本分配

将归集好的成本,分配到具体的成本核算对像。

CREATE OR REPLACE FUNCTION public.x9_cbfp_gj(dqyh character varying,djoid character varying)RETURNS booleanLANGUAGE 'plpgsql'COST 100VOLATILE PARALLEL UNSAFE
AS $BODY$-- Description:    成本分配 登记当前归集单(一张)
DECLAREssmsg text;ssdet text;sstname text;sshint text;ssctt text; --错误处理rs boolean;ssfpny varchar(6);ssfpfw varchar(500);          -- 年月ssxmdh varchar(12);ssxmmc varchar(50);ssxmlx varchar(30);ssfpblsl decimal(16,6);        -- 分配比率数量ssfpblje decimal(16,6);        -- 分配比率金额sshjfpje decimal(16,2);    -- 合计分配金额sshjsl decimal(16,6);      -- 合计产品数量 成本核算单中符合条件的行ssmaxid INT;                  -- 数量最大的分配行ssqdchxh varchar(20);ssqdcpxh varchar(20);rd record;                     --记录cs_gj CURSOR FORSELECT mid,cbmc,jldw,gjsl,cbdj,cbje,cbyt,scbm,wldw,lyxhFROM djcbgjm WHERE (oid = $2);
BEGINrs:=false;SELECT ny,fpfw INTO ssfpny,ssfpfw FROM djcbgjo WHERE oid = $2;UPDATE djcbgjo SET sffp = false WHERE oid = $2;DELETE FROM djcbgjs WHERE oid = $2;-- 成本项目SELECT xmdh,xmmc,xmlx INTO ssxmdh,ssxmmc,ssxmlx FROM djcbgjo WHERE oid = $2;OPEN cs_gj;LOOPFETCH cs_gj INTO rd;EXIT WHEN NOT FOUND;IF ssxmlx = '直接材料' THENIF rd.cbyt <> '' THENSELECT sum(m.hssl) INTO sshjslFROM djcbhso o INNER JOIN djcbhsm m ON o.oid = m.oidWHERE o.ny = ssfpny AND o.djr <> '' AND (ssfpfw LIKE '%' || o.oid || '%' OR ssfpfw = '') AND m.chxh = rd.cbytAND (rd.scbm = '' OR m.scbm = rd.scbm) AND (rd.wldw = '' OR m.wldw = rd.wldw);-- 本例根据物料清单定额数量进行分配SELECT chxh,min(cpchxh) INTO ssqdchxh,ssqdcpxh FROM mlqdWHERE chxh = rd.cbyt GROUP BY chxh;WITH cpqd (cpchxh,chxh,jgdh,jc) AS(SELECT cpchxh,chxh,jgdh,jc FROM mlqd WHERE cpchxh = ssqdcpxh AND chxh = ssqdchxh)SELECT round(cl.desl * (1 + (cl.desh / 100)),6) INTO ssfpblsl FROMcpqd AS cp INNER JOIN mlqd cl ON cp.cpchxh = cl.cpchxh AND cp.jc + 1 = cl.jcAND cl.jgdh LIKE cp.jgdh || '%'WHERE cl.cpchxh = ssqdcpxh AND cl.chxh = rd.lyxh;ssfpblje:=round(ssfpblsl * rd.cbdj,6);IF sshjsl > 0 AND (ssfpblsl IS NOT NULL) AND (ssfpblje IS NOT NULL) THENINSERT INTO djcbgjs(ny,oid,mid,cbmc,jldw,gjsl,cbdj,cbje,cbyt,hsoid,xmdh,xmmc,xmlx,scbm,wldw)SELECT o.ny AS ny,$2 AS oid,rd.mid AS id,rd.cbmc AS cbmc,rd.jldw AS jldw,m.hssl * ssfpblsl AS gjsl,rd.cbdj AS cbdj,m.hssl * ssfpblje AS cbje,rd.cbyt AS cbyt,o.oid,ssxmdh AS xmdh, ssxmmc AS xmmc, ssxmlx AS xmlx,rd.scbm,rd.wldwFROM djcbhso o INNER JOIN djcbhsm m ON o.oid = m.oidWHERE o.ny = ssfpny AND o.djr <> '' AND (ssfpfw LIKE '%' || o.oid || '%' OR ssfpfw = '') AND m.chxh = rd.cbytAND (rd.scbm = '' OR m.scbm = rd.scbm) AND (rd.wldw = '' OR m.wldw = rd.wldw);SELECT sum(cbje) INTO sshjfpje FROM djcbgjs WHERE (mid = rd.mid);UPDATE djcbgjm SET fpje = sshjfpje,sffp = TRUE,bz = '' WHERE mid = rd.mid;IF (sshjfpje - rd.cbje) / rd.cbje < 0.005 THENSELECT id INTO ssmaxid FROM djcbgjs WHERE (mid = rd.mid)ORDER BY cbje DESC LIMIT 1;UPDATE djcbgjs SET cbje = cbje + (rd.cbje - sshjfpje) WHERE (mid = rd.mid) AND id = ssmaxid;UPDATE djcbgjm SET fpje = rd.cbje,sffp = TRUE,bz = '' WHERE mid = rd.mid;END IF;ELSEUPDATE djcbgjm SET sffp = false,bz = '未能分配,未找到货号' WHERE mid = rd.mid;END IF;ELSEUPDATE djcbgjm SET sffp = false,bz = '未能分配,请指定货号' WHERE mid = rd.mid;END IF;END IF;IF ssxmlx = '直接人工' THENIF rd.cbyt <> '' THENSELECT sum(m.hssl) INTO sshjslFROM djcbhso o INNER JOIN djcbhsm m ON o.oid = m.oidWHERE o.ny = ssfpny AND o.djr <> '' AND (ssfpfw LIKE '%' || o.oid || '%' OR ssfpfw = '') AND m.chxh = rd.cbytAND (rd.scbm = '' OR m.scbm = rd.scbm) AND (rd.wldw = '' OR m.wldw = rd.wldw) ;IF sshjsl > 0 THENssfpblsl:=round(rd.gjsl / sshjsl,6);ssfpblje:=round(rd.cbje / sshjsl,6);INSERT INTO djcbgjs(ny,oid,mid,cbmc,jldw,gjsl,cbdj,cbje,cbyt,hsoid,xmdh,xmmc,xmlx,scbm,wldw)SELECT o.ny AS ny, $2 AS oid, rd.mid AS id, rd.cbmc AS cbmc, rd.jldw AS jldw,m.hssl * ssfpblsl AS gjsl, rd.cbdj AS cbdj, m.mid * ssfpblje AS cbje, rd.cbyt AS cbyt,o.oid,ssxmdh AS xmdh, ssxmmc AS xmmc, ssxmlx AS xmlx,rd.scbm,rd.wldwFROM djcbhso o INNER JOIN djcbhsm m ON o.oid = m.oidWHERE o.ny = ssfpny AND o.djr <> '' AND (ssfpfw LIKE '%' || o.oid || '%' OR ssfpfw = '') AND m.chxh = rd.cbytAND (rd.scbm = '' OR m.scbm = rd.scbm) AND (rd.wldw = '' OR m.wldw = rd.wldw) ;SELECT sum(cbje) INTO sshjfpje FROM djcbgjs WHERE (mid = rd.mid);IF sshjfpje - rd.cbje <> 0 THENSELECT id INTO ssmaxid  FROM djcbgjs WHERE (mid = rd.mid)ORDER BY cbje DESC LIMIT 1;UPDATE djcbgjs SET cbje = cbje + (rd.cbje - sshjfpje) WHERE (mid = rd.mid) AND id = ssmaxid;END IF;UPDATE djcbgjm SET fpje = rd.cbje,sffp = TRUE,bz = '' WHERE mid = rd.mid;ELSEUPDATE djcbgjm SET sffp = false,bz = '未能分配,未找到货号' WHERE mid = rd.mid;END IF;ELSEUPDATE djcbgjm SET sffp = false,bz = '未能分配,请指定货号' WHERE mid = rd.mid;END IF;END IF;IF ssxmlx = '间接材料' OR ssxmlx = '间接人工' THENSELECT sum(m.hssl) INTO sshjsl  FROM djcbhso o INNER JOIN djcbhsm m ON o.oid = m.oidWHERE o.ny = ssfpny AND o.djr <> '' AND (rd.scbm = '' OR m.scbm = rd.scbm) AND (rd.wldw = '' OR m.wldw = rd.wldw) ;IF sshjsl > 0 THENssfpblsl:=round(rd.gjsl / sshjsl,6);ssfpblje:=round(rd.cbje / sshjsl,6);INSERT INTO djcbgjs (ny,oid,mid,cbmc,jldw,gjsl,cbdj,cbje,cbyt,hsoid,xmdh,xmmc,xmlx,scbm,wldw)SELECT ssfpny AS ny,$2 AS oid,rd.mid AS id,rd.cbmc AS cbmc,rd.jldw AS jldw,m.hssl * ssfpblsl AS gjsl, rd.cbdj AS cbdj, m.hssl * ssfpblje AS cbje,m.chxh AS cbyt,o.oid, ssxmdh AS xmdh, ssxmmc AS xmmc, ssxmlx AS xmlx,rd.scbm,rd.wldwFROM djcbhso o INNER JOIN djcbhsm m ON o.oid = m.oidWHERE o.ny = ssfpny AND o.djr <> '' AND (rd.scbm = '' OR m.scbm = rd.scbm) AND (rd.wldw = '' OR m.wldw = rd.wldw) ;SELECT sum(cbje) INTO sshjfpje FROM djcbgjs WHERE (mid = rd.mid);IF sshjfpje - rd.cbje <> 0 THENSELECT id INTO ssmaxid  FROM djcbgjs WHERE (mid = rd.mid) ORDER BY cbje DESC LIMIT 1;UPDATE djcbgjs SET cbje = cbje + (rd.cbje - sshjfpje) WHERE (mid = rd.mid) AND id = ssmaxid;END IF;UPDATE djcbgjm SET fpje = rd.cbje,sffp = TRUE,bz = '' WHERE mid = rd.mid;ELSEUPDATE djcbgjm SET sffp = false,bz = '未能分配,没有符合条件的产品' WHERE mid = rd.mid;END IF;END IF;IF ssxmlx = '制造费用' THENSELECT sum(m.hssl) INTO sshjslFROM djcbhso o INNER JOIN djcbhsm m ON o.oid = m.oidWHERE o.ny = ssfpny AND o.djr <> '' AND (rd.scbm = '' OR m.scbm = rd.scbm) AND (rd.wldw = '' OR m.wldw = rd.wldw) ;IF sshjsl > 0 THENssfpblsl := round(rd.gjsl / sshjsl,6);ssfpblje := round(rd.cbje / sshjsl,6);INSERT INTO djcbgjs (ny,oid,mid,cbmc,jldw,gjsl,cbdj,cbje,cbyt,hsoid,xmdh,xmmc,xmlx,scbm,wldw)SELECT ssfpny AS ny, $2 AS oid, rd.mid AS id, rd.cbmc AS cbmc, rd.jldw AS jldw,m.hssl * ssfpblsl AS gjsl, rd.cbdj AS dj, m.hssl * ssfpblje AS cbje,m.chxh AS cbyt,o.oid, ssxmdh AS xmdh, ssxmmc AS xmmc, ssxmlx AS xmlx,rd.scbm,rd.wldwFROM djcbhso o INNER JOIN djcbhsm m ON o.oid = m.oidWHERE o.ny = ssfpny AND o.djr <> '' AND (rd.scbm = '' OR m.scbm = rd.scbm) AND (rd.wldw = '' OR m.wldw = rd.wldw) ;SELECT sum(cbje) INTO sshjfpje FROM djcbgjs WHERE (mid = rd.mid);IF sshjfpje - rd.cbje <> 0 THENSELECT id INTO ssmaxid  FROM djcbgjs WHERE (mid = rd.mid) ORDER BY cbje DESC LIMIT 1;UPDATE djcbgjs SET cbje = cbje + (rd.cbje - sshjfpje) WHERE (mid = rd.mid) AND id = ssmaxid;END IF ;UPDATE djcbgjm SET fpje = rd.cbje,sffp = TRUE,bz = '' WHERE mid = rd.mid;ELSEUPDATE djcbgjm SET sffp = false,bz = '未能分配,没有符合条件的产品' WHERE mid = rd.mid;END IF;-- 管理费用直接分配到检测车间入库的产品中  ,直接在代码中加工作中心名称进行限制END IF;IF ssxmlx = '管理费用' THENrd.scbm:='检测车间';SELECT sum(m.hssl) INTO sshjslFROM djcbhso o INNER JOIN djcbhsm m ON o.oid = m.oidWHERE o.ny = ssfpny AND o.djr <> '' AND m.scbm = rd.scbm;IF sshjsl > 0 THENssfpblsl:=round(rd.gjsl / sshjsl,6);ssfpblje:=round(rd.cbje / sshjsl,6);INSERT INTO djcbgjs (ny,oid,mid,cbmc,jldw,gjsl,cbdj,cbje,cbyt,hsoid,xmdh,xmmc,xmlx,scbm,wldw)SELECT ssfpny AS ny, $2 AS oid, rd.mid AS id, rd.cbmc AS cbmc, rd.jldw AS jldw,m.hssl * ssfpblsl AS gjsl, rd.cbdj AS dj, m.hssl * ssfpblje AS cbje,m.chxh AS cbyt, o.oid,ssxmdh AS xmdh, ssxmmc AS xmmc, ssxmlx AS xmlx,rd.scbm as scbm,rd.wldwFROM djcbhso o INNER JOIN djcbhsm m ON o.oid = m.oidWHERE o.ny = ssfpny AND o.djr <> '' AND m.xsje > 0AND m.scbm = rd.scbm;SELECT sum(cbje) INTO sshjfpje FROM djcbgjs WHERE (mid = rd.mid);IF sshjfpje - rd.cbje <> 0 THENSELECT id INTO ssmaxid  FROM djcbgjs WHERE (mid = rd.mid) ORDER BY cbje DESC LIMIT 1;UPDATE djcbgjs SET cbje = cbje + (rd.cbje - sshjfpje) WHERE (mid = rd.mid) AND id = ssmaxid;END IF;UPDATE djcbgjm SET fpje = rd.cbje,sffp = TRUE,bz = '' WHERE mid = rd.mid;ELSEUPDATE djcbgjm SET sffp = false,bz = '未能分配,没有符合条件的产品' WHERE mid = rd.mid;END IF;END IF;END LOOP;CLOSE cs_gj;-- 归集单标记为已分配UPDATE djcbgjo SET sffp = TRUE WHERE oid = $2;rs:=true;RETURN rs;EXCEPTION WHEN others THENGET 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_cbfp_gj(character varying, character varying)OWNER TO postgres;

(二)、成本核算

将分配好的数据,汇总更新到成本核算单。
成本核算单的结果再更新到入库单中,通过存货核算程序,再将入库成本重新更新的存货总账中。

CREATE OR REPLACE FUNCTION public.x9_cbhs(ssdqyh character varying,sshsny character,ssscbm character varying)RETURNS character varyingLANGUAGE 'plpgsql'COST 100VOLATILE PARALLEL UNSAFE
AS $BODY$-- description:    成本分配之后,更新成本核算单
DECLAREssmsg text;ssdet text;sstname text;sshint text;ssctt text; --错误处理rs varchar;rd record;sshjcb decimal(16,2);sscbce decimal(16,2);ssrkid int;cs_cbhs refcursor;
BEGINWITH cbgj (hsoid,cbyt,cpcb,zjcl,jjcl,zjrg,jjrg,zzfy,glfy) AS(SELECT hsoid,cbyt,sum(cbje) AS cpcb,sum(CASE xmlx WHEN '直接材料' THEN cbje ELSE 0 END) AS zjcl,sum(CASE xmlx WHEN '间接材料' THEN cbje ELSE 0 END) AS jjcl,sum(CASE xmlx WHEN '直接人工' THEN cbje ELSE 0 END) AS zjrg,sum(CASE xmlx WHEN '间接人工' THEN cbje ELSE 0 END) AS jjrg,sum(CASE xmlx WHEN '制造费用' THEN cbje ELSE 0 END) AS zzfy,sum(CASE xmlx WHEN '管理费用' THEN cbje ELSE 0 END) AS glfyFROM djcbgjsWHERE ny = $2 AND scbm = $3GROUP BY hsoid, cbyt)UPDATE djcbhsm m SET cpcb = cbgj.cpcb,zjcl = cbgj.zjcl,zjrg = cbgj.zjrg,jjcl = cbgj.jjcl,jjrg = cbgj.jjrg,zzfy = cbgj.zzfy,glfy = cbgj.glfyFROM cbgj where m.oid = cbgj.hsoid AND m.chxh = cbgj.cbyt and (m.ny = $2) AND m.scbm = $3 AND (m.sfdj = true);UPDATE djcbhsm SET cpml = xsje - cpcb WHERE (ny = $2) AND scbm = $3 AND (sfdj = true);UPDATE djcbhsm SET dwcb = cpcb / hssl,dwml = cpml / hsslWHERE hssl > 0 AND (ny = $2) AND scbm = $3 AND (sfdj = true);--更新入库成本OPEN cs_cbhs FORSELECT m.chxh,m.dwcb,m.cpcb,o.hslb FROM djcbhsm m INNER JOIN djcbhso o ON o.oid = m.oidWHERE o.ny = $2 AND o.scbm = $3;LOOPFETCH cs_cbhs INTO rd;EXIT WHEN NOT FOUND;UPDATE djchm SET rkdj = rd.dwcb,rkje = rd.dwcb * rkslWHERE ny = $2 AND chxh = rd.chxh AND djmc = rd.hslb;SELECT  sum(rkje) INTO sshjcb  FROM djchm WHERE ny = $2 AND chxh = rd.chxh ;sscbce:=rd.cpcb - sshjcb;IF sscbce <> 0 THENssrkid = -1;SELECT  mid INTO ssrkid  FROM djchmWHERE ny = $2 AND chxh = rd.chxh AND djmc = rd.hslb ORDER BY rkje DESC LIMIT 1;IF ssrkid > -1 THENUPDATE djchm SET rkje = rkje + sscbce WHERE mid = ssrkid;END IF;END IF;-- 更新委外入库单IF $3 = '' AND rd.hslb = '委外入库单' THENUPDATE djchm SET rkje = rkje + jgje,rkdj = (rkje + jgje) / rkslWHERE ny = $2 AND chxh = rd.chxh AND djmc = rd.hslb and sfdj=true;END IF;-- into rd.chxh,rd.dwcb,rd.cpcb,rd.hslb ;END LOOP;CLOSE cs_cbhs;-- 存货核算rs:=x9_hsch($2,$1);IF position('存货核算完成' in rs) > 0 THENRETURN '成本核算完成!';ELSERETURN rs;END IF;   EXCEPTION WHEN others THENGET 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_cbhs(character varying, character, character varying)OWNER TO postgres;

六、结果输出

1、成本总账

2、成本明细账

3、成本因素分析

4、成本利润分析

七、总结

综上所述,完成了自制品和外协品的入库成本的核算。
在当今激烈的市场竞争环境中,能够做到这些还是很重要的。在实际业务中,可以将核算结果或预测结果应用到订单编辑中和其他业务环节中,成为重要的参考信息。

制造企业产品成本核算功能设计实例相关推荐

  1. 某企业产品成本核算中直接材料凭证流

    业务背景:用项目进行核算. 以项目的角度来看,直接材料从2个方面开始进入.分别是 : 项目需求采购入库.库存间的调拨,其中项目需求采购入库中,又包含因为材料暂估原因造成的价值追加或追减. 具体见如下分 ...

  2. 制造企业质量成本管理中的问题与对策

    在过去的近四十年里,中国制造业实现了从沉寂到崛起的飞跃,巨大的制造业总量持续催化着技术升级与产业成熟. 随着后工业化阶段和产业链转型发展进程加快,一个新的问题出现了-- 只关注如何把产品制造出来,在速 ...

  3. 产品必备技能(八):如何如何进行产品功能设计?附实操产品功能设计实例(微记账)

    文章目录 目标 题目 实操步骤 实操报告微记账 一.说明你迭代的产品和对应产品功能是什么:微记账APP-账本记录分析功能 二.给出产品功能页面截图 三.分析产品功能的现状和逻辑 四.产品功能目前存在的 ...

  4. 什么是生产管理?制造企业想要做好生产管理应该怎么做?

    一.什么是生产管理? 首先,我们要弄清楚生产管理的目标是什么?生产管理的目标是高效.低耗.灵活.准时地生产合格产品,为客户提供满意服务.具体如: 高效:迅速满足用户需要,缩短订货.提货周期,为市场营销 ...

  5. ERP生产管理系统,如何解决机械制造企业生产管理难题?

    ​随着机械制造业的不断发展,市场竞争越来越激烈,且产品生命周期缩短.消费需求多样化,多品种.小批量生产模式兴起,在此背景下,产品与服务的质量.生产成本及交货期等已成为企业竞争成败的重要条件. 在机械制 ...

  6. 制造企业如何从0到1进行信息化建设?

    制造业企业信息化的趋势已成必然,那么,如何进行制造业企业的信息化建设成为各传统制造业企业的探索方向. 如今,随着零代码平台的出现,制造企业的信息化建设变得更加便捷和高效.零代码平台可以帮助企业快速构建 ...

  7. 制造企业使用云平台可以做什么

    作者简介 Gavin,程序员.软件架构师.企业架构师,关注智能制造. 云平台如今已经不是陌生的概念,在互联网企业中,基于云平台已经发展出一套全新的技术研发体系,颠覆了原有的开发框架.运维框架甚至是企业 ...

  8. 机械设备制造企业,如何借助ERP系统做好委外加工管理?

    制造企业在生产过程中,经常会遇到因自身生产力不足或缺乏某种技术支持时,要把某个工艺或者整个产品委托给外面的厂商去进行加工的情况. 对于机械设备制造企业而言,这种情况更为突出,常见的委外加工形式有产品或 ...

  9. 浅析国内汽车制造企业流程与ERP需求

    发达国家汽车行业的经验证明,信息技术的广泛应用和发展将为企业降低采购.营销成本,减少库存.优化库存结构,拓展销售渠道.提高服务效率提供可能,是汽车企业增强竞争实力.融入经济全球化格局的必由之路. 一. ...

最新文章

  1. 深入解析Java锁机制
  2. 51 jQuery插件库
  3. Java多线程6:synchronized锁定类方法、volatile关键字及其他
  4. Nvidia推边缘运算平台EGX 未来将提供企业AI模型参考框架
  5. java正则转义_Java 正则表达式 转义字符
  6. 工业以太网交换机的优势以及注意事项介绍
  7. 使用PostSharp进行AOP框架设计:一个简单的原型
  8. datetime类型的取年月日 sql_SQL2005怎么截取datetime类型字段的年月日,并以截取后的(年月日)字段排序...
  9. PostgreSQL update tbl1 from tbl2 一对多的注意事项(到底匹配哪条)
  10. iOS开发之Undefined symbols for architecture x86_64报错
  11. Centos7升级gcc版本方法之一使用scl软件集
  12. CentosRedhat下bcm43142博通无线网卡linux驱动之二
  13. 音频处理——解析PCM格式实例(音量调控)
  14. $.ajax()方法详解
  15. 【python小程序】蜜雪冰城小卖铺
  16. pandas将df赋值到另一个df_Python/Pandas:如果匹配的話,將一個df的值添加到另一個df的行的末尾...
  17. 孙源面试题试解(更新完毕)
  18. Win7上.bat文件打开方式变成了文本文档,怎么修改和恢复
  19. 有了这个开源工具后,明天争取5点钟下班了
  20. Java项目:物流快递管理系统(java+SSM+jsp+mysql)

热门文章

  1. vue,js,html三种文件之间是怎样的关系?
  2. python爬虫报错:不信任证书问题的解决
  3. 微信小程序开发-入门尝试
  4. python基本语法—列表
  5. 输入x,根据以下函数关系,对输入的x值,计算出相应的y值。
  6. matlab常微分方程数值求解
  7. echarts图表中增加一条警戒线【平均值】
  8. “京台高铁”亮相百度地图,真能在2035年建成吗?
  9. 转载】操作系统,非常详细的介绍
  10. base64转化字节流