金蝶kis专业版(金蝶KIS专业版销售价格政策的二次开发)

 2025-07-25 10:03:01  阅读 302  评论 0

摘要:今天有一个客户提出一个需求:在销售开单的时候,要自动带出销售价格。先看一下金蝶KIS专业版系统本身的功能:销售价格政策可以做到周期定价,按`客户类别+物料`或者`客户+物料`这2种维度,按订货量的阶梯进行报价。但是客户的要求是:按照不同的客户类别,在最近采购价格的基

今天有一个客户提出一个需求:在销售开单的时候,要自动带出销售价格。

先看一下金蝶KIS专业版系统本身的功能:销售价格政策可以做到周期定价,按`客户类别+物料`或者`客户+物料`这2种维度,按订货量的阶梯进行报价。

但是客户的要求是:按照不同的客户类别,在最近采购价格的基础上进行上浮n个百分点(下称`客户毛利`)。

举个例子:1级客户利润率为5%,2级客户利润率为7%。最近采购订货价格为50,那么给1级客户进行销售开单时,销售价格应等于:50*(1+0.05);给2级客户进行销售开单时,销售价格应等于:50*(1+0.07)。

下面看一下如何实现?

思路

第一步、设置客户类别和客户毛利的对应关系表第二步、新建`客户类别+物料`的销售价格政策,作为客户最新销售价格的载体,每次新增物料时自动把物料同步到价格政策里面第三步、当采购订单审核时,将`采购单价*客户毛利`更新至销售价格政策表里面

第一步 客户分类和客户毛利对应表

在金蝶KIS专业版里面,客户分类是作为辅助资料存在的,其属性无法新增自定义的字段值。

金蝶KIS专业版销售价格政策的二次开发

辅助资料-客户分类

那如何给客户类别指定具体的毛利值呢?

最初想着是在数据库的辅助资料表(t_SubMessage)中新增一个字段,提前在数据库中更新好。但是如果客户想自己维护修改这个值,或者有新增加的客户类别,就很不方便。

于是想了个办法:

我们知道,在金蝶KIS专业版的核算项目资料中,可以新增自定义核算项目,并且可以对新增的自定义核算项目添加属性字段。所以,可以在核算项目里面做一下文章。

金蝶KIS专业版销售价格政策的二次开发

自定义核算项目

利用自定义核算项目就可以实现客户分类和客户毛利的对应表。

为了让客户感觉更人性化,这里做了一个同步的功能:当辅助资料中新建了客户类别之后,系统会自动将代码和名称同步到核算项目里面。

实现思路

当辅助资料表中插入客户类别后,在核算项目表中的客户毛利中插入同样的数据

相关表

客户类别:select * from t_SubMessage where FTypeID = 501

自定义核算项目-客户毛利:select * from t_Item where FItemClassID = 3001

自定义属性-毛利:select * from t_Item_3001

金蝶KIS专业版销售价格政策的二次开发

后台表和关联关系

主要关联关系:将客户类别内码传递到客户毛利的编码中。

代码

create trigger tr_SubMessage_MaoliEntry
on t_SubMessage
for insert 
as
begin
declare @FItemClassID int = 3001 -- 自定义核算项目“客户毛利”的分类内码
declare @FNumber int             -- 辅助资料中“客户类别”的内码
declare @FName nvarchar(255)     -- 辅助资料中“客户类别”的名称
if exists (select * from inserted where FTypeID = 501)
select @FNumber = FInterID,@FName = FName from inserted
insert into t_item(fitemclassid,fnumber,fparentid,flevel,fdetail,fname,ffullnumber,fshortnumber)
values (@FItemClassID,@FNumber,0,1,1,@FName,@FNumber,@FNumber)
end

第二步 新增物料自动插入到价格方案中

先按照`客户类别`+`物料`建立一个价格政策方案:

金蝶KIS专业版销售价格政策的二次开发

销售价格方案

为了方便客户使用,想实现每次新增物料时,自动将物料同步到价格方案中。

这里遇到了一些困难:

物料表是t_icitem,当我在`create trigger on t_icitem for insert`的时候,发现报错了:

消息 8197,级别 16,状态 6,过程 t_fj,第 1 行
对象 't_icitem' 不存在,或对此操作无效。

原来t_icitem是`视图`,所以需要用`create trigger on t_icitem instead of insert`,之前的《SQL触发器及存储过程学习,一个门外汉的学习笔记》里面有说过触发器分2种,`for/after`是不能用于视图的。所以用`instead of`,然而:

消息 2111,级别 16,状态 1,过程 t_fj,第 6 行
无法对 视图 't_icitem' 创建 触发器 't_fj',因为此对象已有 INSTEAD OF INSERT 触发器。

系统已经在`t_icitem`表上创建了`instead of`触发器,而且一个表只能存在一个`instead of`触发器。只能在原来的基础上去新增`insert`语句了。

找到原始代码

金蝶KIS专业版销售价格政策的二次开发

在触发器上点击鼠标右键-修改。

添加代码

IF not EXISTS (SELECT 1 FROM deleted) 
begin 
insert into ICPrcPlyEntry(FInterID,FItemID,FRelatedID,FModel,FAuxPropID,FUnitID,FBegQty,FEndQty,FCuryID,FPriceType,FPrice,FBegDate,FEndDate,FLeadTime,FNote,FChecked,FIndex,FTime,FID,FBase,FBase1,FBegQty_Base,FEndQty_Base,FInteger,FClassTypeID,FBCust,FB2CustCls,FB2Emp,FB2EmpCls,FB2VipGrp,FB2Cust,FB2ItemID,FB2Item,FFlagSave)
select
3 as "FInterID", -- 价格政策方案的内码
t1.fitemid as "FItemID",  --物料id
t2.FInterID as "FRelatedID",
0 as "FModel",
0 as "FAuxPropID",
t1.FSaleUnitID as "FUnitID",
0 as "FBegQty",
999999 as "FEndQty",
1 as "FCuryID",
0 as "FPriceType",
1 as "FPrice",
'2020-01-01 00:00:00.000' as "FBegDate",
'2090-01-01 00:00:00.000' as "FEndDate",
0 as "FLeadTime",
'新增物料自动生成' as "FNote",  --FNote
0 as "FChecked",    --FChecked
1 as "FIndex",
null as "FTime",
0 as "FID",0 AS "FBase",0 as "FBase1",0 as "FBegQty_Base",0 as "FEndQty_Base",0 as "FInteger",0 as "FCLassTypeID",0 as "FBCust",0 as "FB2CustCls",0 as "FB2Emp",0 as "FB2EmpCls",0 as "FB2VipGrp",0 as "FB2Cust",0 as "FB2ItemID",0 as "FB2Item",'' as "FFLagSave"
from inserted t1 left join t_submessage t2 on 1=1 where t2.ftypeid = 501
end

这里值得注意的是:

在同一个Trigger里同时包含Insert,Update,Delete。需要对执行过程进行一下判断。

开始没有判断的时候,总是插入重复的记录,每次修改物料名称或代码也会重复插入重复的记录。

困扰了好长时间,最后找到参考:https://www.bbsmax.com/A/qVdeg47pJP/。

create trigger 触发名 on 表名
instead of insert,update,delete
as
--insert插入
if not exists(select 1 from deleted)
begin
打印插入
end 
 
--update更新
if exists(select 1 from inserted) and exists(select 1 from deleted)
begin
打印修改
end 
 
--delete删除
if not exists(select 1 from inserted)
begin
打印删除
end
go
 
只判断更改了某列
if update(colname)

第三步 更新价格方案

当采购订单审核之后,将采购价格*毛利 更新至价格方案的报价中。并且审核报价。

思路

采购订单按照基本计量单位的含税单价进行计算,价格政策中的计量单位要考虑换算率的问题。

难点

难点一、多计量单位的情况下,怎么计算价格难点二、关联的表比较多,有采购订单表头、表体、价格政策表、辅助资料表、计量单位表、自定义核算项目表。

代码

alter trigger tr_POOrder_UICPrc 
on POOrder
for update
as
begin
declare @FInterID int
declare @FCheckerID int
if update(FCheckerID) begin
select @FInterID = FInterID,@FCheckerID = FCheckerID from deleted
if @FCheckerID is null begin
if OBJECT_ID('tempdb..#prc') is not null        
drop table #prc
create table #prc(FEntryID int , FPrice decimal(23,10))
insert into #prc(FEntryID,FPrice) 
select v1.t2PrcFentryID,v1.FSprc from (
select t1.FItemID as "t1POFItemID",t1.FQty,t1.FPrice,t1.FPriceDiscount,
t2.FEntryID as "t2PrcFentryID",t2.FInterID as "t2PrcFinterID",t2.FItemID,t2.FUnitID,
t3.FName,t3.FInterID,t3.FTypeID,t6.F_102,
t4.FCoefficient,
t1.FPriceDiscount * t4.FCoefficient * (1+t6.F_102/100) as "FSprc"
from POOrderEntry t1 left join ICPrcPlyEntry t2 on t1.FItemID = t2.FItemID 
left join t_SubMessage t3 on t3.FInterID = t2.FRelatedID
left join t_MeasureUnit t4 on t4.FMeasureUnitID = t2.FUnitID
left join t_item t5 on t5.fnumber = cast(t3.finterid as varchar)
left join t_item_3001 t6 on t6.fitemid = t5.fitemid
where t3.FTypeID = 501 and t2.FInterID = 3 and t1.FInterid = @FInterID) v1
select * from #prc
update t1 set t1.FPrice = t2.FPrice,t1.FChecked = 1 from ICPrcPlyEntry t1,#prc t2 where t1.FEntryID = t2.FEntryID
end
end
end

用到的相关表

价格政策表头:select * from ICPrcPly

价格政策表体:select * from ICPrcPlyEntry

物料视图:select * from t_icitem

核算项目:select * from t_item

计量单位:select * from t_MeasureUnit

辅助资料:select * from t_SubMessage where FTypeID = 501

核算项目:select * from t_item where fitemclassid = 3001

核算项目属性:select * from t_item_3001

采购订单表体:select * from POOrderEntry

客户:select * from t_Organization

版权声明:我们致力于保护作者版权,注重分享,被刊用文章【金蝶kis专业版(金蝶KIS专业版销售价格政策的二次开发)】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!;

原文链接:https://www.yxiso.com/fangfa/1952350.html

发表评论:

关于我们
院校搜的目标不仅是为用户提供数据和信息,更是成为每一位学子梦想实现的桥梁。我们相信,通过准确的信息与专业的指导,每一位学子都能找到属于自己的教育之路,迈向成功的未来。助力每一个梦想,实现更美好的未来!
联系方式
电话:
地址:广东省中山市
Email:beimuxi@protonmail.com

Copyright © 2022 院校搜 Inc. 保留所有权利。 Powered by BEIMUCMS 3.0.3

页面耗时0.0355秒, 内存占用1.93 MB, 访问数据库24次

陕ICP备14005772号-15

  • 我要关灯
    我要开灯
  • 客户电话

    工作时间:8:00-18:00

    客服电话

    电子邮件

    beimuxi@protonmail.com

  • 官方微信

    扫码二维码

    获取最新动态

  • 返回顶部