销售出货之有“备”无患
By:Suntime 2009-5-30
一、 需求背景:
CHL_K3在金蝶社区发贴《关于金蝶kis备货业务的处理流程》,提问如何在金蝶kis专业版中,如何解决销售出货的备货业务问题:
-------------------
我公司为生产企业。备货的含义:客户A确定要某种商品,但是仓库的货不一定全,需要生产或外购。等货物齐全了再统一给客户发货,这就要求仓库及时减少备货商品库存,防止其他业务员查这种商品库存时,发现有库存,给其客户B发货,其实这种商品是给客户A备的货。为了避免这种情况的出现必须将给客户准备的商品库存从即时库存中减掉。但是在查询总库存的时候还的体现出来。
有一种方法可以达到这种目的:同价调拨。可以设置一个虚拟的仓库“备货仓”。将需要准备的货物调入“备货仓”,这样既可以达到减少正常仓库库存的目的,又能查找到公司商品总的库存数量。但是工作量太大,因为调拨单不能直接通过销售订单生成,需要手动录入,而公司备货量通常有比较大。手工录入不太现实。
--------------------
原贴在此:http://community.kingdee.com/questions/Q357385.aspx
二、需求问题分析:
CHL_K3企业的销售备货业务,核心需求实际有三个:
1、对每一个需要进行销售备货的客户,在系统上进行单独的库存管控,不同客户备货库存之间不允许挪货、误发货。
2、备货库存能在即时库存、库存台账等账表中即刻查询。
3、通过《销售订单》下推生成《调拨单》,减少手工录入工作量。
实际上,CHL_K3在提问贴已经提出了解决方法,但CHL_K3忽略了一点,“销售备货仓”若设置为虚仓,在作《销售出库单》时会出问题,K3产品中,《销售出库单》等实仓类单据,是绝对不允许出现虚仓的;KIS Pro 产品中,《销售出库单》等实仓单类单据上,每张单据也至少需要一条实仓物料。这样控制,主要是为了解决存货核算问题。
三、需求实现:
本案例纯属玩票。
基本的实现方式:以销售订单为中心,进行业务控制;以“销售备货仓”为控制手段,进行库存控制。
1、建立仓库:如下图

若企业的备货库存,管控要求不十分严格,可以只建立一个“备货仓”;反之,则应为每一个客户建立一个备货仓。后者可以通过触发器来解决,在新增客户时,自动同步增加仓库。
2、在客户资料上新增“销售备货仓”字段,属性值为来源于“仓库”档案。

若企业需要管控的备货库较多,“备货仓库”字段值同样可以通地触发器来同步填充,为了避免误操作,可以设置此字段属性“在使用修改后不允许修改”,如同存货的计价方式、批次管理一样。
3、在《销售订单》单据头上新增“备货仓库”字段,由客户资料的“销售备货仓”携带过来,并可以修改(F7选择)。

4、定义并增加“销售订单→调拨单”业务流程。
需要在《调拨单》上增加“客户”、“选单类型”、“选单号”、“源单类型”、“源单ID”、“源单分录”、“源单号”等字段;需要在《销售订单》上增加“实际备货数量”字段,供反写使用。
一个必须的控制细节是:客户、调入仓库必须来源于《销售订单》的“客户”、“备货仓库”字段,且不允许修改。
5、修改“销售订单→销售出库”业务流程。
增加《销售订单》“备货仓库” →《销售出库单》“发货仓库”字段选单脚本,将备货仓库信息携带过来,并不允许被修改。

基本脚本如下:
INSERT INTO ICSelBills ( FID, FFieldName, FDstCtlField, FSelType, FDK, FColName, FName, FTableName, FTableAlias, FAction )
Values('B01','FOrderInterID','FDCStockID',0,0,'FDCStockID','FBakStockID','SEOrder','V1','')
INSERT INTO ICSelBills ( FID, FFieldName, FDstCtlField, FSelType, FDK, FColName, FName, FTableName, FTableAlias, FAction )
Values ('B01','FOrderInterID','FDCStockID',0,1,'FBakStockIDName','FName','t_Stock','t5','')
INSERT INTO ICSelBills ( FID, FFieldName, FDstCtlField, FSelType, FDK, FColName, FName, FTableName, FTableAlias, FAction )
Values ('B01','FOrderInterID','FDCStockID',0,2,'FBakStockIDNumber','FNumber','t_Stock','t5','')
INSERT INTO ICTableRelation ( FInterID, FTableName, FTableNameAlias, FFieldName, FTableName11, FTableNameAlias11, FFieldName11, FLogic, FBillID, FFieldID )
Values(4,'SEOrder','V1','FBakStockID','t_Stock','t5','FItemID','*=','B01','FOrderInterID')
6、屏蔽《销售出库单》、《生产领料单》、《其他出库单》等出库单对“销售备货仓”的选择,以避免误发货。
以《销售出库单》为例,基本脚本如下:
UPDATE ICTemplate SET FFilter='FTypeID not in (501,502,503) AND t_ICStock.FName not like '+''''+'销售备货仓%''' WHERE FID='B01' AND FFieldName='FDCStockID'
UPDATE ICTemplateEntry SET FFilter='FTypeID not in (501,502,503) AND t_ICStock.FName not like '+''''+'销售备货仓%''' WHERE FID='B01' AND FFieldName='FDCStockID'
其他《出库单》屏蔽原理亦同。
7、用KISBOS或查询分析器制作《销售备货、出货一览表》,以供查询各销售订单备货、出货及库存结余情况。限于时间关系,这里不再继续跟进。
四、会计核算处理
1、销售备货业务:
备货业务,实际上是利用仓库调拨来实现的,具体到单据凭证生成控制上,又有“同价调拨”和“异价调拨”之分,不过两者基本核算原理是相通的。
借:库存商品——XX客户销售备货仓
贷:库存商品——企业普通商品仓
贷:原材料——企业普通材料仓 等
2、销售出货业务:
借:银行存款
贷:主营业务收入——XX客户等
借:主营业务成本——XX客户
贷:库存商品——XX客户销售备货仓
五、其他说明
本次产品需要解决思路主要基于KIS 专业版 V10.X,但原理上同样适用目前所有的K IS专业版产品、及K/3 V10.0以来的产品。
本系列案例涉及对数据库的操作,特别是金蝶账套的单据模板数据表的修改,存在一定的数据风险,操作前请备份好账套。
本文档从金蝶社区和QQ群4362985散发。
若要转载,敬请注明出处。谢谢。
2009年5月30日稿。
By: Suntime
QQ: 408877590、89044458
E-mail: Suntime@163.com