/// <summary> /// 物资退料 /// </summary> /// <param name="tk_form">单据表单信息</param> /// <param name="MSInfos">物资具体信息</param> /// <returns></returns> public string back(string tk_form, string MSInfos, int wfIdx) { string _return = String.Empty, _code = MConvert.getValue(tk_form, "code"), _whId = MConvert.getValue(tk_form, "whId"), _proId = MConvert.getValue(tk_form, "proId"); string _wfId = (new WFIndex(wfIdx, api)).addInstance("退料单号:" + _code, ""); SqlTrans trans = new SqlTrans(api); try { string[] _kv = MConvert.toKV(tk_form); string _users = trans.execScalar(MString.getSelectStr(R.Table.WF_INSTANCE, "owner", "id=" + _wfId)); string _newID = trans.addRow(R.Table.TK_WH_BACK, _kv[0] + ",wfId,users,observers", _kv[1] + "," + _wfId + ",'" + _users + "','" + _users + "'"); string[] infoAry = MSInfos.Split('^'); for (int i = 0, _len = infoAry.Length; i < _len; i++) { string _sInfo = infoAry[i], _pid = String.Empty, _msId = MConvert.getValue(_sInfo, "msId"); string[] _tKV = MConvert.toKV(_sInfo); double _num = MConvert.getDouble(_sInfo, "number"); ArrayList _stocks = trans.execJsonList("select {0} from {1} where msId={2} and remainNum<>0 and batchId<>0 and proId={3} order by cTime desc, id desc;", "id,whId,batchId,batchCode,batchPrice,number,remainNum", R.Table.TK_WH_SEND_DETAIL, _msId, _proId); for (int _n = 0; _n < _stocks.Count; _n++) { if (_num < 0 || _num == 0) { break; } Json _stock = (Json)_stocks[_n]; double _realNum = 0, _price = _stock.getDouble("batchPrice"); string _k = String.Empty, _v = String.Empty, _batchId = "0", _batchCode = "", _newWhId = _whId, _sendId = _stock.getValue("id"), _sourceId = _stock.getValue("whId"); _num = _num - _stock.getDouble("remainNum"); if (Native.isEmpty(_newWhId) || _newWhId == "0") { _newWhId = _sourceId; _batchId = _stock.getValue("batchId"); _batchCode = _stock.getValue("batchCode"); } if (_num > 0) { _realNum = _stock.getDouble("remainNum"); if (Native.isEmpty(_pid)) { _k = "msId,sourceId,proId,whId,oid,planNum"; _v = _msId + "," + _sourceId + "," + _proId + "," + _newWhId + "," + _newID + "," + MConvert.getValue(_sInfo, "planNum"); _pid = trans.execScalar(MString.getInsertStr(R.Table.TK_WH_BACK_DETAIL, _k, _v, true)); } _k = "sendId,msId,sourceId,proId,whId,oid,batchId,batchCode,price,number,sum"; _v = _sendId + "," + _msId + "," + _sourceId + "," + _proId + "," + _newWhId + "," + _newID + "," + _batchId + ",'" + _batchCode + "'," + _price + "," + _realNum + "," + _price * _realNum; trans.addTreeNode(R.Table.TK_WH_BACK_DETAIL, Convert.ToInt16(_pid), _k, _v); trans.execNonQuery("update " + R.Table.TK_WH_BACK_DETAIL + " set sum=sum+" + (_price * _realNum) + ", number=number+" + _realNum + " where id=" + _pid); } else { _realNum = _stock.getDouble("remainNum") + _num; if (!Native.isEmpty(_pid)) { _k = "sendId,msId,sourceId,proId,whId,oid,batchId,batchCode,price,number,sum"; _v = _sendId + "," + _msId + "," + _sourceId + "," + _proId + "," + _newWhId + "," + _newID + "," + _batchId + ",'" + _batchCode + "'," + _price + "," + _realNum + "," + _price * _realNum; trans.addTreeNode(R.Table.TK_WH_BACK_DETAIL, Convert.ToInt16(_pid), _k, _v); trans.execNonQuery("update " + R.Table.TK_WH_BACK_DETAIL + " set sum=sum+" + (_price * _realNum) + ", number=number+" + _realNum + " where id=" + _pid); } else { trans.addRow(R.Table.TK_WH_BACK_DETAIL, _tKV[0] + ",sendId,proId,whId,sourceId,oid,batchId,batchCode,price,sum,planSum", _tKV[1] + "," + _sendId + "," + _proId + "," + _newWhId + "," + _sourceId + "," + _newID + "," + _batchId + ",'" + _batchCode + "'," + _price + "," + (_realNum * _price) + "," + (MConvert.getDouble(_sInfo, "planNum") * _price)); } } } } _return = _newID; trans.commit(); } catch (Exception e) { trans.rollback(); _return = Native.getErrorMsg(e.Message); } finally { trans.close(); } return(_return); }