BÁO CÁO DYNAMIC ĐỘNG
1. TIỀN XỬ LÝ
// Some code
public DataTable DMain(DataTable dtColumns, DataRow drReport, FOR0025 formBaoCao)
{
//Viết code dưới dòng này(chỉnh sửa cấu trúc hiển thị báo cáo)
/*
- xử lý vấn đề bên nợ 154: đối ứng với 62,154 trong kỳ
- 01 tkdoiung, có 2 nhóm chính: đích danh và phân bổ
*/
string nhomcot = "";
nhomcot = drReport["nhomcot"].ToString(); // lấy nhóm cột gõ tay nếu có
// nhomcot(col1,col2)0#
try {
#region: xử lý bên có 154
if(dtTaocot != null && dtTaocot.Rows.Count != 0)
{
for (int i = 0; i < dtTaocot.Rows.Count; i++)
{
dr = _Vari.FormChinh.dtDynamicReportColumn.NewRow();
dr["ten"] = dtTaocot.Rows[i]["tkco"].ToString().Trim();
dr["giatri"] = "case when vr.benno=0 then vr.psco else 0 end as TKC_"+ dtTaocot.Rows[i]["tkco"].ToString();
dr["dieukien"] = "vr.tkco like '" + dtTaocot.Rows[i]["tkco"].ToString()+"' and trongky()";
_Vari.FormChinh.dtDynamicReportColumn.Rows.Add(dr);
}
}
#endregion: xử lý bên có 154
}
catch(Exception ex) { MessageBox.Show(ex.Message); }
drReport["nhomcot"] = nhomcot; // gán lại nhóm cột mới
return dtColumns;
}
public string dynamicTen(string strTen)
{
// strTen = "Tháng " + strTen;
return strTen;
}
// hàm tính giá trị
public string dynamicGiaTri(string strGiaTri)
{
// strGiaTri = "case when KhoanmucTien.tinhchat=1 or vr.khoanmucTien=0 then VR.PSNO - VR.PSCO else VR.PSCO - VR.PSNO end as TH_"+ strGiaTri.Trim();
return strGiaTri;
}
// hàm tính điều kiện
public string dynamicDieuKien(string strDieuKien)
{
// int thang = Convert.ToInt32(strDieuKien.Split('_')[0].ToString());
// int nam = Convert.ToInt32(strDieuKien.Split('_')[1].ToString());
// strDieuKien = "ngay>='"+ new DateTime(nam, thang , 01).ToString("MM/dd/yyyy")+"'";
// strDieuKien += " and ngay<='"+ new DateTime(nam, thang , 01).AddMonths(1).AddDays(-1).ToString("MM/dd/yyyy")+"'";
return strDieuKien;
}
public string dynamicTen1(string strTen)
{
strTen = "Tháng 1" ;
return strTen;
}
// hàm tính giá trị
public string dynamicGiaTri1(string strGiaTri)
{
strGiaTri = "0";
return strGiaTri;
}
// hàm tính điều kiện
public string dynamicDieuKien1(string strDieuKien)
{
strDieuKien = "1=1";
return strDieuKien;
}
2. XỬ LÝ CÁC CỘT TRONG CÔNG THỨC - ẨN HIỆN, THỨ TỰ...
// thêm cột khonghien. để ẩn hiện cột dynamic
if(!_Vari.FormChinh.dtDynamicReportColumn.Columns.Contains("khonghien"))
_Vari.FormChinh.dtDynamicReportColumn.Columns.Add("khonghien", typeof(int));
// thêm cột stt, sắp xếp thứ tự cột dynamic
if(!_Vari.FormChinh.dtDynamicReportColumn.Columns.Contains("stt"))
_Vari.FormChinh.dtDynamicReportColumn.Columns.Add("stt", typeof(decimal));
3. TRƯỚC TẤT CẢ - KQKD KHOẢN MỤC + PHÒNG BAN
// Some code
public DateTime TuNgay, DenNgay;
public DataTable dtBaocaoPhu;
public string nhomcot;
public DataTable dtnhom = new DataTable();// bảng lưu dữ liệu phục vụ tính nhóm cột
public DataTable DMain(DataTable dtColumns, DataRow drReport, FOR0025 formBaoCao)
{
// //Viết code dưới dòng này(chỉnh sửa cấu trúc hiển thị báo cáo)
TuNgay = formBaoCao.TuNgay;
DenNgay = formBaoCao.DenNgay;
string where = formBaoCao.GetWhereCondition(false);//.Replace("where", "").Replace("WHERE", "");
dtBaocaoPhu = formBaoCao.ChayBaoCao(0, "BCP_KQKD_B", "Daubc=0", where, formBaoCao.TuNgay, formBaoCao.DenNgay);
formBaoCao.AddTable("BaoCaoPhu", dtBaocaoPhu);
// nhomcot = "Chứng từ(chungtu,ngaychungtu)0#"+ nhomcot ;
// drReport["nhomcot"] = nhomcot;
#region: Tính toán nhóm cột cho báo cáo bsc par
dtnhom.Columns.Add("From", typeof(string));
dtnhom.Columns.Add("To", typeof(string));
dtnhom.Columns.Add("TenNhom", typeof(string));
formBaoCao.Tag = dtnhom;// lưu lại bảng dtnhom trên form báo cáo
#endregion: Tính toán nhóm cột cho báo cáo bsc par
return dtColumns;
}
// hàm tính giá trị
public string dynamicRowGiaTri(string strGiaTri)
{
// MessageBox.Show("gt: "+ strGiaTri);
return strGiaTri;
}
// 24217
// 24219
public string dynamicCol(string strGT, string ctCotTruoc, string tencottruoc, string tencotnay, DataRow drReportFix)
{
// strGT là giá trị cột giá trị của dòng trong dtDynamicReportColumn
// ctCotTruoc là giá trị công thức cột trước cột đang động cột
// tencottruoc là columnName cột trước cột tự động
// tencotnay là cột hiện tại đang tự động tính nhằm replace các biểu thức tính sau cho chính xác tên cột mình cần xử lý
// drReportFix là dòng dữ liệu trong báo cáo fix trường hợp không lấy cột liền trước có thể gọi các cột liền trước để lấy công thức cần dùng
DataView dvBaocaophu = new DataView(dtBaocaoPhu);
// tính toán lần đầu tiên bảng cần par
if(_Vari.FormChinh.dtDynamicReportColumn.Rows.Count<= 0)
{
// DateTime tungay = formBaoCao.TuNgay;
// DateTime denngay = formBaoCao.DenNgay;
int sothang = (DenNgay.Year*12 + DenNgay.Month)-(TuNgay.Year*12 + TuNgay.Month)+1;
DataTable dtPhongban = _Func.GetTable("phongban").Copy();
DataView dvPhongban = new DataView(dtPhongban);
DataRow dr;
string nhomcotthang = "";// lưu text tiêu đề nhóm cột vào dòng đầu tiên bảng nhomcot
for (int i = 0; i < sothang; i++)
{
dvBaocaophu.RowFilter = "thang =" + (TuNgay.AddMonths(i).Year*12 + TuNgay.AddMonths(i).Month).ToString(); // filter những phòng ban của tháng đang duyệt
if(dvBaocaophu.Count != 0)
{
nhomcot += "Tháng_"+ TuNgay.AddMonths(i).Month.ToString()+"_"+ TuNgay.AddMonths(i).Year.ToString()+"(";
DataTable dtBaocaophu0 = dvBaocaophu.ToTable(true, new string[] { "phongban" });
if(dtBaocaophu0.Rows.Count != 0)
{
for (int iij = 0; iij < dtBaocaophu0.Rows.Count; iij++)
{
dvPhongban.RowFilter = "phongban = " + dtBaocaophu0.Rows[iij]["phongban"].ToString()+ (dtPhongban.Columns.Contains("donvi")?" and donvi="+ _Vari.Donvi:"");
dr = _Vari.FormChinh.dtDynamicReportColumn.NewRow();
//dr["ten"] = dvPhongban[0]["ten"].ToString()+" Tháng_" + TuNgay.AddMonths(i).Month.ToString()+"_"+ TuNgay.AddMonths(i).Year.ToString();// điền tên cần hiển thị thêm trong report fix
dr["ten"] = (string.IsNullOrWhiteSpace(dvPhongban[0]["ten"].ToString())? "Trống phòng ban" : dvPhongban[0]["ten"].ToString());// điền tên cần hiển thị thêm trong report fix
dr["giatri"] = dtBaocaophu0.Rows[iij]["phongban"].ToString() +"_"+ (TuNgay.AddMonths(i).Year*12 + TuNgay.AddMonths(i).Month).ToString();// điền giá trị dùng để truyền đầu vào hàm dynamicCol để xử lý
_Vari.FormChinh.dtDynamicReportColumn.Rows.Add(dr);
}
}
}
nhomcotthang+= "Tháng "+ TuNgay.AddMonths(i).ToString("MM/yyyy").Trim()+"#";
}
// //_Func.TextEditer("nhomcotthang: "+nhomcotthang);
// this.dtnhom.Rows.Add("", "", nhomcotthang);
// // MessageBox.Show("1: "+ strGT +"#"+ctCotTruoc+"#"+tencottruoc);
}
// //MessageBox.Show("1: "+ strGT +"#"+ctCotTruoc+"#"+tencottruoc);
// if(this.dtnhom.Rows.Count == 0 ||(this.dtnhom.Rows[this.dtnhom.Rows.Count-1]["from"].ToString().Trim()+"_"+this.dtnhom.Rows[this.dtnhom.Rows.Count-1]["to"].ToString().Trim() != tencottruoc.Trim() +"_"+tencotnay.Trim()))
// this.dtnhom.Rows.Add(tencottruoc, tencotnay, "");
if(string.IsNullOrWhiteSpace(strGT))
return ctCotTruoc;
else
return ctCotTruoc.Replace(tencottruoc, tencotnay).Replace(",1)".Replace(" ", ""), ","+ (strGT.Split('_').Length!= 0? strGT.Split('_')[1].ToString():strGT) +")".Replace(" ", ""))
.Replace(",-3)".Replace(" ", ""), ","+ (strGT.Split('_').Length!= 0? strGT.Split('_')[1].ToString():strGT) +")".Replace(" ", ""))
.Replace(",-1".Replace(" ", ""), ","+ (strGT.Split('_').Length!= 0? strGT.Split('_')[0].ToString():strGT) +"".Replace(" ", ""))
;
}
public string dynamicRowTenCpDinhPhi(string strTen)
{
// tính toán lần đầu tiên bảng cần par
if(_Vari.FormChinh.dtDynamicReportColumn.Rows.Count<= 0)
{
DataView dvBaocaophu = new DataView(dtBaocaoPhu);
dvBaocaophu.RowFilter = "tkno like '64%' or tkno like '635%' or tkno like '811%'";
DataTable dtBaocaophu0 = dvBaocaophu.ToTable(true, new string[] { "khoanmuc" });
DataTable dtBaocaophu1 = dvBaocaophu.ToTable(true, new string[] { "tkno" });
string sTaikhoan = string.Join("_", dtBaocaophu1.Rows.OfType<DataRow>().Select(r => r[0].ToString()));
DataView dvkhoanmuc = new DataView(_Func.GetTable("KhoanMuc"));
DataRow dr;
string dkKhoanmucMa = "DP";
//// nếu dvBaocaophu không có dòng nào thì sao.
for (int i = 0; i < dtBaocaophu0.Rows.Count; i++)
{
// dvkhoanmuc.RowFilter = "khoanmuc="+ dtBaocaophu0.Rows[i]["khoanmuc"].ToString()+" and ma like '" + dkKhoanmucMa + "%'";
dvkhoanmuc.RowFilter = "khoanmuc="+ dtBaocaophu0.Rows[i]["khoanmuc"].ToString()+" and dinhphi=1";
if(dvkhoanmuc.Count != 0)
{
dr = _Vari.FormChinh.dtDynamicReportColumn.NewRow();
dr["ten"] = new string(' ', 10) +" - " +dvkhoanmuc[0]["Ten"];
dr["giatri"] = "pscdCPKM(" + sTaikhoan +",911,-1,"+ dvkhoanmuc[0]["KhoanMuc"].ToString()+",-3)";
// pscd(641,911,-phongban-1, -khoanmuc-2,-thang-3) pscdCPBH
_Vari.FormChinh.dtDynamicReportColumn.Rows.Add(dr);
}
}
// điền 1 dòng trống khi không có dòng dữ liệu nào của báo cáo này
if(_Vari.FormChinh.dtDynamicReportColumn.Rows.Count<= 0)
{
dr = _Vari.FormChinh.dtDynamicReportColumn.NewRow();
dr["ten"] = "";
dr["giatri"] = "";
_Vari.FormChinh.dtDynamicReportColumn.Rows.Add(dr);
}
}
return strTen;
}
public string dynamicRowTenCpBienPhiNhanvien(string strTen)
{
// tính toán lần đầu tiên bảng cần par
if(_Vari.FormChinh.dtDynamicReportColumn.Rows.Count<= 0)
{
DataView dvBaocaophu = new DataView(dtBaocaoPhu);
dvBaocaophu.RowFilter = "tkno like '64%' or tkno like '635%' or tkno like '811%'";
DataTable dtBaocaophu0 = dvBaocaophu.ToTable(true, new string[] { "khoanmuc" });
DataTable dtBaocaophu1 = dvBaocaophu.ToTable(true, new string[] { "tkno" });
string sTaikhoan = string.Join("_", dtBaocaophu1.Rows.OfType<DataRow>().Select(r => r[0].ToString()));
DataView dvkhoanmuc = new DataView(_Func.GetTable("KhoanMuc"));
string dkKhoanmucMa = "BP01";
DataRow dr;
//// nếu dvBaocaophu không có dòng nào thì sao.
for (int i = 0; i < dtBaocaophu0.Rows.Count; i++)
{
// dvkhoanmuc.RowFilter = "khoanmuc="+ dtBaocaophu0.Rows[i]["khoanmuc"].ToString()+" and ma like '" + dkKhoanmucMa +"%'";
dvkhoanmuc.RowFilter = "khoanmuc="+ dtBaocaophu0.Rows[i]["khoanmuc"].ToString()+" and dinhphi=2";
if(dvkhoanmuc.Count != 0)
{
dr = _Vari.FormChinh.dtDynamicReportColumn.NewRow();
dr["ten"] = new string(' ', 10) +" - " +dvkhoanmuc[0]["Ten"];
dr["giatri"] = "pscdCPKM(" + sTaikhoan +",911,-1,"+ dvkhoanmuc[0]["KhoanMuc"].ToString()+",-3)";
_Vari.FormChinh.dtDynamicReportColumn.Rows.Add(dr);
}
}
// điền 1 dòng trống khi không có dòng dữ liệu nào của báo cáo này
if(_Vari.FormChinh.dtDynamicReportColumn.Rows.Count<= 0)
{
dr = _Vari.FormChinh.dtDynamicReportColumn.NewRow();
dr["ten"] = "";
dr["giatri"] = "";
_Vari.FormChinh.dtDynamicReportColumn.Rows.Add(dr);
}
}
return strTen;
}
public string dynamicRowTenCpBienPhiMuaNgoai(string strTen)
{
// tính toán lần đầu tiên bảng cần par
if(_Vari.FormChinh.dtDynamicReportColumn.Rows.Count<= 0)
{
DataView dvBaocaophu = new DataView(dtBaocaoPhu);
dvBaocaophu.RowFilter = "tkno like '64%' or tkno like '635%' or tkno like '811%'";
DataTable dtBaocaophu0 = dvBaocaophu.ToTable(true, new string[] { "khoanmuc" });
DataTable dtBaocaophu1 = dvBaocaophu.ToTable(true, new string[] { "tkno" });
string sTaikhoan = string.Join("_", dtBaocaophu1.Rows.OfType<DataRow>().Select(r => r[0].ToString()));
DataView dvkhoanmuc = new DataView(_Func.GetTable("KhoanMuc"));
string dkKhoanmucMa = "BP02";
DataRow dr;
//// nếu dvBaocaophu không có dòng nào thì sao.
for (int i = 0; i < dtBaocaophu0.Rows.Count; i++)
{
// dvkhoanmuc.RowFilter = "khoanmuc="+ dtBaocaophu0.Rows[i]["khoanmuc"].ToString()+" and ma like '" + dkKhoanmucMa +"%'";
dvkhoanmuc.RowFilter = "khoanmuc="+ dtBaocaophu0.Rows[i]["khoanmuc"].ToString()+" and dinhphi=0";
if(dvkhoanmuc.Count != 0)
{
dr = _Vari.FormChinh.dtDynamicReportColumn.NewRow();
dr["ten"] = new string(' ', 10) +" - " +dvkhoanmuc[0]["Ten"];
dr["giatri"] = "pscdCPKM(" + sTaikhoan +",911,-1,"+ dvkhoanmuc[0]["KhoanMuc"].ToString()+",-3)";
_Vari.FormChinh.dtDynamicReportColumn.Rows.Add(dr);
}
}
// điền 1 dòng trống khi không có dòng dữ liệu nào của báo cáo này
if(_Vari.FormChinh.dtDynamicReportColumn.Rows.Count<= 0)
{
dr = _Vari.FormChinh.dtDynamicReportColumn.NewRow();
dr["ten"] = "";
dr["giatri"] = "";
_Vari.FormChinh.dtDynamicReportColumn.Rows.Add(dr);
}
}
return strTen;
}
4. HẬU XỬ LÝ - KQKD KHOẢN MỤC + PHÒNG BAN
public DataTable dtbccon;
public DataTable DMain(DataTable dtDL, string ssele, DataTable dtColumns, DataRow drReport, FOR0025 formBaoCao)
{
#region: Tính toán nhóm cột cho báo cáo bsc par
// tính toán nhóm cột cho báo cáo bsc par
if(formBaoCao.Tag!= null & formBaoCao.Tag.GetType() == typeof(DataTable))
{
try {
DataTable dtnhomcot = formBaoCao.Tag as DataTable;
if(dtnhomcot.Rows.Count>1 && !string.IsNullOrWhiteSpace(dtnhomcot.Rows[0]["TenNhom"].ToString()))
{
string[] artennhom = dtnhomcot.Rows[0]["TenNhom"].ToString().Split('#');
StringBuilder strnhomcot = new StringBuilder();
string sfrom = dtnhomcot.Rows[1]["from"].ToString().Trim(), sto = dtnhomcot.Rows[1]["to"].ToString().Trim(), sbd = dtnhomcot.Rows[1]["to"].ToString().Trim();
int nhom = 0;
DataView dvcol = new DataView(dtColumns);
for(int i = 1; i< dtnhomcot.Rows.Count; i++)
{
// sang nhóm khác
if(dtnhomcot.Rows[i]["from"].ToString().Trim()!= sfrom || i == dtnhomcot.Rows.Count-1)
{
if(i == dtnhomcot.Rows.Count-1)
sto = dtnhomcot.Rows[i]["to"].ToString().Trim();
string tennhom = "";
if(nhom< artennhom.Length)
tennhom = artennhom[nhom];
nhom+= 1;
int sttbd = 0, sttkt = 0;
dvcol.RowFilter = "GiaTri = 'ReportFix."+ sbd +"'";
if(dvcol.Count>0)
sttbd = Convert.ToInt16(dvcol[0]["stt"]);
dvcol.RowFilter = "GiaTri = 'ReportFix."+ sto +"'";
if(dvcol.Count>0)
sttkt = Convert.ToInt16(dvcol[0]["stt"]);
if(sttkt>0)
strnhomcot.Append(tennhom+"("+sttbd+","+sttkt +")0#");
sfrom = dtnhomcot.Rows[i]["from"].ToString().Trim();
sto = sbd = dtnhomcot.Rows[i]["to"].ToString().Trim();
}
else sto = dtnhomcot.Rows[i]["to"].ToString().Trim();
}
drReport["nhomcot"] = strnhomcot.ToString();
}
}
catch(Exception ex) { MessageBox.Show(ex.Message); }
}
#endregion: Tính toán nhóm cột cho báo cáo bsc par
//Viết code dưới dòng này(chỉnh sửa dữ liệu báo cáo)
// #region trường hợp chạy báo cáo FIX trên sql sẽ chuyển hóa các hàm công thức cột FIX sang sum giá trị cột tr trong báo cáo con tương ứng. Ví dụ
// formBaoCao.dtfuncFixReport.Rows.Add("dndau(", "dndau(@tkhoan)", " Sum( case when tr1 like '{0}%' then tr2-tr3 else 0 end) ");
// formBaoCao.dtfuncFixReport.Rows.Add("dcdau(", "dcdau(@tkhoan)", " Sum( case when tr1 like '{0}%' then tr3-tr2 else 0 end) ");
// formBaoCao.dtfuncFixReport.Rows.Add("dn(", "dn(@tkhoan)", " Sum( case when tr1 like '{0}%' then tr4-tr5 else 0 end) ");
// formBaoCao.dtfuncFixReport.Rows.Add("dc(", "dc(@tkhoan)", " Sum( case when tr1 like '{0}%' then tr5-tr4 else 0 end) ");
// formBaoCao.dtfuncFixReport.Rows.Add("dndault(", "dndault(@tkhoan)", " Sum( case when tr1 like '{0}%' then tr2 else 0 end) ");
// formBaoCao.dtfuncFixReport.Rows.Add("dcdault(", "dcdault(@tkhoan)", " Sum( case when tr1 like '{0}%' then tr3 else 0 end) ");
// formBaoCao.dtfuncFixReport.Rows.Add("dnlt(", "dnlt(@tkhoan)", " Sum( case when tr1 like '{0}%' then tr4 else 0 end) ");
// formBaoCao.dtfuncFixReport.Rows.Add("dclt(", "dclt(@tkhoan)", " Sum( case when tr1 like '{0}%' then tr5 else 0 end) ");
// #endregion
#region trường hợp chạy báo cáo FIX dưới local thì thực hiện chạy báo cáo con rùi add vào dữ liệu báo cáo sau đó tính toán dựa vào bảng đó
//MessageBox.Show("chạy báo cáo con");
string where = formBaoCao.GetWhereCondition(false);//.Replace("where", "").Replace("WHERE", "");
dtbccon = formBaoCao.ChayBaoCao(0, "BCP_KQKD_B", "Daubc=0", where, formBaoCao.TuNgay, formBaoCao.DenNgay);
formBaoCao.AddTable("BaoCaoCon", dtbccon);
// thêm cột để quản lý việc sử dụng các tài khoản trong báo con
if(dtbccon!= null && dtbccon.Rows.Count>0)
{
DataColumn dcdu = new DataColumn();
dcdu.ColumnName = "langoi";// lần gọi số dư
dcdu.DataType = typeof(int);
dcdu.DefaultValue = 0;
dtbccon.Columns.Add(dcdu);
DataColumn dcnolt = new DataColumn();
dcnolt.ColumnName = "langoinolt";// lần gọi số dư nợ lưỡng tính
dcnolt.DataType = typeof(int);
dcnolt.DefaultValue = 0;
dtbccon.Columns.Add(dcnolt);
DataColumn dccolt = new DataColumn();
dccolt.ColumnName = "langoicolt";// lần gọi số dư có lưỡng tính
dccolt.DataType = typeof(int);
dccolt.DefaultValue = 0;
dtbccon.Columns.Add(dccolt);
}
//formBaoCao.ChayBaoCao(154,"","",);
#endregion
return dtDL;
}
///
public object psDoanhthu(string tkno, int phongban, int thang)
{
//psc(511,1). lấy ps có
decimal result0 = 0, result1 = 0;
if(thang == -3) //// bắt chéo tài khoản với cột. Tổng cộng
{
result0 = dtbccon.AsEnumerable().Where(r => (r.Field<string>("Tkco").StartsWith(tkno.Trim()))
&& ! r.Field<string>("Tkno").StartsWith("521") && ! r.Field<string>("Tkno").StartsWith("911")
)
.Sum(r => r.Field<decimal?>("psnoKynay") ?? 0);
result1 = dtbccon.AsEnumerable().Where(r => (r.Field<string>("Tkco").StartsWith(tkno.Trim()))
&& ! r.Field<string>("Tkno").StartsWith("521") && ! r.Field<string>("Tkno").StartsWith("911")
)
.Sum(r => r.Field<decimal?>("pscoKynay") ?? 0);
}
else
{
result0 = dtbccon.AsEnumerable().Where(r => (r.Field<string>("Tkco").StartsWith(tkno.Trim())
&& r.Field<int>("phongban").Equals(phongban)
&& r.Field<int>("thang").Equals(thang)
&& ! r.Field<string>("Tkno").StartsWith("521") && ! r.Field<string>("Tkno").StartsWith("911")
))
.Sum(r => r.Field<decimal?>("psnoKynay") ?? 0);
result1 = dtbccon.AsEnumerable().Where(r => (r.Field<string>("Tkco").StartsWith(tkno.Trim())
&& r.Field<int>("phongban").Equals(phongban)
&& r.Field<int>("thang").Equals(thang)
&& ! r.Field<string>("Tkno").StartsWith("521") && ! r.Field<string>("Tkno").StartsWith("911")
))
.Sum(r => r.Field<decimal?>("pscoKynay") ?? 0);
}
if(result0 == null)result0 = 0;
if(result1 == null)result1 = 0;
return result0-result1;
}
//====
public object psnd(string tkno, string tkco, int phongban, int thang)
{
decimal result0 = 0, result1 = 0;
if(thang == -3) /// kỳ này //// bắt chéo tài khoản với cột
{
result0 = dtbccon.AsEnumerable().Where(r => (r.Field<string>("Tkno").StartsWith(tkno.Trim())
&& r.Field<string>("tkco").StartsWith(tkco.Trim())
))
.Sum(r => r.Field<decimal?>("psnoKynay") ?? 0);
result1 = dtbccon.AsEnumerable().Where(r => (r.Field<string>("Tkno").StartsWith(tkno.Trim())
&& r.Field<string>("tkco").StartsWith(tkco.Trim())
))
.Sum(r => r.Field<decimal?>("pscoKynay") ?? 0);
}
else
{
result0 = dtbccon.AsEnumerable().Where(r => (r.Field<string>("Tkno").StartsWith(tkno.Trim())
&& r.Field<string>("tkco").StartsWith(tkco.Trim())
&& r.Field<int>("phongban").Equals(phongban)
&& r.Field<int>("thang").Equals(thang)
))
.Sum(r => r.Field<decimal?>("psnoKynay") ?? 0);
result1 = dtbccon.AsEnumerable().Where(r => (r.Field<string>("Tkno").StartsWith(tkno.Trim())
&& r.Field<string>("tkco").StartsWith(tkco.Trim())
&& r.Field<int>("phongban").Equals(phongban)
&& r.Field<int>("thang").Equals(thang)
))
.Sum(r => r.Field<decimal?>("pscoKynay") ?? 0);
}
if(result0 == null)result0 = 0;
if(result1 == null)result1 = 0;
return result0 - result1;
}
// pscd(511, 52, 1)
//====
public object pscd(string tkno, string tkco, int phongban, int thang)
{
decimal result0 = 0, result1 = 0;
if(thang == -3) /// kỳ này //// bắt chéo tài khoản với cột
{
result0 = dtbccon.AsEnumerable().Where(r => (r.Field<string>("Tkno").StartsWith(tkno.Trim())
&& r.Field<string>("tkco").StartsWith(tkco.Trim())
))
.Sum(r => r.Field<decimal?>("pscoKynay") ?? 0);
result1 = dtbccon.AsEnumerable().Where(r => (r.Field<string>("Tkno").StartsWith(tkno.Trim())
&& r.Field<string>("tkco").StartsWith(tkco.Trim())
))
.Sum(r => r.Field<decimal?>("psnoKynay") ?? 0);
}
else
{
result0 = dtbccon.AsEnumerable().Where(r => (r.Field<string>("Tkno").StartsWith(tkno.Trim())
&& r.Field<string>("tkco").StartsWith(tkco.Trim())
&& r.Field<int>("phongban").Equals(phongban)
&& r.Field<int>("thang").Equals(thang)
))
.Sum(r => r.Field<decimal?>("pscoKynay") ?? 0);
result1 = dtbccon.AsEnumerable().Where(r => (r.Field<string>("Tkno").StartsWith(tkno.Trim())
&& r.Field<string>("tkco").StartsWith(tkco.Trim())
&& r.Field<int>("phongban").Equals(phongban)
&& r.Field<int>("thang").Equals(thang)
))
.Sum(r => r.Field<decimal?>("psnoKynay") ?? 0);
}
if(result0 == null)result0 = 0;
if(result1 == null)result1 = 0;
return result0 - result1;
}
public object pscdCPKM(string tkno, string tkco, int phongban, int khoanmuc, int thang)
{
decimal result0 = 0, result1 = 0;
int ngaydau = 0, ngaycuoi = 0;
List<string> lstTkno = tkno.Split('_').ToList();
if(thang ==-3) /// kỳ này //// bắt chéo tài khoản với cột
{
result0 = dtbccon.AsEnumerable().Where(r => (lstTkno.Contains(r.Field<string>("Tkno").Trim())
&& r.Field<string>("tkco").StartsWith(tkco.Trim())
&& r.Field<int>("khoanmuc").Equals(khoanmuc)
))
.Sum(r => r.Field<decimal?>("pscoKynay") ?? 0);
result1 = dtbccon.AsEnumerable().Where(r => (lstTkno.Contains(r.Field<string>("Tkno").Trim())
&& r.Field<string>("tkco").StartsWith(tkco.Trim())
&& r.Field<int>("khoanmuc").Equals(khoanmuc)
))
.Sum(r => r.Field<decimal?>("psnoKynay") ?? 0);
}
else
{
result0 = dtbccon.AsEnumerable().Where(r => (lstTkno.Contains(r.Field<string>("Tkno").Trim())
&& r.Field<string>("tkco").StartsWith(tkco.Trim())
&& r.Field<int>("Phongban").Equals(phongban)
&& r.Field<int>("khoanmuc").Equals(khoanmuc)
&& r.Field<int>("thang").Equals(thang)
))
.Sum(r => r.Field<decimal?>("pscoKynay") ?? 0);
// result1 = dtbccon.AsEnumerable().Where(r => (r.Field<string>("Tkno").StartsWith(tkno.Trim())
result1 = dtbccon.AsEnumerable().Where(r => (lstTkno.Contains(r.Field<string>("Tkno").Trim())
&& r.Field<string>("tkco").StartsWith(tkco.Trim())
&& r.Field<int>("Phongban").Equals(phongban)
&& r.Field<int>("khoanmuc").Equals(khoanmuc)
&& r.Field<int>("thang").Equals(thang)
//&& r.Field<int>("thang") <= ngaycuoi
))
.Sum(r => r.Field<decimal?>("psnoKynay") ?? 0);
}
if(result0 == null)result0 = 0;
if(result1 == null)result1 = 0;
return result0 - result1;
}
public object pscdFilter(string tkno, string tkco, int phongban, string dkKhoanmuc, int thang)
{
string cmm = "select stuff( (select ','+ convert(nvarchar,KhoanMuc) from dbo.KhoanMuc WHERE "+ dkKhoanmuc+" for xml path('')),1,1,'')";
object sKhoanmuc = _Func.DBEXEC(cmm, true);
//MessageBox.Show("sKhoanmuc:\r"+sKhoanmuc.ToString());
// List<string> lstKhoanmuc = sKhoanmuc.ToString().Split(',').ToList();
List<int> lstKhoanmuc = sKhoanmuc.ToString().Split(',').Select(Int32.Parse).ToList();
decimal result0 = 0, result1 = 0;
int iThang = 0, iNam = 0;
int ngaydau = 0, ngaycuoi = 0;
List<string> lstTkno = tkno.Split('_').ToList();
string sWhereTkno = "";
for (int i = 0; i < lstTkno.Count; i++)
{
sWhereTkno += " ma like '" + lstTkno[i].ToString()+"%'" + (i == (lstTkno.Count-1)?"":" or ");
}
//MessageBox.Show(sWhereTkno);
cmm = "select stuff( (select '_'+ ma from dbo.taikhoan WHERE "+ sWhereTkno+" for xml path('')),1,1,'')";
object sTkno = _Func.DBEXEC(cmm, true);
lstTkno = sTkno.ToString().Split('_').ToList();
if(thang == -3) /// kỳ này //// bắt chéo tài khoản với cột
{
result0 = dtbccon.AsEnumerable().Where(r => (lstTkno.Contains(r.Field<string>("Tkno").Trim())
&& r.Field<string>("tkco").StartsWith(tkco.Trim())
&& lstKhoanmuc.Contains(r.Field<int>("khoanmuc"))
))
.Sum(r => r.Field<decimal?>("pscoKynay") ?? 0);
result1 = dtbccon.AsEnumerable().Where(r => (lstTkno.Contains(r.Field<string>("Tkno").Trim())
&& r.Field<string>("tkco").StartsWith(tkco.Trim())
&& lstKhoanmuc.Contains(r.Field<int>("khoanmuc"))
))
.Sum(r => r.Field<decimal?>("psnoKynay") ?? 0);
//MessageBox.Show(result0.ToString()+"#"+result1.ToString());
}
else
{
result0 = dtbccon.AsEnumerable().Where(r => (lstTkno.Contains(r.Field<string>("Tkno").Trim())
&& r.Field<string>("tkco").StartsWith(tkco.Trim())
&& r.Field<int>("Phongban").Equals(phongban)
&& lstKhoanmuc.Contains(r.Field<int>("khoanmuc"))
&& r.Field<int>("thang").Equals(thang)
))
.Sum(r => r.Field<decimal?>("pscoKynay") ?? 0);
// result1 = dtbccon.AsEnumerable().Where(r => (r.Field<string>("Tkno").StartsWith(tkno.Trim())
result1 = dtbccon.AsEnumerable().Where(r => (lstTkno.Contains(r.Field<string>("Tkno").Trim())
&& r.Field<string>("tkco").StartsWith(tkco.Trim())
&& r.Field<int>("Phongban").Equals(phongban)
&& lstKhoanmuc.Contains(r.Field<int>("khoanmuc"))
&& r.Field<int>("thang").Equals(thang)
))
.Sum(r => r.Field<decimal?>("psnoKynay") ?? 0);
}
if(result0 == null)result0 = 0;
if(result1 == null)result1 = 0;
return result0 - result1;
}
Last updated