/// <summary>
        /// 撤销核销处理
        /// </summary>
        public void RHXCancel(InvoiceOperation entity, int p_DtsID, IDBTransAccess sqlTrans)
        {
            try
            {
                string sql = string.Empty;
                //First 处理发票主表数据
                InvoiceOperation entityinvoice = new InvoiceOperation(sqlTrans);//处理收付款主表数据
                entityinvoice.ID = entity.ID;
                entityinvoice.SelectByID();


                //Second 删除发票核销明细数据
                InvoiceOperationDtsRule dtsRule   = new InvoiceOperationDtsRule();
                InvoiceOperationDts     entityDts = new InvoiceOperationDts(sqlTrans);
                entityDts.ID = p_DtsID;
                entityDts.SelectByID();
                if (entityDts.PayAmount != 0)
                {
                    throw new Exception("不能操作,数据有收付款数据了,不能进行撤销");
                }

                dtsRule.RDelete(entityDts, sqlTrans);//删除明细实体


                //First 处理发票主表数据
                entityinvoice.PreHXFlag    = (int)YesOrNo.No;
                entityinvoice.PreHXQty    -= entityDts.DInvoiceQty;
                entityinvoice.PreHXAmount -= entityDts.DInvoiceAmount;
                this.RUpdate(entityinvoice, sqlTrans);



                IOFormDtsRule ioformdtsRule = new IOFormDtsRule();     //处理出入库单据明细数据
                IOFormDts     entityIOF     = new IOFormDts(sqlTrans); //出入库单据明细
                entityIOF.ID = entityDts.DLOADDtsID;
                entityIOF.SelectByID();
                //处理发票明细数据;出入库明细数据
                if (entityIOF.PayAmount != 0)
                {
                    throw new Exception("不能操作,数据已有收付款数据 ID:" + entityDts.DLOADDtsID + " " + entityIOF.ItemCode + " " + entityIOF.ColorNum);
                }

                sql  = "UPDATE WH_IOFormDts SET InvoiceQty=ISNULL(InvoiceQty,0)-" + "(" + SysString.ToDBString(entityDts.DInvoiceQty) + ")";
                sql += ",InvoiceAmount=ISNULL(InvoiceAmount,0)-" + "(" + SysString.ToDBString(entityDts.DInvoiceAmount) + ")";
                sql += ",DtsInvoiceDelOPID=" + SysString.ToDBString(entity.SaleOPID);
                sql += ",DtsInvoiceDelTime=null";
                sql += ",DtsInvoiceNo=''";
                sql += ",DtsInvoiceDelFlag=0";//开票完成标志
                sql += " WHERE ID=" + SysString.ToDBString(entityDts.DLOADDtsID);
                sqlTrans.ExecuteNonQuery(sql);
            }
            catch (BaseException)
            {
                throw;
            }
            catch (Exception E)
            {
                throw new BaseException(E.Message);
            }
        }
        /// <summary>
        /// 提交
        /// </summary>
        /// <param name="p_FormID"></param>
        /// <param name="p_Type"></param>
        /// <param name="sqlTrans"></param>
        private void SetInvoiceOperation(int p_FormID, int p_Type, IDBTransAccess sqlTrans)
        {
            string sql = "SELECT ID,MainID,Seq FROM Finance_InvoiceOperationDts WHERE MainID=" + SysString.ToDBString(p_FormID);

            sql += " ORDER BY Seq";
            DataTable dt = sqlTrans.Fill(sql);

            if (dt.Rows.Count > 0)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    //对账单
                    InvoiceOperation entity = new InvoiceOperation(sqlTrans);
                    entity.ID = p_FormID;
                    entity.SelectByID();

                    ///对账单明细
                    InvoiceOperationDts entityDts = new InvoiceOperationDts(sqlTrans);
                    entityDts.ID = SysConvert.ToInt32(dr["ID"]);
                    entityDts.SelectByID();

                    ///仓库单据明细
                    IOFormDts entityIOF = new IOFormDts(sqlTrans);
                    if (entityDts.MergeFlage == 1)
                    {
                        if (entityDts.DLOADID > 0)
                        {
                            IOForm entityNoDts = new IOForm(sqlTrans);
                            entityNoDts.ID = entityDts.DLOADID;
                            entityNoDts.SelectByID();
                            if (entityNoDts.SelectByID())
                            {
                            }
                            else
                            {
                                throw new Exception("操作异常,没有找到出入库记录 ID:" + entityDts.DLOADID);
                            }
                            if (p_Type == (int)YesOrNo.Yes)//提交
                            {
                                //if (entityDts.DInvoiceQty + entityIOF.InvoiceQty > entityIOF.DZQty || entityDts.DInvoiceAmount + entityIOF.InvoiceAmount > entityIOF.DZAmount)//开票溢出
                                //{
                                //    throw new Exception("不能操作,开票数超过对账数 或 开票金额超过对账金额 ID:" + entityDts.DLOADDtsID + " " + entityIOF.ItemCode + " " + entityIOF.ColorNum);
                                //}
                                if (entityNoDts.InvoiceDelFlag == (int)YesOrNo.Yes && entityNoDts.TotalQty == entityNoDts.InvoiceQty)
                                {
                                    throw new Exception("不能操作,数据已开票结束 ID:" + entityDts.DLOADID);
                                    //+ " " + SysConvert.ToString(drs["ItemCode"]) + " " + SysConvert.ToString(drs["ColorNum"])
                                }
                                sql  = "UPDATE WH_IOForm SET InvoiceQty=ISNULL(InvoiceQty,0)+" + "(" + SysString.ToDBString(entityDts.DInvoiceQty) + ")";
                                sql += ",InvoiceAmount=ISNULL(InvoiceAmount,0)+" + "(" + SysString.ToDBString(SysConvert.ToDecimal(entityDts.DInvoiceAmount)) + ")";
                                sql += ",InvoiceDelOPID=" + SysString.ToDBString(entity.SaleOPID);
                                sql += ",InvoiceDelTime=" + SysString.ToDBString(entity.FormDate.ToString("yyyy-MM-dd"));
                                sql += ",InvoiceNo=" + SysString.ToDBString(entity.InvoiceNO);
                                if (entityDts.DInvoiceAmount + entityNoDts.InvoiceAmount >= entityNoDts.DZAmount) //开票完成
                                {
                                    sql += ",InvoiceDelFlag=1";
                                }
                                else
                                {
                                    sql += ",InvoiceDelFlag=0";
                                }
                                sql += " WHERE ID=" + SysString.ToDBString(entityNoDts.ID);
                                sqlTrans.ExecuteNonQuery(sql);

                                if (entityDts.DLoadCheckDtsID > 0)
                                {
                                    sql = "UPDATE Finance_CheckOperationDts SET InvoiceFlag=1 WHERE ID=" + SysString.ToDBString(entityDts.DLoadCheckDtsID);
                                    sqlTrans.ExecuteNonQuery(sql);
                                }
                            }
                            else//撤销提交
                            {
                                if (entityNoDts.PayAmount != 0)
                                {
                                    throw new Exception("不能操作,数据已有收付款数据 ID:" + entityDts.DLOADID);
                                }
                                sql  = "UPDATE WH_IOForm SET InvoiceQty=ISNULL(InvoiceQty,0)-" + "(" + SysString.ToDBString(entityDts.DInvoiceQty) + ")";
                                sql += ",InvoiceAmount=ISNULL(InvoiceAmount,0)-" + "(" + SysString.ToDBString(entityDts.DInvoiceAmount) + ")";
                                sql += ",InvoiceDelOPID=" + SysString.ToDBString(entity.SaleOPID);
                                sql += ",InvoiceDelTime=null";
                                sql += ",InvoiceNo=''";
                                if (entityNoDts.InvoiceQty == entityDts.DInvoiceQty)
                                {
                                    sql += ",InvoiceDelFlag=0";//开票完成标志
                                }
                                sql += " WHERE ID=" + SysString.ToDBString(entityNoDts.ID);
                                sqlTrans.ExecuteNonQuery(sql);

                                if (entityDts.DLoadCheckDtsID > 0)
                                {
                                    sql = "UPDATE Finance_CheckOperationDts SET InvoiceFlag=0 WHERE ID=" + SysString.ToDBString(entityDts.DLoadCheckDtsID);
                                    sqlTrans.ExecuteNonQuery(sql);
                                }
                            }
                        }
                        else
                        {
                            if (p_Type == (int)YesOrNo.Yes)//提交
                            {
                                if (entityDts.DLoadCheckDtsID > 0)
                                {
                                    sql = "UPDATE Finance_CheckOperationDts SET InvoiceFlag=1 WHERE ID=" + SysString.ToDBString(entityDts.DLoadCheckDtsID);
                                    sqlTrans.ExecuteNonQuery(sql);
                                }
                            }
                            else
                            {
                                if (entityDts.DLoadCheckDtsID > 0)
                                {
                                    sql = "UPDATE Finance_CheckOperationDts SET InvoiceFlag=0 WHERE ID=" + SysString.ToDBString(entityDts.DLoadCheckDtsID);
                                    sqlTrans.ExecuteNonQuery(sql);
                                }
                            }
                        }
                    }
                    else
                    {
                        entityIOF.ID = entityDts.DLOADDtsID;
                        if (entityDts.DLOADDtsID > 0)
                        {
                            if (entityIOF.SelectByID())
                            {
                            }
                            else
                            {
                                throw new Exception("操作异常,没有找到出入库记录 ID:" + entityDts.DLOADDtsID);
                            }
                            if (p_Type == (int)YesOrNo.Yes)//提交
                            {
                                if (entityIOF.DtsInvoiceDelFlag == (int)YesOrNo.Yes && entityIOF.Qty == entityIOF.InvoiceQty)
                                {
                                    throw new Exception("不能操作,数据已开票结束 ID:" + entityDts.DLOADDtsID + " " + entityIOF.ItemCode + " " + entityIOF.ColorNum);
                                }
                                //if (entityDts.DInvoiceQty + entityIOF.InvoiceQty > entityIOF.DZQty || entityDts.DInvoiceAmount + entityIOF.InvoiceAmount > entityIOF.DZAmount)//开票溢出
                                //{
                                //    throw new Exception("不能操作,开票数超过对账数 或 开票金额超过对账金额 ID:" + entityDts.DLOADDtsID + " " + entityIOF.ItemCode + " " + entityIOF.ColorNum);
                                //}

                                sql  = "UPDATE WH_IOFormDts SET InvoiceQty=ISNULL(InvoiceQty,0)+" + "(" + SysString.ToDBString(entityDts.DInvoiceQty) + ")";
                                sql += ",InvoiceAmount=ISNULL(InvoiceAmount,0)+" + "(" + SysString.ToDBString(entityDts.DInvoiceAmount) + ")";
                                sql += ",DtsInvoiceDelOPID=" + SysString.ToDBString(entity.SaleOPID);
                                sql += ",DtsInvoiceDelTime=" + SysString.ToDBString(entity.FormDate.ToString("yyyy-MM-dd"));
                                sql += ",DtsInvoiceNo=" + SysString.ToDBString(entity.InvoiceNO);
                                if (entityDts.DInvoiceAmount + entityIOF.InvoiceAmount >= entityIOF.DZAmount)//开票完成
                                {
                                    sql += ",DtsInvoiceDelFlag=1";
                                }
                                else
                                {
                                    sql += ",DtsInvoiceDelFlag=0";
                                }
                                sql += " WHERE ID=" + SysString.ToDBString(entityDts.DLOADDtsID);
                                sqlTrans.ExecuteNonQuery(sql);

                                if (entityDts.DLoadCheckDtsID > 0)
                                {
                                    sql = "UPDATE Finance_CheckOperationDts SET InvoiceFlag=1 WHERE ID=" + SysString.ToDBString(entityDts.DLoadCheckDtsID);
                                    sqlTrans.ExecuteNonQuery(sql);
                                }
                            }
                            else//撤销提交
                            {
                                if (entityIOF.PayAmount != 0)
                                {
                                    throw new Exception("不能操作,数据已有收付款数据 ID:" + entityDts.DLOADDtsID + " " + entityIOF.ItemCode + " " + entityIOF.ColorNum);
                                }

                                sql  = "UPDATE WH_IOFormDts SET InvoiceQty=ISNULL(InvoiceQty,0)-" + "(" + SysString.ToDBString(entityDts.DInvoiceQty) + ")";
                                sql += ",InvoiceAmount=ISNULL(InvoiceAmount,0)-" + "(" + SysString.ToDBString(entityDts.DInvoiceAmount) + ")";
                                sql += ",DtsInvoiceDelOPID=" + SysString.ToDBString(entity.SaleOPID);
                                sql += ",DtsInvoiceDelTime=null";
                                sql += ",DtsInvoiceNo=''";
                                if (entityIOF.InvoiceQty == entityDts.DInvoiceQty)
                                {
                                    sql += ",DtsInvoiceDelFlag=0";//开票完成标志
                                }
                                sql += " WHERE ID=" + SysString.ToDBString(entityDts.DLOADDtsID);
                                sqlTrans.ExecuteNonQuery(sql);

                                if (entityDts.DLoadCheckDtsID > 0)
                                {
                                    sql = "UPDATE Finance_CheckOperationDts SET InvoiceFlag=0 WHERE ID=" + SysString.ToDBString(entityDts.DLoadCheckDtsID);
                                    sqlTrans.ExecuteNonQuery(sql);
                                }
                            }
                        }
                        else
                        {
                            if (p_Type == (int)YesOrNo.Yes)//提交
                            {
                                if (entityDts.DLoadCheckDtsID > 0)
                                {
                                    sql = "UPDATE Finance_CheckOperationDts SET InvoiceFlag=1 WHERE ID=" + SysString.ToDBString(entityDts.DLoadCheckDtsID);
                                    sqlTrans.ExecuteNonQuery(sql);
                                }
                            }
                            else
                            {
                                if (entityDts.DLoadCheckDtsID > 0)
                                {
                                    sql = "UPDATE Finance_CheckOperationDts SET InvoiceFlag=0 WHERE ID=" + SysString.ToDBString(entityDts.DLoadCheckDtsID);
                                    sqlTrans.ExecuteNonQuery(sql);
                                }
                            }
                        }
                    }
                }
            }
        }