存货核算的存储过程设计
存货核算是企业物料管理的核算功能,涉及的表较多,关系也较复杂,通过存储过程完成计算和数据更新,可以取得较好的用户体验。
存货核算过程一般每月月末执行一次,或在必要时由用户操作。
数据字典:
存货总账UTZZCH字段列表:
ID int 4 键号 TextEdit
NY char 6 年月 TextRead
CKMC nvarchar 100 仓库 TextRead
CHXH varchar 20 货号 TextRead
JLDW varchar 20 计量单位 TextEdit
QCJS int 4 期初件数 TextEdit 0;0;#
QCSL decimal 9 期初数量 TextEdit #,###.00;-#,###.00;#
QCDJ decimal 9 期初单价 TextEdit #,###.00;-#,###.00;#
QCJE decimal 9 期初金额 TextEdit #,###.00;-#,###.00;#
XQJS int 4 需求件数 TextEdit 0;0;#
XQSL decimal 9 需求数量 TextEdit #,###.00;-#,###.00;#
XQJE decimal 9 需求金额 TextEdit #,###.00;-#,###.00;#
JHJS int 4 计划件数 TextEdit 0;0;#
JHSL decimal 9 计划数量 TextEdit #,###.00;-#,###.00;#
JHJE decimal 9 计划金额 TextEdit #,###.00;-#,###.00;#
SRJS int 4 收入件数 TextEdit 0;0;#
SRSL decimal 9 收入数量 TextEdit #,###.00;-#,###.00;#
SRJE decimal 9 收入金额 TextEdit #,###.00;-#,###.00;#
FCJS int 4 发出件数 TextEdit 0;0;#
FCSL decimal 9 发出数量 TextEdit #,###.00;-#,###.00;#
FCJE decimal 9 发出金额 TextEdit #,###.00;-#,###.00;#
JCJS int 4 结存件数 TextEdit 0;0;#
JCSL decimal 9 结存数量 TextEdit #,###.00;-#,###.00;#
JCDJ decimal 9 结存单价 TextEdit #,###.00;-#,###.00;#
JCJE decimal 9 结存金额 TextEdit #,###.00;-#,###.00;#
单据头DJCHO字段列表:(部分)
OID varchar 30 计划单号 TextRead
DJMC nvarchar 60 单据名称 TextRead
NY char 6 年月 TextRead
RQ date 3 日期 DateEdit yyyy-MM-dd
DQBZ nvarchar 40 当前步骤 TextRead
YWLB nvarchar 40 业务类别 TextEdit
WLDW nvarchar 200 往来单位 ButtonEdit
JSWB nvarchar 40 结算外币 TextRead
SCBM nvarchar 100 生产部门 ListEdit
CKMC nvarchar 100 仓库名称 ListEdit
HTBH varchar 50 合同编号 TextEdit
JFRQ datetime 8 交付日期 DateEdit yyyy-MM-dd
YWY nvarchar 60 业务员 ComboEdit
GLBJ nvarchar 100 关联标记 TextEdit
BZ nvarchar 100 备注 TextEdit
TZR nvarchar 20 制表人 TextRead
SHR nvarchar 20 审核人 TextRead
DJR nvarchar 20 登记人 TextRead
单据体DJCHM字段列表:
MID int 4 计划序号 TextRead
OID varchar 30 计划单号 TextRead
DJMC nvarchar 60 单据名称 TextRead
NY char 6 年月 TextRead
DQBZ nvarchar 40 当前步骤 TextRead
CHXH varchar 20 货号 ButtonEdit
CHDH varchar 30 存货代号 ButtonEdit
CHMC nvarchar 100 存货名称 TextRead
XH1 nvarchar 100 型号 ButtonEdit
XH2 nvarchar 100 规格 ButtonGgxh
XH3 nvarchar 400 参数 TextEdit
GG1 nvarchar 100 颜色 ComboEdit EDIT
GG2 nvarchar 100 材质 TextEdit
GG3 nvarchar 100 图号 TextEdit
BZDW nvarchar 40 包装单位 NotEnter
MJSL decimal 9 每件数量 TextEdit 0.00;0.00;#
JLDW nvarchar 20 计量单位 NotEnter
BZJS int 4 件数 TextEdit 0;0;#
XQSL decimal 9 需求数量 TextEdit #,###.00;-#,###.00;#
XQDJ decimal 9 需求单价 TextEdit #,###.00;-#,###.00;#
XQJE decimal 9 需求金额 TextEdit #,###.00;-#,###.00;#
JHSL decimal 9 计划数量 TextRead #,###.00;-#,###.00;#
JHDJ decimal 9 计划单价 TextEdit #,###.00;-#,###.00;#
JHJE decimal 9 计划金额 TextEdit #,###.00;-#,###.00;#
RKSL decimal 9 入库数量 TextEdit #,###.00;-#,###.00;#
RKDJ decimal 9 入库单价 TextEdit #,###.00;-#,###.00;#
RKJE decimal 9 入库金额 TextEdit #,###.00;-#,###.00;#
CKSL decimal 9 出库数量 TextEdit #,###.00;-#,###.00;#
CKDJ decimal 9 出库单价 TextEdit #,###.00;-#,###.00;#
CKJE decimal 9 出库金额 TextEdit #,###.00;-#,###.00;#
JGSL decimal 9 加工数量 TextEdit #,###.00;-#,###.00;#
JGDJ decimal 9 加工单价 TextEdit #,###.00;-#,###.00;#
JGJE decimal 9 加工金额 TextEdit #,###.00;-#,###.00;#
XSSL decimal 9 销售数量 TextEdit #,###.00;-#,###.00;#
XSDJ decimal 9 销售单价 TextEdit #,###.00;-#,###.00;#
XSJE decimal 9 销售金额 TextEdit #,###.00;-#,###.00;#
WBJE decimal 9 外币金额 TextEdit #,###.00;-#,###.00;#
ZZSL decimal 9 税率 TextEdit N2
ZZSE decimal 9 税额 TextEdit N2
WBSE decimal 9 外币税额 TextEdit N2
TP1 nvarchar 400 图片 FileEdit
CLYT varchar 20 材料用途 TextRead
DJRQ datetime 8 登记日期 DateEdit yyyy-MM-dd
BZ nvarchar 400 备注 ButtonTextEdit
MHH int 4 行号 TextEdit
SFSH bit 1 是否审核 CheckEdit
SFDJ bit 1 是否登记 CheckRead
存货核算存储过程代码:ms sql
ALTER PROCEDURE [dbo].[X9_HSCH]@HSNY VARCHAR(6), --核算年月@DQYH nvarchar(10) --当前用户
AS
BEGIN TRYSET NOCOUNT ON;--操作前请备份数据库--一、清空存货总账入库数据UPDATE UTZZCH SET JCJS=0,XQJS=0,XQSL=0,XQJE=0,JHJS=0,JHSL=0,JHJE=0,SRJS=0,SRSL=0,SRJE=0,FCJS=0,FCSL=0,FCJE=0 FROM UTZZCH WHERE NY=@HSNY;--二、更新存货总账数据,需求、计划、入库WITH HSCH (NY,CHXH,XQJS,XQSL,XQJE,JHJS,JHSL,JHJE,SRJS,SRSL,SRJE) AS (SELECT O.NY,M.CHXH,SUM(CASE WHEN M.DJMC IN ('销售订单','需求计算单') THEN M.BZJS ELSE 0 END) AS XQJS, SUM(M.XQSL),SUM(M.XQJE),SUM(CASE WHEN M.DJMC IN ('采购订单','委外订单','生产计划单') THEN M.BZJS ELSE 0 END) AS JHJS,SUM(M.JHSL),SUM(M.JHJE),SUM(CASE WHEN M.DJMC IN ('采购入库单','委外入库单','完工入库单','盘点入库单') THEN M.BZJS ELSE 0 END) AS RKJS,SUM(M.RKSL),SUM(M.RKJE) FROM DJCHO O INNER JOIN DJCHM M ON O.OID=M.OID WHERE (O.NY = @HSNY) AND (O.DJR<>'') AND CHARINDEX('出库',O.DJMC)=0 GROUP BY O.NY,M.CHXH)UPDATE UTZZCH SET XQJS=DJ.XQJS,XQSL=DJ.XQSL,XQJE=DJ.XQJE,JHJS=DJ.JHJS,JHSL=DJ.JHSL,JHJE=DJ.JHJE,SRJS=DJ.SRJS,SRSL=DJ.SRSL,SRJE=DJ.SRJE FROM UTZZCH AS ZZ INNER JOIN HSCH AS DJ ON (ZZ.NY=DJ.NY AND ZZ.CHXH=DJ.CHXH) WHERE ZZ.NY=@HSNY;UPDATE UTZZCH SET JCDJ=XM.JHJJ FROM UTZZCH ZZ INNER JOIN MLCHXM XM ON ZZ.CHXH=XM.CHXH WHERE ZZ.NY=@HSNY AND (ZZ.QCSL+ZZ.SRSL)<=0;UPDATE UTZZCH SET JCDJ=(QCJE+SRJE)/(QCSL+SRSL) WHERE NY=@HSNY AND (QCSL+SRSL)>0 AND (QCJE+SRJE)>0;--三、更新单据数据,出库单价UPDATE DJCHM SET CKDJ=ZZ.JCDJ,CKJE=ZZ.JCDJ*M.CKSL FROM DJCHM M INNER JOIN UTZZCH ZZ ON M.CHXH=ZZ.CHXH AND M.NY=ZZ.NY WHERE ZZ.NY=@HSNY AND CHARINDEX('出库',M.DJMC)<>0;--四、更新存货总账数据,出库WITH HSCK (NY,CHXH,FCJS,FCSL,FCJE) AS (SELECT O.NY,M.CHXH,SUM(CASE WHEN M.DJMC IN ('领用出库单','委外出库单','销售出库单') THEN M.BZJS ELSE 0 END) AS CKJS,SUM(M.CKSL),SUM(M.CKJE) FROM DJCHO O INNER JOIN DJCHM M ON O.OID=M.OID WHERE (O.NY = @HSNY) AND (O.DJR<>'') AND CHARINDEX('出库',O.DJMC)<>0 GROUP BY O.NY,M.CHXH)UPDATE UTZZCH SET FCJS=DJ.FCJS,FCSL=DJ.FCSL,FCJE=DJ.FCJE FROM UTZZCH AS ZZ INNER JOIN HSCK AS DJ ON (ZZ.NY=DJ.NY AND ZZ.CHXH=DJ.CHXH) WHERE ZZ.NY=@HSNY;--五、更新总账结存数量金额UPDATE UTZZCH SET JCSL=QCSL+SRSL-FCSL,JCJE=QCJE+SRJE-FCJE,JCJS=QCJS+SRJS-FCJS WHERE NY=@HSNY ;--六、更新总账余额 数量为0时金额不为零的核算误差DECLARE @ZZID INT,@CHXH NVARCHAR(10);DECLARE @JCJE DECIMAL(16,2);DECLARE HSWC_cursor CURSOR LOCAL FORSELECT ID,CHXH,JCJEFROM UTZZCHWHERE NY=@HSNY AND (JCSL=0 AND JCJE<>0);OPEN HSWC_cursor;FETCH FROM HSWC_cursor INTO @ZZID,@CHXH,@JCJE;WHILE @@FETCH_STATUS=0BEGINUPDATE UTZZCH SET JCJE=0,FCJE=FCJE+JCJE WHERE NY=@HSNY AND ID=@ZZID;WITH CKID (ID) AS (SELECT MAX(MID) AS ID FROM DJCHM WHERE NY=@HSNY AND CHXH=@CHXH AND (DJMC LIKE '%出库%'))UPDATE DJCHM SET CKJE=CKJE+@JCJE FROM DJCHM INNER JOIN CKID ON DJCHM.MID=CKID.ID;FETCH FROM HSWC_cursor INTO @ZZID,@CHXH,@JCJE;ENDCLOSE HSWC_cursor;DEALLOCATE HSWC_cursor ;--七、应付账款 --更新应付账款总账 借方贷方金额 采购入库单\委外入库单(加工费)部分UPDATE UTZZWL SET JFFS=0,DFFS=0,WBJF=0,WBDF=0 WHERE NY=@HSNY AND WLDW>'50';WITH HSYF (WLDW,JSWB,JFFS,DFFS,WBJF,WBDF) AS (SELECT O.WLDW,O.JSWB,0 AS JFFS,SUM(CASE WHEN O.DJMC='采购入库单' THEN M.CGJE WHEN O.DJMC='委外入库单' THEN M.JGJE ELSE 0 END) AS DFFS,0 AS WBJF,SUM(CASE WHEN O.DJMC='采购入库单' OR O.DJMC='委外入库单' THEN M.WBJE ELSE 0 END) AS WBDF FROM DJCHO O INNER JOIN DJCHM M ON O.OID = M.OID WHERE (O.NY = @HSNY) AND (O.DJR<>N'') AND (O.DJMC='采购入库单' OR O.DJMC='委外入库单')GROUP BY O.WLDW,O.JSWB)UPDATE UTZZWL SET JFFS=RK.JFFS,DFFS=RK.DFFS,WBJF=RK.WBJF,WBDF=RK.WBDF FROM UTZZWL AS ZZ INNER JOIN HSYF AS RK ON (ZZ.WLDW=RK.WLDW AND ZZ.WBMC=RK.JSWB) WHERE ZZ.NY=@HSNY;--更新应付账款总账 借方金额 付款单部分WITH HSCN (WLDW,JSWB,FKJE,FKZR,FKJEWB,FKZRWB) AS (SELECT O.WLDW,O.JSWB,SUM(M.FKJE) AS FKJE, SUM(M.FKZR) AS FKZR,SUM(M.FKJEWB) AS FKWBJE,SUM(M.FKZRWB) AS FKZRWB FROM DJCNO O INNER JOIN DJCNM M ON O.OID = M.OID WHERE (O.NY = @HSNY) AND (M.FKJE <> 0) AND (O.DJMC='付款单') AND (O.DJR <> N'')GROUP BY O.WLDW,O.JSWB)UPDATE UTZZWL SET JFFS=ZZ.JFFS+FKJE+FKZR,WBJF=ZZ.WBJF+FKJEWB+FKZRWB FROM UTZZWL AS ZZ INNER JOIN HSCN AS CN ON (ZZ.WLDW=CN.WLDW AND ZZ.WBMC=CN.JSWB) WHERE ZZ.WLDW>'50' AND ZZ.NY=@HSNY;--更新应付账款总账余额UPDATE UTZZWL SET YMYE=YCYE-DFFS+JFFS,WBYM=WBYC-WBDF+WBJF FROM UTZZWL WHERE NY=@HSNY;--六、更新以后年度总账:存货、往来 IF @HSNY<DBO.X9_DQNY()BEGINDECLARE @SYNY CHAR(6);DECLARE @DQNY CHAR(6);SET @SYNY=@HSNY;DECLARE ZZNY_cursor CURSOR LOCAL FORSELECT NYFROM MLNYWHERE NY>@HSNY;OPEN ZZNY_cursor;FETCH FROM ZZNY_cursor INTO @DQNY;WHILE @@FETCH_STATUS=0BEGIN--更新UTZZCHWITH SYZZ (CHXH,JCJS,JCSL,JCDJ,JCJE) AS (SELECT CHXH,JCJS,JCSL, JCDJ, JCJE FROM UTZZCH WHERE (NY = @SYNY))UPDATE UTZZCH SET QCJS=SYZZ.JCJS,QCSL=SYZZ.JCSL,QCDJ=SYZZ.JCDJ,QCJE=SYZZ.JCJE FROM UTZZCH AS ZZ INNER JOIN SYZZ ON ZZ.CHXH=SYZZ.CHXHWHERE ZZ.NY=@DQNY;UPDATE UTZZCH SET JCJS=QCJS+SRJS-FCJS,JCSL=QCSL+SRSL-FCSL,JCJE=QCJE+SRJE-FCJE WHERE NY=@DQNY ;UPDATE UTZZCH SET JCDJ=(QCJE+SRJE)/(QCSL+SRSL) WHERE NY=@DQNY AND (QCSL+SRSL)>0 AND (QCJE+SRJE)>0;--生成应付空账 INSERT INTO [UTZZWL] ([NY],[WLDW],WBMC)SELECT @DQNY AS NY,WLDH+'_'+WLMC AS WLDW,JSWB AS WBMC FROM MLWL WHERE DCMX=1 AND ((WLDH+'_'+WLMC) NOT IN (SELECT WLDW FROM UTZZWL WHERE NY=@DQNY));--更新YFZZ WITH SYYF (WLDW,WBMC,YMYE,WBYM) AS (SELECT WLDW,WBMC,YMYE,WBYM FROM UTZZWL WHERE (NY = @SYNY))UPDATE UTZZWL SET YCYE=SYYF.YMYE,WBYC=SYYF.WBYM FROM UTZZWL AS ZZ INNER JOIN SYYF ON (ZZ.WLDW=SYYF.WLDW AND ZZ.WBMC=SYYF.WBMC) WHERE ZZ.NY=@DQNY;UPDATE UTZZWL SET YMYE=YCYE+DFFS-JFFS,WBYM=WBYC+WBDF-WBJF FROM UTZZWL WHERE NY=@DQNY;SET @SYNY=@DQNY;FETCH NEXT FROM ZZNY_cursor INTO @DQNY;ENDCLOSE ZZNY_cursor;DEALLOCATE ZZNY_cursor ;END SELECT '存货核算已经完成!'
END TRY
BEGIN CATCHIF XACT_STATE() <> 0BEGINIF CURSOR_STATUS('LOCAL','HSWC_cursor')>=0 BEGINCLOSE HSWC_cursor;DEALLOCATE HSWC_cursor ;END IF CURSOR_STATUS('LOCAL','ZZNY_cursor')>=0 BEGINCLOSE ZZNY_cursor;DEALLOCATE ZZNY_cursor ;END ENDINSERT [dbo].[X9_ERRLOG] ([ErrorTime],[UserName], [ErrorNumber],[ErrorSeverity],[ErrorState], [ErrorProcedure], [ErrorLine], [ErrorMessage]) VALUES (GETDATE(),CURRENT_USER, ERROR_NUMBER() ,ERROR_SEVERITY(),ERROR_STATE(),ERROR_PROCEDURE(),ERROR_LINE(),ERROR_MESSAGE());SELECT '存货核算未能完成:'+CHAR(13)+CHAR(10)+ERROR_MESSAGE() ;
END CATCH;
正常情况下,存货核算数据在每项业务登记时已经完成,本过程用户数据发生非常调整时,如进价调整、售价调整等、实施期间的业务期间非正常跳转(回到月初、回到上月)等,或数据发生意外错误时,可以使用本过程一次性重新计算。
存货核算的存储过程设计相关推荐
- eas库存状态调整单不能反审核_金蝶EAS供应链管理标准操作规程(存货核算).doc
您所在位置:网站首页 > 海量文档  > 计算机 > 管理系统 金蝶EAS供应链管理标准操作规程(存货核算).doc8 ...
- oracle系统计算工资,基于Oracle EBS的工资核算系统的设计与实现
摘要: 随着信息技术的发展,越来越多的企业将会实施ERP系统.因各企业的业务差异,对系统将进行一定的二次开发.目前ERP实施过程中的二次开发存在诸多问题,经常导致项目延期及实施费用超出预算,所以总结一 ...
- Odoo免费开源ERP本地化存货核算解决方案访谈实录
引言 日前,开源智造研发部发布了Odoo13.0的存货核算功能组件.Odoo是欧洲开发的开源免费的企业管理软件,涵盖常见的ERP功能组件,如销售.采购.库存.财务.生产等模块,也包括电商.CRM.企业 ...
- 存货核算凭证无法删除的修复 U8 10.1存货核算中的凭证列表显示时,部分凭证会分两行显示,且不能删除...
一般是摘要过长的原因 U8 10.1存货核算中的凭证列表显示时,部分凭证会分两行显示,且不能删除 您好:此问题应是明细帐中有不可见非法字符引起,多数是在摘要列,请备份数据后,用此脚本进行整理 upd ...
- ERP NC50的系统参数-存货核算
ERP NC50的系统参数-存货核算 已有 446 次阅读2009/5/21 10:55 | 参数编码:IA0001 参数名称:出库单据是否允许自定义单价 参数值类型及编辑方法:逻辑型参数,单击下拉列 ...
- oracle总账与子模块对账,存货核算模块与总账模块对账不平
摘要: 存货核算模块与总账模块对账不平 存货系统中的与总账对账环节,经常发现存货系统的期初/收发存与总账的期初/收发存数据不一致. 存货与总账对账不平,存货系统是单据记完账的数据,总账是凭证记账完的数 ...
- 供应链与存货核算数据不一致
一.供应链数量不正确 1\现在需要再供应链里入库 3 个存货,但不能传存货核算 .所以需要通过参数 IA0033 来控制是否传存货核算. 2\现在去库存管理下作一张其它入库单,选择出库仓库和入库仓库都 ...
- u8销售出库单,存货核算正常单据记账找不到,库存管理弃审提示‘表体已记账’
财务在操作存货核算时,u8卡住,关闭后重新登录不上.登录界面提示找不到年度数据. 登录数据库服务器,发现mssqlserver服务被停止,查看日志发现有这一条 '由于出现异常 c0000005,SQL ...
- 用友U8案例教程存货核算后台配置
目录 存货核算选项 存货核算模块凭证科目设置 期初余额 存货核算选项 存货核算模块主要进行材料入库成本和出库成本的核算.本案例采用按仓库核算,采购暂估方式为单到回冲.出库成本采用全月平均法,在核算材料 ...
最新文章
- Android Activity 和 ViewGroup中事件触发和传递机制
- 进入保护模式(四)设置一些公用的方法
- HDU - 2196 Computer(树形dp)
- CSS 框模型( Box module )
- Python之魔法方法详解
- pwn环境搭建_[原创]CTF_Pwn环境搭建
- 使用BmFont制作unity可以使用的图集数字
- Length和lengthb的区别
- Python判断节假日 chinese_calendar
- freemarker导出Word文档并在其中插入图片
- 网站收录信息查询工具|世界排名
- linux防火墙reject,Iptables 扩展动作 Reject Mark
- 区块链溯源是什么?一文带您读懂!
- 一道积分不等式的最优估计探索
- APP二维码微信扫描后无法下载的问题 微信扫码(扫一扫二维码)下载不了app怎么解决
- 解决blur与click冲突
- 力扣21 - 合并两个有序链表【归并排序思维】
- C# 文件相关---新建文件、文件另存为、读写文件
- 嘉兴桐乡资格考证培训-教师证笔试科二必考冷门知识点整理
- 深圳GMP洁净车间设计基本要求SICOLAB