using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using GThinking.N_MODEL.Page; using GThinking.N_MISPRO.Utility; using GThinking.N_MISPRO.Data; using GThinking.N_MISPRO; using GThinking.N_WORKFLOW; using System.Collections.Generic; using GThinking.N_MISPRO.MISPROAS; using System.Text; namespace GThinking.N_XLXSBJ { public partial class CLCBList : SingleGridBase { CLCB entity = new CLCB(); CLCB_M queryentity = new CLCB_M(); //报价材料 Dictionary dicHeaderTextCLMC = new Dictionary(); Dictionary dicHeaderTextCLJG = new Dictionary(); //材料物料 Dictionary dicHeaderTextCLWL = new Dictionary(); protected void Page_Load(object sender, EventArgs e) { this.UMID = 100860034; this.UMName = "线缆销售报价材料成本"; this.CurMaster = Master; this.ModuleGV = ContentGrid; this.CurEntity = entity; this.CurQueryEntity = queryentity; this.PageHeight = 500; this.PageWidth = 700; this.sURLTarget = "CLCBInfo.aspx"; this.sQueryURLTarget = "CLCBQuery.aspx"; base.DataKeyNames = new string[] { "XLXSCLQD_XLXHID", "XLXSCLQD_XLGGID", "XLXSCLQD_XLBZID", "XLXSCLQD_DYDJID", "HSJGBZ" }; if (XLBJDUtils.GetDefaultBJU003(GetOption("BJU003")).Equals("M")) { ContentGrid.FindColumnExByFieldName("CLCB").NumberDecimalPlace = 5; for (int i = 1; i <= 80; i++) { ContentGrid.FindColumnExByFieldName("CLJG" + i.ToString().PadLeft(2, '0')).NumberDecimalPlace = 5; } } this.Master.EnableNewBtn = false; this.Master.EnableCopyBtn = false; this.Master.EnableViewBtn = false; this.Master.EnableEditBtn = false; this.Master.EnableDeleteBtn = false; this.Master.EnableAttachBtn = false; if (!IsPostBack) { CurQueryEntity.FieldByName("HSJGBZ").Value = "True"; CurQueryEntity.FieldByName("PXFS").Value = "型号+序号"; } base.InitEntityByCondition(); if (!CurQueryEntity.FieldByName("XSWLCB").Value.Trim().ToUpper().Equals("TRUE")) { ContentGrid.FindColumnByFieldName("WLID").Visible = false; ContentGrid.FindColumnByFieldName("WLXX").Visible = false; } base.InitPage(); //this.ModuleGV.OnClientDblClick = "return false;"; if (!IsPostBack) { if (IsDefaultExecute) Master_OnStandardQuery(null, null); else { IfExistMC_Get(); initGrid(); } } } #region 模板继承事件 protected override void Master_OnStandardQuery(object sender, EventArgs e) { base.InitEntityByCondition(); base.Master_OnStandardQuery(sender, e); IfExistMC_Get(); initGrid(); entity.EntityTable.QuerySelSql = GetQuerySql().ToString(); entity.GridDataBind(ContentGrid, tSession); } protected override void moduleGV_PageIndexChanging(object sender, GridViewPageEventArgs e) { base.InitEntityByCondition(); IfExistMC_Get(); initGrid(); entity.EntityTable.QuerySelSql = GetQuerySql().ToString(); ContentGrid.SelectedIndex = -1; base.moduleGV_PageIndexChanging(sender, e); } protected override void moduleGV_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { LinkPageParam.AddString("XLXSCLQD_XLXHID", ContentGrid.DataKeys[e.Row.RowIndex]["XLXSCLQD_XLXHID"].ToString().Trim()); LinkPageParam.AddString("XLXSCLQD_XLGGID", ContentGrid.DataKeys[e.Row.RowIndex]["XLXSCLQD_XLGGID"].ToString().Trim()); LinkPageParam.AddString("XLXSCLQD_XLBZID", ContentGrid.DataKeys[e.Row.RowIndex]["XLXSCLQD_XLBZID"].ToString().Trim()); LinkPageParam.AddString("XLXSCLQD_DYDJID", ContentGrid.DataKeys[e.Row.RowIndex]["XLXSCLQD_DYDJID"].ToString().Trim()); LinkPageParam.AddString("HSJGBZ", ContentGrid.DataKeys[e.Row.RowIndex]["HSJGBZ"].ToString().Trim()); } base.moduleGV_RowDataBound(sender, e); } #endregion #region 私有函数 private StringBuilder GetQuerySql() { bool bHSJGBZ = CurQueryEntity.FieldByName("HSJGBZ").Value.Trim().ToUpper().Equals("TRUE"); string sCZBLX = ""; if (!string.IsNullOrEmpty(CurQueryEntity.FieldByName("JGCZBID").Value.Trim())) { TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL sql = new TSQL(dberp); sql.Clear(); sql.Add(" SELECT XLJGCZBML_CZBLX from XLJGCZBML "); sql.Add(" where XLJGCZBML_JGCZBID=:pJGCZBID "); sql.ParamByName("pJGCZBID").Value = CurQueryEntity.FieldByName("JGCZBID").Value.Trim().Split('|')[0]; DataSet ds = dberp.OpenDataSet(sql); if (ds.Tables[0].Rows.Count > 0) { sCZBLX = ds.Tables[0].Rows[0][0].ToString().Trim(); } } StringBuilder strSQL = new StringBuilder(); strSQL.AppendLine(" select XLXSCLQD_XLXHID, XLXSCLQD_XLGGID, XLXSCLQD_XLBZID,RTRIM(XLXSCLQD_XLBZID)||'|'|| XLBZ_XLBZLXMC as XLBZ,XLXSCLQD_DYDJID,"); if (CurQueryEntity.FieldByName("XSWLCB").Value.Trim().ToUpper().Equals("TRUE")) strSQL.AppendLine("ISNULL(tmpWL.WL_WLID,' ') as WLID, rtrim(ISNULL(tmpWL.WL_MC,' ')) || ' ' || rtrim(ISNULL(tmpWL.WL_GG,' ')) || ' ' || rtrim(ISNULL(tmpWL.WL_TZ,' ')) || ' ' || rtrim(ISNULL(tmpWL.WL_CL,' ')) as WLXX,"); else strSQL.AppendLine(" ' ' as WLID,' ' as WLXX,"); strSQL.AppendLine(" '" + GetOption("BJU003") + "' as JLDW, XLXSCLQD_CLZL,"); strSQL.AppendLine("XLXSCLQD_SL01, XLXSCLQD_SL02, XLXSCLQD_SL03, XLXSCLQD_SL04, XLXSCLQD_SL05, XLXSCLQD_SL06, XLXSCLQD_SL07, XLXSCLQD_SL08, XLXSCLQD_SL09, XLXSCLQD_SL10,"); strSQL.AppendLine("XLXSCLQD_SL11, XLXSCLQD_SL12, XLXSCLQD_SL13, XLXSCLQD_SL14, XLXSCLQD_SL15, XLXSCLQD_SL16, XLXSCLQD_SL17, XLXSCLQD_SL18, XLXSCLQD_SL19, XLXSCLQD_SL20,"); strSQL.AppendLine("XLXSCLQD_SL21, XLXSCLQD_SL22, XLXSCLQD_SL23, XLXSCLQD_SL24, XLXSCLQD_SL25, XLXSCLQD_SL26, XLXSCLQD_SL27, XLXSCLQD_SL28, XLXSCLQD_SL29, XLXSCLQD_SL30,"); strSQL.AppendLine("XLXSCLQD_SL31, XLXSCLQD_SL32, XLXSCLQD_SL33, XLXSCLQD_SL34, XLXSCLQD_SL35, XLXSCLQD_SL36, XLXSCLQD_SL37, XLXSCLQD_SL38, XLXSCLQD_SL39, XLXSCLQD_SL40,"); strSQL.AppendLine("XLXSCLQD_SL41, XLXSCLQD_SL42, XLXSCLQD_SL43, XLXSCLQD_SL44, XLXSCLQD_SL45, XLXSCLQD_SL46, XLXSCLQD_SL47, XLXSCLQD_SL48, XLXSCLQD_SL49, XLXSCLQD_SL50,"); strSQL.AppendLine("XLXSCLQD_SL51, XLXSCLQD_SL52, XLXSCLQD_SL53, XLXSCLQD_SL54, XLXSCLQD_SL55, XLXSCLQD_SL56, XLXSCLQD_SL57, XLXSCLQD_SL58, XLXSCLQD_SL59, XLXSCLQD_SL60,"); strSQL.AppendLine("XLXSCLQD_SL61, XLXSCLQD_SL62, XLXSCLQD_SL63, XLXSCLQD_SL64, XLXSCLQD_SL65, XLXSCLQD_SL66, XLXSCLQD_SL67, XLXSCLQD_SL68, XLXSCLQD_SL69, XLXSCLQD_SL70,"); strSQL.AppendLine("XLXSCLQD_SL71, XLXSCLQD_SL72, XLXSCLQD_SL73, XLXSCLQD_SL74, XLXSCLQD_SL75, XLXSCLQD_SL76, XLXSCLQD_SL77, XLXSCLQD_SL78, XLXSCLQD_SL79, XLXSCLQD_SL80,"); string strCLCB = "(0"; for (int i = 1; i <= 80; i++) { //此处需要去除有物料的,变更为0 string sCLQDL = "第" + i.ToString().PadLeft(2, '0') + "列"; if (dicHeaderTextCLJG.ContainsKey(sCLQDL) && !dicHeaderTextCLWL.ContainsKey(sCLQDL)) { double tmpCLJG = CMISproConvert.StrToFloat(dicHeaderTextCLJG[sCLQDL].Replace("元/Kg", ""), 0); strSQL.AppendLine(string.Format("RoundFix(XLXSCLQD_SL{0},6)*{1}*XLXSCLQD_CLJGBL{0}*(1+XLXSCLQD_SHL{0}/100) as CLJG{0},", i.ToString().PadLeft(2, '0'), tmpCLJG)); strCLCB += string.Format("+RoundFix(XLXSCLQD_SL{0},6)*{1}*XLXSCLQD_CLJGBL{0}*(1+XLXSCLQD_SHL{0}/100)", i.ToString().PadLeft(2, '0'), tmpCLJG); } else { strSQL.AppendLine(string.Format("0 as CLJG{0},", i.ToString().PadLeft(2, '0'))); } //增加物料列----对应列 if (dicHeaderTextCLWL.ContainsKey(sCLQDL)) { strSQL.AppendLine(string.Format("rtrim(XLXSCLQDWL_WLID{0}) || '|' || rtrim(ISNULL(WL{0}.WL_MC,' ')) || ' ' || rtrim(ISNULL(WL{0}.WL_GG,' ')) as XLXSCLWL{0},\r\n", i.ToString().PadLeft(2, '0'))); } else { strSQL.AppendLine(string.Format("' ' as XLXSCLWL{0},", i.ToString().PadLeft(2, '0'))); } if (dicHeaderTextCLWL.ContainsKey(sCLQDL)) { //此处需要保持 CLJG01字段在 if (bHSJGBZ) { strSQL.AppendLine(string.Format(" isnull(XLXSWLHQ{0}.XLXSWLHQ_HSJG,0) as XLXSCLWLJG{0}, ", i.ToString().PadLeft(2, '0'))); strSQL.AppendLine(string.Format(" RoundFix(RoundFix(XLXSCLQD_SL{0},6)*XLXSCLQD_CLJGBL{0}*(1+XLXSCLQD_SHL{0}/100)*isnull(XLXSWLHQ{0}.XLXSWLHQ_HSJG,0), 5) as XLXSCLWLCB{0}, ", i.ToString().PadLeft(2, '0'))); strCLCB += string.Format(" +RoundFix(RoundFix(XLXSCLQD_SL{0},6)*XLXSCLQD_CLJGBL{0}*(1+XLXSCLQD_SHL{0}/100)*isnull(XLXSWLHQ{0}.XLXSWLHQ_HSJG,0), 5) ", i.ToString().PadLeft(2, '0')); } else { strSQL.AppendLine(string.Format(" isnull(XLXSWLHQ{0}.XLXSWLHQ_WSJG,0) as XLXSCLWLJG{0}, ", i.ToString().PadLeft(2, '0'))); strSQL.AppendLine(string.Format(" RoundFix(RoundFix(XLXSCLQD_SL{0},6)*XLXSCLQD_CLJGBL{0}*(1+XLXSCLQD_SHL{0}/100)*isnull(XLXSWLHQ{0}.XLXSWLHQ_WSJG,0), 5) as XLXSCLWLCB{0}, ", i.ToString().PadLeft(2, '0'))); strCLCB += string.Format(" +RoundFix(RoundFix(XLXSCLQD_SL{0},6)*XLXSCLQD_CLJGBL{0}*(1+XLXSCLQD_SHL{0}/100)*isnull(XLXSWLHQ{0}.XLXSWLHQ_WSJG,0), 5) ", i.ToString().PadLeft(2, '0')); } } else { strSQL.AppendLine(string.Format(" 0 as XLXSCLWLJG{0}, ", i.ToString().PadLeft(2, '0'))); strSQL.AppendLine(string.Format(" 0 as XLXSCLWLCB{0}, ", i.ToString().PadLeft(2, '0'))); } } strCLCB += ")"; strSQL.AppendLine(strCLCB + " as CLCB,"); strSQL.AppendLine(" XLXSCLQD_BZ, XLXSCLQD_WHR, XLXSCLQD_WHRID, XLXSCLQD_WHSJ, "); if (bHSJGBZ) { strSQL.AppendLine("'Y' as HSJGBZ "); } else { strSQL.AppendLine("'N' as HSJGBZ "); } strSQL.AppendLine(" from XLXSCLQD "); if (CurQueryEntity.FieldByName("XSWLCB").Value.Trim().ToUpper().Equals("TRUE")) { strSQL.AppendLine(@"left join (select XSBJXHTH_BJXLXHID as XLXHID,XLXLB_XLGGID as XLGGID,XLXLB_XLBZID as XLBZID,XLXLB_DYDJID as DYDJID,XLXLB_WLID from ( select XLXLB_XLXHID,XLXLB_XLGGID,XLXLB_XLBZID,XLXLB_DYDJID,XLXLB_WLID from XLXLB where 1=1 and isnull(XLXLB_TYBZ,' ')<> 'Y' and exists(select 1 from WL where WL_WLID=XLXLB_WLID and isnull(WL_TYBZ,' ')<>'Y') and exists(select 1 from XSBJXHTH where XSBJXHTH_XLXHID = XLXLB_XLXHID) ) tmpXL left join XSBJXHTH on XSBJXHTH_XLXHID=XLXLB_XLXHID union all select XLXLB_XLXHID as XLXHID,XLXLB_XLGGID as XLGGID,XLXLB_XLBZID as XLBZID,XLXLB_DYDJID as DYDJID,XLXLB_WLID from XLXLB where isnull(XLXLB_TYBZ,' ')<>'Y' and exists(select 1 from WL where WL_WLID=XLXLB_WLID and isnull(WL_TYBZ,' ')<>'Y') and not exists(select 1 from XSBJXHTH where XSBJXHTH_XLXHID = XLXLB_XLXHID ) ) a on a.XLXHID=XLXSCLQD_XLXHID and a.XLGGID=replace(XLXSCLQD_XLGGID,'*','×') and a.XLBZID=XLXSCLQD_XLBZID and a.DYDJID=XLXSCLQD_DYDJID left join WL tmpWL on WL_WLID =XLXLB_WLID "); } strSQL.AppendLine("left join XLBZ on XLBZ_XLBZID = XLXSCLQD_XLBZID "); strSQL.AppendLine(" left join XLXSCLQDWL ON XLXSCLQDWL_JGCZBID = XLXSCLQD_JGCZBID AND XLXSCLQDWL_JGCZBBBID = XLXSCLQD_JGCZBBBID and XLXSCLQD_JGCZBXH = XLXSCLQDWL_JGCZBXH AND XLXSCLQDWL_DRHH = XLXSCLQD_DRHH "); //增加物料列----使用关联的物料表 for (int i = 1; i <= 80; i++) { if (dicHeaderTextCLWL.ContainsKey("第" + i.ToString().PadLeft(2, '0') + "列")) { strSQL.AppendLine(string.Format("left join WL WL{0} ON WL{0}.WL_WLID =XLXSCLQDWL_WLID{0} ", i.ToString().PadLeft(2, '0'))); strSQL.AppendLine(" left join "); strSQL.AppendLine(" ( "); strSQL.AppendLine(" select XLXSWLHQ_WLID,XLXSWLHQ_WSJG,XLXSWLHQ_HSJG,XLXSWLHQ_WSJGF,XLXSWLHQ_HSJGF,XLXSWLHQ_WSCGJG,XLXSWLHQ_HSCGJG,XLXSWLHQ_YXQS,XLXSWLHQ_YXQZ,XLXSWLHQ_BZ,XLXSWLHQ_WHRID,XLXSWLHQ_WHR,XLXSWLHQ_WHSJ "); strSQL.AppendLine(" from XLXSWLHQ, "); strSQL.AppendLine(" ( "); strSQL.AppendLine(" select XLXSWLHQ_WLID as WLID,max(XLXSWLHQ_YXQS) as maxYXQS "); strSQL.AppendLine(" from XLXSWLHQ "); strSQL.AppendLine(" where XLXSWLHQ_JGBID=' ' "); strSQL.AppendLine(" and XLXSWLHQ_YXQS<=:pCKRQ and (XLXSWLHQ_YXQZ is null or XLXSWLHQ_YXQZ>=:pCKRQ) "); strSQL.AppendLine(" group by XLXSWLHQ_WLID "); strSQL.AppendLine(" ) b "); strSQL.AppendLine(" where XLXSWLHQ_JGBID=' ' "); strSQL.AppendLine(" and XLXSWLHQ_WLID=WLID "); strSQL.AppendLine(" and XLXSWLHQ_YXQS=maxYXQS "); strSQL.AppendLine(string.Format(" ) XLXSWLHQ{0} on XLXSWLHQ{0}.XLXSWLHQ_WLID=WL{0}.WL_WLID ", i.ToString().PadLeft(2, '0'))); } } if (dicHeaderTextCLWL.Count > 0) { entity.Param.Add("pCKRQ", DateTime.Now.ToShortDateString()); } if (CurQueryEntity.FieldByName("PXFS").Value.Trim().Equals("尺重表内容导入行号")) { if (sCZBLX.Equals("B")) { strSQL.AppendLine(" left join XLJGCZBNR on XLJGCZBNR_JGCZBID = XLXSCLQD_JGCZBID and XLJGCZBNR_JGCZBBBID = XLXSCLQD_JGCZBBBID and XLJGCZBNR_DRHH = XLXSCLQD_DRHH "); } else if (sCZBLX.Equals("Z") || sCZBLX.Equals("A") || sCZBLX.Equals("C") || sCZBLX.Equals("G")) { strSQL.AppendLine(" left join XLXHJGCZBNR on XLXHJGCZBNR_JGCZBID = XLXSCLQD_JGCZBID and XLXHJGCZBNR_JGCZBBBID = XLXSCLQD_JGCZBBBID "); strSQL.AppendLine(" and XLXHJGCZBNR_JGCZBXH = XLXSCLQD_JGCZBXH and XLXHJGCZBNR_DRHH = XLXSCLQD_DRHH "); } } strSQL.AppendLine(" where 1=1 and XLXSCLQD_WPID ='ZZZZ' "); if (!string.IsNullOrEmpty(CurQueryEntity.FieldByName("JGCZBID").Value.Trim())) { strSQL.AppendLine(" and XLXSCLQD_JGCZBID = :pJGCZBID "); entity.Param.Add("pJGCZBID", CurQueryEntity.FieldByName("JGCZBID").Value.Trim().Split('|')[0]); } if (!string.IsNullOrEmpty(CurQueryEntity.FieldByName("JGCZBBBID").Value.Trim())) { strSQL.AppendLine(" and XLXSCLQD_JGCZBBBID = :pJGCZBBBID "); entity.Param.Add("pJGCZBBBID", CurQueryEntity.FieldByName("JGCZBBBID").Value.Trim()); } if (!string.IsNullOrEmpty(CurQueryEntity.FieldByName("XLXHID").Value.Trim())) { strSQL.AppendLine(" and XLXSCLQD_XLXHID = :pXLXHID "); entity.Param.Add("pXLXHID", CurQueryEntity.FieldByName("XLXHID").Value.Trim()); } if (!string.IsNullOrEmpty(CurQueryEntity.FieldByName("XLGGID").Value.Trim())) { if (CurQueryEntity.FieldByName("XLGGID").Value.Trim().Contains("*")) { strSQL.AppendLine(" and (XLXSCLQD_XLGGID like :pXLGG or XLXSCLQD_XLGGID like :pXLGG2)"); entity.Param.Add("pXLGG", "%" + CurQueryEntity.FieldByName("XLGGID").Value.Trim() + "%"); entity.Param.Add("pXLGG2", "%" + CurQueryEntity.FieldByName("XLGGID").Value.Trim().Replace("*", "×") + "%"); } else { strSQL.AppendLine(" and XLXSCLQD_XLGGID like :pXLGGID "); entity.Param.Add("pXLGGID", "%" + CurQueryEntity.FieldByName("XLGGID").Value.Trim() + "%"); } } if (!string.IsNullOrEmpty(CurQueryEntity.FieldByName("ST").Value.Trim())) { strSQL.AppendLine(" and XLXSCLQD_XLBZID = :pST "); entity.Param.Add("pST", CurQueryEntity.FieldByName("ST").Value.Trim()); } if (!string.IsNullOrEmpty(CurQueryEntity.FieldByName("DYDJ").Value.Trim())) { strSQL.AppendLine(" and XLXSCLQD_DYDJID = :pDYDJ "); entity.Param.Add("pDYDJ", CurQueryEntity.FieldByName("DYDJ").Value.Trim()); } if (CurQueryEntity.FieldByName("PXFS").Value.Trim().Equals("型号+序号")) { strSQL.AppendLine("order by XLXSCLQD_XLXHID,XLXSCLQD_XH "); } else if (CurQueryEntity.FieldByName("PXFS").Value.Trim().Equals("尺重表内容导入行号")) { if (sCZBLX.Equals("B")) { strSQL.AppendLine(" order by XLJGCZBNR_DRHH "); } else if (sCZBLX.Equals("Z") || sCZBLX.Equals("A") || sCZBLX.Equals("C") || sCZBLX.Equals("G")) { strSQL.AppendLine(" order by XLXHJGCZBNR_JGCZBXH,XLXHJGCZBNR_DRHH "); } else { strSQL.AppendLine(" order by XLXSCLQD_XLXHID,XLXSCLQD_XH "); } } else { strSQL.AppendLine(" order by XLXSCLQD_XLXHID,XLXSCLQD_XH "); } return strSQL; } public void IfExistMC_Get() { dicHeaderTextCLMC.Clear(); dicHeaderTextCLJG.Clear(); dicHeaderTextCLWL.Clear(); if (string.IsNullOrEmpty(CurQueryEntity.FieldByName("JGCZBID").Value.Trim())) { for (int i = 1; i <= 80; i++) { ContentGrid.Columns[5 * i + 4].Visible = false; ContentGrid.Columns[5 * i + 5].Visible = false; ContentGrid.Columns[5 * i + 6].Visible = false; } return; } int iNumberDecimal = XLBJDUtils.BJCLPriceDecimal; bool bHSJGBZ = CurQueryEntity.FieldByName("HSJGBZ").Value.Trim().ToUpper().Equals("TRUE"); TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL sql = new TSQL(dberp); DataSet ds; sql.Add(" select XLJGCZBLM_CLQDL,XLXSBJCL_BJHQ, "); sql.Add(" case when isnull(XLXSBJCL_BJCLID,' ')=' ' then XLJGCZBLM_CZBLMMC else XLXSBJCL_BJCLMC end as CLMC,"); if (bHSJGBZ) { sql.Add(" case when isnull(XLXSBJCL_BJCLID,' ')=' ' then 0 else isnull(XLXSCLHQ_HSJG,0.0) end as CLJG "); } else { sql.Add(" case when isnull(XLXSBJCL_BJCLID,' ')=' ' then 0 else isnull(XLXSCLHQ_WSJG,0.0) end as CLJG "); } sql.Add(" from XLJGCZBLM "); sql.Add(" left join XLXSBJCL on XLXSBJCL_BJCLID=XLJGCZBLM_BJCLID"); //sql.Add(" left join XLJGCZBML on XLJGCZBML_JGCZBID = XLJGCZBLM_JGCZBID"); sql.Add(" left join"); sql.Add(" ( "); sql.Add(" select XLXSCLHQ_BJCLID, "); if (bHSJGBZ) { sql.Add(" XLXSCLHQ_HSJG "); } else { sql.Add(" XLXSCLHQ_WSJG "); } sql.Add(" from XLXSCLHQ, "); sql.Add(" ( "); sql.Add(" select XLXSCLHQ_BJCLID as BJCLID,max(XLXSCLHQ_YXQS) as maxYXQS "); sql.Add(" from XLXSCLHQ "); sql.Add(" where XLXSCLHQ_JGBID='ZZZZZZZZ' "); sql.Add(" and XLXSCLHQ_YXQS<=:pRQ "); sql.Add(" and (XLXSCLHQ_YXQZ is null or XLXSCLHQ_YXQZ>=:pRQ) "); sql.Add(" group by XLXSCLHQ_BJCLID "); sql.Add(" ) a "); sql.Add(" where XLXSCLHQ_JGBID='ZZZZZZZZ' "); sql.Add(" and XLXSCLHQ_BJCLID=BJCLID "); sql.Add(" and XLXSCLHQ_YXQS=maxYXQS "); sql.Add(" ) b on XLXSCLHQ_BJCLID=XLXSBJCL_BJCLID "); sql.Add(" where XLJGCZBLM_JGCZBID=:pJGCZBID and XLJGCZBLM_JGCZBBBID=:pJGCZBBBID and isnull(XLJGCZBLM_CLQDL,' ')<>' '"); sql.Add(" order by XLJGCZBLM_CLQDL "); sql.ParamByName("pJGCZBID").Value = CurQueryEntity.FieldByName("JGCZBID").Value.Trim().Split('|')[0]; sql.ParamByName("pJGCZBBBID").Value = CurQueryEntity.FieldByName("JGCZBBBID").Value.Trim(); sql.ParamByName("pRQ").Value = DateTime.Now.ToShortDateString(); ds = dberp.OpenDataSet(sql); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { dicHeaderTextCLMC.Add((ds.Tables[0].Rows[i]["XLJGCZBLM_CLQDL"].ToString().Trim()), ds.Tables[0].Rows[i]["CLMC"].ToString().Trim()); dicHeaderTextCLJG.Add((ds.Tables[0].Rows[i]["XLJGCZBLM_CLQDL"].ToString().Trim()), XLBJDUtils.strPadRight(ds.Tables[0].Rows[i]["CLJG"].ToString().Trim(),iNumberDecimal) + "元/Kg"); //添加物料列 if (ds.Tables[0].Rows[i]["XLXSBJCL_BJHQ"].ToString().Trim().Equals("2")) { dicHeaderTextCLWL.Add((ds.Tables[0].Rows[i]["XLJGCZBLM_CLQDL"].ToString().Trim()), ds.Tables[0].Rows[i]["CLMC"].ToString().Trim()); } } SetColumnsVisible(); } private void initGrid() { for (int i = 1; i <= 80; i++) { string sCLQDL = "第" + i.ToString().PadLeft(2, '0') + "列"; string sExist = ""; if (dicHeaderTextCLMC.ContainsKey(sCLQDL)) { sExist = dicHeaderTextCLMC[sCLQDL].Trim(); } if (!sExist.Equals("")) { ContentGrid.FindColumnByFieldName("XLXSCLQD_SL" + i.ToString().PadLeft(2, '0')).HeaderText = sExist; } string sExist2 = ""; if (dicHeaderTextCLJG.ContainsKey(sCLQDL)) { sExist2 = dicHeaderTextCLJG[sCLQDL].Trim(); } if (!sExist2.Equals("")) { ContentGrid.FindColumnByFieldName("CLJG" + i.ToString().PadLeft(2, '0')).HeaderText = sExist2; } } } private void SetColumnsVisible() { if (dicHeaderTextCLMC.Count > 0) { for (int i = 1; i <= 80; i++) { string sCLQDL = "第" + i.ToString().PadLeft(2, '0') + "列"; string sExist = ""; if (dicHeaderTextCLMC.ContainsKey(sCLQDL)) { sExist = dicHeaderTextCLMC[sCLQDL].Trim(); } if (sExist.Equals("")) { //报价材料 ContentGrid.FindColumnByFieldName("XLXSCLQD_SL" + i.ToString().PadLeft(2, '0')).Visible = false; ContentGrid.FindColumnByFieldName("CLJG" + i.ToString().PadLeft(2, '0')).Visible = false; //材料物料 ContentGrid.FindColumnByFieldName("XLXSCLWL" + i.ToString().PadLeft(2, '0')).Visible = false; ContentGrid.FindColumnByFieldName("XLXSCLWLJG" + i.ToString().PadLeft(2, '0')).Visible = false; ContentGrid.FindColumnByFieldName("XLXSCLWLCB" + i.ToString().PadLeft(2, '0')).Visible = false; } if (!dicHeaderTextCLWL.ContainsKey(sCLQDL)) { //材料物料 ContentGrid.FindColumnByFieldName("XLXSCLWL" + i.ToString().PadLeft(2, '0')).Visible = false; ContentGrid.FindColumnByFieldName("XLXSCLWLJG" + i.ToString().PadLeft(2, '0')).Visible = false; ContentGrid.FindColumnByFieldName("XLXSCLWLCB" + i.ToString().PadLeft(2, '0')).Visible = false; } else { ContentGrid.FindColumnByFieldName("CLJG" + i.ToString().PadLeft(2, '0')).Visible = false; } } } } //数字列号为字母列号 1-A 27->AA //入口为SL的前一列,所以开始列包含重量和成本时需要减去1,因为开始列本身已经前移,结束列则不需要减一 public string GetNumTolet(int Index) { int dividend = Index; string columnName = string.Empty; while (dividend > 0) { int modulo = (dividend - 1) % 26; columnName = Convert.ToChar(65 + modulo) + columnName; dividend = (dividend - modulo) / 26; } return columnName; } #endregion #region 导出数据 protected void btnSJDC_Click(object sender, EventArgs e) { base.InitEntityByCondition(); int iNumberDecimal = XLBJDUtils.BJCLPriceDecimal; bool bHSJGBZ = CurQueryEntity.FieldByName("HSJGBZ").Value.Trim().ToUpper().Equals("TRUE"); if (CurQueryEntity.FieldByName("JGCZBID").Value.Trim().Equals("")) { ShowMessage("请先查询数据!"); return; } dicHeaderTextCLMC.Clear(); dicHeaderTextCLJG.Clear(); dicHeaderTextCLWL.Clear(); string sFileName = ""; string sDateNow = DateTime.Now.Year.ToString().Trim().PadLeft(2, '0') + DateTime.Now.Month.ToString().Trim().PadLeft(2, '0') + DateTime.Now.Day.ToString().Trim().PadLeft(2, '0') + DateTime.Now.Hour.ToString().Trim().PadLeft(2, '0') + DateTime.Now.Minute.ToString().Trim().PadLeft(2, '0'); sFileName = sDateNow + "材料成本"; string m_tmpFilePath = FileService.CombineTempPath(sFileName + ".xlsx"); TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL SQL = new TSQL(dberp); SQL.Clear(); SQL.Add(" select XLJGCZBLM_CLQDL,XLXSBJCL_BJHQ, "); SQL.Add(" case when isnull(XLXSBJCL_BJCLID,' ')=' ' then XLJGCZBLM_CZBLMMC else XLXSBJCL_BJCLMC end as CLMC,"); if (bHSJGBZ) { SQL.Add(" case when isnull(XLXSBJCL_BJCLID,' ')=' ' then 0 else isnull(XLXSCLHQ_HSJG,0.0) end as CLJG "); } else { SQL.Add(" case when isnull(XLXSBJCL_BJCLID,' ')=' ' then 0 else isnull(XLXSCLHQ_WSJG,0.0) end as CLJG "); } SQL.Add(" from XLJGCZBLM "); SQL.Add(" left join XLXSBJCL on XLXSBJCL_BJCLID=XLJGCZBLM_BJCLID"); SQL.Add(" left join"); SQL.Add(" ( "); SQL.Add(" select XLXSCLHQ_BJCLID, "); if (bHSJGBZ) { SQL.Add(" XLXSCLHQ_HSJG "); } else { SQL.Add(" XLXSCLHQ_WSJG "); } SQL.Add(" from XLXSCLHQ, "); SQL.Add(" ( "); SQL.Add(" select XLXSCLHQ_BJCLID as BJCLID,max(XLXSCLHQ_YXQS) as maxYXQS "); SQL.Add(" from XLXSCLHQ "); SQL.Add(" where XLXSCLHQ_JGBID='ZZZZZZZZ' "); SQL.Add(" and XLXSCLHQ_YXQS<=:pRQ "); SQL.Add(" and (XLXSCLHQ_YXQZ is null or XLXSCLHQ_YXQZ>=:pRQ) "); SQL.Add(" group by XLXSCLHQ_BJCLID "); SQL.Add(" ) a "); SQL.Add(" where XLXSCLHQ_JGBID='ZZZZZZZZ' "); SQL.Add(" and XLXSCLHQ_BJCLID=BJCLID "); SQL.Add(" and XLXSCLHQ_YXQS=maxYXQS "); SQL.Add(" ) b on XLXSCLHQ_BJCLID=XLXSBJCL_BJCLID "); SQL.Add(" where XLJGCZBLM_JGCZBID=:pJGCZBID and XLJGCZBLM_JGCZBBBID=:pJGCZBBBID and isnull(XLJGCZBLM_CLQDL,' ')<>' '"); SQL.Add(" order by XLJGCZBLM_CLQDL "); SQL.ParamByName("pJGCZBID").Value = CurQueryEntity.FieldByName("JGCZBID").Value.Trim().Split('|')[0]; SQL.ParamByName("pJGCZBBBID").Value = CurQueryEntity.FieldByName("JGCZBBBID").Value.Trim(); SQL.ParamByName("pRQ").Value = DateTime.Now.ToShortDateString(); DataSet dsCLHQ = dberp.OpenDataSet(SQL); for (int i = 0; i < dsCLHQ.Tables[0].Rows.Count; i++) { dicHeaderTextCLMC.Add((dsCLHQ.Tables[0].Rows[i]["XLJGCZBLM_CLQDL"].ToString().Trim()), dsCLHQ.Tables[0].Rows[i]["CLMC"].ToString().Trim()); dicHeaderTextCLJG.Add((dsCLHQ.Tables[0].Rows[i]["XLJGCZBLM_CLQDL"].ToString().Trim()), XLBJDUtils.strPadRight(dsCLHQ.Tables[0].Rows[i]["CLJG"].ToString().Trim(),iNumberDecimal) + "元/Kg"); //添加物料列 if (dsCLHQ.Tables[0].Rows[i]["XLXSBJCL_BJHQ"].ToString().Trim().Equals("2")) { dicHeaderTextCLWL.Add((dsCLHQ.Tables[0].Rows[i]["XLJGCZBLM_CLQDL"].ToString().Trim()), dsCLHQ.Tables[0].Rows[i]["CLMC"].ToString().Trim()); } } Dictionary dicColumns = new Dictionary(); dicColumns.Clear(); dicColumns.Add("XLXSCLQD_XLXHID", "型号"); dicColumns.Add("XLXSCLQD_XLGGID", "规格"); dicColumns.Add("XLBZ", "标准"); dicColumns.Add("XLXSCLQD_DYDJID", "电压等级"); if (CurQueryEntity.FieldByName("XSWLCB").Value.Trim().ToUpper().Equals("TRUE")) { dicColumns.Add("WLID", "物料编码"); dicColumns.Add("WLXX", "物料信息"); } dicColumns.Add("JLDW", "计量单位"); dicColumns.Add("XLXSCLQD_CLZL", "材料重量"); dicColumns.Add("CLCB", "材料成本"); string str = GetQuerySql().ToString(); SQL.Clear(); SQL.Add(str); foreach (string s in entity.Param.Keys) { SQL.ParamByName(s).Value = entity.Param[s]; } DataSet dsQry = dberp.OpenDataSet(SQL); string sColName = ""; //列标记 int index = 0; //数值列标记 int NumB = -1; int NumE = -1; string sColIndex = ""; string sCLQDL = "XLXSCLQD_SL"; string sCLJGL = "CLJG"; string sCLWLL = "XLXSCLWL"; string sWLJGL = "XLXSCLWLJG"; string sWLCBL = "XLXSCLWLCB"; //循环固定列,进行赋值 for (int i = 0; i < dsQry.Tables[0].Columns.Count; i++) { if (dicColumns.ContainsKey(dsQry.Tables[0].Columns[i].ColumnName)) { sColName = dsQry.Tables[0].Columns[i].ColumnName; dsQry.Tables[0].Columns[i].SetOrdinal(index); dsQry.Tables[0].Columns[index].Caption = "待处理列&_" + dicColumns[sColName]; string ss = dsQry.Tables[0].Columns[i].ColumnName; index++; } } foreach (KeyValuePair kvp in dicHeaderTextCLMC) { for (int i = 0; i < dsQry.Tables[0].Columns.Count; i++) { sColIndex = ""; sCLQDL = "XLXSCLQD_SL"; sCLJGL = "CLJG"; sCLWLL = "XLXSCLWL"; sWLJGL = "XLXSCLWLJG"; sWLCBL = "XLXSCLWLCB"; sColIndex = kvp.Key.Replace("第", "").Replace("列", "").Trim().PadLeft(2, '0'); sCLQDL = sCLQDL + sColIndex; sCLJGL = sCLJGL + sColIndex; sCLWLL = sCLWLL + sColIndex; sWLJGL = sWLJGL + sColIndex; sWLCBL = sWLCBL + sColIndex; if (dsQry.Tables[0].Columns[i].ColumnName.Equals(sCLQDL)) { if (NumB == -1) { //index从0开始,此时为7 NumB = index; } //第01列--XLXSCLQD_SL01 dsQry.Tables[0].Columns[i].SetOrdinal(index); dsQry.Tables[0].Columns[index].Caption = "待处理列&_" + kvp.Value; index++; //第01列价格--CLJG01 dsQry.Tables[0].Columns[sCLJGL].SetOrdinal(index); dsQry.Tables[0].Columns[index].Caption = "待处理列&_" + dicHeaderTextCLJG[kvp.Key]; index++; if (dicHeaderTextCLWL.ContainsKey(kvp.Key)) { //材料物料--XLXSCLWL01 dsQry.Tables[0].Columns[sCLWLL].SetOrdinal(index); dsQry.Tables[0].Columns[index].Caption = "待处理列&_" + dsQry.Tables[0].Columns[index].ColumnName; index++; //物料价格(元/Kg)--XLXSCLWLJG01 dsQry.Tables[0].Columns[sWLJGL].SetOrdinal(index); dsQry.Tables[0].Columns[index].Caption = "待处理列&_" + dsQry.Tables[0].Columns[index].ColumnName; index++; //物料成本--XLXSCLWLCB01 dsQry.Tables[0].Columns[sWLCBL].SetOrdinal(index); dsQry.Tables[0].Columns[index].Caption = "待处理列&_" + dsQry.Tables[0].Columns[index].ColumnName; index++; } break; } } } dicColumns.Clear(); dicColumns.Add("XLXSCLQD_BZ", "备注"); dicColumns.Add("XLXSCLQD_WHR", "维护人"); dicColumns.Add("XLXSCLQD_WHSJ", "维护时间"); //循环固定列,进行赋值 for (int i = 0; i < dsQry.Tables[0].Columns.Count; i++) { if (dicColumns.ContainsKey(dsQry.Tables[0].Columns[i].ColumnName)) { if (NumE == -1) { NumE = index; } sColName = dsQry.Tables[0].Columns[i].ColumnName; dsQry.Tables[0].Columns[i].SetOrdinal(index); dsQry.Tables[0].Columns[index].Caption = "待处理列&_" + dicColumns[sColName]; string ss = dsQry.Tables[0].Columns[i].ColumnName; index++; } } //循环,删除列 for (int i = dsQry.Tables[0].Columns.Count - 1; i >= 0; i--) { if (dsQry.Tables[0].Columns[i].Caption.StartsWith("待处理列&_")) { dsQry.Tables[0].Columns[i].Caption = dsQry.Tables[0].Columns[i].Caption.Replace("待处理列&_", ""); } else { dsQry.Tables[0].Columns.RemoveAt(i); } } if (dsQry.Tables[0].Rows.Count > 0) { string smessage = ""; string sLet = ""; // NpoiSheetData sd = new NpoiSheetData(); sd.ColumnStyle = new System.Collections.Generic.Dictionary(); NpoiColumnStyle ct = new NpoiColumnStyle(); ct.DataFormat = "@"; sd.ColumnStyle.Add("B", ct); sd.ColumnType = new System.Collections.Generic.Dictionary(); //从0开始计数,所以到XLXSCLQD_SL01虽然是7,但是NumB应该减去2以保证前两位都能计入。 //因为入口是正确的,所以循环结束index会多加一位,所以NumE最后减去1 NumB = NumB - 2; NumE = NumE - 1; if (NumB >= 0 && NumE >= 0) { for (int k = NumB; k <= NumE; k++) { if (dsQry.Tables[0].Columns[k].ColumnName.StartsWith("XLXSCLWLJG"))//物料价格要设为数值型 { sLet = TExcelData.ColIndexToReference(k); sd.ColumnType.Add(sLet, NpoiColumnType.Double); } else if (dsQry.Tables[0].Columns[k].ColumnName.StartsWith("XLXSCLWLCB"))//物料成本要设为数值型 { sLet = TExcelData.ColIndexToReference(k); sd.ColumnType.Add(sLet, NpoiColumnType.Double); } else if (!dsQry.Tables[0].Columns[k].ColumnName.StartsWith("XLXSCLWL"))//除物料ID之外要设为数值型 { sLet = TExcelData.ColIndexToReference(k); sd.ColumnType.Add(sLet, NpoiColumnType.Double); } } } TExcelData.CreateExcel_XLSX_NPOI(m_tmpFilePath, dsQry, true, null, sd, ref smessage); if (smessage.Equals("")) { System.IO.FileInfo file = new System.IO.FileInfo(m_tmpFilePath); string URL = Page.ResolveClientUrl("~") + "/N_MODEL/Dialog/TempFileDownload.ashx?TempFileName=" + file.Name + "&FileName=" + sFileName + file.Extension; string jsript = @"var JLDCDiv = document.createElement('div');JLDCDiv.style.width=0;JLDCDiv.style.height=0;JLDCDiv.id = 'DivifrDownLoad';" + " var ele=document.documentElement||document.body;ele.appendChild(JLDCDiv);var iJLDCfrm = document.createElement('iframe');iJLDCfrm.id = 'iJLDCfrmDownLoad';iJLDCfrm.src = '" + URL + "';" + "iJLDCfrm.style.width = 0;iJLDCfrm.style.height = 0; JLDCDiv.appendChild(iJLDCfrm);"; AJAXRunScript(this, "OPENJLDC", jsript); } else { ShowMessage(smessage); } } else { ShowMessage("无记录可以导出!"); } } #endregion } }