ALTER TABLE inv22 MODIFY COLUMN i22_dec_tag DECIMAL(20,8) COMMENT '单包重量';
ALTER TABLE inv22 MODIFY COLUMN i22_dec_tare DECIMAL(20,8) COMMENT '皮重';
ALTER TABLE inv22 MODIFY COLUMN i22_dec_weight DECIMAL(20,8) COMMENT '操作重量';
ALTER TABLE inv22 MODIFY COLUMN i22_dec_pack_gross DECIMAL(20,8) COMMENT '单包毛重';
ALTER TABLE inv22_hst MODIFY COLUMN i22hst_dec_tag DECIMAL(20,8) COMMENT '单包重量';
ALTER TABLE inv22_hst MODIFY COLUMN i22hst_dec_tare DECIMAL(20,8) COMMENT '皮重';
ALTER TABLE inv22_hst MODIFY COLUMN i22hst_dec_weight DECIMAL(20,8) COMMENT '操作重量';
ALTER TABLE inv22_hst MODIFY COLUMN i22hst_dec_pack_gross DECIMAL(20,8) COMMENT '单包毛重';

ALTER TABLE inv21 MODIFY COLUMN i21_dec_tag DECIMAL(20,8) COMMENT '单包重量';
ALTER TABLE inv21 MODIFY COLUMN i21_dec_tare DECIMAL(20,8) COMMENT '皮重';
ALTER TABLE inv21 MODIFY COLUMN i21_dec_in DECIMAL(20,8) COMMENT '入库重量';
ALTER TABLE inv21 MODIFY COLUMN i21_dec_end DECIMAL(20,8) COMMENT  '剩余重量';
ALTER TABLE inv21 MODIFY COLUMN i21_dec_move DECIMAL(20,8) COMMENT '在途重量';
ALTER TABLE inv21 MODIFY COLUMN i21_dec_out DECIMAL(20,8) COMMENT '出库重量';
ALTER TABLE inv21 MODIFY COLUMN i21_dec_adj DECIMAL(20,8) COMMENT '调整重量';
ALTER TABLE inv21 MODIFY COLUMN i21_dec_pack_gross DECIMAL(20,8) COMMENT '单包毛重';

ALTER TABLE inv31 MODIFY COLUMN i31_dec_tag DECIMAL(20,8) COMMENT '单包重量';
ALTER TABLE inv31 MODIFY COLUMN i31_dec_tare DECIMAL(20,8) COMMENT '皮重';
ALTER TABLE inv31 MODIFY COLUMN i31_dec_in DECIMAL(20,8) COMMENT '入库重量';
ALTER TABLE inv31 MODIFY COLUMN i31_dec_end DECIMAL(20,8) COMMENT '剩余重量';
ALTER TABLE inv31 MODIFY COLUMN i31_dec_move DECIMAL(20,8) COMMENT '在途重量';
ALTER TABLE inv31 MODIFY COLUMN i31_dec_out DECIMAL(20,8) COMMENT '出库重量';
ALTER TABLE inv31 MODIFY COLUMN i31_dec_adj DECIMAL(20,8) COMMENT '调整重量';
ALTER TABLE inv31 MODIFY COLUMN i31_dec_pack_gross DECIMAL(20,8) COMMENT '单包毛重';

ALTER TABLE pur111 MODIFY COLUMN p111_dec_all_w DECIMAL(20,8) COMMENT '总重';
ALTER TABLE pur111 MODIFY COLUMN p111_dec_deal_w DECIMAL(20,8) DEFAULT 0 COMMENT '已处理重量';
ALTER TABLE inv111 MODIFY COLUMN i111_dec_all_w DECIMAL(20,8) COMMENT '总重';
ALTER TABLE inv111 MODIFY COLUMN i111_dec_deal_w DECIMAL(20,8) DEFAULT 0 COMMENT '已处理重量';
ALTER TABLE inv121 MODIFY COLUMN i121_dec_all_w DECIMAL(20,8) COMMENT '总重';

INSERT INTO `ver01`(`id`, `version`, `apk_name`, `generate_date`, `note`) VALUES (13, 'ifs.pda.6.4.x.zeson.260303.1', 'ZESON26030301.apk', '2026-03-03 10:06:37', NULL);
INSERT INTO `sys004`(`s004_id`, `s004_date_create`, `s004_id_creater`, `s004_flag_state`, `s004_int_line`, `s004_id_table`, `s004_id_audit`, `s004_date_audit`, `s004_id_dept`, `s004_id_com`, `s004_id_main`, `s004_id_menu`, `s004_var_menu`, `s004_var_title`, `s004_var_component`, `s004_var_filter`, `s004_flag_hidden`, `s004_var_icon`, `s004_flag_cach`, `s004_var_param`, `s004_flag_type`, `s004_busi_type`, `s004_id_obj_table`, `s004_var_path`, `s004_int_level`, `s004_id_mould`, `s004_var_compnent`, `s004_int_lines`, `s004_id_flow`, `s004_var_group`) VALUES ('876a3363-1614-11f1-8456-000c29bcdadf', '2026-03-02 16:48:25', 'c186b3da-1f9e-11e9-a0dc-02004c4f4f50', '正常', 1, 'rec02', NULL, NULL, '7bc6d0fd-cc68-11e9-9f24-00163e13f083', '0e4ca95c-8c60-46f5-8c94-46ab44d9da28', '5b969c15-758b-11e9-8216-00163e13f083', NULL, 'gridqry_std_rec02', '任务单物料损耗', 'custom/gridqry_std_rec02', NULL, 'N', NULL, NULL, NULL, NULL, NULL, NULL, 'rec02_qry111', NULL, '111', '', 63, NULL, NULL);

DELIMITER //
DROP PROCEDURE if EXISTs `proc_deal_inv22_adj`;//
DELIMITER ;

DELIMITER //
CREATE PROCEDURE `proc_deal_inv22_adj`(IN id_source VARCHAR(60),in ids varchar(60),in types varchar(60),in var_source varchar(60),out int_result int)
begin
 	#盘点单
	declare counts integer default 0;
	declare flag_check varchar(60) ;
	declare check_result varchar(60);
	DECLARE var_serial VARCHAR(60);
	declare dec_qty DECIMAL(20,5);
	declare dec_weight DECIMAL(20,8);
	DECLARE dec_tare DECIMAL(20,8);

	select i22_var_serial,i22_dec_qty,i22_dec_weight,i22_dec_tare 
	into var_serial,dec_qty,dec_weight,dec_tare 
	from inv22 
	where i22_id = ids;

	set int_result = 0;

	update inv31
	set  
	i31_dec_loss = i31_dec_loss + i31_dec_end - dec_weight,
	i31_dec_end = dec_weight,
	i31_dec_tare = dec_tare,
	i31_dec_adj = dec_weight-(i31_dec_in-i31_dec_out ),
	i31_dec_adj_qty = dec_qty-(i31_dec_in_qty-i31_dec_out_qty ),
	i31_date_last_check = NOW()
	where i31_id = var_serial;

	update inv22,inv21 
	set i22_dec_weight_ori =inv21.i21_dec_end
	where inv21.i21_var_serial= inv22.i22_var_serial 
	and inv22.i22_id =ids; 

	update inv21,inv22
	set 
	inv21.i21_dec_end = inv22.i22_dec_weight,
	inv21.i21_dec_tare=inv22.i22_dec_tare,
	inv21.i21_dec_adj=inv22.i22_dec_weight-(inv21.i21_dec_in-inv21.i21_dec_out ),
	inv21.i21_dec_adj_qty=inv22.i22_dec_qty-(inv21.i21_dec_in_qty-inv21.i21_dec_out_qty ),
	i21_date_last_check = NOW()
	where inv21.i21_var_serial= inv22.i22_var_serial 
	and inv22.i22_id = ids;
		
	#删除库存为空的记录
	DELETE FROM inv21 WHERE i21_var_serial = var_serial AND i21_dec_end <= 0;
		
end//
DELIMITER ;

DELIMITER //
DROP PROCEDURE if EXISTs `proc_deal_inv22_back`;//
DELIMITER;

DELIMITER //
CREATE PROCEDURE `proc_deal_inv22_back`(IN ids VARCHAR(60),IN p_var_serial VARCHAR(60),in var_source varchar(60),out int_result int)
begin
 
	#生产退料  
	declare counts integer default 0;
	declare i integer default 0;
	#操作量
	DECLARE dec_weight DECIMAL(20,8) DEFAULT 0;
	DECLARE id_item VARCHAR(60);
	DECLARE var_batch VARCHAR(60);
	#仓库类型
	DECLARE flag_wh_type VARCHAR(10);
	declare rec_id VARCHAR(60);
	#生产损耗(物料主线)
	DECLARE rec02_id VARCHAR(60);
	#领料单id
	declare id_picking_order VARCHAR(60);
	set int_result = 0;
	
	SELECT i22_dec_weight,i22_id_item,i22_var_batch INTO dec_weight,id_item,var_batch FROM inv22 WHERE i22_id = ids;
	
	IF var_source = '移库入库' THEN
				INSERT INTO inv22(i22_id, i22_date_create, i22_id_creater, i22_flag_state, i22_int_line, 
										i22_date_bill, i22_id_clerk, i22_id_source_table, i22_id_source, i22_bill_no, 
										i22_id_table, i22_int_year, i22_id_audit, i22_date_audit, i22_int_month, 
										i22_id_dept, i22_id_com, i22_id_main, i22_id_flow, i22_date_audit_act, 
										i22_var_bill_ori, i22_var_busi_no, i22_id_item,   i22_var_item, i22_code_item, 
										i22_var_serial, i22_var_batch, i22_dec_tag, i22_dec_tare, i22_id_unit, 
										i22_date_prod, i22_date_expire, i22_id_sup, i22_id_wh, i22_id_loc, 
										i22_id_container, i22_int_bag_count, i22_flag_half, i22_flag_checked, i22_flag_occu, 
										i22_flag_closed, i22_id_terminal, i22_flag_io, i22_var_serial_ori, i22_id_scale, 
										i22_flag_tag, i22_flag_bag, i22_dec_weight, i22_dec_qty, i22_var_source, 
										i22_id_pack, i22_id_source_ori,i22_id_supp,i22_var_supp,i22_id_customer,
										i22_dec_pack_gross,i22_var_batch_semi,i22_var_box_pattern,i22_dec_box_qty,i22_date_check,
										i22_date_check_expire,i22_var_checker,i22_var_maker,i22_var_gravity)
				SELECT uuid_short(), i22_date_create, i22_id_creater, i22_flag_state, i22_int_line, 
										i22_date_bill, i22_id_clerk, i22_id_source_table, i22_id_source, i22_bill_no, 
										i22_id_table,	i22_int_year, i22_id_audit, i22_date_audit, i22_int_month,
										i22_id_dept, i22_id_com, i22_id_main, i22_id_flow, i22_date_audit_act,
										i22_var_bill_ori, i22_var_busi_no, i22_id_item, i22_var_item, i22_code_item, 
										i22_var_serial, i22_var_batch, i22_dec_tag, i22_dec_tare, i22_id_unit, 
										i22_date_prod, i22_date_expire, i22_id_sup, i31_id_wh, i22_id_loc, 
										i22_id_container, i22_int_bag_count, i22_flag_half, i22_flag_checked, i22_flag_occu, 
										i22_flag_closed, i22_id_terminal, '0', i22_var_serial_ori, i22_id_scale,
										i22_flag_tag, i22_flag_tag, i22_dec_weight, i22_dec_qty, '移库出库',
										i22_id_pack, i22_id_source_ori,i22_id_supp,i22_var_supp,i22_id_customer,
										i31_dec_pack_gross,i31_var_batch_semi,i31_var_box_pattern,i31_dec_box_qty,i31_date_check,
										i31_date_check_expire,i31_var_checker,i31_var_maker,i31_var_gravity
				FROM inv22,inv31
				WHERE i22_id = ids 
				AND i22_var_serial = i31_id;
				
				#更新库存对应的仓库信息
				UPDATE inv22,inv31 SET i31_id_wh = i22_id_wh
				WHERE i31_id = i22_var_serial 
				AND i22_id = ids;
				
				UPDATE inv22,inv21 SET i21_id_wh = i22_id_wh
				WHERE i21_var_serial = i22_var_serial 
				AND i22_id = ids;
				
	ELSEIF var_source='退库' THEN 		
			
			#获取退的仓库类型
			SELECT c103_flag_type INTO flag_wh_type
			FROM ctlm103,inv22
			WHERE i22_id = ids
			AND c103_id = i22_id_wh;
			
			#若退的是不合格品库 库存变成不合格
			update inv31,inv22 
			SET i31_flag_inv = 'in',
			i31_id_wh = i22_id_wh,
			i31_id_loc = i22_id_loc,
			i31_var_cata = '',
			i31_flag_checked = IF(flag_wh_type = '4','N',i31_flag_checked)
			where i31_id = i22_var_serial 
			and i22_id = ids;
			
			#找该流水号最近一次领料记录对应的领料单
			SELECT i22_id_main INTO id_picking_order
			FROM inv22 WHERE i22_var_source = '领料单'
			AND i22_var_serial = p_var_serial
			ORDER BY i22_date_create DESC 
			LIMIT 1;
			
			IF IFNULL(id_picking_order,'') != '' THEN
				#根据领料单id、物料编码和批号更新最新一次的生产损耗记录
				SELECT rec01_id INTO rec_id 
				FROM record01,inv22
				WHERE i22_id = ids
				AND rec01_id_source = id_picking_order
				AND rec01_id_item = i22_id_item
				AND rec01_var_batch = i22_var_batch
				ORDER BY rec01_date_create DESC
				LIMIT 1;
				
				UPDATE record01
				SET rec01_dec_return = rec01_dec_return + dec_weight,
				rec01_dec_loss = rec01_dec_pick - rec01_dec_formula - rec01_dec_return
				WHERE rec01_id = rec_id;
				
				#将此次退库接收操作记录在对应的领料单中
				UPDATE out115,inv22
				SET o115_id_back_loc = i22_id_loc,
				o115_id_back_i22 = i22_id,
				o115_flag_received = 'Y'
				WHERE o115_id_o11 = id_picking_order
				AND o115_var_serial = p_var_serial
				AND i22_id = ids;

			END IF;
			
			#修改生产损耗(物料主线)的数据
			UPDATE record02
			SET rec02_dec_return = rec02_dec_return + dec_weight,
			rec02_dec_loss = rec02_dec_pick - rec02_dec_formula - rec02_dec_return
			WHERE rec02_id_item = id_item
			AND rec02_var_batch = var_batch;
					
			#插入库存表
			select count(i21_id) into counts from inv21 where inv21.i21_var_serial = p_var_serial;

				if counts= 0 then
					insert into inv21(i21_id,i21_flag_state,i21_date_create,i21_id_source,i21_var_bill_ori,
					i21_var_busi_no,i21_id_item,i21_var_item,i21_code_item,i21_var_serial,
					i21_var_batch,i21_dec_tag,i21_dec_tare,i21_dec_in,i21_dec_end,
					i21_dec_move,i21_dec_out,	i21_dec_in_qty,i21_dec_end_qty,i21_dec_move_qty,
					i21_dec_out_qty,i21_id_unit,i21_date_prod,i21_date_expire,i21_id_sup,
					i21_id_wh,i21_id_loc,i21_id_container,i21_int_bag_count,i21_flag_half,
					i21_flag_checked,i21_flag_occu,i21_flag_closed,i21_id_terminal,i21_flag_tag,
					i21_id_pack,i21_var_batch_prod,i21_var_cata,i21_id_supp,i21_var_supp,
					i21_id_customer,i21_id_creater,i21_date_recheck,i21_var_source_item,i21_var_remark,
					i21_dec_pack_gross,i21_var_batch_semi,i21_var_box_pattern,i21_dec_box_qty,i21_date_check,
					i21_date_check_expire,i21_var_checker,i21_var_maker,i21_var_gravity,i21_date_last_check,
					i21_var_quality_desc)
					select uuid_short(),'正常',i22_date_create,ids,'',
					'',i22_id_item,i22_var_item,i22_code_item,i22_var_serial,
					i22_var_batch,i22_dec_tag,i22_dec_tare,i22_dec_weight,i22_dec_weight,
					0,0,round(i22_dec_weight/i22_dec_tag,2),round(i22_dec_weight/i22_dec_tag,2),0,
					0,i22_id_unit,i22_date_prod,i22_date_expire,IFNULL(i22_id_sup,''),
					i22_id_wh,i22_id_loc,i22_id_container,i22_int_bag_count,i31_flag_half,
					i31_flag_checked,'N','N',i22_id_terminal,i22_flag_tag,
					i22_id_pack,i22_var_batch_prod,'',IFNULL(i22_id_supp,''),i22_var_supp,
					i22_id_customer,i22_id_creater,i31_date_recheck,i31_var_source_item,i22_var_remark,
					i31_dec_pack_gross,i31_var_batch_semi,i31_var_box_pattern,i31_dec_box_qty,i31_date_check,
					i31_date_check_expire,i31_var_checker,i31_var_maker,i31_var_gravity,i31_date_last_check,
					i31_var_quality_desc
					from inv22,ctlm102,inv31
					where inv22.i22_id=ids 
					and ctlm102.c102_id_item=inv22.i22_code_item 
					and i31_id=i22_var_serial
					AND i22_dec_weight > 0;	
							
					#从检验表获取是否检验合格，
		
				else								
						set int_result = 1; #重复扫码
				end if;

	END IF;
end//
DELIMITER ;

DELIMITER //
DROP PROCEDURE if EXISTs `proc_deal_inv22_back_out`;//
DELIMITER ;

DELIMITER //
CREATE PROCEDURE `proc_deal_inv22_back_out`(IN var_serial VARCHAR(60),in ids varchar(60),in types varchar(60),in var_source varchar(60),out int_result int)
begin
		DECLARE ori_weight DECIMAL(20,8) DEFAULT 0;
		#领料单id
		DECLARE id_picking_order VARCHAR(60);
		
    #退库出库
    set int_result = 0;
		
		#找该流水号最近一次领料记录对应的领料单
		SELECT i22_id_main INTO id_picking_order
		FROM inv22 WHERE i22_var_source = '领料单'
		AND i22_var_serial = var_serial
		ORDER BY i22_date_create DESC 
		LIMIT 1;
		
		IF IFNULL(id_picking_order,'') != '' THEN
			#将此次退库操作记录在对应的领料单中
			INSERT INTO out115(o115_id_o11,o115_id_i22,o115_var_serial,o115_id_back_loc,o115_id_back_i22,o115_flag_received)
			SELECT id_picking_order,ids,var_serial,'','','';
		END IF;
		
		DELETE FROM inv21 WHERE i21_var_serial = var_serial;
		
		SELECT i31_dec_end INTO ori_weight
		FROM inv31 WHERE i31_id = var_serial;
		
		#i31_var_cata记录选择的退回仓库
		UPDATE inv31,inv22 
		SET i31_flag_inv = 'back',
		i31_var_remark = i22_var_remark,
		i31_id_loc = '',
		i31_dec_end = i22_dec_weight,
		i31_dec_pack_gross = i22_dec_pack_gross,
		i31_var_cata = i22_var_cata,
		i31_id_source_table = i22_id_source_ori,
		i31_dec_end_qty = IF(i22_dec_qty > i31_dec_in_qty,i31_dec_in_qty,i22_dec_qty),
		i31_flag_half = IF(i22_dec_weight <> ori_weight,'Y',i31_flag_half)
		WHERE i31_id = var_serial
		AND i22_id = ids;
end//
DELIMITER ;

DELIMITER //
DROP PROCEDURE if EXISTs `proc_deal_inv22_out`;//
DELIMITER;

DELIMITER //
CREATE PROCEDURE `proc_deal_inv22_out`(IN id_main VARCHAR(60),IN id_source VARCHAR(60),in ids varchar(60),in types varchar(60),in var_source varchar(60),out int_result int)
begin
    #出库/领料
		DECLARE var_serial VARCHAR(60);
		#目标仓库编码
		DECLARE id_wh_obj VARCHAR(60) DEFAULT '';
		DECLARE bill_source_table VARCHAR(10);
		DECLARE bill_source VARCHAR(60);
		
    set int_result = 0;
    
    select i22_var_serial 
		into var_serial 
		from inv22 
		where i22_id = ids;

		SELECT IFNULL(i12_id_wh_obj,''),i12_id_source_table,i12_id_source INTO id_wh_obj,bill_source_table,bill_source FROM inv12 WHERE i12_id = id_main;
				
		update inv121 set i121_dec_deal_w=(select sum(i22_dec_weight) from  inv22 where i22_id_source =id_source and i22_flag_state='正常' ) where inv121.i121_id=id_source;
		update inv121 set i121_dec_deal=(select sum(i22_dec_qty) from  inv22 where i22_id_source =id_source and i22_flag_state='正常' ) where inv121.i121_id=id_source;


		/**
		io_flag=3 ,表示多包出一部分
		io_flag=1,全部出 不全重量是否相等;现有标签根本没修改，老程序存在bug
		如果是实际称量重量，并且原来数量是1，需要根据dec_tag,单包重量计算剩余量
		**/
		#更新库存表
		if(types='1') then
			IF id_wh_obj = '' THEN
				#无目标仓库
				### 全部出库  i31记录变成出库状态
				update inv31 set i31_flag_inv = 'out',i31_id_loc = '' where i31_id = var_serial;

				#删除库存为空的记录
				DELETE FROM inv21 WHERE i21_var_serial = var_serial;
			ELSE
				
				#有目标仓库 库存转到目标仓库
				IF bill_source_table = 'pr09' THEN
				
					#灌包装的包材、半成品领料出库
					#额外在i31_id_main 记录 pr09_id 用于之后灌包装复核后消掉i21数据
					UPDATE inv31 
					SET i31_id_wh = id_wh_obj,
					i31_id_loc = '',
					i31_id_main = bill_source
					WHERE i31_id = var_serial;
					
					UPDATE inv21 
					SET i21_id_wh = id_wh_obj,
					i21_id_loc = '',
					i21_id_main = bill_source
					WHERE i21_var_serial = var_serial;
				ELSE
					
					UPDATE inv31 SET i31_id_wh = id_wh_obj,i31_id_loc = '' WHERE i31_id = var_serial;
					UPDATE inv21 SET i21_id_wh = id_wh_obj,i21_id_loc = '' WHERE i21_var_serial = var_serial;
				END IF;
				
				##增加i22 移库记录
				INSERT INTO inv22(i22_id, i22_date_create, i22_id_creater, i22_flag_state, i22_int_line, 
				i22_date_bill, i22_id_clerk, i22_id_source_table, i22_id_source, i22_bill_no, 
				i22_id_table, i22_int_year, i22_id_audit, i22_date_audit, i22_int_month, 
				i22_id_dept, i22_id_com, i22_id_main, i22_id_flow, i22_date_audit_act, 
				i22_var_bill_ori, i22_var_busi_no, i22_id_item,   i22_var_item, i22_code_item, 
				i22_var_serial, i22_var_batch, i22_dec_tag, i22_dec_tare, i22_id_unit, 
				i22_date_prod, i22_date_expire, i22_id_sup, i22_id_wh, i22_id_loc, 
				i22_id_container, i22_int_bag_count, i22_flag_half, i22_flag_checked, i22_flag_occu, 
				i22_flag_closed, i22_id_terminal, i22_flag_io, i22_var_serial_ori, i22_id_scale, 
				i22_flag_tag, i22_flag_bag, i22_dec_weight, i22_dec_qty, i22_var_source, 
				i22_id_pack, i22_id_source_ori,i22_id_supp,i22_var_supp,i22_id_customer,
				i22_dec_pack_gross,i22_var_batch_semi,i22_var_box_pattern,i22_dec_box_qty,i22_date_check,
				i22_date_check_expire,i22_var_checker,i22_var_maker,i22_var_gravity)
				SELECT uuid_short(), i22_date_create, i22_id_creater, i22_flag_state, i22_int_line, 
				i22_date_bill, i22_id_clerk, i22_id_source_table, '', i22_bill_no, 
				i22_id_table,	i22_int_year, i22_id_audit, i22_date_audit, i22_int_month,
				i22_id_dept, i22_id_com, i22_id_main, i22_id_flow, i22_date_audit_act,
				i22_var_bill_ori, i22_var_busi_no, i22_id_item, i22_var_item, i22_code_item, 
				i22_var_serial, i22_var_batch, i22_dec_tag, i22_dec_tare, i22_id_unit, 
				i22_date_prod, i22_date_expire, i22_id_sup, id_wh_obj, '', 
				i22_id_container, i22_int_bag_count, i22_flag_half, i22_flag_checked, i22_flag_occu, 
				i22_flag_closed, i22_id_terminal,'0',i22_var_serial_ori, i22_id_scale,
				i22_flag_tag, i22_flag_tag, i22_dec_weight,i22_dec_qty,'出库移入',
				i22_id_pack, i22_id_source_ori,i22_id_supp,i22_var_supp,i22_id_customer,
				i31_dec_pack_gross,i31_var_batch_semi,i31_var_box_pattern,i31_dec_box_qty,i31_date_check,
				i31_date_check_expire,i31_var_checker,i31_var_maker,i31_var_gravity
				FROM inv22,inv31
				WHERE inv22.i22_id = ids
				AND i22_var_serial_ori = i31_id;
			END IF;
		elseif (types='3') then
			
			####被分出部分 更新i21 库存剩余量 
			update inv21,inv22
			set inv21.i21_dec_out = inv21.i21_dec_out + inv22.i22_dec_weight,
			inv21.i21_dec_out_qty = inv21.i21_dec_out_qty + inv22.i22_dec_qty,
			inv21.i21_dec_end = inv21.i21_dec_end - inv22.i22_dec_weight,
			inv21.i21_dec_end_qty = IF(inv21.i21_dec_end_qty > inv22.i22_dec_qty,inv21.i21_dec_end_qty - inv22.i22_dec_qty,0)
			where inv21.i21_var_serial= inv22.i22_var_serial_ori 
			and inv22.i22_id = ids;
				
			####被分出部分 更新i31 库存剩余量 
			update inv31 , inv22
			set i31_dec_out = i31_dec_out + inv22.i22_dec_weight,
			 i31_dec_out_qty = i31_dec_out_qty + inv22.i22_dec_qty,
			 i31_dec_end = i31_dec_end - inv22.i22_dec_weight,
			 i31_dec_end_qty = IF(i31_dec_end_qty > inv22.i22_dec_qty,i31_dec_end_qty - inv22.i22_dec_qty,0)
			where i31_id = inv22.i22_var_serial_ori 
			and inv22.i22_id = ids;
				
			####分出部分 增加i31库存记录 
			insert into inv31(i31_id,i31_flag_state,i31_date_create,i31_id_source,i31_var_bill_ori,
			i31_var_busi_no,i31_id_item,i31_var_item,i31_code_item,i31_var_serial,
			i31_var_batch,i31_dec_tag,i31_dec_tare,i31_dec_in,i31_dec_end,
			i31_dec_move,i31_dec_out,i31_dec_in_qty,i31_dec_end_qty,i31_dec_move_qty,
			i31_dec_out_qty,i31_id_unit,i31_date_prod,i31_date_expire,i31_id_sup,
			i31_id_wh,i31_id_loc,i31_id_container,i31_int_bag_count,i31_flag_half,
			i31_flag_checked,i31_flag_occu,i31_flag_closed,i31_id_terminal,i31_flag_tag,
			i31_id_pack,i31_var_batch_prod,i31_var_cata,i31_id_supp,i31_var_supp,
			i31_flag_inv,i31_dec_loss,i31_id_process,i31_var_process,i31_var_task,
			i31_var_batch_process,i31_flag_child,i31_var_serial_label,i31_id_customer,i31_var_remark,
			i31_date_bill,i31_id_creater,i31_date_recheck, i31_var_source_item,i31_dec_pack_gross,
			i31_var_batch_semi,i31_var_box_pattern,i31_dec_box_qty,i31_date_check,i31_date_check_expire,
			i31_var_checker,i31_var_maker,i31_var_gravity,i31_date_last_check,i31_var_quality_desc,
			i31_id_com,i31_id_main)
			select var_serial,'正常',NOW(),ids,'',
			'',i22_id_item,i22_var_item,i22_code_item,i22_var_serial,
			i22_var_batch,i22_dec_tag,i22_dec_tare,i22_dec_weight,i22_dec_weight,
			0,0,i22_dec_qty,i22_dec_qty,0,
			0,i22_id_unit,i22_date_prod,i22_date_expire,IFNULL(i22_id_sup,''),
			IF(id_wh_obj = '',i22_id_wh,id_wh_obj),i22_id_loc,i22_id_container,i22_int_bag_count,if(i22_dec_qty>=1,'N','Y'),
			i31_flag_checked,'N','N',i22_id_terminal,i22_flag_tag,
			i22_id_pack,i22_var_batch_prod,IFNULL(i22_var_cata,''),IFNULL(i22_id_supp,''),i22_var_supp,
			IF(id_wh_obj = '','out','in'),0,'','','',
			'','N','',i22_id_customer,'',
			i31_date_bill,i31_id_creater,i31_date_recheck, i31_var_source_item,i31_dec_pack_gross,
			i31_var_batch_semi,i31_var_box_pattern,i31_dec_box_qty,i31_date_check,i31_date_check_expire,
			i31_var_checker,i31_var_maker,i31_var_gravity,i31_date_last_check,i31_var_quality_desc,
			'1',IF(bill_source_table = 'pr09',bill_source,'')
			from inv22,inv31
			where inv22.i22_id = ids 
			AND i22_var_serial_ori = i31_id;
			
			#有目标仓库 则在目标仓库生成库存
			IF id_wh_obj != '' THEN
			
				##增加i21 分出部分i21记录
				INSERT INTO inv21(i21_id,i21_flag_state,i21_date_create,i21_id_source,i21_var_bill_ori,
				i21_var_busi_no,i21_id_item,i21_var_item,i21_code_item,i21_var_serial,
				i21_var_batch,i21_dec_tag,i21_dec_tare,i21_dec_in,i21_dec_end,
				i21_dec_move,i21_dec_out,i21_dec_in_qty,i21_dec_end_qty,i21_dec_move_qty,
				i21_dec_out_qty,i21_id_unit,i21_date_prod,i21_date_expire,i21_id_sup,
				i21_id_wh,i21_id_loc,i21_id_container,i21_int_bag_count,i21_flag_half,
				i21_flag_checked,i21_flag_occu,i21_flag_closed,i21_id_terminal,i21_flag_tag,
				i21_id_pack,i21_var_batch_prod,i21_id_supp,i21_var_supp,i21_id_customer,
				i21_id_creater,i21_date_recheck,i21_var_source_item,i21_dec_pack_gross,i21_var_batch_semi,
				i21_var_box_pattern,i21_dec_box_qty,i21_date_check,i21_date_check_expire,i21_var_checker,
				i21_var_maker,i21_var_gravity,i21_date_last_check,i21_var_quality_desc,i21_id_main)
				SELECT uuid_short(),'正常',NOW(),ids,'',
				'',i22_id_item,i22_var_item,i22_code_item,i22_var_serial,
				i22_var_batch,i22_dec_tag,i22_dec_tare,i22_dec_weight,i22_dec_weight,
				0,0,i22_dec_qty,i22_dec_qty,0,
				0,i22_id_unit,i22_date_prod,i22_date_expire,IFNULL(i22_id_sup,''),
				id_wh_obj,'',i22_id_container,i22_int_bag_count,IF(i22_dec_qty>=1,'N','Y'),
				i31_flag_checked,'N','N',i22_id_terminal,i22_flag_tag,
				i22_id_pack,i22_var_batch_prod,IFNULL(i22_id_supp,''),i22_var_supp,i22_id_customer,
				i22_id_creater,i31_date_recheck,i31_var_source_item,i31_dec_pack_gross,i31_var_batch_semi,
				i31_var_box_pattern,i31_dec_box_qty,i31_date_check,i31_date_check_expire,i31_var_checker,
				i31_var_maker,i31_var_gravity,i31_date_last_check,i31_var_quality_desc,IF(bill_source_table = 'pr09',bill_source,'')
				FROM inv22,inv31
				WHERE i22_id = ids 
				AND i22_var_serial_ori = i31_id;
				
				##增加i22 分出部分i22记录
				INSERT INTO inv22(i22_id, i22_date_create, i22_id_creater, i22_flag_state, i22_int_line, 
				i22_date_bill, i22_id_clerk, i22_id_source_table, i22_id_source, i22_bill_no, 
				i22_id_table, i22_int_year, i22_id_audit, i22_date_audit, i22_int_month, 
				i22_id_dept, i22_id_com, i22_id_main, i22_id_flow, i22_date_audit_act, 
				i22_var_bill_ori, i22_var_busi_no, i22_id_item,   i22_var_item, i22_code_item, 
				i22_var_serial, i22_var_batch, i22_dec_tag, i22_dec_tare, i22_id_unit, 
				i22_date_prod, i22_date_expire, i22_id_sup, i22_id_wh, i22_id_loc, 
				i22_id_container, i22_int_bag_count, i22_flag_half, i22_flag_checked, i22_flag_occu, 
				i22_flag_closed, i22_id_terminal, i22_flag_io, i22_var_serial_ori, i22_id_scale, 
				i22_flag_tag, i22_flag_bag, i22_dec_weight, i22_dec_qty, i22_var_source, 
				i22_id_pack, i22_id_source_ori,i22_id_supp,i22_var_supp,i22_id_customer,
				i22_dec_pack_gross,i22_var_batch_semi,i22_var_box_pattern,i22_dec_box_qty,i22_date_check,
				i22_date_check_expire,i22_var_checker,i22_var_maker,i22_var_gravity)
				SELECT uuid_short(), i22_date_create, i22_id_creater, i22_flag_state, i22_int_line, 
				i22_date_bill, i22_id_clerk, i22_id_source_table, '', i22_bill_no, 
				i22_id_table,	i22_int_year, i22_id_audit, i22_date_audit, i22_int_month,
				i22_id_dept, i22_id_com, i22_id_main, i22_id_flow, i22_date_audit_act,
				i22_var_bill_ori, i22_var_busi_no, i22_id_item, i22_var_item, i22_code_item, 
				i22_var_serial, i22_var_batch, i22_dec_tag, i22_dec_tare, i22_id_unit, 
				i22_date_prod, i22_date_expire, i22_id_sup, id_wh_obj, '', 
				i22_id_container, i22_int_bag_count, i22_flag_half, i22_flag_checked, i22_flag_occu, 
				i22_flag_closed, i22_id_terminal,'0',i22_var_serial_ori, i22_id_scale,
				i22_flag_tag, i22_flag_tag, i22_dec_weight,i22_dec_qty,'出库移入',
				i22_id_pack, i22_id_source_ori,i22_id_supp,i22_var_supp,i22_id_customer,
				i31_dec_pack_gross,i31_var_batch_semi,i31_var_box_pattern,i31_dec_box_qty,i31_date_check,
				i31_date_check_expire,i31_var_checker,i31_var_maker,i31_var_gravity
				FROM inv22,inv31
				WHERE inv22.i22_id = ids
				AND i22_var_serial_ori = i31_id;
			END IF;

			DELETE inv21 
			FROM inv21 
			INNER JOIN inv22        
			WHERE i21_var_serial = i22_var_serial_ori 
			AND i22_id = ids 
			AND i21_dec_end <= 0;

		end if ;
end//
DELIMITER ;
