出入库管理

cybozu发表于:2016年11月04日 10:43:17更新于:2019年09月24日 14:49:27

概要

有些商流公司可能需要用到出库和入库的管理,
其实kintone也能进行简单的管理。
通过建立库存Master和出入库管理应用,
便可通过选择出入库方式,对库存中的产品数量进行更新。
如果在出库的时候,有库存不足情况,可以设置库存不足提醒,规避风险。

实现方法

建立产品库存用的库(库存Master)

1. 所用到的字段

字段名称字段类型字段代码
商品编号单行文本框code
商品名称单行文本框name
在库数数值count
安全库存数值safecount

关于安全库存:
库存管理表中在库数小于安全在库数的时候,在库数项目高亮表示。

2.制作完后的效果

001581bf9f990386e8cf0b7635f86eb

001581bfa201d0b761bce2998770143

建立出入库管理应用

001581bfa718e87a410ca4bb958c743

此处日期和出入库下拉菜单就不再赘述了。

接下来,给大家解释下出入库明细的各个项目。
此处的商品名称为lookup,具体设置如下:

001581bfba875f0187dee3fb2ee54ac

商品编号的设置和库存Master中的商品编号设置相同,
数量的设置和库存Master中的在库设置相同,
此3项设定完后,把他们设置到一个表格中,字段名设置为table。

进行出入库管理应用的流程管理设置

001581bfdcd9eb7861de29c33155c97

编写代码

(function ()
{
	"use strict";

	////////////////////////////////////////////////////////////////////////////
	// 編集開始event
	////////////////////////////////////////////////////////////////////////////
	function processProceed(event)
	{
		var record = event.record;
		var action = event.action;
		// 点击‘入库’或者‘出库’是执行
		if(action.value == '入库' || action.value == '出库'){
			
			var app = kintone.app.getLookupTargetAppId('name');
			var params = {};
			// 获取出入库明细中的所有产品编号
			var query ='code in (';
			
			for(var i = 0 ;i< record['Table']['value'].length; i++){
					if(i == 0){	
						query = query + record['Table']['value'][i]['value']['code']['value'];
					}else{
						query = query + ',' + record['Table']['value'][i]['value']['code']['value'];
					}
			}
			query = query + ')';
			
			params['app'] = app;
			
			params['query'] = query;
			
			return new kintone.Promise(function(resolve, reject)
			{ //取得在库master中相应产品的记录信息 
				kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params,function(resp)
				{
					var jsons = {};
					jsons['app'] = app;
		
					var records =  new Array();
					
					var message = '';
					var flg = false;
					
					for(var i in resp.records){
						
						var json = {};
						var data = resp.records[i]
						json['id'] = data['$id']['value'];
						json['revision'] =data['$revision']['value'];
						json['record']={};
						json['record']['count'] = {};
						
						var total = 0;
						
						for(var j=0; j<record['Table']['value'].length;j++ ){
							// 库存Master中产品与出入库明细中产品相同的时候进行处理
							if(record['Table']['value'][j]['value']['code']['value'] == data['code']['value']){
								
								if(record['type']['value'] == '出库'){
									//出库的时候,计算剩余库存
									total = Number(data['count']['value']) - Number(record['Table']['value'][j]['value']['count']['value']);
									// 库存不足的时候,错误信息
									if(Number(total)< 0){
										message = message + data['code']['value'] + '  ';
										flg = true;
									}
								}else{
									//入库的时候,计算合计库存
									total = Number(data['count']['value']) + Number(record['Table']['value'][j]['value']['count']['value']);
								}
							}
						}
						json['record']['count']['value'] = total;
						records.push(json);
					}
					// 库存不足报错
					if(flg){
						event.error ='编号:'+ message + '库存不足';
						resolve(event);
						return;
					}
			
					jsons['records'] = records;
					// 库存Master更新
					kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', jsons,
					function(resp)
					{
						resolve(event);
					});
				},
				function(resp)
				{
					alert(JSON.stringify(resp));
					resolve(event);
				});
			});
		}
	}

	kintone.events.on(['app.record.detail.process.proceed'], processProceed);

})();

库存Master的应用

可在此应用中添加商品和管理安全在库数和在库数

001581bfefbadeeee63ef0a38bcb000

出入库操作的应用

入库操作

1. 选择完相关项目后保存

001581bffb825b547b7d01b3a851108

2. 保存完了后进入流程管理

001581bffe93c3b9c2eeef76275c34a

出库操作

1. 选择完相关项目后保存

001581c00185793abdbdee1c83fe26e

2. 保存完了后进入流程管理

001581c0027d8f24d4d5d0f92ec2d88

出库时库存不足的错误提示

001581c00484bf0df0fb7e498088811