MYSQL数据库存储过程字符串分割实现入库退货

库存管理的商品入库退货 相对简单
存储过程代码
CREATE DEFINER=root@localhost FUNCTION rksfxxtjxgtuih(yewubianma int ,
danweibianma varchar(50), – 进货公司的代码
jingbanren varchar(10), – 经办人
fangshi varchar(10), – 付款方式
wj int, – 电脑操作人
beizu varchar(100), – 备注
yw varchar(10), – 业务类型
str varchar(8000) – 要入库商品字符串
) RETURNS varchar(50) CHARSET utf8mb4
DETERMINISTIC
label:BEGIN – 程序太长 用LEAVE label; 跳转结束 少用条件else 让程序好读一些

DECLARE zuidabianh INT DEFAULT 0;

DECLARE next INT DEFAULT 1;
DECLARE n INT DEFAULT 0;
DECLARE n2 INT DEFAULT 0;
DECLARE jcbm INT DEFAULT 0;
DECLARE shuliang INT DEFAULT 0;
DECLARE rkj decimal(16,2) DEFAULT 0;
– DECLARE ckj decimal(16,2) DEFAULT 0;
– DECLARE ph varchar(60) DEFAULT 0;
– DECLARE yxq varchar(20);
DECLARE bz varchar(50);
DECLARE crrq varchar(50);
DECLARE pdskr varchar(20) ;
DECLARE rukubianhaoyjbcg INT DEFAULT 0;

if yewubianma>0 THEN
select 收费人,日期 INTO pdskr,crrq from ckjlbmb where 业务编码=yewubianma;
if pdskr is not null THEN –
RETURN concat(‘数据已经上账不能修改!’, yewubianma,‘*’,crrq);
LEAVE label;
END IF;
END IF;

set n =(length(str) - length(replace(str,‘!’,‘’)))/8; – 字符长度

Insert Into ckjlbmb(往来单位,办理人,收费方式,微机,备注,业务类型) Values(danweibianma,jingbanren,fangshi,wj,beizu,yw);
set zuidabianh =LAST_INSERT_ID();
UPDATE ckjlbmb SET 业务编码=zuidabianh WHERE 序号=zuidabianh;
set n2=0;
set next=1;
while n2<n do – 循环提取 插入每条数据
SET jcbm= CAST(reverse(substring_index(reverse(substring_index(str,‘!’,next)),‘!’,1)) AS SIGNED );
SET shuliang=CAST(reverse(substring_index(reverse(substring_index(str,‘!’,next+1)),‘!’,1)) AS SIGNED );
SET rkj=CAST(reverse(substring_index(reverse(substring_index(str,‘!’,next+2)),‘!’,1)) AS decimal(16,2));
– SET ckj=CAST(reverse(substring_index(reverse(substring_index(str,‘!’,next+3)),‘!’,1)) AS decimal(16,2));
– SET ph=reverse(substring_index(reverse(substring_index(str,‘!’,next+4)),‘!’,1));
– SET yxq=reverse(substring_index(reverse(substring_index(str,‘!’,next+5)),‘!’,1));
SET bz=reverse(substring_index(reverse(substring_index(str,‘!’,next+6)),‘!’,1));
SET rukubianhaoyjbcg= CAST(reverse(substring_index(reverse(substring_index(str,‘!’,next+7)),‘!’,1)) AS SIGNED );
set next=next+8;

if yewubianma=0 THEN – 没有业务变编号 直接添加
Insert Into sjjlb(业务编码,入库编码,数量,单价,备注,入库价) Values(zuidabianh,rukubianhaoyjbcg,-shuliang ,rkj,bz,rkj);
ELSE
– 有业务编码的 看是否添加过
if not exists(select 入库编码 from sjjlb where 入库编码=rukubianhaoyjbcg and 业务编码=yewubianma) THEN
Insert Into sjjlb(业务编码,入库编码,数量,单价,备注,入库价) Values(yewubianma,rukubianhaoyjbcg,-shuliang ,rkj,bz,rkj);
ELSE
UPDATE sjjlb SET 数量=-shuliang,备注 =bz,单价=rkj,入库价=rkj WHERE 入库编码=rukubianhaoyjbcg AND 业务编码=yewubianma;
END IF;

END IF;

Set n2=n2+1;
end while;

if yewubianma>0 THEN
set zuidabianh= yewubianma;
END IF;

select 日期 INTO crrq from ckjlbmb where 业务编码=zuidabianh; – 查询插入信息日期
RETURN concat(‘入库退货数据添加成功 !’,zuidabianh,‘*’,crrq);

END
vb6 程序调用
Private Sub 商品入口退货()
‘检查收费合规 略
With MSHFlexGrid2
hangshu = .Rows - 2
shuzushuzu = .TextMatrix(1, 19) & “!” & .TextMatrix(1, 7) & “!” & .TextMatrix(1, 8) & “!” & .TextMatrix(1, 10) & “!” & Replace(.TextMatrix(1, 12), “!”, “”) & “!” & Replace(.TextMatrix(1, 13), “!”, “”) & “!” & .TextMatrix(1, 14) & “!” & .TextMatrix(1, 18) & “!”
If hangshu > 1 Then
For a1 = 2 To hangshu
shuzushuzu = shuzushuzu & .TextMatrix(a1, 19) & “!” & .TextMatrix(a1, 7) & “!” & .TextMatrix(a1, 8) & “!” & .TextMatrix(a1, 10) & “!” & Replace(.TextMatrix(a1, 12), “!”, “”) & “!” & Replace(.TextMatrix(a1, 13), “!”, “”) & “!” & .TextMatrix(a1, 14) & “!” & .TextMatrix(a1, 18) & “!”
Next a1
End If
SQL = Val(Textdjh) & ",’" & RKDW & “‘,’” & Textjbr & “‘,’” & Combo5 & “',” & blcaozuoyuanbm & “,'” & Text2 & “‘,’” & blyewu & “'”
‘业务编码 入库单位编码 经办人 收费方式 微机 备注 业务类型
SQL = SQL & “,” & "’" & shuzushuzu & “'”

If blyewu = “入库” Then SQL = “SELECT rksfxxtjxg(” & SQL & “) AS AnnualSalary;”
If blyewu = “入库退货” Then SQL = “SELECT rksfxxtjxgtuih(” & SQL & “) AS AnnualSalary;”

Set RST = CNN.Execute(SQL)
FHZ = RST!AnnualSalary
RST.Close
MsgBox FHZ, vbOKOnly + 64, “温馨提示”
'从返回值 提取
Text6 = Mid(FHZ, InStr(1, FHZ, “") + 1, 20)
Text6 = Format(Text6, “yyyy-mm-dd hh:mm”)
Textdjh = Mid(FHZ, InStr(1, FHZ, “!”) + 1, (InStr(1, FHZ, "
”) - InStr(1, FHZ, “!”) - 1))
单据显示

End With
End Sub
工作界面
没有高深代码 实际工作应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值