/// <summary> /// 保存(传入事务处理) /// </summary> /// <param name="p_Entity"></param> /// <param name="p_BE"></param> /// <param name="sqlTrans"></param> public void RSaveOther(IOForm p_Entity, IOFormDts[] p_EntityDts, ArrayList list, IDBTransAccess sqlTrans) { try { string sql = string.Empty; int FormListTopType = IOFormDtsRule.GetFormListTopTypeByFormListID(p_Entity.HeadType, sqlTrans);//顶层单据类型 sql = "SELECT BoxNo FROM WH_IOFormDtsPack WHERE MainID=" + p_Entity.ID.ToString(); sql += " AND ID NOT IN" + string.Format("({0})", GetIDExist(list)); DataTable dtDelete = sqlTrans.Fill(sql); //删除表结构 if (dtDelete.Rows.Count != 0) //有需要删除的数据 { sql = "DELETE FROM WH_IOFormDtsPack WHERE MainID=" + p_Entity.ID.ToString(); sql += " AND ID NOT IN" + string.Format("({0})", GetIDExist(list)); sqlTrans.ExecuteNonQuery(sql);//删除原单据里应该删除的明细数据,即数据库里有但是UI里已经删除的数据 } for (int i = 0; i < list.Count; i++) { IOFormDtsPack entitydts = (IOFormDtsPack)list[i]; int ioformdtsdex = -1; for (int m = 0; m < p_EntityDts.Length; m++) { if (p_EntityDts[m].Seq == entitydts.Seq)//找到相同的SEQ了 { ioformdtsdex = m; break; } } if (ioformdtsdex == -1)//未找到,异常 { throw new Exception("码单输入异常,未找到单据明细,行号:" + entitydts.Seq); } if (entitydts.ID != 0)//ID不为0说明数据库中已经存在 { this.RUpdateOther(p_EntityDts[ioformdtsdex], entitydts, sqlTrans); } else { entitydts.MainID = p_Entity.ID; this.RAddOther(p_EntityDts[ioformdtsdex], entitydts, sqlTrans); } } } catch (BaseException) { throw; } catch (Exception E) { throw new BaseException(E.Message); } }
/// <summary> /// 删除 /// </summary> /// <param name="p_BE">要删除的实体</param> /// <param name="sqlTrans">事务类</param> public void RDelete(BaseEntity p_BE, IDBTransAccess sqlTrans) { try { this.CheckCorrect(p_BE); IOForm entity = (IOForm)p_BE; IOFormCtl control = new IOFormCtl(sqlTrans); string sql = string.Empty; int FormListTopType = IOFormDtsRule.GetFormListTopTypeByFormListID(entity.HeadType, sqlTrans);//顶层单据类型 if (FormListTopType == (int)WHFormList.期初入库 || FormListTopType == (int)WHFormList.入库)//如果是入库 { sql = "DELETE FROM WH_PackBox WHERE BoxNo IN(SELECT BoxNo FROM WH_IOFormDtsPack WHERE MainID=" + entity.ID.ToString() + ")"; sqlTrans.ExecuteNonQuery(sql);//删除入库码单数据 } sql = "DELETE FROM WH_IOFormDts WHERE MainID=" + entity.ID.ToString(); sqlTrans.ExecuteNonQuery(sql);//删除原单据明细数据 sql = "DELETE FROM WH_IOFormDtsPack WHERE MainID=" + entity.ID.ToString(); sqlTrans.ExecuteNonQuery(sql);//删除原单据码单明细数据 sql = "DELETE FROM WH_IOFormDtsInputPack WHERE MainID=" + entity.ID.ToString(); sqlTrans.ExecuteNonQuery(sql);//删除原单据录入码单明细数据 control.Delete(entity); } catch (BaseException) { throw; } catch (Exception E) { throw new BaseException(E.Message); } }
/// <summary> /// 保存(传入事务处理) /// </summary> /// <param name="p_Entity"></param> /// <param name="p_BE"></param> /// <param name="sqlTrans"></param> public void RSave(IOForm p_Entity, IOFormDts[] p_EntityDts, ArrayList list, IDBTransAccess sqlTrans) { try { string sql = string.Empty; int FormListTopType = IOFormDtsRule.GetFormListTopTypeByFormListID(p_Entity.HeadType, sqlTrans); //顶层单据类型 if (FormListTopType != (int)WHFormList.入库 && FormListTopType != (int)WHFormList.期初入库) //如果不是入库类型的单据 { RSaveOther(p_Entity, p_EntityDts, list, sqlTrans); return; } sql = "SELECT BoxNo FROM WH_IOFormDtsPack WHERE MainID=" + p_Entity.ID.ToString(); sql += " AND ID NOT IN" + string.Format("({0})", GetIDExist(list)); DataTable dtDelete = sqlTrans.Fill(sql); //删除表结构 if (dtDelete.Rows.Count != 0) //有需要删除的数据 { foreach (DataRow dr in dtDelete.Rows) //校验是否可以删除 { PackBoxRule pbrule = new PackBoxRule(); pbrule.RCheckDelete(dr["BoxNo"].ToString(), sqlTrans);//检测调用 } sql = "DELETE FROM WH_PackBox WHERE BoxNo IN(SELECT BoxNo FROM WH_IOFormDtsPack WHERE MainID=" + p_Entity.ID.ToString(); sql += " AND ID NOT IN" + string.Format("({0})", GetIDExist(list)) + ")";//删除码单明细数据 sqlTrans.ExecuteNonQuery(sql); sql = "DELETE FROM WH_IOFormDtsPack WHERE MainID=" + p_Entity.ID.ToString(); sql += " AND ID NOT IN" + string.Format("({0})", GetIDExist(list)); sqlTrans.ExecuteNonQuery(sql);//删除原单据里应该删除的明细数据,即数据库里有但是UI里已经删除的数据 } for (int i = 0; i < list.Count; i++) { IOFormDtsPack entitydts = (IOFormDtsPack)list[i]; int ioformdtsdex = -1; for (int m = 0; m < p_EntityDts.Length; m++) { if (p_EntityDts[m].Seq == entitydts.Seq)//找到相同的SEQ了 { ioformdtsdex = m; break; } } if (ioformdtsdex == -1)//未找到,异常 { throw new Exception("码单输入异常,未找到单据明细,行号:" + entitydts.Seq); } if (entitydts.ID != 0)//ID不为0说明数据库中已经存在 { PackBoxRule pbrule = new PackBoxRule(); pbrule.RCheckUpdate(entitydts.BoxNo, sqlTrans);//检测调用 this.RUpdate(p_EntityDts[ioformdtsdex], entitydts, sqlTrans); } else { entitydts.MainID = p_Entity.ID; this.RAdd(p_Entity, p_EntityDts[ioformdtsdex], entitydts, sqlTrans); } } } catch (BaseException) { throw; } catch (Exception E) { throw new BaseException(E.Message); } }