private double getNewBalance(CashAccountReceivableDetailTable record) { double newBalance = 0; double oldBalance = 0; /* * 函数逻辑 * 本次交易后欠款余额的最终结果取决于本次交易单据的类型 * 如果本张单据是期初数据,交易后欠款等于本次交易额 * 如果本张单据是付款单,交易后欠款月等于之前的欠款额减去本次交易额 * 如果本张单据是销售出库,交易后欠款余额等于之前的余额加上本次交易额 * */ if (record.billTypeName.IndexOf("期初数据") != -1) { newBalance = record.balance; } else { InitAccountReceivableTable temp = InitAccountReceivable.getInctance().getInfoFromCustomerOrSuoolierID(record.customerOrSupplierID); if (temp != null) { oldBalance = temp.balance; } if (record.billTypeName.IndexOf("收款") != -1 || record.billTypeName == "销售退货") { newBalance = oldBalance - record.turnover; } else { newBalance = oldBalance + record.turnover; } InitAccountReceivableTable newRecord = new InitAccountReceivableTable(); newRecord.balance = newBalance; newRecord.tradingDate = record.tradingDate; newRecord.customerOrSupplierID = record.customerOrSupplierID; InitAccountReceivable.getInctance().update(temp.pkey, newRecord, false); } return(newBalance); }
private void updateAccountReceivableData(string billNumber) { SaleOutOrderTable accountReceivableData = getSaleInfoFromBillNumber(billNumber); if (accountReceivableData.saleType == "赊购") { InitAccountReceivableTable record = new InitAccountReceivableTable(); // 应收款金额 double turnover = Convert.ToDouble(accountReceivableData.sumMoney.ToString()); string message = "单据 [" + accountReceivableData.billNumber + "] 销售类型为赊购,"; message += "系统会自动产生一笔应收账款信息记录到客户 [" + accountReceivableData.customerName + "] 账户下,"; message += "请确实应收账款金额,然后点击【确定】按钮(如需调整金额,请点击调整【金额调整】按钮,再点击【确定】)"; FormAdjustAmount faa = new FormAdjustAmount("应收账款金额确认", message, accountReceivableData.totalMoney); faa.ShowDialog(); turnover = faa.getAmount(); if (!m_isRedBill) { if (!InitAccountReceivable.getInctance().checkcustomerOrSupplierIDIsExist(accountReceivableData.customerId)) { /* 说明 * 系统应收应收账款的汇总表和详细的收款还款记录是分开存放,并且默认情况下会相互更新 * 比如正常的逻辑(用于应收应收胀库初始化模块): * 当在应收账款汇总表插入一条记录的时候,程序会自动插入一条期初数据到应收账款详细表 * 当有一笔交易更新了应收账款表时,程序会自动查询应收账款统计表,更新对应客户的欠款余额 * 此处的逻辑如下: * 当发生销售出库赊购业务时候,自动产生一条应收账款信息 * 这里需要首先查询下系统中是否存在跟该客户的应收账款 * 如果不存在,需要同时更新应收账款汇总表和应收账款详细表,并且不需要两个表之间相同更新余额 * 如果存在,只需要更新应收账款详细表,应收账款详细表会自动更新应收账款汇总表中的余额 */ // 把数据插入到应收账款汇总表 InitAccountReceivableTable accountReceivableCount = new InitAccountReceivableTable(); accountReceivableCount.customerOrSupplierID = accountReceivableData.customerId; // 客户ID accountReceivableCount.tradingDate = accountReceivableData.paymentDate; // 交易日期 accountReceivableCount.balance = turnover; InitAccountReceivable.getInctance().insert(accountReceivableCount, false, false); // 把数据插入到应收账款明细表 CashAccountReceivableDetailTable cashAccountReceivableDetailrecord = new CashAccountReceivableDetailTable(); cashAccountReceivableDetailrecord.customerOrSupplierID = accountReceivableData.customerId; // 客户ID cashAccountReceivableDetailrecord.billTypeName = "销售出库"; // 账单类型 cashAccountReceivableDetailrecord.billNumber = billNumber; // 单据号 cashAccountReceivableDetailrecord.tradingDate = accountReceivableData.paymentDate; // 交易日期 cashAccountReceivableDetailrecord.turnover = turnover; // 应收款金额 cashAccountReceivableDetailrecord.staffID = accountReceivableData.businessPeopleId; // 业务员ID CashAccountReceivableDetail.getInctance().insert(cashAccountReceivableDetailrecord, false); } else { // 把数据插入到应收账款明细表 CashAccountReceivableDetailTable cashAccountReceivableDetailrecord = new CashAccountReceivableDetailTable(); cashAccountReceivableDetailrecord.customerOrSupplierID = accountReceivableData.customerId; // 客户ID cashAccountReceivableDetailrecord.billTypeName = "销售出库"; // 账单类型 cashAccountReceivableDetailrecord.billNumber = billNumber; // 单据号 cashAccountReceivableDetailrecord.tradingDate = accountReceivableData.paymentDate; // 交易日期 cashAccountReceivableDetailrecord.turnover = turnover; // 应收款金额 cashAccountReceivableDetailrecord.staffID = accountReceivableData.businessPeopleId; // 业务员ID CashAccountReceivableDetail.getInctance().insert(cashAccountReceivableDetailrecord, true); } } else { // 把数据插入到应收账款明细表 CashAccountReceivableDetailTable cashAccountReceivableDetailrecord = new CashAccountReceivableDetailTable(); cashAccountReceivableDetailrecord.customerOrSupplierID = accountReceivableData.customerId; // 客户ID cashAccountReceivableDetailrecord.billTypeName = "销售退货"; // 账单类型 cashAccountReceivableDetailrecord.billNumber = billNumber; // 单据号 cashAccountReceivableDetailrecord.tradingDate = accountReceivableData.paymentDate; // 交易日期 cashAccountReceivableDetailrecord.turnover = turnover; // 应收款金额 cashAccountReceivableDetailrecord.staffID = accountReceivableData.businessPeopleId; // 业务员ID CashAccountReceivableDetail.getInctance().insert(cashAccountReceivableDetailrecord, true); } } }