SapFinishMenge.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using Curtain.DataAccess;
  5. /// <summary>
  6. /// SapFinishMenge 的摘要说明
  7. /// </summary>
  8. public class SapFinishMenge
  9. {
  10. /// <summary>
  11. /// 更新sap订单数量
  12. /// </summary>
  13. /// <param name="today"></param>
  14. /// <returns></returns>
  15. public static string UpdateSapFinishMenge(DateTime today)
  16. {
  17. try
  18. {
  19. int r = 0;
  20. using (IDataAccess conn = DataAccess.Create())
  21. {
  22. string sqlStr = @"
  23. SELECT I.EBELP,
  24. I.EBELN,
  25. I.FINISHMENGE
  26. FROM TP_SAP_ITEM I
  27. INNER JOIN TP_SAP_PLAN P
  28. ON P.EBELP = I.EBELP
  29. AND P.EBELN = I.EBELN
  30. WHERE P.EINDT >= @EINDTFROM@
  31. AND P.EINDT < @EINDTTO@ ";
  32. List<CDAParameter> sqlPara = new List<CDAParameter>();
  33. // 取本月和上月的订单明细
  34. sqlPara.Add(new CDAParameter("EINDTFROM", today.AddDays(1 - today.Day).AddMonths(-1)));
  35. sqlPara.Add(new CDAParameter("EINDTTO", today.AddDays(1 - today.Day).AddMonths(1).AddDays(-1)));
  36. DataTable dt = conn.ExecuteDatatable(sqlStr, sqlPara.ToArray());
  37. // 调SAP接口,查完工数量
  38. if (dt != null && dt.Rows.Count > 0)
  39. {
  40. string sqlUpdate = "update TP_SAP_ITEM t set finishmenge = @finishmenge@ where t.EBELN = @EBELN@ AND t.EBELP = @EBELP@";
  41. List<CDAParameter> sqlParaUpdate = new List<CDAParameter>();
  42. // 提取采购订单编码
  43. List<string> ebelns = new List<string>();
  44. foreach (DataRow row in dt.Rows)
  45. {
  46. if (!ebelns.Contains(row["EBELN"] + ""))
  47. {
  48. ebelns.Add(row["EBELN"] + "");
  49. }
  50. }
  51. // 查完工量
  52. DataTable dtSapOrder = null;
  53. DataTable dtTemp = null;
  54. string ZTYPE;
  55. string ZMSG;
  56. foreach (string ebeln in ebelns)
  57. {
  58. dtTemp = SapApi.ZMMFM_MES_POCX(ebeln, out ZTYPE, out ZMSG);
  59. if (dtSapOrder == null)
  60. {
  61. dtSapOrder = dtTemp;
  62. }
  63. else
  64. {
  65. dtSapOrder.Merge(dtTemp);
  66. }
  67. }
  68. if (dtSapOrder.Rows.Count > 0)
  69. {
  70. DataRow[] drs = null;
  71. foreach (DataRow row in dt.Rows)
  72. {
  73. drs = dtSapOrder.Select("EBELN = '" + row["EBELN"] + "' AND EBELP = '" + row["EBELP"] + "'");
  74. if (drs.Length > 0)
  75. {
  76. decimal z = Convert.ToDecimal(drs[0]["ZYSSL"]);
  77. decimal f = Convert.ToDecimal(row["FINISHMENGE"]);
  78. if (z != f)
  79. {
  80. sqlParaUpdate.Clear();
  81. sqlParaUpdate.Add(new CDAParameter("finishmenge", z));
  82. sqlParaUpdate.Add(new CDAParameter("EBELN", row["EBELN"]));
  83. sqlParaUpdate.Add(new CDAParameter("EBELP", row["EBELP"]));
  84. r += conn.ExecuteNonQuery(sqlUpdate, sqlParaUpdate.ToArray());
  85. }
  86. }
  87. }
  88. }
  89. }
  90. }
  91. return "操作成功:" + r;
  92. }
  93. catch (Exception e)
  94. {
  95. return "操作失败:" + e.Message;
  96. }
  97. }
  98. }