public static bool ConfirmFees(string OrderNO,FeesModel FeesM, List<FeesDetailModel> FeesDetailM, out string strMsg) { string CompanyCD = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).CompanyCD; string strSq = string.Empty; bool isSuc = false; strMsg = ""; //判断单据是否为制单状态,非制单状态不能确认 if (isHandle(OrderNO, "0")) { //TransactionManager tran = new TransactionManager(); //tran.BeginTransaction(); try { //判断是否启用自动生成凭证 //((UserInfoUtil)SessionUtil.Session["UserInfo"]).IsApply;//自动审核登帐 //((UserInfoUtil)SessionUtil.Session["UserInfo"]).IsVoucher;//自动生成凭证 if (((UserInfoUtil)SessionUtil.Session["UserInfo"]).IsVoucher == true) { AttestBillModel Model = new AttestBillModel();//凭证主表实例 ArrayList DetailList = new ArrayList();//凭证明细数组 Model.CompanyCD = CompanyCD; Model.FromName = ""; Model.Attachment = 1;//附件数 Model.AttestName = "记账凭证";//凭证名称 Model.VoucherDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd"));//凭证日期 Model.AttestNo = "记-" + VoucherDBHelper.GetMaxAttestNo(CompanyCD, DateTime.Now.ToString("yyyy-MM-dd"));//凭证号 Model.Creator = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).EmployeeID;//制单人 Model.CreateDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd"));//制单日期 Model.FromTbale = "officedba.Fees";//来源表名 Model.FromValue = FeesM.ID;//来源表主键 AttestBillDetailsModel DetailModel = new AttestBillDetailsModel();//凭证明细表实例 DetailModel.Abstract = FeesM.Note;// dt.Rows[0]["Abstract"].ToString();//摘要 DetailModel.CurrencyTypeID = Convert.ToInt32(FeesM.CurrencyType); //币种 DetailModel.ExchangeRate = FeesM.CurrencyRate;//汇率 DetailModel.SubjectsCD = FeesM.SubjectsNo;//科目编号 DetailModel.OriginalAmount = FeesM.TotalPrice;//原币金额 DetailModel.DebitAmount = 0;//借方金额 DetailModel.CreditAmount = FeesM.TotalPrice * Convert.ToDecimal(FeesM.CurrencyRate);//贷方金额 DetailModel.SubjectsDetails = ""; DetailModel.FormTBName = ""; DetailModel.FileName = ""; string Auciliary = VoucherDBHelper.GetSubjectsAuciliaryCD(FeesM.SubjectsNo, CompanyCD); if (Auciliary == "供应商" || Auciliary == "客户" || Auciliary == "职员") { DetailModel.SubjectsDetails = FeesM.ContactUnits;//辅助核算 if (Auciliary == "供应商") { DetailModel.FormTBName = "officedba.ProviderInfo"; DetailModel.FileName = "CustName"; } else if (Auciliary == "客户") { DetailModel.FormTBName = "officedba.CustInfo"; DetailModel.FileName = "CustName"; } else { DetailModel.FormTBName = "officedba.EmployeeInfo"; DetailModel.FileName = "EmployeeName"; } } DetailList.Add(DetailModel); //foreach (DataRow row in tempdt.Rows)//根据凭证模板构建凭证明细数组 foreach (FeesDetailModel FDetailM in FeesDetailM) { AttestBillDetailsModel DetailM = new AttestBillDetailsModel();//凭证明细表实例 DetailM.Abstract = FeesM.Note;//摘要 DetailM.CurrencyTypeID = Convert.ToInt32(FeesM.CurrencyType);//币种 DetailM.ExchangeRate = FeesM.CurrencyRate;//汇率 DetailM.SubjectsCD = FDetailM.SubjectsNo;//科目编号 DetailM.OriginalAmount = FDetailM.FeeTotal;//原币金额 DetailM.DebitAmount = FDetailM.FeeTotal * Convert.ToDecimal(FeesM.CurrencyRate);//借方金额 DetailM.CreditAmount = 0;//贷方金额 DetailM.SubjectsDetails = ""; DetailM.FormTBName = ""; DetailM.FileName = ""; DetailList.Add(DetailM); } //自动生成凭证并根据IsApply判断是否登帐 --生成成功 int BillID = 0; string IsA = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).IsApply == true ? "1" : "0"; if (VoucherDBHelper.InsertIntoAttestBill(Model, DetailList, out BillID, IsA)) { SqlParameter[] paras = new SqlParameter[3]; strSq = "update officedba.Fees set ConfirmStatus='1' , Confirmor=@EmployeeID, "; strSq += " ConfirmDate=getdate(),IsAccount='1',Accountor=@EmployeeID,AccountDate=getdate() "; paras[0] = new SqlParameter("@EmployeeID", ((UserInfoUtil)SessionUtil.Session["UserInfo"]).EmployeeID); paras[1] = new SqlParameter("@CompanyCD", ((UserInfoUtil)SessionUtil.Session["UserInfo"]).CompanyCD); paras[2] = new SqlParameter("@FeesNo", OrderNO); strSq += " WHERE FeesNo = @FeesNo and CompanyCD=@CompanyCD"; //SqlHelper.ExecuteNonQuery(tran.Trans, CommandType.Text, strSq, paras); SqlHelper.ExecuteTransSql(strSq.ToString(), paras); if (SqlHelper.Result.OprateCount > 0) { isSuc = true; strMsg = "确认成功!"; } else { isSuc = false; strMsg = "生成凭证失败!"; } } } else { SqlParameter[] paras = new SqlParameter[3]; strSq = "update officedba.Fees set ConfirmStatus='1' , Confirmor=@EmployeeID, "; strSq += " ConfirmDate=getdate() "; paras[0] = new SqlParameter("@EmployeeID", ((UserInfoUtil)SessionUtil.Session["UserInfo"]).EmployeeID); paras[1] = new SqlParameter("@CompanyCD", ((UserInfoUtil)SessionUtil.Session["UserInfo"]).CompanyCD); paras[2] = new SqlParameter("@FeesNo", OrderNO); strSq += " WHERE FeesNo = @FeesNo and CompanyCD=@CompanyCD"; SqlHelper.ExecuteTransSql(strSq.ToString(), paras); if (SqlHelper.Result.OprateCount > 0) { isSuc = true; strMsg = "确认成功!"; } else { isSuc = false; strMsg = "确认失败!"; } } } catch (Exception ex) { //tran.Rollback(); isSuc = false; strMsg = "确认失败,请联系系统管理员!"; throw ex; } } else { isSuc = false; strMsg = "该单据已被其他用户确认,不可再次确认!"; } return isSuc; }
/// <summary> /// 业务单确认时自动生成凭证--自动登帐--启用自动生成凭证时生成凭证后自动回写源单登记凭证状态 /// </summary> /// <param name="TemplateType">模板类别(1.采购订单,2. 销售订单,3. 委托代销单,4. 销售退货单,5. 采购入库,6. 其他出库单,7. 销售出库单,8. 其他入库单,9.收款单,10.付款单)</param> /// <param name="CompanyCD">公司编号</param> /// <param name="IsVoucher">是否自动生成凭证 0 不生成 1 启用自动生成</param> /// <param name="IsApply">凭证是否自动登帐 0 不登帐 1 启用自动登帐</param> /// <param name="BillAmount">业务单含税金额合计</param> /// <param name="FromTBInfo">来源表信息,格式来源表名+,+来源表主键(业务单主表名称(带上架构),自动生成凭证的业务单主键)必填</param> /// <param name="CurrencyInfo">业务单币种信息,格式为(币种ID,汇率)必填,若业务单无币种汇率,则默认传本位币及汇率</param> /// <param name="ProOrCustID">科目辅助核算ID(默认为业务单中的供应商或客户主键)</param> /// <param name="returnV">返回提示信息</param> /// <returns></returns> public static bool AutoVoucherInsert(int TemplateType, string CompanyCD, string IsVoucher, string IsApply, decimal BillAmount, string FromTBInfo, string CurrencyInfo, int ProOrCustID, out string returnV) { bool rev = true; string returnValue =string.Empty; int BillID = 0;//生成凭证的凭证主键 if (IsVoucher == "1")//自动生成凭证 { /*判断某业务单是否配置生成凭证模板--start*/ StringBuilder SelectTemplateSQL = new StringBuilder(); SelectTemplateSQL.AppendLine("select Abstract,TemNo from officedba.VoucherTemplate "); SelectTemplateSQL.AppendLine(" where CompanyCD=@CompanyCD and TemType=@TemType and UsedStatus='1' "); SqlCommand comm = new SqlCommand(); comm.CommandText = SelectTemplateSQL.ToString(); comm.Parameters.AddWithValue("@CompanyCD", SqlDbType.VarChar).Value = CompanyCD; comm.Parameters.AddWithValue("@TemType", SqlDbType.Int).Value = TemplateType; DataTable dt = SqlHelper.ExecuteSearch(comm); /*判断某业务单是否配置生成凭证模板--End*/ if (dt != null && dt.Rows.Count > 0) { /*获取业务单对应的凭证模板明细--start*/ StringBuilder TemplateDetailSQL = new StringBuilder(); TemplateDetailSQL.AppendLine(" select SubjectsNo,Direction,Scale "); TemplateDetailSQL.AppendLine(" from officedba.VoucherTemplateDetail "); TemplateDetailSQL.AppendLine(" where CompanyCD=@CompanyCD "); TemplateDetailSQL.AppendLine(" and TemNo=@TemNo"); SqlCommand cmd = new SqlCommand(); cmd.CommandText = TemplateDetailSQL.ToString(); cmd.Parameters.AddWithValue("@CompanyCD", SqlDbType.VarChar).Value = CompanyCD; cmd.Parameters.AddWithValue("@TemNo", SqlDbType.VarChar).Value = dt.Rows[0]["TemNo"].ToString(); DataTable tempdt = SqlHelper.ExecuteSearch(cmd); /*获取业务单对应的凭证模板明细--End*/ if (tempdt != null && tempdt.Rows.Count > 0) { AttestBillModel Model = new AttestBillModel();//凭证主表实例 ArrayList DetailList = new ArrayList();//凭证明细数组 Model.Attachment = 1;//附件数 Model.AttestName = "记账凭证";//凭证名称 Model.VoucherDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd"));//凭证日期 Model.AttestNo = "记-" + VoucherDBHelper.GetMaxAttestNo(CompanyCD, DateTime.Now.ToString("yyyy-MM-dd"));//凭证号 Model.Creator = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).EmployeeID;//制单人 Model.CreateDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd"));//制单日期 Model.FromTbale = FromTBInfo.Split(',')[0].ToString();//来源表名 Model.FromValue = FromTBInfo.Split(',')[1].ToString();//来源表主键 Model.CompanyCD = CompanyCD; Model.FromName = ""; foreach (DataRow row in tempdt.Rows)//根据凭证模板构建凭证明细数组 { AttestBillDetailsModel DetailModel = new AttestBillDetailsModel();//凭证明细表实例 DetailModel.Abstract = dt.Rows[0]["Abstract"].ToString();//摘要 DetailModel.CurrencyTypeID = int.Parse(CurrencyInfo.Split(',')[0].ToString());//币种 DetailModel.ExchangeRate = Convert.ToDecimal(CurrencyInfo.Split(',')[1].ToString());//汇率 DetailModel.SubjectsCD = row["SubjectsNo"].ToString();//科目编号 decimal orgAmount = BillAmount * Convert.ToDecimal(row["Scale"].ToString()) / 100; DetailModel.OriginalAmount = orgAmount;//原币金额 if (row["Direction"].ToString() == "0") { DetailModel.DebitAmount = orgAmount * Convert.ToDecimal(CurrencyInfo.Split(',')[1].ToString());//借方金额 DetailModel.CreditAmount = 0;//贷方金额 } else { DetailModel.DebitAmount = 0;//借方金额 DetailModel.CreditAmount = orgAmount * Convert.ToDecimal(CurrencyInfo.Split(',')[1].ToString());//贷方金额 } string Auciliary = VoucherDBHelper.GetSubjectsAuciliaryCD(row["SubjectsNo"].ToString(), CompanyCD); DetailModel.SubjectsDetails = ""; DetailModel.FormTBName = ""; DetailModel.FileName = ""; if (Auciliary == "供应商" || Auciliary == "客户") { DetailModel.SubjectsDetails = ProOrCustID.ToString();//辅助核算 if (Auciliary == "供应商") { DetailModel.FormTBName = "officedba.ProviderInfo"; DetailModel.FileName = "CustName"; } else { DetailModel.FormTBName = "officedba.CustInfo"; DetailModel.FileName = "CustName"; } } DetailList.Add(DetailModel); } if (VoucherDBHelper.InsertIntoAttestBill(Model, DetailList, out BillID, "0"))//自动生成凭证并根据IsApply判断是否登帐 --生成成功 { /*更新原始业务单登记凭证状态 start*/ StringBuilder UpdateSourceTB = new StringBuilder(); UpdateSourceTB.AppendLine("update {0} set IsAccount=@IsAccount,AccountDate=@AccountDate, "); UpdateSourceTB.AppendLine("Accountor=@Accountor , AttestBillID=@AttestBillID "); UpdateSourceTB.AppendLine(" where ID=@ID "); string UpdateSourceTBSQL = string.Format(UpdateSourceTB.ToString(), FromTBInfo.Split(',')[0].ToString()); SqlParameter[] parms = { new SqlParameter("@IsAccount","1"), new SqlParameter("@AccountDate",DateTime.Now.ToString("yyyy-MM-dd")), new SqlParameter("@Accountor",((UserInfoUtil)SessionUtil.Session["UserInfo"]).EmployeeID.ToString()), new SqlParameter("@AttestBillID",BillID.ToString()), new SqlParameter("@ID",FromTBInfo.Split(',')[1].ToString()) }; if (SqlHelper.ExecuteTransSql(UpdateSourceTBSQL, parms) > 0)//更新业务单成功 { // } else { returnValue = " 警告:自动生成凭证失败!"; rev = false; //删除凭证操作开始 VoucherDBHelper.DeleteAttestBillInfo(BillID.ToString()); //删除凭证操作结束 } /*更新原始业务单登记凭证状态 End*/ if (IsApply == "1")//自动生成凭证是否自动登帐 --否 { if (!VoucherDBHelper.InsertAccount(BillID)) { returnValue = " 警告:自动生成凭证失败!"; rev = false; //删除凭证操作开始 VoucherDBHelper.DeleteAttestBillInfo(BillID.ToString()); //删除凭证操作结束 /*更新原始业务单登记凭证状态 start*/ StringBuilder AntiUpdateSourceTB = new StringBuilder(); AntiUpdateSourceTB.AppendLine("update {0} set IsAccount=@IsAccount,AccountDate=@AccountDate, "); AntiUpdateSourceTB.AppendLine("Accountor=@Accountor , AttestBillID=@AttestBillID "); AntiUpdateSourceTB.AppendLine(" where ID=@ID "); string AntiUpdateSourceTBSQL = string.Format(UpdateSourceTB.ToString(), FromTBInfo.Split(',')[0].ToString()); SqlParameter[] Antiparms = { new SqlParameter("@IsAccount","0"), new SqlParameter("@AccountDate",DateTime.Now.ToString("yyyy-MM-dd")), new SqlParameter("@Accountor",((UserInfoUtil)SessionUtil.Session["UserInfo"]).EmployeeID.ToString()), new SqlParameter("@AttestBillID",BillID.ToString()), new SqlParameter("@ID",FromTBInfo.Split(',')[1].ToString()) }; SqlHelper.ExecuteTransSql(AntiUpdateSourceTBSQL, Antiparms);//更新业务单成功 /*更新原始业务单登记凭证状态 End*/ } } } else { returnValue = " 警告:自动生成凭证失败!"; rev = false; } } } else { //未设置模板 returnValue = "警告:自动生成凭证失败,请在“财务管理-初始设置”中设置或启用对应的凭证模板!"; rev = false; } } returnV= returnValue; return rev; }
public static bool EndExchangeRate(string[] CurrTypeRate, string ItemID, string PeriodNum, ref string AttestNo, ref int AttestID,string DuringDate) { if (CurrTypeRate == null) return false; bool result = false; //获取当前企业代码 string CompanyCD = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).CompanyCD; try { #region 凭证实体 //实例凭证单据实体对象 AttestBillModel Attestmodel = new AttestBillModel(); //凭证明细实体定义 AttestBillDetailsModel Detailmodel = null; #endregion //汇总总金额 decimal SumTotalPrice = 0; //登帐凭证ID号 string EndAccountID = string.Empty; //凭证单据ID int ID; //会计科目代码 string SubjectsCD = string.Empty; //定义数组存储实体对象 ArrayList modelList = new ArrayList(); //获取本币币种ID int MasterCurrencyID = Convert.ToInt32(CurrTypeSettingDBHelper.GetMasterCurrency(CompanyCD).Rows[0]["ID"]); //获取结转汇兑损益摘要ID /*修改于20090604 摘要直接存名称 by 莫申林 start*/ //int AbstractID; //AbstractID = Convert.ToInt32(SummarySettingBus.GetSummaryIDByName(ConstUtil.SUMMARY_JZHDSY_NAME)); string AbstractID; AbstractID = ConstUtil.SUMMARY_JZHDSY_NAME; /*修改于20090604 摘要直接存名称 by 莫申林 end*/ //对输入的资料日期进行处理开始 //开始时间 string StartDate = string.Empty; //结束时间 string EndDate = string.Empty; string DayEnd = string.Empty;//月末数 int MothString = Convert.ToInt32(DuringDate.Split('-')[1].ToString()); int yearString = Convert.ToInt32(DuringDate.Split('-')[0].ToString()); if (MothString == 4 || MothString == 6 || MothString == 9 || MothString == 11) { DayEnd = "-30"; } else if (MothString == 2) { if (((yearString % 4 == 0 && yearString % 100 == 0)) || (yearString % 400 == 0)) { DayEnd = "-29"; } else { DayEnd = "-28"; } } else { DayEnd = "-31"; } StartDate = yearString.ToString() + "-" + MothString.ToString() + "-01"; EndDate = yearString.ToString() + "-" + MothString.ToString() + DayEnd; foreach (string array in CurrTypeRate) { decimal TempPrice = 0; string[] Currency = array.Split(','); DataTable dt = EndItemProcessing.GetAccountBookEndAmount(CompanyCD, MasterCurrencyID, Convert.ToInt32(Currency[0]),StartDate,EndDate); if (dt != null && dt.Rows.Count > 0) { foreach (DataRow rows in dt.Rows) { //外币本币期末余额 decimal WbEndAmount, BbEndAmount = 0; //读取外币期末余额 WbEndAmount = Convert.ToDecimal(rows["wbEndAmount"]); //读取本币期末余额 BbEndAmount = Convert.ToDecimal(rows["EndAmount"]); //计算利率后的金额 decimal TotalPrice = WbEndAmount * (Convert.ToDecimal(Currency[1])) - BbEndAmount; SumTotalPrice += TotalPrice; TempPrice += TotalPrice; #region 科目凭证明细赋值 if (TotalPrice != 0) { Detailmodel = new AttestBillDetailsModel();//实例凭证明细实体对象 // Detailmodel.AttestBillID = ID; Detailmodel.Abstract = AbstractID; //摘要ID Detailmodel.SubjectsCD = rows["SubjectsCD"].ToString();//库存现金科目 if (TotalPrice > 0) { Detailmodel.DebitAmount = TotalPrice;//借方金额 Detailmodel.CreditAmount = 0;//贷方金额 } else { Detailmodel.DebitAmount = 0;//借方金额为0 //Modified 2009-06-26 TotalPrice = Convert.ToDecimal(TotalPrice.ToString().Substring(TotalPrice.ToString().IndexOf("-") + 1, TotalPrice.ToString().Length - TotalPrice.ToString().IndexOf("-") - 1)); Detailmodel.CreditAmount = TotalPrice;//贷方金额 } Detailmodel.CurrencyTypeID = MasterCurrencyID; //Detailmodel.CurrencyTypeID = Convert.ToInt32(Currency[0]);//币种 Detailmodel.OriginalAmount = TotalPrice;//原币金额 //Modified 2009-06-26 // Detailmodel.ExchangeRate = Convert.ToDecimal(Currency[1]);//汇率 Detailmodel.ExchangeRate = 1; //明细实体对象添加到数组中 modelList.Add(Detailmodel); } #endregion } #region 2009-06-07 Modified by jiangym //if (TempPrice != 0) //{ // #region 本年利润凭证明细赋值 // Detailmodel = new AttestBillDetailsModel();//实例本年利润凭证明细实体对象 // // Detailmodel.AttestBillID = ID; // Detailmodel.Abstract = AbstractID; //摘要ID // Detailmodel.SubjectsCD = SUBJECT_CD_KCXJ_CODE;//库存现金科目 // if (TempPrice > 0) // { // Detailmodel.DebitAmount = TempPrice;//借方金额 // Detailmodel.CreditAmount = 0;//贷方金额 // } // else // { // Detailmodel.DebitAmount = 0;//借方金额为0 // //Modified 2009-06-26 // TempPrice = Convert.ToDecimal(TempPrice.ToString().Substring(TempPrice.ToString().IndexOf("-") + 1, TempPrice.ToString().Length - TempPrice.ToString().IndexOf("-") - 1)); // Detailmodel.CreditAmount = TempPrice;//贷方金额 // } // Detailmodel.CurrencyTypeID = MasterCurrencyID; // // Detailmodel.CurrencyTypeID = Convert.ToInt32(Currency[0]);//币种 // Detailmodel.OriginalAmount = TempPrice;//原币金额 // //Modified 2009-06-26 // Detailmodel.ExchangeRate = 1; // // Detailmodel.ExchangeRate = Convert.ToDecimal(Currency[1]);//汇率 // //明细实体对象添加到数组中 // modelList.Add(Detailmodel); // #endregion //} #endregion } } #region 生成汇兑损益明细 if (SumTotalPrice != 0) { Detailmodel = new AttestBillDetailsModel(); // Detailmodel.AttestBillID = ID; Detailmodel.Abstract = AbstractID; //摘要ID Detailmodel.SubjectsCD = SUBJECT_CD_HDSY_CODE;//汇兑损益科目 if (SumTotalPrice > 0) { Detailmodel.DebitAmount = 0;//借方金额为0 Detailmodel.CreditAmount = SumTotalPrice;//贷方金额 } else { SumTotalPrice = Convert.ToDecimal(SumTotalPrice.ToString().Substring(SumTotalPrice.ToString().IndexOf("-") + 1, SumTotalPrice.ToString().Length - SumTotalPrice.ToString().IndexOf("-") - 1)); Detailmodel.DebitAmount = SumTotalPrice;//借方金额 //Modified 2009-06-26 Detailmodel.CreditAmount = 0;//贷方金额为0 } Detailmodel.CurrencyTypeID = MasterCurrencyID;//本币类别 Detailmodel.OriginalAmount = SumTotalPrice;//原币金额 Detailmodel.ExchangeRate = 1;//汇率 //明细实体对象添加到数组中 modelList.Add(Detailmodel); } #endregion //判断是否有凭证明细 if (modelList.Count > 0) { #region 凭证单据实体赋值 int PeriodRecordID=0; result = EndItemProcessing.InsertPeriodProced(CompanyCD, ItemID,PeriodNum,"1",out PeriodRecordID); if (result) { Attestmodel.CompanyCD = CompanyCD; //获取生成的凭证号 Attestmodel.AttestNo = "记-" + VoucherDBHelper.GetMaxAttestNo(CompanyCD, DateTime.Now.ToString()); AttestNo = Attestmodel.AttestNo; Attestmodel.VoucherDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")); Attestmodel.AttestName = "记账凭证"; Attestmodel.Creator = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).EmployeeID; Attestmodel.status = 0; Attestmodel.FromTbale = "officedba.EndItemProcessedRecord"; if (PeriodRecordID > 0) { Attestmodel.FromValue = PeriodRecordID.ToString(); } else { Attestmodel.FromValue = ""; } } //添加凭证单据信息 result = EndItemProcessing.BuildAttestBill(Attestmodel, out ID); AttestID = ID; if (result) { //遍历明细实体给单据编号赋值 for (int j = 0; j < modelList.Count; j++) { (modelList[j] as AttestBillDetailsModel).AttestBillID = ID; } } #endregion } result = EndItemProcessing.BuildEndRatechangeDetailInfo(modelList); if (modelList.Count > 0) { if (result) { VoucherBus.SetStatus(AttestID.ToString(), "1", "status", 0); VoucherBus.InsertAccount(AttestID); } } //凭证自动登帐及自动审核 return result; } catch (Exception ex) { throw ex; } }
/// <summary> /// 损益科目期末结转 /// </summary> /// <param name="ItemID"></param> /// <param name="PeriodNum"></param> /// <param name="getAttestNo"></param> /// <param name="AttestID"></param> /// <param name="DuringDate"></param> /// <returns></returns> public static bool ProfitandLossMade(string ItemID, string PeriodNum, ref string getAttestNo, ref string AttestID, string DuringDate) { try { string CompanyCD = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).CompanyCD; bool result = false; //开始时间 string StartDate = string.Empty; //结束时间 string EndDate = string.Empty; //月末数 string DayEnd = string.Empty; int MothString = Convert.ToInt32(DuringDate.Split('-')[1].ToString()); int yearString = Convert.ToInt32(DuringDate.Split('-')[0].ToString()); if (MothString == 4 || MothString == 6 || MothString == 9 || MothString == 11) { DayEnd = "-30"; } else if (MothString == 2) { if (((yearString % 4 == 0 && yearString % 100 == 0)) || (yearString % 400 == 0)) { DayEnd = "-29"; } else { DayEnd = "-28"; } } else { DayEnd = "-31"; } StartDate = yearString.ToString() + "-" + MothString.ToString() + "-01"; EndDate = yearString.ToString() + "-" + MothString.ToString() + DayEnd; if (!CheckProfitEndAmount(StartDate, EndDate)) { //获取本币币种ID int CurrencyID = Convert.ToInt32(CurrTypeSettingDBHelper.GetMasterCurrency(CompanyCD).Rows[0]["ID"]); //获取结转本期损益摘要ID // 修改于20090604 摘要直接存名称 by 莫申林 /*修改于20090604 摘要直接存名称 by 莫申林 start*/ //int AbstractID; //AbstractID = Convert.ToInt32(SummarySettingBus.GetSummaryIDByName(ConstUtil.SUMMARY_JZBQSY_NAMEA)); string AbstractID; AbstractID = ConstUtil.SUMMARY_JZBQSY_NAMEA; /*修改于20090604 摘要直接存名称 by 莫申林 end*/ AttestBillModel Attestmodel = new AttestBillModel(); //实例凭证单据实体对象 #region 凭证单据实体赋值 Attestmodel.CompanyCD = CompanyCD; Attestmodel.AttestName = "记账凭证"; Attestmodel.Creator = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).EmployeeID; Attestmodel.status = 0; Attestmodel.FromTbale = "officedba.EndItemProcessedRecord"; // Attestmodel.FromValue = ItemID; Attestmodel.VoucherDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")); Attestmodel.CreateDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")); Attestmodel.Attachment = 0; Attestmodel.FromName = "ProfitandLoss"; #region 更新期末处理结转损益状态 int PeriodRecordID = 0; result = EndItemProcessing.InsertPeriodProced(CompanyCD, ItemID, PeriodNum, "1", out PeriodRecordID); #endregion if (PeriodRecordID > 0) { Attestmodel.FromValue = PeriodRecordID.ToString(); } else { Attestmodel.FromValue = ""; } #endregion DataTable sourcedt = GetProfitandLossInfo(StartDate, EndDate);//获取账簿中所有损益类科目的期末余额 DataTable debitdt = GetChangeDt(sourcedt, 0);//期末余额为借方的损益类科目信息数据集 DataTable creditdt = GetChangeDt(sourcedt, 1);//期末余额为贷方的损益类科目信息数据集 if (debitdt != null && debitdt.Rows.Count > 0) { decimal Money = 0; int VouchreID = 0; ArrayList MyList = new ArrayList(); Attestmodel.AttestNo = "记-" + VoucherDBHelper.GetMaxAttestNo(CompanyCD, DateTime.Now.ToString("yyyy-MM-dd")); getAttestNo += Attestmodel.AttestNo + ","; foreach (DataRow dr in debitdt.Rows) { AttestBillDetailsModel Detailmodel = new AttestBillDetailsModel();//凭证明细实体定义 Detailmodel.Abstract = AbstractID;//摘要ID Detailmodel.SubjectsCD = dr["SubjectsCD"].ToString(); Detailmodel.CurrencyTypeID = CurrencyID; Detailmodel.ExchangeRate = 1; Detailmodel.CreditAmount = Convert.ToDecimal(dr["EndM"].ToString()); //贷方金额 Detailmodel.OriginalAmount = Convert.ToDecimal(dr["EndM"].ToString());//外币金额 Detailmodel.DebitAmount = 0; //借方金额 Detailmodel.SubjectsDetails = ""; Detailmodel.FormTBName = ""; Detailmodel.FileName = ""; Money += Convert.ToDecimal(dr["EndM"].ToString()); MyList.Add(Detailmodel); } #region 本年利润凭证明细赋值 AttestBillDetailsModel AttestDetailmodel = new AttestBillDetailsModel();//凭证明细实体定义 AttestDetailmodel.Abstract = AbstractID;//摘要ID AttestDetailmodel.SubjectsCD = SUBJECT_CD_DNLY_CODE;//本年利润科目 AttestDetailmodel.DebitAmount = Money;//借方金额 AttestDetailmodel.CurrencyTypeID = CurrencyID; AttestDetailmodel.ExchangeRate = 1; AttestDetailmodel.CreditAmount = 0;//贷方金额 AttestDetailmodel.OriginalAmount = Money;//外币金额 AttestDetailmodel.SubjectsDetails = ""; AttestDetailmodel.FormTBName = ""; AttestDetailmodel.FileName = ""; //本年利润实体对象添加到数组中 MyList.Add(AttestDetailmodel); #endregion result=VoucherBus.InsertIntoAttestBill(Attestmodel, MyList, out VouchreID, "1"); AttestID += VouchreID + ","; } if (creditdt != null && creditdt.Rows.Count > 0) { decimal Money = 0; int VouchreID = 0; ArrayList MyList = new ArrayList(); Attestmodel.AttestNo = "记-" + VoucherDBHelper.GetMaxAttestNo(CompanyCD, DateTime.Now.ToString("yyyy-MM-dd")); getAttestNo += Attestmodel.AttestNo + ","; foreach (DataRow dr in creditdt.Rows) { AttestBillDetailsModel Detailmodel = new AttestBillDetailsModel();//凭证明细实体定义 Detailmodel.Abstract = AbstractID;//摘要ID Detailmodel.SubjectsCD = dr["SubjectsCD"].ToString(); Detailmodel.CurrencyTypeID = CurrencyID; Detailmodel.ExchangeRate = 1; Detailmodel.CreditAmount = 0; //贷方金额 Detailmodel.OriginalAmount = Convert.ToDecimal(dr["EndM"].ToString());//外币金额 Detailmodel.DebitAmount = Convert.ToDecimal(dr["EndM"].ToString()); //借方金额 Detailmodel.SubjectsDetails = ""; Detailmodel.FormTBName = ""; Detailmodel.FileName = ""; Money += Convert.ToDecimal(dr["EndM"].ToString()); MyList.Add(Detailmodel); } #region 本年利润凭证明细赋值 AttestBillDetailsModel AttestDetailmodel = new AttestBillDetailsModel();//凭证明细实体定义 AttestDetailmodel.Abstract = AbstractID;//摘要ID AttestDetailmodel.SubjectsCD = SUBJECT_CD_DNLY_CODE;//本年利润科目 AttestDetailmodel.DebitAmount = 0;//借方金额 AttestDetailmodel.CurrencyTypeID = CurrencyID; AttestDetailmodel.ExchangeRate = 1; AttestDetailmodel.CreditAmount = Money;//贷方金额 AttestDetailmodel.OriginalAmount = Money;//外币金额 AttestDetailmodel.SubjectsDetails = ""; AttestDetailmodel.FormTBName = ""; AttestDetailmodel.FileName = ""; //本年利润实体对象添加到数组中 MyList.Add(AttestDetailmodel); #endregion result=VoucherBus.InsertIntoAttestBill(Attestmodel, MyList, out VouchreID, "1"); AttestID += VouchreID + ","; } } AttestID = AttestID.TrimEnd(new char[] { ',' }); getAttestNo = getAttestNo.TrimEnd(new char[] { ',' }); return result; } catch (Exception ex) { throw ex; } }
public static bool ProfitandLossChange(string ItemID, string PeriodNum, ref string getAttestNo, ref int AttestID, string DuringDate) { bool result = false; string CompanyCD = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).CompanyCD; try { #region 凭证实体 AttestBillModel Attestmodel = new AttestBillModel(); //实例凭证单据实体对象 AttestBillDetailsModel Detailmodel = null;//凭证明细实体定义 #endregion #region 凭证单据实体赋值 Attestmodel.CompanyCD = CompanyCD; Attestmodel.AttestNo = "记-" + VoucherDBHelper.GetMaxAttestNo(CompanyCD, DateTime.Now.ToString()); getAttestNo = Attestmodel.AttestNo; Attestmodel.AttestName = "记账凭证"; Attestmodel.Creator = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).EmployeeID; Attestmodel.status = 0; Attestmodel.FromTbale = "officedba.EndItemProcessedRecord"; // Attestmodel.FromValue = ItemID; Attestmodel.VoucherDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")); #endregion int ID; ArrayList modelList = new ArrayList();//定义数组存储实体对象 //添加凭证单据信息 //开始时间 string StartDate = string.Empty; //结束时间 string EndDate = string.Empty; //月末数 string DayEnd = string.Empty; int MothString = Convert.ToInt32(DuringDate.Split('-')[1].ToString()); int yearString = Convert.ToInt32(DuringDate.Split('-')[0].ToString()); if (MothString == 4 || MothString == 6 || MothString == 9 || MothString == 11) { DayEnd = "-30"; } else if (MothString == 2) { if (((yearString % 4 == 0 && yearString % 100 == 0)) || (yearString % 400 == 0)) { DayEnd = "-29"; } else { DayEnd = "-28"; } } else { DayEnd = "-31"; } StartDate = yearString.ToString() + "-" + MothString.ToString() + "-01"; EndDate = yearString.ToString() + "-" + MothString.ToString() + DayEnd; if (!CheckProfitEndAmount(StartDate,EndDate)) { #region 凭证单据实体赋值 int PeriodRecordID = 0; result = EndItemProcessing.InsertPeriodProced(CompanyCD, ItemID, PeriodNum, "1", out PeriodRecordID); if (PeriodRecordID > 0) { Attestmodel.FromValue = PeriodRecordID.ToString(); } else { Attestmodel.FromValue = ""; } result = EndItemProcessing.BuildAttestBill(Attestmodel, out ID); AttestID = ID; //损益类方向为借的ID string AccountIDj = string.Empty; //损益类方向为贷的ID string AccountIDd = string.Empty; //获取本币币种ID int CurrencyID = Convert.ToInt32(CurrTypeSettingDBHelper.GetMasterCurrency(CompanyCD).Rows[0]["ID"]); //获取结转本期损益摘要ID #region 修改于20090604 摘要直接存名称 by 莫申林 /*修改于20090604 摘要直接存名称 by 莫申林 start*/ //int AbstractID; //AbstractID = Convert.ToInt32(SummarySettingBus.GetSummaryIDByName(ConstUtil.SUMMARY_JZBQSY_NAMEA)); string AbstractID; AbstractID = ConstUtil.SUMMARY_JZBQSY_NAMEA; /*修改于20090604 摘要直接存名称 by 莫申林 end*/ #endregion if (result && ID > 0) { //取出损益类科目方向为借的信息 DataTable dtJ = EndItemProcessing.GetSYSubjectsEndAmount(CompanyCD, DIRECTION_J, StartDate,EndDate); if (dtJ != null && dtJ.Rows.Count > 0) { //读取AccountIDj foreach (DataRow rowj in dtJ.Rows) { AccountIDj += rowj["ID"].ToString() + ","; } AccountIDj = AccountIDj.Remove(AccountIDj.Length - 1); //取出损益类方向为借的期末余额 DataTable dtJEndAmount = EndItemProcessing.GetSYEndAmountByID(AccountIDj); if (dtJEndAmount != null && dtJEndAmount.Rows.Count > 0) { //读取方向为借的期末余额 foreach (DataRow jendrow in dtJEndAmount.Rows) { if (Convert.ToDecimal(jendrow["EndAmount"]) != 0) { #region 明细实体赋值 Detailmodel = new AttestBillDetailsModel();//实例凭证明细实体对象 Detailmodel.AttestBillID = ID; Detailmodel.CurrencyTypeID = CurrencyID; Detailmodel.Abstract = AbstractID;//摘要ID Detailmodel.SubjectsCD = jendrow["SubjectsCD"].ToString(); //判断损益科目方向为借的金额统计是否大于0 //大于则为贷否则为借方 if (Convert.ToDecimal(jendrow["EndAmount"]) > 0) { Detailmodel.OriginalAmount = Convert.ToDecimal(jendrow["EndAmount"]);//外币金额 Detailmodel.CreditAmount = Convert.ToDecimal(jendrow["EndAmount"]);//贷方金额 Detailmodel.DebitAmount = 0; //将损益类科目方向为借的逆向生成的实体添加到数组当中 modelList.Add(Detailmodel);//实体对象添加到数组中 #region 本年利润凭证明细赋值 Detailmodel = new AttestBillDetailsModel();//实例本年利润凭证明细实体对象 Detailmodel.AttestBillID = ID; Detailmodel.CurrencyTypeID = CurrencyID; Detailmodel.Abstract = AbstractID;//摘要ID Detailmodel.SubjectsCD = SUBJECT_CD_DNLY_CODE;//本年利润科目 Detailmodel.OriginalAmount = Convert.ToDecimal(jendrow["EndAmount"]);//外币金额 Detailmodel.DebitAmount = Convert.ToDecimal(jendrow["EndAmount"]);//借方金额 Detailmodel.CreditAmount = 0;//贷方金额为0 //本年利润实体对象添加到数组中 modelList.Add(Detailmodel); #endregion } else { decimal EndAmount = Convert.ToDecimal(jendrow["EndAmount"]); EndAmount = Convert.ToDecimal(EndAmount.ToString().Substring(EndAmount.ToString().IndexOf("-") + 1, EndAmount.ToString().Length - EndAmount.ToString().IndexOf("-") - 1)); //Detailmodel.OriginalAmount = Convert.ToDecimal(jendrow["EndAmount"]);//外币金额 //Detailmodel.DebitAmount = Convert.ToDecimal(jendrow["EndAmount"]);//借方金额 //Detailmodel.CreditAmount = 0;//贷方金额为0 //modelList.Add(Detailmodel);//实体对象添加到数组中 //#region 本年利润凭证明细赋值 //Detailmodel = new AttestBillDetailsModel();//实例本年利润凭证明细实体对象 //Detailmodel.AttestBillID = ID; //Detailmodel.Abstract = AbstractID;//摘要ID //Detailmodel.CurrencyTypeID = CurrencyID; //Detailmodel.SubjectsCD = SUBJECT_CD_DNLY_CODE;//本年利润科目 //Detailmodel.CreditAmount = Convert.ToDecimal(jendrow["EndAmount"]);//贷方金额 //Detailmodel.OriginalAmount = Convert.ToDecimal(jendrow["EndAmount"]);//外币金额 //Detailmodel.DebitAmount = 0;//借方金额为0 Detailmodel.OriginalAmount = EndAmount;//外币金额 Detailmodel.DebitAmount = EndAmount;//借方金额 Detailmodel.CreditAmount = 0;//贷方金额为0 modelList.Add(Detailmodel);//实体对象添加到数组中 #region 本年利润凭证明细赋值 Detailmodel = new AttestBillDetailsModel();//实例本年利润凭证明细实体对象 Detailmodel.AttestBillID = ID; Detailmodel.Abstract = AbstractID;//摘要ID Detailmodel.CurrencyTypeID = CurrencyID; Detailmodel.SubjectsCD = SUBJECT_CD_DNLY_CODE;//本年利润科目 Detailmodel.CreditAmount = EndAmount;//贷方金额 Detailmodel.OriginalAmount = EndAmount; //外币金额 Detailmodel.DebitAmount = 0;//借方金额为0 //本年利润实体对象添加到数组中 modelList.Add(Detailmodel); #endregion } #endregion } } } } //取出损益类科目方向为贷的信息 DataTable dtD = EndItemProcessing.GetSYSubjectsEndAmount(CompanyCD, DIRECTION_D,StartDate,EndDate); if (dtD != null && dtD.Rows.Count > 0) { //读取AccountIDd foreach (DataRow rowd in dtD.Rows) { AccountIDd += rowd["ID"].ToString() + ","; } AccountIDd = AccountIDd.Remove(AccountIDd.Length - 1); //取出损益类方向为贷的期末余额 DataTable dtDEndAmount = EndItemProcessing.GetSYEndAmountByID(AccountIDd); if (dtDEndAmount != null && dtDEndAmount.Rows.Count > 0) { //读取方向为贷的期末余额 foreach (DataRow Dendrow in dtDEndAmount.Rows) { #region 明细实体赋值 if (Convert.ToDecimal(Dendrow["EndAmount"]) != 0) { Detailmodel = new AttestBillDetailsModel();//实例凭证明细实体对象 Detailmodel.AttestBillID = ID; Detailmodel.Abstract = AbstractID;//摘要ID Detailmodel.SubjectsCD = Dendrow["SubjectsCD"].ToString(); Detailmodel.CurrencyTypeID = CurrencyID; //判断损益科目方向为贷的金额统计是否大于0 //大于则为借否则为贷方 if (Convert.ToDecimal(Dendrow["EndAmount"]) > 0) { Detailmodel.CreditAmount = 0; //贷方金额 Detailmodel.OriginalAmount = Convert.ToDecimal(Dendrow["EndAmount"]);//外币金额 Detailmodel.DebitAmount = Convert.ToDecimal(Dendrow["EndAmount"]);//借方金额 //将损益类科目方向为贷的逆向生成的实体添加到数组当中 modelList.Add(Detailmodel);//实体对象添加到数组中 #region 本年利润凭证明细赋值 Detailmodel = new AttestBillDetailsModel();//实例本年利润凭证明细实体对象 Detailmodel.AttestBillID = ID; Detailmodel.Abstract = AbstractID;//摘要ID Detailmodel.SubjectsCD = SUBJECT_CD_DNLY_CODE;//本年利润科目 Detailmodel.DebitAmount = 0;//借方金额为0 Detailmodel.CurrencyTypeID = CurrencyID; Detailmodel.CreditAmount = Convert.ToDecimal(Dendrow["EndAmount"]); ;//贷方金额 Detailmodel.OriginalAmount = Convert.ToDecimal(Dendrow["EndAmount"]);//外币金额 //本年利润实体对象添加到数组中 modelList.Add(Detailmodel); #endregion } else { decimal EndAmount = Convert.ToDecimal(Dendrow["EndAmount"]); EndAmount = Convert.ToDecimal(EndAmount.ToString().Substring(EndAmount.ToString().IndexOf("-") + 1, EndAmount.ToString().Length - EndAmount.ToString().IndexOf("-") - 1)); //Detailmodel.DebitAmount = 0;//借方金额为0 //Detailmodel.OriginalAmount = Convert.ToDecimal(Dendrow["EndAmount"]);//外币金额 //Detailmodel.CreditAmount = Convert.ToDecimal(Dendrow["EndAmount"]); ;//贷方金额 //modelList.Add(Detailmodel);//实体对象添加到数组中 //#region 本年利润凭证明细赋值 //Detailmodel = new AttestBillDetailsModel();//实例本年利润凭证明细实体对象 //Detailmodel.AttestBillID = ID; //Detailmodel.Abstract = AbstractID;//摘要ID //Detailmodel.CurrencyTypeID = CurrencyID; //Detailmodel.OriginalAmount = Convert.ToDecimal(Dendrow["EndAmount"]);//外币金额 //Detailmodel.SubjectsCD = SUBJECT_CD_DNLY_CODE;//本年利润科目 //Detailmodel.CreditAmount = 0;//贷方金额为0 //Detailmodel.DebitAmount = Convert.ToDecimal(Dendrow["EndAmount"]); ;//借方金额 Detailmodel.DebitAmount = 0;//借方金额为0 Detailmodel.OriginalAmount = EndAmount;//外币金额 Detailmodel.CreditAmount = EndAmount;//贷方金额 modelList.Add(Detailmodel);//实体对象添加到数组中 #region 本年利润凭证明细赋值 Detailmodel = new AttestBillDetailsModel();//实例本年利润凭证明细实体对象 Detailmodel.AttestBillID = ID; Detailmodel.Abstract = AbstractID;//摘要ID Detailmodel.CurrencyTypeID = CurrencyID; Detailmodel.OriginalAmount = EndAmount;//外币金额 Detailmodel.SubjectsCD = SUBJECT_CD_DNLY_CODE;//本年利润科目 Detailmodel.CreditAmount = 0;//贷方金额为0 Detailmodel.DebitAmount = EndAmount;//借方金额 //本年利润实体对象添加到数组中 modelList.Add(Detailmodel); #endregion } #endregion } } } } } //组合更新ID string UpdateID = string.Empty; if (AccountIDd.Length > 0 && AccountIDj.Length > 0) { UpdateID = AccountIDd + "," + AccountIDj; } result = EndItemProcessing.BuildJZDetailInfo(modelList, UpdateID); if (result) { //凭证自动登帐及自动审核 VoucherBus.SetStatus(ID.ToString(), "1", "status", 0); VoucherBus.InsertAccount(AttestID); } } return result; } catch (Exception ex) { throw ex; } }
public static bool CountFixAssetDepreciation(string ItemID, string PeriodNum, ref string getAttestNo, ref int AttestID) { //获取当前操作用户企业编码 bool result = false;//执行返回结果 try { int PeriodID=0; string CompanyCD = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).CompanyCD; DataTable dt = FixAssetInfoDBHelper.GetAssetInfoByCompanyCD(CompanyCD,PeriodNum); if (dt != null && dt.Rows.Count > 0) { #region 固定资产计提折旧计算 //计算方法 string CountMethod = string.Empty; //预计使用年限 int EstimateUseYear; //预计净残值率 decimal EstiResiValue; //原值 decimal OriginalValue; //月折旧率 decimal MonthDeprRate; //期末净值 decimal EndNetValue; //本期净值 decimal CurrentNetValue; //本期减值准备 decimal CurrValueRe; //月折旧额 decimal MonthDeprPrice = 0; //累计月折旧额 decimal CountTotalDeprPrice = 0; ArrayList DeprDetailList=new ArrayList(); ArrayList DeprPeriodList=new ArrayList(); //计提前固定资产实体数组 ArrayList FixDeprAfterList = new ArrayList(); //定义固定资产计提明细实体 FixAssetDeprDetailModel DeprDetailmodel = null; //资产计提 FixAssetPeriodDeprModel DeprPeriodmodel = null; //资产计提前实体 FixAssetDeprAfterModel FixDeprAftermodel = null; foreach (DataRow rows in dt.Rows) { //读取期末净值 EndNetValue = Convert.ToDecimal(rows["EndNetValue"]); //读取计算方法 CountMethod = rows["CountMethod"].ToString(); //读取预计净残值率 EstiResiValue = Convert.ToDecimal(rows["EstiResiValue"]); //读取原价 OriginalValue = Convert.ToDecimal(rows["OriginalValue"]); //读取本期减值准备 CurrValueRe = Convert.ToDecimal(rows["CurrValueRe"]); //读取月折旧率 MonthDeprRate = Convert.ToDecimal(rows["AmorDeprRate"]); //实例固定资产计提明细实体 DeprDetailmodel = new FixAssetDeprDetailModel(); #region 固定资产计提明细赋值 //给固定资产计提明细赋值 DeprDetailmodel.CompanyCD = CompanyCD; DeprDetailmodel.Creator = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).EmployeeID; //固定资产名称 DeprDetailmodel.FixName = rows["FixName"].ToString(); //固定资产编号 DeprDetailmodel.FixNo = rows["FixNo"].ToString(); //资产类别 DeprDetailmodel.FixType = Convert.ToInt32(rows["FixType"]); //资产数量 DeprDetailmodel.Number = Convert.ToInt32(rows["FixNumber"]); //资产原值 DeprDetailmodel.OriginalValue = Convert.ToDecimal(rows["OriginalValue"]); //使用日期 DeprDetailmodel.UsedDate = Convert.ToDateTime(rows["UseDate"]); //使用年限 DeprDetailmodel.UsedYears = Convert.ToDecimal(rows["UsedYear"]); //预计使用年限 DeprDetailmodel.EstimateUse = Convert.ToDecimal(rows["EstimateUse"]); //计算预计净残值 decimal Yjcz = OriginalValue * (EstiResiValue / 100); #endregion //判断期末净值大于计净残值则进行折旧处理 if (EndNetValue > Yjcz) { //年限平均法 if (CountMethod == ConstUtil.ASSETCOUNT_METHOD_NXPJF_CODE) { //读取期初减值准备 decimal ReduValueRe = Convert.ToDecimal(rows["ReduValueRe"]); //读取预计使用年限 EstimateUseYear = Convert.ToInt32(rows["EstimateUse"]); //MonthDeprPrice = Math.Round(MonthDeprRate * OriginalValue, 2);//计算月折旧额 //读取月折旧额 MonthDeprPrice = Convert.ToDecimal(rows["AmorDeprM"]); //计算本期期末净值 CurrentNetValue = EndNetValue - MonthDeprPrice - CurrValueRe; //本期期末净值 DeprDetailmodel.EndNetValue = CurrentNetValue; //月折旧额 DeprDetailmodel.MDeprPrice = MonthDeprPrice; //计算累计折旧额 CountTotalDeprPrice = Convert.ToDecimal(rows["TotalDeprPrice"]) + MonthDeprPrice; DeprDetailmodel.TotalDeprPrice = CountTotalDeprPrice; //累计减值 DeprDetailmodel.TotalImpairment = (ReduValueRe + CurrValueRe); //计算月折旧额 //如果本期净值大于净残值则更新 if (CurrentNetValue > Yjcz) { #region 添加固定资产折旧前信息实体 FixDeprAftermodel = new FixAssetDeprAfterModel(); FixDeprAftermodel.AmorDeprM = rows["AmorDeprM"] != DBNull.Value ? Convert.ToDecimal(rows["AmorDeprM"]) : Convert.ToDecimal(DBNull.Value); FixDeprAftermodel.AmorDeprRate = Convert.ToDecimal(rows["AmorDeprRate"]); ; FixDeprAftermodel.CompanyCD = CompanyCD; FixDeprAftermodel.EndNetValue = rows["EndNetValue"] != DBNull.Value ? Convert.ToDecimal(rows["EndNetValue"]) : Convert.ToDecimal(DBNull.Value); FixDeprAftermodel.FixNo = rows["FixNo"].ToString(); FixDeprAftermodel.PeriodNum = Convert.ToInt32(PeriodNum); FixDeprAftermodel.TotalDeprPrice = rows["TotalDeprPrice"] != DBNull.Value ? Convert.ToDecimal(rows["TotalDeprPrice"]) : Convert.ToDecimal(DBNull.Value); FixDeprAfterList.Add(FixDeprAftermodel); #endregion DeprPeriodmodel = new FixAssetPeriodDeprModel(); DeprPeriodmodel.CompanyCD = CompanyCD; DeprPeriodmodel.EndNetValue = Math.Round(CurrentNetValue, 2); DeprPeriodmodel.FixNo = rows["FixNo"].ToString(); DeprPeriodmodel.AmorDeprRate = 0; DeprPeriodmodel.AmorDeprM = MonthDeprPrice; DeprPeriodmodel.TotalDeprPrice = CountTotalDeprPrice; DeprDetailList.Add(DeprDetailmodel); DeprPeriodList.Add(DeprPeriodmodel); } else { #region 添加固定资产折旧前信息实体 FixDeprAftermodel = new FixAssetDeprAfterModel(); FixDeprAftermodel.AmorDeprM = rows["AmorDeprM"] != DBNull.Value ? Convert.ToDecimal(rows["AmorDeprM"]) : Convert.ToDecimal(DBNull.Value); FixDeprAftermodel.AmorDeprRate = Convert.ToDecimal(rows["AmorDeprRate"]); FixDeprAftermodel.CompanyCD = CompanyCD; FixDeprAftermodel.EndNetValue = rows["EndNetValue"] != DBNull.Value ? Convert.ToDecimal(rows["EndNetValue"]) : Convert.ToDecimal(DBNull.Value); FixDeprAftermodel.FixNo = rows["FixNo"].ToString(); FixDeprAftermodel.PeriodNum = Convert.ToInt32(PeriodNum); FixDeprAftermodel.TotalDeprPrice = rows["TotalDeprPrice"] != DBNull.Value ? Convert.ToDecimal(rows["TotalDeprPrice"]) : Convert.ToDecimal(DBNull.Value); FixDeprAfterList.Add(FixDeprAftermodel); #endregion DeprPeriodmodel = new FixAssetPeriodDeprModel(); DeprPeriodmodel.CompanyCD = CompanyCD; DeprPeriodmodel.EndNetValue = Yjcz; DeprPeriodmodel.FixNo = rows["FixNo"].ToString(); DeprPeriodmodel.AmorDeprRate = 0; DeprPeriodmodel.AmorDeprM = MonthDeprPrice; DeprPeriodmodel.TotalDeprPrice = Convert.ToDecimal(rows["EndNetValue"]) - Yjcz; DeprDetailList.Add(DeprDetailmodel); DeprPeriodList.Add(DeprPeriodmodel); } } //工作量法 else if (CountMethod == ConstUtil.ASSETCOUNT_METHOD_GZLF_CODE) { //读取月折旧额 MonthDeprPrice = Convert.ToDecimal(rows["AmorDeprM"]); //计算本期期末净值 CurrentNetValue = EndNetValue - MonthDeprPrice - CurrValueRe; //计算累计折旧额 CountTotalDeprPrice = Convert.ToDecimal(rows["TotalDeprPrice"]) + MonthDeprPrice; //如果本期净值大于原净值则不更新 if (CurrentNetValue > Yjcz) { #region 添加固定资产折旧前信息实体 FixDeprAftermodel = new FixAssetDeprAfterModel(); FixDeprAftermodel.AmorDeprM = rows["AmorDeprM"] != DBNull.Value ? Convert.ToDecimal(rows["AmorDeprM"]) : Convert.ToDecimal(DBNull.Value); FixDeprAftermodel.AmorDeprRate = Convert.ToDecimal(rows["AmorDeprRate"]); ; FixDeprAftermodel.CompanyCD = CompanyCD; FixDeprAftermodel.EndNetValue = rows["EndNetValue"] != DBNull.Value ? Convert.ToDecimal(rows["EndNetValue"]) : Convert.ToDecimal(DBNull.Value); FixDeprAftermodel.FixNo = rows["FixNo"].ToString(); FixDeprAftermodel.PeriodNum = Convert.ToInt32(PeriodNum); FixDeprAftermodel.TotalDeprPrice = rows["TotalDeprPrice"] != DBNull.Value ? Convert.ToDecimal(rows["TotalDeprPrice"]) : Convert.ToDecimal(DBNull.Value); FixDeprAfterList.Add(FixDeprAftermodel); #endregion DeprPeriodmodel = new FixAssetPeriodDeprModel(); DeprPeriodmodel.CompanyCD = CompanyCD; DeprPeriodmodel.EndNetValue = Math.Round(CurrentNetValue, 2); DeprPeriodmodel.FixNo = rows["FixNo"].ToString(); DeprPeriodmodel.AmorDeprRate = 0; DeprPeriodmodel.AmorDeprM = MonthDeprPrice; DeprPeriodmodel.TotalDeprPrice = CountTotalDeprPrice; DeprDetailList.Add(DeprDetailmodel); DeprPeriodList.Add(DeprPeriodmodel); } else { #region 添加固定资产折旧前信息实体 FixDeprAftermodel = new FixAssetDeprAfterModel(); FixDeprAftermodel.AmorDeprM = rows["AmorDeprM"] != DBNull.Value ? Convert.ToDecimal(rows["AmorDeprM"]) : Convert.ToDecimal(DBNull.Value); FixDeprAftermodel.AmorDeprRate = Convert.ToDecimal(rows["AmorDeprRate"]); ; FixDeprAftermodel.CompanyCD = CompanyCD; FixDeprAftermodel.EndNetValue = rows["EndNetValue"] != DBNull.Value ? Convert.ToDecimal(rows["EndNetValue"]) : Convert.ToDecimal(DBNull.Value); FixDeprAftermodel.FixNo = rows["FixNo"].ToString(); FixDeprAftermodel.PeriodNum = Convert.ToInt32(PeriodNum); FixDeprAftermodel.TotalDeprPrice = rows["TotalDeprPrice"] != DBNull.Value ? Convert.ToDecimal(rows["TotalDeprPrice"]) : Convert.ToDecimal(DBNull.Value); FixDeprAfterList.Add(FixDeprAftermodel); #endregion DeprPeriodmodel = new FixAssetPeriodDeprModel(); DeprPeriodmodel.CompanyCD = CompanyCD; DeprPeriodmodel.EndNetValue = Yjcz; DeprPeriodmodel.FixNo = rows["FixNo"].ToString(); DeprPeriodmodel.AmorDeprRate = 0; DeprPeriodmodel.AmorDeprM = MonthDeprPrice; DeprPeriodmodel.TotalDeprPrice = Convert.ToDecimal(rows["EndNetValue"]) - Yjcz; DeprDetailList.Add(DeprDetailmodel); DeprPeriodList.Add(DeprPeriodmodel); } }//年限总和法 else if (CountMethod == ConstUtil.ASSETCOUNT_METHOD_NXZHF_CODE) { //年折旧率 decimal YearDeprRate = 0; //读取预计使用年限 EstimateUseYear = Convert.ToInt32(rows["EstimateUse"]); //读取已使用年限 int UsedYears = Convert.ToInt32(rows["UsedYear"]); //计算年折旧率 YearDeprRate = Convert.ToDecimal((EstimateUseYear - UsedYears)) / (Convert.ToDecimal(EstimateUseYear) * (Convert.ToDecimal(EstimateUseYear + 1)) / 2) * (100 / 100); //计算月折旧率 MonthDeprRate = YearDeprRate / 12; //计算月折旧额 MonthDeprPrice = (OriginalValue - (OriginalValue * (EstiResiValue/100))) * MonthDeprRate; //计算本期期末净值 CurrentNetValue = EndNetValue - MonthDeprPrice - CurrValueRe; //计算累计折旧额 CountTotalDeprPrice = Convert.ToDecimal(rows["TotalDeprPrice"]) + MonthDeprPrice; if (CurrentNetValue > Yjcz) { #region 添加固定资产折旧前信息实体 FixDeprAftermodel = new FixAssetDeprAfterModel(); FixDeprAftermodel.AmorDeprM = rows["AmorDeprM"] != DBNull.Value ? Convert.ToDecimal(rows["AmorDeprM"]) : Convert.ToDecimal(DBNull.Value); FixDeprAftermodel.AmorDeprRate = Convert.ToDecimal(rows["AmorDeprRate"]); ; FixDeprAftermodel.CompanyCD = CompanyCD; FixDeprAftermodel.EndNetValue = rows["EndNetValue"] != DBNull.Value ? Convert.ToDecimal(rows["EndNetValue"]) : Convert.ToDecimal(DBNull.Value); FixDeprAftermodel.FixNo = rows["FixNo"].ToString(); FixDeprAftermodel.PeriodNum = Convert.ToInt32(PeriodNum); FixDeprAftermodel.TotalDeprPrice = rows["TotalDeprPrice"] != DBNull.Value ? Convert.ToDecimal(rows["TotalDeprPrice"]) : Convert.ToDecimal(DBNull.Value); FixDeprAfterList.Add(FixDeprAftermodel); #endregion DeprPeriodmodel = new FixAssetPeriodDeprModel(); DeprPeriodmodel.CompanyCD = CompanyCD; DeprPeriodmodel.EndNetValue = Math.Round(CurrentNetValue, 2); DeprPeriodmodel.FixNo = rows["FixNo"].ToString(); DeprPeriodmodel.AmorDeprRate = Math.Round(MonthDeprRate, 8); DeprPeriodmodel.AmorDeprM = Math.Round(MonthDeprPrice, 2); DeprPeriodmodel.TotalDeprPrice = CountTotalDeprPrice; DeprDetailList.Add(DeprDetailmodel); DeprPeriodList.Add(DeprPeriodmodel); } else { #region 添加固定资产折旧前信息实体 FixDeprAftermodel = new FixAssetDeprAfterModel(); FixDeprAftermodel.AmorDeprM = rows["AmorDeprM"] != DBNull.Value ? Convert.ToDecimal(rows["AmorDeprM"]) : Convert.ToDecimal(DBNull.Value); FixDeprAftermodel.AmorDeprRate = Convert.ToDecimal(rows["AmorDeprRate"]); ; FixDeprAftermodel.CompanyCD = CompanyCD; FixDeprAftermodel.EndNetValue = rows["EndNetValue"] != DBNull.Value ? Convert.ToDecimal(rows["EndNetValue"]) : Convert.ToDecimal(DBNull.Value); FixDeprAftermodel.FixNo = rows["FixNo"].ToString(); FixDeprAftermodel.PeriodNum = Convert.ToInt32(PeriodNum); FixDeprAftermodel.TotalDeprPrice = rows["TotalDeprPrice"] != DBNull.Value ? Convert.ToDecimal(rows["TotalDeprPrice"]) : Convert.ToDecimal(DBNull.Value); FixDeprAfterList.Add(FixDeprAftermodel); #endregion DeprPeriodmodel = new FixAssetPeriodDeprModel(); DeprPeriodmodel.CompanyCD = CompanyCD; DeprPeriodmodel.EndNetValue = Yjcz; DeprPeriodmodel.FixNo = rows["FixNo"].ToString(); DeprPeriodmodel.AmorDeprRate = Math.Round(MonthDeprRate, 8); DeprPeriodmodel.AmorDeprM = MonthDeprPrice; DeprPeriodmodel.TotalDeprPrice = Convert.ToDecimal(rows["EndNetValue"]) - Yjcz; DeprDetailList.Add(DeprDetailmodel); DeprPeriodList.Add(DeprPeriodmodel); } }//双倍余额递减法 else if (CountMethod == ConstUtil.ASSETCOUNT_METHOD_SBYETJS_CODE) { //读取预计使用年限 EstimateUseYear = Convert.ToInt32(rows["EstimateUse"]); //年折旧率 decimal YearDeprRate = 0; //计算年折旧率 YearDeprRate = 2 / Convert.ToDecimal(EstimateUseYear) * (100 / 100); //计算月折旧率 MonthDeprRate = YearDeprRate / 12; //计算月折旧额 MonthDeprPrice = EndNetValue * MonthDeprRate; //计算本期期末净值 CurrentNetValue = EndNetValue - MonthDeprPrice - CurrValueRe; //计算累计折旧额 CountTotalDeprPrice = Convert.ToDecimal(rows["TotalDeprPrice"]) + MonthDeprPrice; if (CurrentNetValue > Yjcz) { #region 添加固定资产折旧前信息实体 FixDeprAftermodel = new FixAssetDeprAfterModel(); FixDeprAftermodel.AmorDeprM = rows["AmorDeprM"] != DBNull.Value ? Convert.ToDecimal(rows["AmorDeprM"]) : Convert.ToDecimal(DBNull.Value); FixDeprAftermodel.AmorDeprRate = Convert.ToDecimal(rows["AmorDeprRate"]); ; FixDeprAftermodel.CompanyCD = CompanyCD; FixDeprAftermodel.EndNetValue = rows["EndNetValue"] != DBNull.Value ? Convert.ToDecimal(rows["EndNetValue"]) : Convert.ToDecimal(DBNull.Value); FixDeprAftermodel.FixNo = rows["FixNo"].ToString(); FixDeprAftermodel.PeriodNum = Convert.ToInt32(PeriodNum); FixDeprAftermodel.TotalDeprPrice = rows["TotalDeprPrice"] != DBNull.Value ? Convert.ToDecimal(rows["TotalDeprPrice"]) : Convert.ToDecimal(DBNull.Value); FixDeprAfterList.Add(FixDeprAftermodel); #endregion DeprPeriodmodel = new FixAssetPeriodDeprModel(); DeprPeriodmodel.CompanyCD = CompanyCD; DeprPeriodmodel.EndNetValue = Math.Round(CurrentNetValue, 2); DeprPeriodmodel.FixNo = rows["FixNo"].ToString(); DeprPeriodmodel.AmorDeprRate = Math.Round(MonthDeprRate, 8); DeprPeriodmodel.AmorDeprM = Math.Round(MonthDeprPrice, 2); DeprPeriodmodel.TotalDeprPrice = CountTotalDeprPrice; DeprDetailList.Add(DeprDetailmodel); DeprPeriodList.Add(DeprPeriodmodel); } else { #region 添加固定资产折旧前信息实体 FixDeprAftermodel = new FixAssetDeprAfterModel(); FixDeprAftermodel.AmorDeprM = rows["AmorDeprM"] != DBNull.Value ? Convert.ToDecimal(rows["AmorDeprM"]) : Convert.ToDecimal(DBNull.Value); FixDeprAftermodel.AmorDeprRate = Convert.ToDecimal(rows["AmorDeprRate"]); ; FixDeprAftermodel.CompanyCD = CompanyCD; FixDeprAftermodel.EndNetValue = rows["EndNetValue"] != DBNull.Value ? Convert.ToDecimal(rows["EndNetValue"]) : Convert.ToDecimal(DBNull.Value); FixDeprAftermodel.FixNo = rows["FixNo"].ToString(); FixDeprAftermodel.PeriodNum = Convert.ToInt32(PeriodNum); FixDeprAftermodel.TotalDeprPrice = rows["TotalDeprPrice"] != DBNull.Value ? Convert.ToDecimal(rows["TotalDeprPrice"]) : Convert.ToDecimal(DBNull.Value); FixDeprAfterList.Add(FixDeprAftermodel); #endregion DeprPeriodmodel = new FixAssetPeriodDeprModel(); DeprPeriodmodel.CompanyCD = CompanyCD; DeprPeriodmodel.EndNetValue = Yjcz; DeprPeriodmodel.FixNo = rows["FixNo"].ToString(); DeprPeriodmodel.AmorDeprRate = Math.Round(MonthDeprRate, 8); DeprPeriodmodel.AmorDeprM = MonthDeprPrice; DeprPeriodmodel.TotalDeprPrice = Convert.ToDecimal(rows["EndNetValue"]) - Yjcz; DeprDetailList.Add(DeprDetailmodel); DeprPeriodList.Add(DeprPeriodmodel); } } } } #endregion //折旧固定资产明细 result = FixAssetInfoDBHelper.UpdateEndFixAssetInfo(DeprDetailList, DeprPeriodList, CompanyCD, PeriodNum, ItemID, ref PeriodID, FixDeprAfterList); } if (result) { #region 凭证单据明细实体 //凭证单据实体 AttestBillModel Attestmodel = new AttestBillModel(); //凭证明细实体定义 AttestBillDetailsModel Detailmodel = null; #endregion #region 凭证单据实体赋值 Attestmodel.CompanyCD = CompanyCD; Attestmodel.AttestNo = "记-" + VoucherDBHelper.GetMaxAttestNo(CompanyCD, DateTime.Now.ToString()); getAttestNo = Attestmodel.AttestNo; Attestmodel.AttestName = "记账凭证"; Attestmodel.Creator = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).EmployeeID; Attestmodel.status = 0; Attestmodel.FromTbale = "EndItemProcessedRecord,FixWithInfo,FixPeriodDeprDetails"; Attestmodel.FromValue=PeriodID.ToString()+","+PeriodNum.ToString(); Attestmodel.VoucherDate =Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")); #endregion int ID; ArrayList modelList = new ArrayList();//定义数组存储实体对象 //添加凭证单据信息 result = FixAssetInfoDBHelper.BuildDepreAttestBill(Attestmodel, out ID, ItemID, PeriodNum); AttestID = ID; if (result && ID > 0) { //获取固定资产科目汇总金额信息 DataTable AttestDetail = FixAssetInfoDBHelper.GetBuildAttestInfo(CompanyCD); //获取折旧凭证摘要ID string AbstractID; AbstractID = ConstUtil.SUMMARY_ZCJZ_NAME; #endregion //获取本币币种ID int MasterCurrencyID = Convert.ToInt32(CurrTypeSettingDBHelper.GetMasterCurrency(CompanyCD).Rows[0]["ID"]); if (AttestDetail != null && AttestDetail.Rows.Count > 0) { foreach (DataRow drows in AttestDetail.Rows) { #region 凭证明细实体赋值 Detailmodel = new AttestBillDetailsModel(); Detailmodel.AttestBillID = ID; Detailmodel.Abstract = AbstractID;// 摘要 Detailmodel.SubjectsCD = drows["AccuDeprSubjeCD"].ToString();//累计折旧科目 贷 Detailmodel.CreditAmount = Convert.ToDecimal(drows["CountSum"]);//贷方金额 Detailmodel.DebitAmount = 0; Detailmodel.OriginalAmount = Convert.ToDecimal(drows["CountSum"]);//外币金额 Detailmodel.CurrencyTypeID = MasterCurrencyID;//本币ID Detailmodel.ExchangeRate = 1;//本币汇率 modelList.Add(Detailmodel); Detailmodel = new AttestBillDetailsModel(); Detailmodel.AttestBillID = ID; Detailmodel.Abstract = AbstractID;// 摘要 Detailmodel.CreditAmount = 0; Detailmodel.SubjectsCD = drows["DeprCostSubjeCD"].ToString();//折旧费用科目 借 Detailmodel.DebitAmount = Convert.ToDecimal(drows["CountSum"]);//借方金额 Detailmodel.OriginalAmount = Convert.ToDecimal(drows["CountSum"]);//外币金额 Detailmodel.CurrencyTypeID = MasterCurrencyID;//本币ID Detailmodel.ExchangeRate = 1;//本币汇率 modelList.Add(Detailmodel); #endregion } //凭证自动登帐及自动审核 result = FixAssetInfoDBHelper.BuildDepreDetailInfo(modelList); if (result) { VoucherBus.SetStatus(ID.ToString(), "1", "status", 0); VoucherBus.InsertAccount(AttestID); } } } } return result; } catch (Exception ex) { throw ex; } }