找回密码
 立即注册
搜索
查看: 72|回复: 0

美团转销售-提示-‘pstplannos_d无效

[复制链接]

251

主题

134

回帖

1404

积分

版主

积分
1404

活跃会员宣传达人突出贡献优秀版主

发表于 2024-8-29 10:53:07 | 显示全部楼层 |阅读模式
/ Object: StoredProcedure [dbo].[p_he_erpsale] Script Date: 08/15/2019 14:22:49 /
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROC [dbo].[p_he_erpsale]
@userid VARCHAR(10) ,
@saleno VARCHAR(40) OUT
AS
BEGIN
/*
当前版本v1.1
v1.1 添加营业员
*/
DECLARE @msg VARCHAR(100)
    DECLARE @errortxt VARCHAR(1000);
    DECLARE @accdate DATETIME;
    SET @saleno = '';
    SET @accdate = CAST(CONVERT(VARCHAR(10), GETDATE(), 120) AS DATETIME);
    --平台
    DECLARE @hdorderno VARCHAR(30);
    DECLARE @busno VARCHAR(13)
    DECLARE @member VARCHAR(20)
    DECLARE @saler varchar(10)
    DECLARE @eccode VARCHAR(10);
    DECLARE @olshopid VARCHAR(10);
    DECLARE @olorderno    VARCHAR(30);
    DECLARE @payment NUMERIC(16, 6)
    DECLARE @para_2455 int --零售计算营业员积分的依据
    DECLARE @pile numeric(16,6)
    DECLARE @wareid varchar(13)
    DECLARE @salegroup varchar(10)
    DECLARE @shiftid int
    DECLARE @shiftdate DATETIME
    DECLARE @is_rtn INT
    select @payment  = sum( ROUND(ISNULL(netsum, 0), 2))
    FROM    #he_sale_pay
    SELECT  @hdorderno = hdorderno,
            @busno = busno,
            @eccode = eccode ,
            @olshopid = olshopid,
            @olorderno = olorderno,
            @saler = saler,
            @member = member,
            @shiftid = shiftid,
            @shiftdate = shiftdate
    FROM #he_sale_m
    select @para_2455 = para from c_sys_ini (nolock) where ini = '2455'
    select @salegroup = salegroup from c_org_busi where busno = @busno
    IF OBJECT_ID('tempdb..#t_last_sale_c_check') IS NOT NULL
        DROP TABLE #t_last_sale_c_check;
    CREATE TABLE #t_last_sale_c_check
        (
          saleno VARCHAR(40) ,
          wareid VARCHAR(13) ,
          wareqty NUMERIC(16, 6)
        );
    IF OBJECT_ID('tempdb..#t_salepst_memintegral') IS NOT NULL
        DROP TABLE #t_salepst_memintegral;
    CREATE TABLE #t_salepst_memintegral
        (
          memintegral_d NUMERIC(16, 4) NULL ,
          memintegrl_add NUMERIC(16, 4) NULL,
          pstplannos_d varchar(500),
          pstplannos_add varchar(500)
        );
    SET @is_rtn = 0
    IF EXISTS(SELECT 1 FROM #sale WHERE act_wareqty < 0)
        SET @is_rtn = 1 --是退单
    IF @is_rtn = 0
    BEGIN
        --屏蔽触发器
        if OBJECT_ID('#disable_u_sale_m') is null create table #disable_u_sale_m(i int)
        if OBJECT_ID('#disable_u_sale_c') is null create table #disable_u_sale_c(i int)
        if OBJECT_ID('#disable_u_sale_pay') is null create table #disable_u_sale_pay(i int)
        --扣减库存
        update u_store_c set u_store_c.wareqty=ISNULL(u_store_c.wareqty,0)-isnull(b.act_wareqty,0)
        from u_store_c,#sale b
        where u_store_c.batchno=b.batchno and u_store_c.wareid=b.wareid
        and u_store_c.idno=b.idno and u_store_c.stallno=b.stallno
        and u_store_c.busno=b.busno
        if @@ERROR<>0
        begin
            rollback
            raiserror('扣减库存失败',16,1)
            return
        end
        --库存校验
        if exists(select 1 from u_store_c,#sale b
        where u_store_c.batchno=b.batchno and u_store_c.wareid=b.wareid
        and u_store_c.idno=b.idno and u_store_c.stallno=b.stallno
        and u_store_c.busno=b.busno and u_store_c.wareqty<0)
        begin
            rollback
            raiserror('扣减库存后出现库存不平衡',16,1)
            return
        END
        SELECT TOP 1 @msg = '不存在库存明细('+'batchno:'+ISNULL(batchno,'')+',wareid:'+ISNULL(wareid,'')+',idno:'+ISNULL(idno,'')+',stallno:'+ISNULL(stallno,'')+',busno:'+ISNULL(busno,'')+')!'  
        FROM #sale b
        WHERE b.warekind = 1 and NOT EXISTS(SELECT 1 FROM u_store_c
                        where u_store_c.batchno=b.batchno and u_store_c.wareid=b.wareid
                        and u_store_c.idno=b.idno and u_store_c.stallno=b.stallno
                        and u_store_c.busno=b.busno )
        IF @@ROWCOUNT > 0
        begin
            rollback
            raiserror(@msg,16,1)
            return
        END
    END
–兑换损失(补零)
DECLARE @loss NUMERIC(16, 2);
SET @loss = ROUND(( SELECT SUM(ROUND(ISNULL(act_wareqty * netprice, 0),
2))
FROM #sale
) – ( SELECT SUM(ROUND(ISNULL(payment, 0), 2))
FROM #he_sale_m
), 2);
–获取零售单号
BEGIN TRAN t1;
EXEC p_skip ‘SAL’;
SELECT @saleno = serialno
FROM dbo.f_get_serialno(‘SAL’);
COMMIT TRAN t1;
DECLARE @rowno INT;
DECLARE @sale_rowid INT;
SET @sale_rowid = 0;
WHILE 1 = 1
BEGIN
SELECT TOP 1
@rowno = rowno,
@wareid = wareid
FROM #sale
WHERE flag_sale = 0;
IF @@ROWCOUNT <= 0
BREAK;
UPDATE #sale
SET flag_sale = 1
WHERE rowno = @rowno;
SET @sale_rowid = @sale_rowid + 1;
            --以商品资料中的积分计算
            if @para_2455 = 1
            begin
                select @pile = pile from u_ware_q where wareid = @wareid
            end
            --以价格组的积分计算
            if @para_2455 = 2
            begin
                select @pile = pile from u_ware_saleprice where groupid = @salegroup and wareid = @wareid
            end
            --当价格组积分大于零时以价格组为准,否则以商品资料为准
            if @para_2455 = 3
            begin
                select @pile = pile from u_ware_saleprice where groupid = @salegroup and wareid = @wareid
                if isnull(@pile,0) <= 0
                begin
                    select @pile = pile from u_ware_q where wareid = @wareid
                end
            end
     --生成零售明细
            INSERT  u_sale_c
                    ( saleno ,
                      rowid ,
                      busno ,
                      accdate ,
                      wareid ,
                      batchno ,
                      idno ,
                      stallno ,
                      makeno ,
                      stdprice ,
                      netprice ,
                      minprice ,
                      wareqty ,
                      groupid ,
                      saler ,
                      times ,
                      invalidate ,
                      minqty ,
                      stdtomin ,
                      disrate ,
                      distype ,
                      disno ,
                      message ,
                      purprice ,
                      purtax ,
                      bak1 ,
                      bak2 ,
                      avgpurprice ,
                      rowtype ,
                      insno ,
                      pile ,
                      storeqty ,
                      saletax
                    )
                    SELECT  saleno = @saleno ,
                            rowid = @sale_rowid ,
                            busno = a.busno ,
                            accdate = @accdate ,
                            wareid = a.wareid ,
                            batchno = a.batchno ,
                            idno = a.idno ,
                            stallno = a.stallno ,
                            makeno = a.makeno ,
                            stdprice = a.price ,--标价
                            netprice = a.netprice ,--实价
                            minprice = 0 ,--拆零售价
                            wareqty = a.act_wareqty ,
                            groupid = 1 ,
                            saler = @saler,
                            times = 1 ,
                            invalidate = a.invalidate ,
                            minqty = 0 ,
                            stdtomin = 1 ,--拆零比率
                            disrate = 1 ,
                            distype = 0 ,
                            disno = '' ,
                            message = '' ,
                            purprice = a.purprice ,--进价
                            purtax = a.purtax ,
                            bak1 = 0 ,
                            bak2 = '' ,
                            avgpurprice = u_ware_q.avgpurprice ,--加权进价
                            rowtype = CASE WHEN u_ware_q.warekind = 3
                                           THEN 3
                                           ELSE 1
                                      END ,
                            insno = NULL ,
                            pile = @pile ,
                            storeqty = CASE WHEN u_ware_q.warekind = 3
                                            THEN NULL
                                            ELSE a.storeqty
                                                 - a.act_wareqty
                                       END ,
                            saletax = u_ware_q.saletax
                    FROM    #sale a
                            LEFT JOIN u_ware_q(nolock) ON a.wareid = u_ware_q.wareid
                    WHERE   a.rowno = @rowno;
        END;
–生成零售主表
INSERT u_sale_m
( saleno ,
busno ,
posno ,
accdate ,
starttime ,
finaltime ,
payee ,
discounter ,
crediter ,
returner ,
warranter2 ,
warranter1 ,
warranter3 ,
warranter4 ,
warranter5 ,
stdsum ,
netsum ,
loss ,
member ,
precash ,
bak1 ,
bak2 ,
shiftid ,
shiftdate ,
yb_saleno
)
SELECT saleno = @saleno ,
busno = @busno ,
posno = @busno ,
accdate = @accdate ,
starttime = GETDATE() ,
finaltime = GETDATE() ,
payee = @userid ,–收银员
discounter = ” ,–打折授权人
crediter = ” ,–赊销授权人
returner = ” ,–退货授权人
warranter1 = ‘HE_SRC’ ,
warranter2 = @hdorderno ,
warranter3 = @eccode ,
warranter4 = @olshopid ,
warranter5 = @olorderno ,
stdsum = SUM(ROUND(ISNULL(act_wareqty * price, 0), 2)) ,–标价总金额
netsum = @payment ,–实价金额
loss = @loss ,–兑换损失
member = @member ,–会员卡号
precash = @payment ,–收现金额
bak1 = 0 ,
bak2 = ” ,
shiftid = @shiftid,–班次
shiftdate = @shiftdate,–班次日期
yb_saleno = ”
FROM #sale;
–生成零售支付表
INSERT u_sale_pay
( saleno ,
paytype ,
cardno ,
netsum ,
bak1 ,
bak2
)
SELECT @saleno ,
paytype ,
NULL ,
ROUND(ISNULL(netsum, 0), 2) ,
NULL ,
NULL
FROM #he_sale_pay a
--检测u_sale_c与u_sale_pay的平衡
    IF ( SELECT SUM(ROUND(ISNULL(wareqty * netprice, 0), 2))
         FROM   u_sale_c(nolock)
         WHERE  saleno = @saleno
       ) - @loss <> ( SELECT    SUM(ROUND(ISNULL(netsum, 0), 2))
                      FROM      u_sale_pay(nolock)
                      WHERE     saleno = @saleno
                    )
        BEGIN
            ROLLBACK;
            SET @errortxt = 'sum(round(isnull(u_sale_c.wareqty*u_sale_c.netprice,0),2))-@loss<>sum(round(u_sale_pay.netsum,2))';
            RAISERROR(@errortxt,16,1);
            RETURN;
        END;
–检测paytype
IF EXISTS ( SELECT 1
FROM u_sale_pay(nolock)
WHERE u_sale_pay.saleno = @saleno
AND NOT EXISTS ( SELECT 1
FROM c_dddw(NOLOCK)
WHERE c_dddw.dddwno = ‘222’
AND c_dddw.dddwlist = u_sale_pay.paytype ) )
BEGIN
ROLLBACK;
SET @errortxt = ‘有支付类型非法’;
RAISERROR(@errortxt,16,1);
RETURN;
END;
IF @is_rtn = 0
BEGIN
    if OBJECT_ID('#disable_u_sale_m') is not null drop table #disable_u_sale_m
    if OBJECT_ID('#disable_u_sale_c') is not null drop table #disable_u_sale_c
    if OBJECT_ID('#disable_u_sale_pay') is not null drop table #disable_u_sale_pay
--执行扩展触发器代码
    declare @triggername  varchar(100)
    select @triggername = 'tr_u_sale_c'
    if exists(select 1 from c_trigger_ext(nolock) where triggername = @triggername and status_use = 1 and ltrim(rtrim(isnull(sql,''))) <> '')
    BEGIN
       EXEC('select * into #inserted from u_sale_c WHERE saleno = '''+@saleno+'''
       select * into #deleted from u_sale_c WHERE 1 <> 1
       exec p_trigger_ext '''+@triggername+'''')
    end
    select @triggername = 'tr_u_sale_m_i'
    if exists(select 1 from c_trigger_ext(nolock) where triggername = @triggername and status_use = 1 and ltrim(rtrim(isnull(sql,''))) <> '')
    BEGIN
       EXEC('select * into #inserted from u_sale_m WHERE saleno = '''+@saleno+'''
       select * into #deleted from u_sale_m WHERE 1 <> 1
       exec p_trigger_ext '''+@triggername+'''')
    end
    select @triggername = 'tr_u_sale_pay_i'
    if exists(select 1 from c_trigger_ext(nolock) where triggername = @triggername and status_use = 1 and ltrim(rtrim(isnull(sql,''))) <> '')
    BEGIN
       EXEC('select * into #inserted from u_sale_pay WHERE saleno = '''+@saleno+'''
       select * into #deleted from u_sale_pay WHERE 1 <> 1
       exec p_trigger_ext '''+@triggername+'''')
    end
END
END
GO

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表