RollingDailyPlan.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478
  1. using System;
  2. using System.Data;
  3. using System.Text;
  4. using Curtain.DataAccess;
  5. /// <summary>
  6. /// 生成滚动日计划
  7. /// </summary>
  8. public class RollingDailyPlan
  9. {
  10. /// <summary>
  11. /// 生成滚动日计划
  12. /// </summary>
  13. /// <returns></returns>
  14. public static string RollingNewDailyPlan(DateTime today)
  15. {
  16. int accountID, userID; // 账套、用户ID
  17. DateTime yesterday = today.AddDays(-1); // 昨天
  18. int yesterdayDay = yesterday.Day; // 昨天日期号
  19. int monthDays = DateTime.DaysInMonth(yesterday.Year, yesterday.Month); // 昨天所在月份的日数
  20. int result = 0;
  21. using (IDataAccess conn = DataAccess.Create())
  22. {
  23. conn.BeginTransaction();
  24. try
  25. {
  26. // 如果做了成检数结转,先清掉
  27. result += conn.ExecuteNonQuery(@"
  28. DELETE FROM TP_PC_CJDAILY WHERE ACCOUNTDATE = @YESTERDAY@ ",
  29. new CDAParameter("YESTERDAY", yesterday, DataType.Date)
  30. );
  31. // 插入新的成检数结转
  32. result += conn.ExecuteNonQuery(@"
  33. INSERT INTO TP_PC_CJDAILY
  34. (ACCOUNTDATE
  35. ,MATNR
  36. ,CJQUANTITY)
  37. SELECT TRUNC(T.CREATETIME) AS SJ
  38. ,T.MATERIALCODE
  39. ,NVL(SUM(DECODE(T.GOODSLEVELTYPEID, 0, 1, 0)), 0) NUM2
  40. FROM (SELECT 0 GOODSLEVELTYPEID
  41. ,GDD.MATERIALCODE
  42. ,PD.GOODSID
  43. ,PD.CREATETIME
  44. FROM TP_PM_PRODUCTIONDATA PD
  45. INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD
  46. ON GDD.GROUTINGDAILYDETAILID = PD.GROUTINGDAILYDETAILID
  47. WHERE ((PD.PROCEDUREID <> 104 AND PD.VALUEFLAG = '1') OR
  48. (PD.PROCEDUREID = 104 AND PD.CHECKFLAG = '1'))
  49. AND (11 IS NULL OR ((11 = 11 AND ((PD.PROCEDUREID = 11) OR
  50. (PD.PROCEDUREID = 104 AND PD.ISREFIRE = '0'))) OR
  51. (11 = 58 AND ((PD.PROCEDUREID = 58) OR
  52. (PD.PROCEDUREID = 104 AND PD.ISREFIRE = '6'))) OR
  53. (11 NOT IN (11, 58) AND PD.PROCEDUREID = 11)))
  54. AND (NULL IS NULL OR INSTR(',' || NULL || ',', ',' || PD.PROCEDUREID || ',') > 0)
  55. AND PD.ACCOUNTID = 1
  56. AND PD.CREATETIME >= @YESTERDAY@
  57. AND PD.CREATETIME < TRUNC(@YESTERDAY@) + 1
  58. UNION ALL
  59. SELECT PD.GOODSLEVELTYPEID
  60. ,GDD.MATERIALCODE
  61. ,PD.GOODSID
  62. ,PD.CREATETIME
  63. FROM TP_PM_PRODUCTIONDATA PD
  64. INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD
  65. ON GDD.GROUTINGDAILYDETAILID = PD.GROUTINGDAILYDETAILID
  66. WHERE PD.VALUEFLAG = '1'
  67. AND PD.MODELTYPE = -1
  68. AND PD.ACCOUNTID = 1
  69. AND LENGTH(PD.KILNCARBATCHNO) > 0
  70. AND PD.CREATETIME >= @YESTERDAY@
  71. AND PD.CREATETIME < TRUNC(@YESTERDAY@) + 1
  72. AND PD.ISREFIRE = '0') T
  73. INNER JOIN TP_MST_GOODS MSTGOODS
  74. ON MSTGOODS.GOODSID = T.GOODSID
  75. INNER JOIN TP_MST_GOODSTYPE MSTGOODSTYPE
  76. ON MSTGOODSTYPE.GOODSTYPEID = MSTGOODS.GOODSTYPEID
  77. WHERE MSTGOODSTYPE.GOODSTYPECODE LIKE '001001%'
  78. GROUP BY TRUNC(T.CREATETIME)
  79. ,T.MATERIALCODE
  80. ORDER BY TRUNC(T.CREATETIME)
  81. ,T.MATERIALCODE ",
  82. new CDAParameter("YESTERDAY", yesterday, DataType.Date)
  83. );
  84. // 更新昨日成检数到日计划
  85. result += conn.ExecuteNonQuery(@"
  86. UPDATE (SELECT DPD.DETAILID
  87. ,DP.ACCOUNTDATE
  88. ,DPD.MATNR
  89. ,DPD.CJQUANTITY
  90. FROM TP_PC_DAILYPLANDETAIL DPD
  91. INNER JOIN TP_PC_DAILYPLAN DP
  92. ON DP.DAILYPLANID = DPD.DAILYPLANID
  93. WHERE DP.ACCOUNTDATE = @YESTERDAY@) T1
  94. SET T1.CJQUANTITY =
  95. (SELECT CJ.CJQUANTITY
  96. FROM TP_PC_CJDAILY CJ
  97. WHERE CJ.MATNR = T1.MATNR
  98. AND CJ.ACCOUNTDATE = T1.ACCOUNTDATE)
  99. WHERE EXISTS (SELECT 1
  100. FROM TP_PC_CJDAILY CJ
  101. WHERE CJ.MATNR = T1.MATNR
  102. AND CJ.ACCOUNTDATE = T1.ACCOUNTDATE) ",
  103. new CDAParameter("YESTERDAY", yesterday, DataType.Date)
  104. );
  105. // 查询未完成的计划量
  106. // (packingbom不存在goodsid时,先给个固定值)
  107. DataTable dtNoFinish = conn.ExecuteDatatable(@"
  108. SELECT T1.MONTHPLANID
  109. ,T1.MATNR
  110. ,NVL(PB.GOODSID, 1) AS GOODSID
  111. ,NVL(PB.LOGOID, 15) AS LOGOID
  112. ,T1.MENGE
  113. ,NVL(T2.CJQUANTITY, 0) AS CJQUANTITY
  114. ,T1.MENGE - NVL(T2.CJQUANTITY, 0) AS DIFFER
  115. ,T1.ACCOUNTID
  116. ,T1.CREATEUSERID
  117. FROM (SELECT MP.MONTHPLANID
  118. ,MP.ACCOUNTID
  119. ,MP.CREATEUSERID
  120. ,MPD.MATNR
  121. ,SUM(MPD.MENGE) AS MENGE
  122. FROM TP_PC_MONTHPLANDETAIL MPD
  123. INNER JOIN TP_PC_MONTHPLAN MP
  124. ON MP.MONTHPLANID = MPD.MONTHPLANID
  125. WHERE MP.PROCEDUREID = 104
  126. AND MP.ACCOUNTMONTH = TO_CHAR(TRUNC(@YESTERDAY@), 'YYYY-MM')
  127. GROUP BY MP.MONTHPLANID
  128. ,MP.ACCOUNTID
  129. ,MP.CREATEUSERID
  130. ,MPD.MATNR) T1
  131. INNER JOIN TP_MST_PACKINGBOM PB
  132. ON PB.MATNR = T1.MATNR
  133. LEFT JOIN (SELECT DPD.MATNR
  134. ,SUM(DPD.CJQUANTITY) AS CJQUANTITY
  135. FROM TP_PC_DAILYPLANDETAIL DPD
  136. INNER JOIN TP_PC_DAILYPLAN DP
  137. ON DP.DAILYPLANID = DPD.DAILYPLANID
  138. WHERE DP.ACCOUNTDATE >= TRUNC(ADD_MONTHS(LAST_DAY(@YESTERDAY@), -1) + 1)
  139. AND DP.ACCOUNTDATE < TRUNC(@YESTERDAY@) + 1
  140. GROUP BY DPD.MATNR) T2
  141. ON T2.MATNR = T1.MATNR
  142. WHERE T1.MENGE > NVL(T2.CJQUANTITY, 0) ",
  143. new CDAParameter("YESTERDAY", yesterday, DataType.Date)
  144. );
  145. if (dtNoFinish.Rows.Count == 0)
  146. {
  147. return "月计划均已达成,没有需要生成的日计划";
  148. }
  149. // 如果昨天不是最后一天
  150. if (yesterdayDay != monthDays)
  151. {
  152. int primaryKeyCJ = Convert.ToInt32(dtNoFinish.Rows[0]["MONTHPLANID"]);
  153. accountID = Convert.ToInt32(dtNoFinish.Rows[0]["ACCOUNTID"]);
  154. userID = Convert.ToInt32(dtNoFinish.Rows[0]["CREATEUSERID"]);
  155. // 本月最后一天
  156. DateTime enddate = Convert.ToDateTime(today.AddMonths(1).ToString("yyyy-MM-01")).AddDays(-1);
  157. TimeSpan sp = enddate.Subtract(today);
  158. int days = sp.Days;
  159. // 获取合格率
  160. DataTable dtQualifiedPercent = QualifiedPercent.GetQualifiedPercent(conn, today);
  161. // 删除之后的日计划
  162. result += conn.ExecuteNonQuery(@"
  163. DELETE FROM TP_PC_DAILYPLANDETAIL DPD
  164. WHERE DPD.DAILYPLANID IN (SELECT DP.DAILYPLANID
  165. FROM TP_PC_DAILYPLAN DP
  166. WHERE DP.ACCOUNTDATE > @YESTERDAY@
  167. AND DP.ACCOUNTDATE <= LAST_DAY(@YESTERDAY@)) ",
  168. new CDAParameter("YESTERDAY", yesterday, DataType.Date)
  169. );
  170. result += conn.ExecuteNonQuery(@"
  171. DELETE FROM TP_PC_DAILYPLAN DP
  172. WHERE DP.ACCOUNTDATE > @YESTERDAY@
  173. AND DP.ACCOUNTDATE <= LAST_DAY(@YESTERDAY@) ",
  174. new CDAParameter("YESTERDAY", yesterday, DataType.Date)
  175. );
  176. string sqlIniDailyPlan = @"
  177. INSERT INTO TP_PC_DAILYPLAN
  178. (DAILYPLANID,
  179. DAILYPLANNAME,
  180. MONTHPLANID,
  181. ACCOUNTDATE,
  182. ACCOUNTID,
  183. CREATEUSERID,
  184. UPDATEUSERID)
  185. VALUES
  186. (@DAILYPLANID@,
  187. @DAILYPLANNAME@,
  188. @MONTHPLANID@,
  189. @ACCOUNTDATE@,
  190. @ACCOUNTID@,
  191. @USERID@,
  192. @USERID@) ";
  193. string sqlIniDailyPlanDetail = @"
  194. INSERT INTO TP_PC_DAILYPLANDETAIL
  195. (DAILYPLANID,
  196. MATNR,
  197. GOODSID,
  198. LOGOID,
  199. OUTQUANTITY,
  200. PLANQUANTITY,
  201. QUALIFIEDPERCENT,
  202. ACCOUNTID,
  203. CREATEUSERID,
  204. UPDATEUSERID)
  205. VALUES
  206. (@DAILYPLANID@,
  207. @MATNR@,
  208. @GOODSID@,
  209. @LOGOID@,
  210. @OUTQUANTITY@,
  211. @PLANQUANTITY@,
  212. @QUALIFIEDPERCENT@,
  213. @ACCOUNTID@,
  214. @USERID@,
  215. @USERID@) ";
  216. DataRow[] rows = null;
  217. for (int i = 0; i <= days; i++)
  218. {
  219. //获取日计划主键
  220. object dailyPlanID = conn.GetSequenceNextval("SEQ_PC_DAILYPLAN");
  221. DateTime dailyAccountDate = today.AddDays(i);
  222. //新建日计划总单
  223. result += conn.ExecuteNonQuery(sqlIniDailyPlan,
  224. new CDAParameter("DAILYPLANID", dailyPlanID),
  225. new CDAParameter("DAILYPLANNAME", "成检日计划" + dailyAccountDate.ToString("yyyy-MM-dd")),
  226. new CDAParameter("MONTHPLANID", primaryKeyCJ),
  227. new CDAParameter("ACCOUNTDATE", dailyAccountDate),
  228. new CDAParameter("ACCOUNTID", accountID),
  229. new CDAParameter("USERID", userID)
  230. );
  231. //新建日计划明细
  232. foreach (DataRow drMonthPlanDetail in dtNoFinish.Rows)
  233. {
  234. // 日均值,向下取整
  235. decimal avgquantity = Math.Floor(Convert.ToDecimal(drMonthPlanDetail["DIFFER"]) / (days + 1));
  236. decimal planquantity = avgquantity;
  237. if (i == days)
  238. {
  239. planquantity = Convert.ToDecimal(drMonthPlanDetail["DIFFER"]) - days * avgquantity;
  240. }
  241. // 出窑数量
  242. decimal outquantity = planquantity;
  243. rows = dtQualifiedPercent.Select("GOODSID = " + drMonthPlanDetail["GOODSID"]);
  244. decimal qualifiedpercent = 1;
  245. if (rows.Length > 0)
  246. {
  247. qualifiedpercent = Convert.ToDecimal(rows[0]["QUALIFIEDPERCENT"]);
  248. outquantity = Math.Floor(planquantity / qualifiedpercent);
  249. }
  250. result += conn.ExecuteNonQuery(sqlIniDailyPlanDetail,
  251. new CDAParameter("DAILYPLANID", dailyPlanID),
  252. new CDAParameter("MATNR", drMonthPlanDetail["MATNR"], DataType.NVarChar),
  253. new CDAParameter("GOODSID", drMonthPlanDetail["GOODSID"], DataType.Int32),
  254. new CDAParameter("LOGOID", drMonthPlanDetail["LOGOID"], DataType.Int32),
  255. new CDAParameter("OUTQUANTITY", outquantity, DataType.Int32),
  256. new CDAParameter("PLANQUANTITY", planquantity, DataType.Int32),
  257. new CDAParameter("QUALIFIEDPERCENT", qualifiedpercent * 100, DataType.Decimal),
  258. new CDAParameter("ACCOUNTID", accountID),
  259. new CDAParameter("USERID", userID)
  260. );
  261. }
  262. }
  263. }
  264. if (result > 0)
  265. {
  266. conn.Commit();
  267. return "操作成功";
  268. }
  269. else
  270. {
  271. conn.Rollback();
  272. return "操作失败";
  273. }
  274. }
  275. catch (Exception e)
  276. {
  277. conn.Rollback();
  278. return "操作失败:" + e.Message;
  279. }
  280. }
  281. }
  282. /// <summary>
  283. /// 生成领料计划(按领料计划设置)
  284. /// </summary>
  285. /// <returns></returns>
  286. public static string AutoMateriaPlanOut()
  287. {
  288. int result = 0;
  289. int autoid = 0;
  290. string ZMSG = null;
  291. string msg = "";
  292. //List<string> matnrs = new List<string>();
  293. //matnrs.Add("");
  294. DataTable dtInventory = new DataTable("T");
  295. dtInventory.Columns.Add("IDNRK");
  296. dtInventory.Columns.Add("POSITION");
  297. dtInventory.Rows.Add("", "1001");
  298. dtInventory.Rows.Add("", "1002");
  299. dtInventory.Rows.Add("", "1003");
  300. dtInventory.Rows.Add("", "1004");
  301. dtInventory.Rows.Add("", "1005");
  302. dtInventory.Rows.Add("", "1006");
  303. //DataTable dtSapInventory = SapApi.ZMM_WMS016("5000", dtInventory, out ZMSG);
  304. //dtSapInventory.DefaultView.RowFilter = "LGORT IN('1001','1002','1003','1004','1005','1006')";
  305. //dtSapInventory = dtSapInventory.DefaultView.ToTable();
  306. /*
  307. string tmp_sql = @"
  308. insert into tmp_ZMM_WMS016 (WERKS, MATNR, LGORT, CHARG, LABST, GYSKC, KALAB, KYKC, SPEME, VBELN, POSNR, SOBKZ, SSNUM, WMSNUM, LIFNR, SPEME_103)
  309. values (@WERKS@, @MATNR@, @LGORT@, @CHARG@, @LABST@, @GYSKC@, @KALAB@, @KYKC@, @SPEME@, @VBELN@, @POSNR@, @SOBKZ@, @SSNUM@, @WMSNUM@, @LIFNR@, @SPEME_103@)
  310. ";*/
  311. using (IDataAccess conn = DataAccess.Create())
  312. {
  313. conn.BeginTransaction();
  314. try
  315. {
  316. CDAParameter aid = new CDAParameter("@in_accountid@", 1);
  317. CDAParameter aoid = new CDAParameter("@rs_result@", 0, DataType.Int32, ParameterDirection.Output);
  318. result = conn.ExecuteSPNonQuery("pro_auto_pc_materiaplan_check", aid, aoid);
  319. autoid =Convert.ToInt32(((Oracle.ManagedDataAccess.Types.OracleDecimal)(aoid.Value)).Value);
  320. msg += " 【pro_auto_pc_materiaplan_check】操作成功 [" + autoid + "]";
  321. }
  322. catch (Exception e)
  323. {
  324. autoid = 0;
  325. msg += " 【pro_auto_pc_materiaplan_check】操作失败:" + e.Message;
  326. }
  327. if (autoid == 0)
  328. {
  329. return msg;
  330. }
  331. /* 线边仓库存,暂不启用,目前领料不用这个自动生成的单子
  332. try
  333. {
  334. DataTable dtSapInventory = SapApi.ZMM_WMS016("5000", dtInventory, out ZMSG);
  335. if (dtSapInventory != null && dtSapInventory.Rows.Count > 0)
  336. {
  337. //dtSapInventory.DefaultView.RowFilter = "LGORT IN('1001','1002','1003','1004','1005','1006')";
  338. //dtSapInventory.TableName = "TMP_ZMM_WMS016";
  339. //CDASqlStrParameter[] cpp = new CDASqlStrParameter[]
  340. //{
  341. // CDASqlStrParameter.ForInsert("WERKS", null, DataType.NVarChar),
  342. // CDASqlStrParameter.ForInsert("MATNR", null, DataType.NVarChar),
  343. // CDASqlStrParameter.ForInsert("LGORT", null, DataType.NVarChar),
  344. // CDASqlStrParameter.ForInsert("CHARG", null, DataType.NVarChar),
  345. // CDASqlStrParameter.ForInsert("LABST", null, DataType.Decimal),
  346. // CDASqlStrParameter.ForInsert("GYSKC", null, DataType.Decimal),
  347. // CDASqlStrParameter.ForInsert("KALAB", null, DataType.Decimal),
  348. // CDASqlStrParameter.ForInsert("KYKC", null, DataType.Decimal),
  349. // CDASqlStrParameter.ForInsert("SPEME", null, DataType.Decimal),
  350. // CDASqlStrParameter.ForInsert("VBELN", null, DataType.NVarChar),
  351. // CDASqlStrParameter.ForInsert("POSNR", null, DataType.Decimal),
  352. // CDASqlStrParameter.ForInsert("SOBKZ", null, DataType.NVarChar),
  353. // CDASqlStrParameter.ForInsert("SSNUM", null, DataType.NVarChar),
  354. // CDASqlStrParameter.ForInsert("WMSNUM", null, DataType.NVarChar),
  355. // CDASqlStrParameter.ForInsert("LIFNR", null, DataType.NVarChar),
  356. // CDASqlStrParameter.ForInsert("SPEME_103", null, DataType.Decimal),
  357. //};
  358. //result = conn.InsertForeach(dtSapInventory, cpp);
  359. StringBuilder tmp_sql = new StringBuilder(" insert all ");
  360. tmp_sql.AppendLine();
  361. foreach (DataRow item in dtSapInventory.Rows)
  362. {
  363. tmp_sql.Append("into tmp_ZMM_WMS016 (WERKS, MATNR, LGORT, CHARG, LABST, GYSKC, KALAB, KYKC, SPEME, VBELN, POSNR, SOBKZ, SSNUM, WMSNUM, LIFNR, SPEME_103) values (");
  364. tmp_sql.Append(GetDbValue(item["WERKS"]));
  365. tmp_sql.Append(",");
  366. tmp_sql.Append(GetDbValue(item["MATNR"]));
  367. tmp_sql.Append(",");
  368. tmp_sql.Append(GetDbValue(item["LGORT"]));
  369. tmp_sql.Append(",");
  370. tmp_sql.Append(GetDbValue(item["CHARG"]));
  371. tmp_sql.Append(",");
  372. tmp_sql.Append(GetDbValue(Convert.ToDecimal(item["LABST"])));
  373. tmp_sql.Append(",");
  374. tmp_sql.Append(GetDbValue(Convert.ToDecimal(item["GYSKC"])));
  375. tmp_sql.Append(",");
  376. tmp_sql.Append(GetDbValue(Convert.ToDecimal(item["KALAB"])));
  377. tmp_sql.Append(",");
  378. tmp_sql.Append(GetDbValue(Convert.ToDecimal(item["KYKC"])));
  379. tmp_sql.Append(",");
  380. tmp_sql.Append(GetDbValue(Convert.ToDecimal(item["SPEME"])));
  381. tmp_sql.Append(",");
  382. tmp_sql.Append(GetDbValue(item["VBELN"]));
  383. tmp_sql.Append(",");
  384. tmp_sql.Append(GetDbValue(Convert.ToDecimal(item["POSNR"])));
  385. tmp_sql.Append(",");
  386. tmp_sql.Append(GetDbValue(item["SOBKZ"]));
  387. tmp_sql.Append(",");
  388. tmp_sql.Append(GetDbValue(item["SSNUM"]));
  389. tmp_sql.Append(",");
  390. tmp_sql.Append(GetDbValue(item["WMSNUM"]));
  391. tmp_sql.Append(",");
  392. tmp_sql.Append(GetDbValue(item["LIFNR"]));
  393. tmp_sql.Append(",");
  394. tmp_sql.Append(GetDbValue(Convert.ToDecimal(item["SPEME_103"])));
  395. tmp_sql.AppendLine(")");
  396. }
  397. tmp_sql.AppendLine("select 1 from dual");
  398. result = conn.ExecuteNonQuery(tmp_sql.ToString());
  399. msg += " 【TMP_ZMM_WMS016】操作成功";
  400. }
  401. }
  402. catch (Exception e)
  403. {
  404. //conn.Rollback();
  405. msg += " 【TMP_ZMM_WMS016】操作失败:" + e.Message;
  406. }
  407. */
  408. try
  409. {
  410. result += conn.ExecuteSPNonQuery("pro_auto_pc_materiaplan_out", new CDAParameter("@in_accountid@", 1), new CDAParameter("@in_autoid@", autoid));
  411. conn.Commit();
  412. msg += " 【pro_auto_pc_materiaplan_out】操作成功";
  413. }
  414. catch (Exception e)
  415. {
  416. conn.Rollback();
  417. msg += " 【pro_auto_pc_materiaplan_out】操作失败:" + e.Message;
  418. }
  419. }
  420. return msg;
  421. }
  422. private static string GetDbValue(object value)
  423. {
  424. if (value == null || value == DBNull.Value)
  425. {
  426. return "null";
  427. }
  428. if (value is string)
  429. {
  430. return "'" + value+ "'";
  431. }
  432. if (value is DateTime)
  433. {
  434. return "'" + (value as DateTime?).Value.ToString("yyyy-MM-dd hh:mm:ss.ssssss") + "'";
  435. }
  436. else
  437. {
  438. return value + "";
  439. }
  440. }
  441. }