|
以下是我在年初写的, 在用友ERP8.5的数据库基础上进行按照BOM分层次的成本核算的后台SQL代码,。
用这些SQL代码实现了95%的功能, 前台完全是对这些过程的调用,所以我最初前台用ACCESS来做的,后来又用VB.NET来写, 很快就完成了。
所有的代码都是我在洁净开发环境中完成,未参考任何第三方的资料。在汇总过程中没有使用递归。
主要步骤是
1。构造一个自己的BOM
2。从材料领用表中取出材料消耗数量和金额
3。显示材料领取与BOM标准的差异
4。手工录入各层次的制造工时。手工录入总制造费用,总人工费用。
5。按照制造工时,分摊制造费用和人工费用
6。按层次向上汇总制造费用,人工费用和材料费用。
这里主要考虑了,
1。同一物料(主要指非直接材料)可能一部分自制,一部分是外购,外购部分是不会产生制造和人工费用的,外购部分直接成为叶子,不再有子孙。
2。一个物料可能用在BOM不同层次组成不同父物料。
3。这里是按批号计算的,而且一个一批实际上只有一件,这个产品很特殊 :-)
4。这里的名词称谓不是ERP标准,按照树的称呼,例如把没有下级的物料,称为叶子
-----------------建立两张表-------------------------------
-- goodidea(朱彦志) 2005/02/25 16:33
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[AddInBomRoot]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[AddInBomRoot]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[AddInBomTree]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[AddInBomTree]
GO
CREATE TABLE [dbo].[AddInBomRoot] (
[cBatch] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[cPSPCode] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[cInvName] [varchar] (60) COLLATE Chinese_PRC_CI_AS NULL ,
[cInvStd] [varchar] (60) COLLATE Chinese_PRC_CI_AS NULL ,
[iQty] [money] NOT NULL ,
[bComplatedWhenCompute] [bit] NULL ,
[mMateCostAdd] [money] NOT NULL ,
[mProcCostAdd] [money] NOT NULL ,
[mPayCostAdd] [money] NOT NULL ,
[dInputTime] [datetime] NULL ,
[cInputer] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[dModifyTime] [datetime] NULL ,
[cModifier] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[saved] [bit] NOT NULL ,
[iStatus] [smallint] NOT NULL ,
[cUnit] [varchar] (4) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[AddInBomTree] (
[cPSCode] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[iPSQuantity] [money] NULL ,
[cPSPCode] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[iPSPOrder] [int] NOT NULL ,
[iLevel] [int] NULL ,
[iOrder] [int] NOT NULL ,
[cInvName] [varchar] (60) COLLATE Chinese_PRC_CI_AS NULL ,
[cInvStd] [varchar] (60) COLLATE Chinese_PRC_CI_AS NULL ,
[bIsLeafage] [bit] NOT NULL ,
[cBatch] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bComplated] [bit] NULL ,
[cRootCode] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[mProcHour] [money] NOT NULL ,
[mQtyInTree] [money] NOT NULL ,
[mQtyInFact] [money] NOT NULL ,
[mPrice] [money] NOT NULL ,
[mMateCost] [money] NOT NULL ,
[mProcCost] [money] NOT NULL ,
[mPayCost] [money] NOT NULL ,
[mMateCostAdd] [money] NOT NULL ,
[mProcCostAdd] [money] NOT NULL ,
[mPayCostAdd] [money] NOT NULL ,
[dInputTime] [datetime] NULL ,
[cInputer] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[dModifyTime] [datetime] NULL ,
[cModifier] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[bIsPurchase] [bit] NOT NULL ,
[AutoId] [bigint] IDENTITY (1, 1) NOT NULL ,
[bPrintFlag] [bit] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[AddInBomRoot] WITH NOCHECK ADD
CONSTRAINT [PK_AddInBomRoot] PRIMARY KEY CLUSTERED
(
[cBatch]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[AddInBomTree] WITH NOCHECK ADD
CONSTRAINT [PK_AddInBomTree] PRIMARY KEY CLUSTERED
(
[AutoId]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[AddInBomRoot] ADD
CONSTRAINT [DF_AddInBomRoot_iQty] DEFAULT (0) FOR [iQty],
CONSTRAINT [DF_AddInBomRoot_bComplatedWhenCompute] DEFAULT (0) FOR [bComplatedWhenCompute],
CONSTRAINT [DF_AddInBomRoot_mMateCostAdd] DEFAULT (0) FOR [mMateCostAdd],
CONSTRAINT [DF_AddInBomRoot_mProcCostAdd] DEFAULT (0) FOR [mProcCos |
|