示例#1
0
        public void FixInvokedBussinessObjects(Session session, XPCollection <BusinessObject> invokedBussinessObjects)
        {
            if (invokedBussinessObjects == null || invokedBussinessObjects.Count == 0)
            {
                return;
            }

            CriteriaOperator criteria_0 = CriteriaOperator.Parse("not(IsNull(FinancialTransactionDimId))");
            CriteriaOperator criteria_1 = new InOperator("FinancialTransactionDimId.RefId", invokedBussinessObjects.Select(i => i.RefId));
            CriteriaOperator criteria_2 = new BinaryOperator("RowStatus", 0, BinaryOperatorType.Greater);
            CriteriaOperator criteria   = new GroupOperator(GroupOperatorType.And, criteria_0, criteria_1, criteria_2);
            CorrespondFinancialAccountDim defaultCorrespondAccDim = CorrespondFinancialAccountDim.GetDefault(session, CorrespondFinancialAccountDimEnum.NAAN_DEFAULT);

            XPCollection <FinancialActualPriceDetail> neededToBeFixList = new XPCollection <FinancialActualPriceDetail>(session, criteria);
            FinancialActualPriceSummary_Fact          fact = null;

            if (neededToBeFixList != null && neededToBeFixList.Count > 0)
            {
                foreach (FinancialActualPriceDetail detail in neededToBeFixList)
                {
                    fact             = detail.FinancialActualPriceSummary_FactId;
                    detail.RowStatus = Utility.Constant.ROWSTATUS_DELETED;
                    detail.Save();
                    fact.Save();
                }
            }
        }
示例#2
0
        // get  FinancialActualPriceSummary_Fact
        public FinancialActualPriceSummary_Fact FinancialActualPriceSummary_Fact_152_153(int FinancialAccountDimId,
                                                                                         int OwnerOrgDimId, int YearDimId, int MonthDimId
                                                                                         )
        {
            FinancialActualPriceSummary_Fact FinancialActualPriceSummary_Fact = session.FindObject <FinancialActualPriceSummary_Fact>(CriteriaOperator.Parse(String.Format("FinancialAccountDimId={0} AND OwnerOrgDimId={1} AND YearDimId={2} AND MonthDimId={3} AND RowStatus='1'",
                                                                                                                                                                           FinancialAccountDimId,
                                                                                                                                                                           OwnerOrgDimId,
                                                                                                                                                                           YearDimId,
                                                                                                                                                                           MonthDimId
                                                                                                                                                                           )));

            return(FinancialActualPriceSummary_Fact);
        }
示例#3
0
        private FinancialActualPriceSummary_Fact CreateFinancialActualPriceSummaryFact(Session session,
                                                                                       Guid OwnerOrgId,
                                                                                       DateTime IssueDate,
                                                                                       string FinancialAccountCode,
                                                                                       bool IsBalanceForward)
        {
            FinancialActualPriceSummary_Fact result = new FinancialActualPriceSummary_Fact(session);

            try
            {
                ETLAccountingBO accountingBO = new ETLAccountingBO();
                DimBO           dimBO        = new DimBO();
                result.BeginCreditBalance    = 0;
                result.BeginDebitBalance     = 0;
                result.CreditSum             = 0;
                result.DebitSum              = 0;
                result.EndCreditBalance      = 0;
                result.EndDebitBalance       = 0;
                result.CoefficientDiff       = 0;
                result.FinancialAccountDimId = accountingBO.GetFinancialAccountDim(session, FinancialAccountCode);
                result.MonthDimId            = dimBO.GetMonthDim(session, (short)IssueDate.Month);
                result.YearDimId             = dimBO.GetYearDim(session, (short)IssueDate.Year);
                result.OwnerOrgDimId         = dimBO.GetOwnerOrgDim(session, OwnerOrgId);
                result.RowStatus             = Constant.ROWSTATUS_ACTIVE;
                if (result.FinancialAccountDimId == null || result.MonthDimId == null || result.YearDimId == null || result.OwnerOrgDimId == null)
                {
                    return(null);
                }

                var date = new DateTime(IssueDate.Year, IssueDate.Month, 1);
                FinancialActualPriceSummary_Fact previousSummary = GetFinancialActualPriceSummaryFact(session,
                                                                                                      OwnerOrgId, date.AddMonths(-1), FinancialAccountCode);

                if (previousSummary != null)
                {
                    result.BeginDebitBalance  = previousSummary.EndDebitBalance;
                    result.BeginCreditBalance = previousSummary.EndCreditBalance;
                }
                result.Save();
                return(result);
            }
            catch (Exception)
            {
                return(null);
            }
        }
示例#4
0
        private FinancialActualPriceSummary_Fact GetFinancialActualPriceSummaryFact(
            Session session,
            Guid OwnerOrgId,
            DateTime IssueDate,
            string FinancialAccountCode)
        {
            FinancialActualPriceSummary_Fact result = null;

            try
            {
                Util                util                = new Util();
                OwnerOrgDim         ownerOrgDim         = util.GetXpoObjectByFieldName <OwnerOrgDim, Guid>(session, "RefId", OwnerOrgId, BinaryOperatorType.Equal);
                MonthDim            monthDim            = util.GetXpoObjectByFieldName <MonthDim, string>(session, "Name", IssueDate.Month.ToString(), BinaryOperatorType.Equal);
                YearDim             yearDim             = util.GetXpoObjectByFieldName <YearDim, string>(session, "Name", IssueDate.Year.ToString(), BinaryOperatorType.Equal);
                FinancialAccountDim financialAccountDim = util.GetXpoObjectByFieldName <FinancialAccountDim, string>(session, "Code", FinancialAccountCode, BinaryOperatorType.Equal);

                if (ownerOrgDim == null || monthDim == null || yearDim == null || financialAccountDim == null)
                {
                    return(null);
                }
                else
                {
                    CriteriaOperator criteria_RowStatus   = new BinaryOperator("RowStatus", Constant.ROWSTATUS_ACTIVE, BinaryOperatorType.GreaterOrEqual);
                    CriteriaOperator criteria_OwnerOrg    = new BinaryOperator("OwnerOrgDimId", ownerOrgDim, BinaryOperatorType.Equal);
                    CriteriaOperator criteria_Month       = new BinaryOperator("MonthDimId", monthDim, BinaryOperatorType.Equal);
                    CriteriaOperator criteria_Year        = new BinaryOperator("YearDimId", yearDim, BinaryOperatorType.Equal);
                    CriteriaOperator criteria_AccountCode = new BinaryOperator("FinancialAccountDimId", financialAccountDim, BinaryOperatorType.Equal);
                    CriteriaOperator criteria             = CriteriaOperator.And(criteria_RowStatus, criteria_OwnerOrg, criteria_Month, criteria_Year, criteria_AccountCode);

                    FinancialActualPriceSummary_Fact fact = session.FindObject <FinancialActualPriceSummary_Fact>(criteria);

                    if (fact == null)
                    {
                        return(null);
                    }
                    result = fact;
                }
            }
            catch (Exception)
            {
                return(result);
            }
            return(result);
        }
示例#5
0
 // get danh sách đối ứng
 public void list_correstpond(FinancialActualPriceSummary_Fact FinancialActualPriceSummary_Fact,
                              int FinancialAccountDimId, int CorrespondFinancialAccountDimId_default, List <string> list_Correspond_152_153)
 {
     if (FinancialActualPriceSummary_Fact != null)
     {
         XPCollection <FinancialActualPriceDetail> Colection_Correspond =
             new XPCollection <FinancialActualPriceDetail>(session, CriteriaOperator.Parse(String.Format("FinancialAccountDimId='{0}' AND FinancialActualPriceSummary_FactId='{1}' AND CorrespondFinancialAccountDimId!='{2}' AND Credit>0 AND RowStatus='1'",
                                                                                                         FinancialAccountDimId,
                                                                                                         FinancialActualPriceSummary_Fact.FinancialActualPriceSummary_FactId,
                                                                                                         CorrespondFinancialAccountDimId_default)));
         if (Colection_Correspond.Count != 0)
         {
             foreach (FinancialActualPriceDetail each_Colection_Correspond in Colection_Correspond)
             {
                 if (!list_Correspond_152_153.Contains(each_Colection_Correspond.CorrespondFinancialAccountDimId.Code.Substring(0, 3)))
                 {
                     list_Correspond_152_153.Add(each_Colection_Correspond.CorrespondFinancialAccountDimId.Code.Substring(0, 3));
                 }
             }
         }
     }
 }
示例#6
0
        private void CreateFinancialActualPriceDetail(
            Session session,
            ETL_FinanciaActualPriceDetail Detail,
            string MainAccountCode)
        {
            try
            {
                Util util = new Util();
                CorrespondFinancialAccountDim defaultCorrespondindAcc = CorrespondFinancialAccountDim.GetDefault(session, CorrespondFinancialAccountDimEnum.NAAN_DEFAULT);
                FinancialAccountDim           defaultFinancialAcc     = FinancialAccountDim.GetDefault(session, FinancialAccountDimEnum.NAAN_DEFAULT);
                ETLAccountingBO accountingBO               = new ETLAccountingBO();
                FinancialActualPriceSummary_Fact Fact      = GetFinancialActualPriceSummaryFact(session, Detail.OwnerOrgId, Detail.IssueDate, MainAccountCode);
                FinancialActualPriceDetail       newDetail = new FinancialActualPriceDetail(session);
                if (Fact == null)
                {
                    Fact = CreateFinancialActualPriceSummaryFact(session, Detail.OwnerOrgId, Detail.IssueDate, MainAccountCode, Detail.IsBalanceForward);
                    if (Fact == null)
                    {
                        return;
                    }
                }
                else
                {
                    var date = new DateTime(Detail.IssueDate.Year, Detail.IssueDate.Month, 1);
                    FinancialActualPriceSummary_Fact previousSummary = GetFinancialActualPriceSummaryFact(session,
                                                                                                          Detail.OwnerOrgId, date.AddMonths(-1), MainAccountCode);

                    if (previousSummary != null)
                    {
                        Fact.BeginDebitBalance  = previousSummary.EndDebitBalance;
                        Fact.BeginCreditBalance = previousSummary.EndCreditBalance;
                    }
                }

                CorrespondFinancialAccountDim correspondFinancialAccountDim = null;
                FinancialAccountDim           financialAccountDim           = null;

                if (!Detail.CorrespondAccountCode.Equals(string.Empty))
                {
                    correspondFinancialAccountDim = util.GetXpoObjectByFieldName <CorrespondFinancialAccountDim, string>(session, "Code", Detail.CorrespondAccountCode, BinaryOperatorType.Equal);
                }
                if (!MainAccountCode.Equals(string.Empty))
                {
                    financialAccountDim = util.GetXpoObjectByFieldName <FinancialAccountDim, string>(session, "Code", MainAccountCode, BinaryOperatorType.Equal);
                }

                FinancialTransactionDim financialTransactionDim = util.GetXpoObjectByFieldName <FinancialTransactionDim, Guid>(session, "RefId", Detail.TransactionId, BinaryOperatorType.Equal);

                CurrencyDim currencyDim = util.GetXpoObjectByFieldName <CurrencyDim, string>(session, "Code", Detail.CurrencyCode, BinaryOperatorType.Equal);

                if (financialTransactionDim == null)
                {
                    financialTransactionDim = accountingBO.CreateFinancialTransactionDim(session, Detail.TransactionId);
                    if (financialTransactionDim == null)
                    {
                        return;
                    }
                }

                if (financialAccountDim == null && !MainAccountCode.Equals(string.Empty))
                {
                    financialAccountDim = accountingBO.CreateFinancialAccountDim(session, MainAccountCode);
                }
                if (correspondFinancialAccountDim == null && !Detail.CorrespondAccountCode.Equals(string.Empty))
                {
                    correspondFinancialAccountDim = accountingBO.CreateCorrespondFinancialAccountDim(session, Detail.CorrespondAccountCode);
                }

                if (currencyDim == null && !Detail.CurrencyCode.Equals(string.Empty))
                {
                    currencyDim = accountingBO.CreateCurrencyDim(session, Detail.CurrencyCode);
                }

                newDetail.CorrespondFinancialAccountDimId = correspondFinancialAccountDim;
                newDetail.Credit                             = Detail.Credit;
                newDetail.Debit                              = Detail.Debit;
                newDetail.CurrencyDimId                      = currencyDim;
                newDetail.FinancialAccountDimId              = financialAccountDim;
                newDetail.FinancialTransactionDimId          = financialTransactionDim;
                newDetail.FinancialActualPriceSummary_FactId = Fact;

                /*2014-02-22 ERP-1417 Duc.Vo INS START*/

                if (newDetail.FinancialAccountDimId == null)
                {
                    newDetail.FinancialAccountDimId = defaultFinancialAcc;
                }
                if (newDetail.CorrespondFinancialAccountDimId == null)
                {
                    newDetail.CorrespondFinancialAccountDimId = defaultCorrespondindAcc;
                }
                /*2014-02-22 ERP-1417 Duc.Vo INS END*/

                newDetail.RowStatus = Constant.ROWSTATUS_ACTIVE;
                newDetail.Save();

                if (Detail.IsBalanceForward)
                {
                    Fact.BeginCreditBalance = Fact.EndCreditBalance = Detail.Credit;
                    Fact.BeginDebitBalance  = Fact.EndDebitBalance = Detail.Debit;
                    Fact.CreditSum          = 0;
                    Fact.DebitSum           = 0;
                }
                else
                {
                    Fact.CreditSum = Fact.FinancialActualPriceDetails.Where(i => i.RowStatus == 1 &&
                                                                            i.Credit > 0 && i.CorrespondFinancialAccountDimId == defaultCorrespondindAcc).Sum(d => d.Credit);

                    Fact.DebitSum = Fact.FinancialActualPriceDetails.Where(i => i.RowStatus == 1 &&
                                                                           i.Debit > 0 && i.CorrespondFinancialAccountDimId == defaultCorrespondindAcc).Sum(d => d.Debit);

                    Fact.EndCreditBalance = Fact.BeginCreditBalance + Fact.CreditSum - Fact.DebitSum;
                    Fact.EndDebitBalance  = Fact.BeginDebitBalance + Fact.DebitSum - Fact.CreditSum;
                }
                Fact.Save();
            }
            catch (Exception)
            {
                return;
            }
        }
示例#7
0
        public void load_data()
        {
            WebModule.Accounting.Report.S04b3_DN s04b3_dn = new Report.S04b3_DN();
            //try
            //{
            #region tham số truyền
            int    month = Int32.Parse(this.hS04b3DN_month.Get("month_id").ToString());
            int    year  = Int32.Parse(this.hS04b3DN_year.Get("year_id").ToString());
            string owner = "QUASAPHARCO";
            //string asset = "";
            s04b3_dn.xrMonth.Text = month.ToString();
            s04b3_dn.xrYear.Text  = year.ToString();

            #endregion

            #region Id
            XPCollection <FinancialAccountDim> FinancialAccountDim_152 = new XPCollection <FinancialAccountDim>(session, CriteriaOperator.Parse("Code like '152%' AND Code!='152'"));
            XPCollection <FinancialAccountDim> FinancialAccountDim_153 = new XPCollection <FinancialAccountDim>(session, CriteriaOperator.Parse("Code like '153%' AND Code!='153'"));
            //int FinancialAccountDimId_152 = session.FindObject<FinancialAccountDim>(CriteriaOperator.Parse("Name='152'")).FinancialAccountDimId;
            //int FinancialAccountDimId_153 = session.FindObject<FinancialAccountDim>(CriteriaOperator.Parse("Name='153'")).FinancialAccountDimId;
            int MonthDimId    = session.FindObject <MonthDim>(CriteriaOperator.Parse(String.Format("Name='{0}'", month))).MonthDimId;
            int YearDimId     = session.FindObject <YearDim>(CriteriaOperator.Parse(String.Format("Name='{0}'", year))).YearDimId;
            int OwnerOrgDimId = session.FindObject <OwnerOrgDim>(CriteriaOperator.Parse(String.Format("Code='{0}'", owner))).OwnerOrgDimId;
            int CorrespondFinancialAccountDimId_default = CorrespondFinancialAccountDim.GetDefault(session, CorrespondFinancialAccountDimEnum.NAAN_DEFAULT).CorrespondFinancialAccountDimId;
            FinancialActualPriceSummary_Fact FinancialActualPriceSummary_Fact = null;
            #endregion

            #region header và table báo cáo
            grid_header();
            DataTable datatable = table_pri();
            #endregion

            #region danh sách đối ứng
            // danh sach doi ung 152
            List <string> list_Correspond_152_153 = new List <string>();
            if (FinancialAccountDim_152.Count != 0)
            {
                foreach (FinancialAccountDim each_FinancialAccountDim_152 in FinancialAccountDim_152)
                {
                    FinancialActualPriceSummary_Fact = FinancialActualPriceSummary_Fact_152_153(each_FinancialAccountDim_152.FinancialAccountDimId,
                                                                                                OwnerOrgDimId, YearDimId, MonthDimId);
                    list_correstpond(FinancialActualPriceSummary_Fact, each_FinancialAccountDim_152.FinancialAccountDimId, CorrespondFinancialAccountDimId_default, list_Correspond_152_153);
                }
            }

            // danh sach doi ung 153
            if (FinancialAccountDim_153.Count != 0)
            {
                foreach (FinancialAccountDim each_FinancialAccountDim_153 in FinancialAccountDim_153)
                {
                    FinancialActualPriceSummary_Fact = FinancialActualPriceSummary_Fact_152_153(each_FinancialAccountDim_153.FinancialAccountDimId,
                                                                                                OwnerOrgDimId, YearDimId, MonthDimId);
                    list_correstpond(FinancialActualPriceSummary_Fact, each_FinancialAccountDim_153.FinancialAccountDimId, CorrespondFinancialAccountDimId_default, list_Correspond_152_153);
                }
            }
            list_Correspond_152_153.Sort();
            #endregion

            #region đổ dữ liệu
            #region dòng tĩnh
            // dòng 2
            DataRow dr = datatable.NewRow();
            dr["stt"]      = 1;
            dr["chi_tieu"] = "I. Số dư đầu tháng";
            foreach (string each_column_TT in column_gridview())
            {
                FinancialActualPriceSummary_Fact fapsf = FinancialActualPriceSummary_Fact_152_153(FinancialAccountDimId(each_column_TT), OwnerOrgDimId, YearDimId, MonthDimId);
                dr[each_column_TT + "TT"] = fapsf != null ? fapsf.BeginDebitBalance : 0;
            }
            datatable.Rows.Add(dr);

            // dòng 3
            dr             = datatable.NewRow();
            dr["stt"]      = 2;
            dr["chi_tieu"] = "II. Số phát sinh trong tháng";
            datatable.Rows.Add(dr);
            #endregion

            #region dòng động
            int STTu = 3;
            // từng dòng
            foreach (string each_TK in list_Correspond_152_153)
            {
                dr        = datatable.NewRow();
                dr["stt"] = STTu++;

                #region cột chỉ tiêu
                if (each_TK == "111")
                {
                    dr["chi_tieu"] = "Từ NKCT số 1 (Ghi có TK " + each_TK + ")";
                }
                else if (each_TK == "112")
                {
                    dr["chi_tieu"] = "Từ NKCT số 2 (Ghi có TK " + each_TK + ")";
                }
                else if (each_TK == "113")
                {
                    dr["chi_tieu"] = "Từ NKCT số 3 (Ghi có TK " + each_TK + ")";
                }
                else if (each_TK == "331")
                {
                    dr["chi_tieu"] = "Từ NKCT số 5 (Ghi có TK " + each_TK + ")";
                }
                else if (each_TK == "151")
                {
                    dr["chi_tieu"] = "Từ NKCT số 6 (Ghi có TK " + each_TK + ")";
                }
                else if (list_NKCT4().Contains(each_TK))
                {
                    dr["chi_tieu"] = "Từ NKCT số 4 (Ghi có TK " + each_TK + ")";
                }
                else if (list_NKCT7().Contains(each_TK))
                {
                    dr["chi_tieu"] = "Từ NKCT số 7 (Ghi có TK " + each_TK + ")";
                }
                else if (list_NKCT8().Contains(each_TK))
                {
                    dr["chi_tieu"] = "Từ NKCT số 8 (Ghi có TK " + each_TK + ")";
                }
                else if (list_NKCT9().Contains(each_TK))
                {
                    dr["chi_tieu"] = "Từ NKCT số 9 (Ghi có TK " + each_TK + ")";
                }
                else if (list_NKCT10().Contains(each_TK))
                {
                    dr["chi_tieu"] = "Từ NKCT số 10 (Ghi có TK " + each_TK + ")";
                }
                else
                {
                    dr["chi_tieu"] = "Ghi có TK " + each_TK + "";
                }
                #endregion

                #region cột dữ liệu
                // từng cột
                foreach (string each_column in column_gridview())
                {
                    XPCollection <CorrespondFinancialAccountDim> cfad = new XPCollection <CorrespondFinancialAccountDim>(session, CriteriaOperator.Parse(String.Format("Code like '{0}%'", each_TK)));
                    double column_mount = 0;
                    if (cfad.Count != 0)
                    {
                        foreach (CorrespondFinancialAccountDim each_cfad in cfad)
                        {
                            FinancialActualPriceSummary_Fact FinancialActualPriceSummary_Fact_15 =
                                FinancialActualPriceSummary_Fact_152_153(FinancialAccountDimId(each_column), OwnerOrgDimId, YearDimId, MonthDimId);
                            if (FinancialActualPriceSummary_Fact_15 != null)
                            {
                                XPCollection <FinancialActualPriceDetail> fapd_15 = new XPCollection <FinancialActualPriceDetail>(session, CriteriaOperator.Parse(String.Format("FinancialAccountDimId={0} AND FinancialActualPriceSummary_FactId='{1}' AND CorrespondFinancialAccountDimId={2} AND Credit>0 AND RowStatus='1'",
                                                                                                                                                                                FinancialAccountDimId(each_column),
                                                                                                                                                                                FinancialActualPriceSummary_Fact_15.FinancialActualPriceSummary_FactId,
                                                                                                                                                                                each_cfad.CorrespondFinancialAccountDimId
                                                                                                                                                                                )));

                                if (fapd_15.Count != 0)
                                {
                                    foreach (FinancialActualPriceDetail each_fapd_152 in fapd_15)
                                    {
                                        column_mount += (double)each_fapd_152.Credit;
                                    }
                                }
                            }
                        }
                    }

                    if (column_mount != 0)
                    {
                        dr["" + each_column + "TT"] = column_mount;
                    }
                }
                datatable.Rows.Add(dr);
                #endregion
            }
            #endregion

            #region row Cộng số dư đầu tháng và phát sinh trong tháng
            dr             = datatable.NewRow();
            dr["stt"]      = STTu++;
            dr["chi_tieu"] = "III. Cộng số dư đầu tháng và phát sinh trong tháng(I+II)";
            int column_count = datatable.Columns.Count - 1;
            int row_count    = datatable.Rows.Count - 1;
            for (int c = 2; c <= column_count; c++)
            {
                double sumT = 0;
                for (int r = 1; r <= row_count; r++)
                {
                    double tt;
                    double.TryParse(datatable.Rows[r][c].ToString(), out tt);
                    sumT += tt;
                }
                dr[datatable.Columns[c]] = sumT;
            }
            datatable.Rows.Add(dr);
            #endregion

            #region row Hệ số chênh lệch
            dr             = datatable.NewRow();
            dr["stt"]      = STTu++;
            dr["chi_tieu"] = "IV. Hệ số chênh lệch";
            datatable.Rows.Add(dr);
            #endregion

            #region row Xuất dùng trong tháng
            dr             = datatable.NewRow();
            dr["stt"]      = STTu++;
            dr["chi_tieu"] = "V. Xuất dùng trong tháng";


            //XPCollection<CorrespondFinancialAccountDim> cfad_TK6 = new XPCollection<CorrespondFinancialAccountDim>(session, CriteriaOperator.Parse("Code like '6%'"));
            //XPCollection<CorrespondFinancialAccountDim> cfad_TK8 = new XPCollection<CorrespondFinancialAccountDim>(session, CriteriaOperator.Parse("Code like '8%'"));

            foreach (string name_152_153 in column_gridview())
            {
                //double debit_TK6_TK8_152 = 0;
                int FinancialAccountDimId = session.FindObject <FinancialAccountDim>(CriteriaOperator.Parse("Code='" + name_152_153 + "'")).FinancialAccountDimId;
                FinancialActualPriceSummary_Fact FinancialActualPriceSummary_Fact_15 = session.FindObject <FinancialActualPriceSummary_Fact>(CriteriaOperator.Parse("FinancialAccountDimId='" + FinancialAccountDimId + "' AND OwnerOrgDimId='" + OwnerOrgDimId + "' AND YearDimId='" + YearDimId + "' AND MonthDimId='" + MonthDimId + "' AND RowStatus='1'"));
                //if (FinancialActualPriceSummary_Fact_15 != null)
                //{
                //    //TK6
                //    if (cfad_TK6.Count != 0)
                //    {
                //        foreach (CorrespondFinancialAccountDim tk6 in cfad_TK6)
                //        {
                //            XPCollection<FinancialActualPriceDetail> details = new XPCollection<FinancialActualPriceDetail>(session, CriteriaOperator.Parse("FinancialActualPriceSummary_FactId='" + FinancialActualPriceSummary_Fact_15.FinancialActualPriceSummary_FactId + "' AND CorrespondFinancialAccountDimId='" + tk6.CorrespondFinancialAccountDimId + "' AND Debit>0 AND RowStatus='1'"));
                //            if (details.Count != 0)
                //            {
                //                foreach (FinancialActualPriceDetail detail in details)
                //                {
                //                    debit_TK6_TK8_152 += (double)detail.Debit;
                //                }
                //            }
                //        }
                //    }
                //    //TK8
                //    if (cfad_TK8.Count != 0)
                //    {
                //        foreach (CorrespondFinancialAccountDim tk8 in cfad_TK8)
                //        {
                //            XPCollection<FinancialActualPriceDetail> details = new XPCollection<FinancialActualPriceDetail>(session, CriteriaOperator.Parse("FinancialActualPriceSummary_FactId='" + FinancialActualPriceSummary_Fact_15.FinancialActualPriceSummary_FactId + "' AND CorrespondFinancialAccountDimId='" + tk8.CorrespondFinancialAccountDimId + "' AND Debit>0 AND RowStatus='1'"));
                //            if (details.Count != 0)
                //            {
                //                foreach (FinancialActualPriceDetail detail in details)
                //                {
                //                    debit_TK6_TK8_152 += (double)detail.Debit;
                //                }
                //            }
                //        }
                //    }
                //}
                //dr["" + name_152_153 + "TT"] = debit_TK6_TK8_152;
                dr["" + name_152_153 + "TT"] = FinancialActualPriceSummary_Fact_15.CreditSum;
            }
            datatable.Rows.Add(dr);
            #endregion

            #region row Tồn kho cuối tháng
            dr             = datatable.NewRow();
            dr["stt"]      = STTu;
            dr["chi_tieu"] = "VI. Tồn kho cuối tháng(III-V)";
            foreach (string name_152_153 in column_gridview())
            {
                //double TK_III = (from DataRow dr1 in datatable.Rows where dr1["chi_tieu"] == "III. Cộng số dư đầu tháng và phát sinh trong tháng(I+II)" select (double)dr1["" + name_152_153 + "TT"]).FirstOrDefault();
                //double TK_V = (from DataRow dr1 in datatable.Rows where dr1["chi_tieu"] == "V. Xuất dùng trong tháng" select (double)dr1["" + name_152_153 + "TT"]).FirstOrDefault();
                //dr["" + name_152_153 + "TT"] = TK_III - TK_V;
                int FinancialAccountDimId = session.FindObject <FinancialAccountDim>(CriteriaOperator.Parse("Code='" + name_152_153 + "'")).FinancialAccountDimId;
                FinancialActualPriceSummary_Fact FinancialActualPriceSummary_Fact_15 = session.FindObject <FinancialActualPriceSummary_Fact>(CriteriaOperator.Parse("FinancialAccountDimId='" + FinancialAccountDimId + "' AND OwnerOrgDimId='" + OwnerOrgDimId + "' AND YearDimId='" + YearDimId + "' AND MonthDimId='" + MonthDimId + "' AND RowStatus='1'"));
                dr["" + name_152_153 + "TT"] = FinancialActualPriceSummary_Fact_15.EndDebitBalance;
            }
            datatable.Rows.Add(dr);
            #endregion
            #endregion

            GridView_S04b3DN.DataSource = datatable;
            GridView_S04b3DN.DataBind();
            //}
            //catch
            //{
            //}
            #region export report
            s04b3_dn.printableCC_S04b3DN.PrintableComponent = new PrintableComponentLinkBase()
            {
                Component = GridViewExporter_S04b3DN
            };
            ReportViewer_S04b3DN.Report = s04b3_dn;
            #endregion
        }