纽威
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1022 lines
61 KiB

3 years ago
  1. using ICSSoft.Common;
  2. using ICSSoft.Entity;
  3. using Newtonsoft.Json;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Data;
  7. using System.Data.SqlClient;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace ICSSoft.DataProject
  12. {
  13. /// <summary>
  14. /// 采购入库单
  15. /// </summary>
  16. public class PurchaseReceiveDoc
  17. {
  18. private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  19. private static string connString = System.Configuration.ConfigurationManager.AppSettings["ERPConnStr"];
  20. private static string ERPDB = System.Configuration.ConfigurationManager.AppSettings["ERPDB"];
  21. private static string Type = System.Configuration.ConfigurationManager.AppSettings["Type"];
  22. /// <summary>
  23. /// 获取采购入库单
  24. /// </summary>
  25. /// <param name="infos">传入参数</param>
  26. /// <returns></returns>
  27. public string Get(List<ICSPurchaseReceiveDoc> infos)
  28. {
  29. List<ICSPurchaseReceiveDoc> szJson = new List<ICSPurchaseReceiveDoc>();
  30. DataTable dt = null;
  31. string json = "";
  32. if (infos.Count <= 0)
  33. {
  34. throw new Exception("传送数据为空!");
  35. }
  36. string res = string.Empty;
  37. SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
  38. conn.Open();
  39. SqlTransaction sqlTran = conn.BeginTransaction();
  40. SqlCommand cmd = new SqlCommand();
  41. cmd.Transaction = sqlTran;
  42. cmd.Connection = conn;
  43. try
  44. {
  45. string sql = string.Empty;
  46. foreach (ICSPurchaseReceiveDoc info in infos)
  47. {
  48. if (info.MTime < new DateTime(2000, 01, 01))
  49. throw new Exception("请输入正确的操作时间:" + info.MTime);
  50. sql = @"select a.ID,a.cCode,a.cVenCode,''as cVenName,cWhCode,''as cWhName,cARVCode,cMaker,dnmaketime,cHandler,dVeriDate,
  51. AutoID,irowno,cInvCode,iQuantity,iNum,iUnitCost,iArrsId
  52. FROM RdRecord01 a
  53. LEFT JOIN rdrecords01 b on a.ID=b.ID
  54. INNER JOIN DEPARTMENT C ON A.CDEPCODE=C.CDEPCODE
  55. INNER JOIN VENDOR D ON A.CVENCODE=D.CVENCODE WHERE 1=1";
  56. if (!string.IsNullOrWhiteSpace(info.RCVTCode))
  57. {
  58. sql += " and a.cCode='{0}'";
  59. }
  60. if (!string.IsNullOrWhiteSpace(info.MTime.ToString()))
  61. {
  62. sql += " and ISNULL(a.dnverifytime , ISNULL(a.dnmodifytime , a.dnmaketime ))>='{1}'";
  63. }
  64. if (!string.IsNullOrWhiteSpace(info.User))
  65. {
  66. sql += "and a.CMAKER='{2}'";
  67. }
  68. sql = string.Format(sql, info.RCVTCode, info.MTime, info.User);
  69. dt = DBHelper.SQlReturnData(sql, cmd);
  70. if (dt.Rows.Count <= 0 || dt == null)
  71. throw new Exception("采购入库单:" + info.RCVTCode + ",无信息!");
  72. json = JsonConvert.SerializeObject(dt);
  73. }
  74. cmd.Transaction.Commit();
  75. return json;
  76. }
  77. catch (Exception ex)
  78. {
  79. cmd.Transaction.Rollback();
  80. log.Error(ex.Message);
  81. throw new Exception(ex.Message);
  82. }
  83. finally
  84. {
  85. if (conn.State == ConnectionState.Open)
  86. {
  87. conn.Close();
  88. }
  89. conn.Dispose();
  90. }
  91. }
  92. ///<summary>
  93. //创建采购入库单(采购订单)
  94. ///</summary>
  95. ///<param name="Bills"></param>
  96. ///<returns></returns>
  97. public string CreateRdRecord01sByPO(List<ICSPurchaseReceiveDoc> Bills)
  98. {
  99. string szJson = "";
  100. DataTable dt = null;
  101. decimal iTaxRate = 0;
  102. DateTime time = DateTime.Now;
  103. int num = 0;
  104. foreach (ICSPurchaseReceiveDoc head in Bills)
  105. {
  106. num = head.details.Count();
  107. }
  108. Dictionary<string, int> dic = DBHelper.GetAllCode("" + ERPDB + "", "rd01", "" + num + "");
  109. int iFatherId = Convert.ToInt32(dic["iFatherId"].ToString());
  110. int iChildId = Convert.ToInt32(dic["iChildId"].ToString());
  111. DateTime date = DateTime.Now;
  112. string iBaseCodeLen = DBHelper.GetAllRDCode("24", "" + time + "", "admin");
  113. VouchKey key = new VouchKey();
  114. //int iBaseCodeLen = Convert.ToInt32(dic["iBaseCodeLen"].ToString());
  115. //int cVouchCodeBase = Convert.ToInt32(dic["cVouchCodeBase"].ToString());
  116. List<ICSPOArrive> datas = new List<ICSPOArrive>();
  117. string json = "";
  118. if (Bills.Count <= 0)
  119. {
  120. throw new Exception("传送数据为空!");
  121. }
  122. string res = string.Empty;
  123. SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
  124. conn.Open();
  125. SqlTransaction sqlTran = conn.BeginTransaction();
  126. SqlCommand cmd = new SqlCommand();
  127. cmd.Transaction = sqlTran;
  128. cmd.Connection = conn;
  129. try
  130. {
  131. foreach (ICSPurchaseReceiveDoc head in Bills)
  132. {
  133. if (head.MTime < new DateTime(2000, 01, 01))
  134. throw new Exception("请输入正确的操作时间:" + head.MTime);
  135. string sql = "";
  136. #region 验证入库数量不能大于采购订单数量
  137. // foreach (ICSPurchaseReceiveDocs body in head.details)
  138. // {
  139. // sql = @"SELECT a.iQuantity,a.ID,isnull(a.iReceivedQTY,0) as iReceivedQTY,isnull(a.freceivedqty,0) as freceivedqty,ISNULL(c.fInExcess,0) AS fInExcess
  140. // FROM dbo.PO_Podetails a
  141. // INNER JOIN dbo.PO_Pomain b ON a.POID=b.POID
  142. // LEFT JOIN PU_ArrivalVouch d ON b.cPOID=d.cpocode
  143. // LEFT JOIN dbo.Inventory c ON a.cInvCode=c.cInvCode
  144. // WHERE d.cCode ='" + head.DNCode + "'";
  145. // cmd.CommandText = sql;
  146. // DataTable dtQty = DBHelper.SQlReturnData(sql, cmd);
  147. // if (dtQty != null && dtQty.Rows.Count > 0)
  148. // {
  149. // decimal fInExcess = decimal.Parse(dtQty.Rows[0]["fInExcess"].ToString());//入库超额上限
  150. // decimal PoQty = decimal.Parse(dtQty.Rows[0]["iQuantity"].ToString());
  151. // decimal iReceicedQty = decimal.Parse(dtQty.Rows[0]["iReceivedQTY"].ToString());//累计到货数量
  152. // decimal freceivedqty = decimal.Parse(dtQty.Rows[0]["freceivedqty"].ToString());//合格品入库数量
  153. // PoQty = PoQty * (1 + fInExcess);
  154. // log.Info("PO数量:" + PoQty.ToString()+ "入库超额上限:" + fInExcess.ToString() + ",累计到货数量:" + iReceicedQty.ToString() + ",合格品入库数量:" + freceivedqty.ToString());
  155. // //2021-11-05 回写字段变更,见行408
  156. // //decimal to = PoQty - iReceicedQty - freceivedqty;
  157. // decimal to = PoQty - freceivedqty;
  158. // if (body.Quantity > to)
  159. // {
  160. // throw new Exception("入库数量" + body.Quantity.ToString("f3") + "大于采购订单可入库数量" + to.ToString("f3")
  161. // );
  162. // }
  163. // }
  164. // }
  165. #endregion
  166. #region 采购入库单表头
  167. string BusType = "";//业务类型
  168. sql = @"select a.POID,a.cPOID,a.cVenCode,a.cDepCode,a.cexch_name,a.iTaxRate,a.cMaker,
  169. a.nflat,a.cPersonCode,a.cptcode ,b.ID,b.cCode,a.cBusType
  170. FROM dbo.PO_Pomain a
  171. LEFT JOIN PU_ArrivalVouch b ON a.cPOID=b.cpocode
  172. WHERE a.cPOID ='" + head.DNCode + "'";
  173. cmd.CommandText = sql;
  174. DataTable dtPOMain = DBHelper.SQlReturnData(sql, cmd);
  175. if (dtPOMain != null && dtPOMain.Rows.Count > 0)
  176. {
  177. string cSource="";
  178. string cCode="";
  179. int bredvouch = 0;
  180. string cRdCode="";
  181. string WHCode="";
  182. BusType = dtPOMain.Rows[0]["cBusType"].ToString();
  183. //校验采购订单类型是固定资产仓库
  184. if (BusType.Equals("固定资产"))
  185. {
  186. string sqlwh = @"SELECT bWhAsset FROM Warehouse WHERE cWhCode='" + head.WHCode + "'";
  187. cmd.CommandText = sqlwh;
  188. DataTable dtwhcode = DBHelper.SQlReturnData(sqlwh, cmd);
  189. log.Info(dtwhcode.Rows[0]["bWhAsset"].ToString());
  190. if (!dtwhcode.Rows[0]["bWhAsset"].ToString().Equals("True"))
  191. {
  192. throw new Exception("到货单:" + dtPOMain.Rows[0]["cPOID"].ToString() + ",业务类型:固定资产,只能入固定资产仓库!");
  193. }
  194. else
  195. {
  196. WHCode = head.WHCode;
  197. }
  198. }
  199. else
  200. {
  201. WHCode = head.WHCode;
  202. }
  203. cSource = "采购到货单";
  204. cCode = dtPOMain.Rows[0]["cCode"].ToString();
  205. bredvouch = 0;
  206. cRdCode = "200";
  207. sql = @"
  208. INSERT INTO dbo.RdRecord01
  209. (ID ,bRdFlag ,cVouchType ,cBusType ,cSource ,
  210. cWhCode ,dDate ,cCode ,cRdCode ,cDepCode ,
  211. cPersonCode ,cVenCode ,cOrderCode ,cARVCode,
  212. cHandler ,bTransFlag ,cMaker,cDefine1,cDefine2,
  213. dVeriDate ,bpufirst ,biafirst , dARVDate ,VT_ID ,
  214. bIsSTQc ,ipurorderid ,iTaxRate ,iExchRate ,cExch_Name ,
  215. bOMFirst ,bFromPreYear ,bIsComplement ,iDiscountTaxType ,ireturncount ,
  216. iverifystate ,iswfcontrolled ,cModifyPerson ,dnmaketime ,dnverifytime ,
  217. bredvouch ,bCredit ,iPrintCount,ipurarriveid,cPTCode,cVenPUOMProtocol)
  218. SELECT
  219. @ID,1,'01',a.cBusType,@cSource,
  220. @cWhCode,@dDate,@cCode,@cRdCode,@cDepCode,
  221. @cPersonCode,a.cVenCode,a.cPOID,@cARVCode,
  222. @cHandler,0,@cMaker,a.cDefine1,a.cDefine2,
  223. @cVeriDate,0,0,@dARVDate,@VT_ID,
  224. 0,@ipurorderid,a.iTaxRate,a.nflat,a.cexch_name,
  225. 0,0,0,0,0,
  226. 0,0,'',@dnmakertime,@dnverifytime,
  227. @bredvouch,0,0,@ipurarriveid,a.cPTCode,a.cPayCode
  228. FROM dbo.PO_Pomain a
  229. --LEFT JOIN PU_ArrivalVouch b ON a.cPOID=b.cpocode
  230. WHERE a.cPOID ='" + head.DNCode + "'";
  231. cmd.Parameters.Clear();
  232. cmd.Parameters.Add(new SqlParameter("@ID",iFatherId));
  233. cmd.Parameters.Add(new SqlParameter("@cSource",cSource));
  234. cmd.Parameters.Add(new SqlParameter("@cWhCode",iFatherId));
  235. cmd.Parameters.Add(new SqlParameter("@dDate",Convert.ToDateTime(DateTime.Now).ToString("yyyy -MM-dd")));
  236. cmd.Parameters.Add(new SqlParameter("@cCode", iBaseCodeLen));
  237. cmd.Parameters.Add(new SqlParameter("@cDepCode",dtPOMain.Rows[0]["cDepCode"].ToString()));
  238. cmd.Parameters.Add(new SqlParameter("@cPersonCode",dtPOMain.Rows[0]["cPersonCode"].ToString()));
  239. cmd.Parameters.Add(new SqlParameter("@cARVCode",cCode));
  240. cmd.Parameters.Add(new SqlParameter("@cMaker",head.User));
  241. cmd.Parameters.Add(new SqlParameter("@cVeriDate",Convert.ToDateTime(DateTime.Now).ToString("yyyy-MM-dd")));
  242. cmd.Parameters.Add(new SqlParameter("@dARVDate",Convert.ToDateTime(head.MTime)));
  243. cmd.Parameters.Add(new SqlParameter("@VT_ID",iChildId));
  244. cmd.Parameters.Add(new SqlParameter("@ipurorderid",dtPOMain.Rows[0]["POID"].ToString()));
  245. cmd.Parameters.Add(new SqlParameter("@dnmakertime",Convert.ToDateTime(DateTime.Now).ToString()));
  246. cmd.Parameters.Add(new SqlParameter("@dnverifytime",Convert.ToDateTime(DateTime.Now).ToString()));
  247. cmd.Parameters.Add(new SqlParameter("@bredvouch",bredvouch));
  248. cmd.Parameters.Add(new SqlParameter("@ipurarriveid",dtPOMain.Rows[0]["ID"].ToString()));
  249. cmd.Parameters.Add(new SqlParameter("@cHandler",head.User));
  250. cmd.Parameters.Add(new SqlParameter("@cRdCode", cRdCode));
  251. ;
  252. cmd.CommandText = sql;
  253. try
  254. {
  255. int count = cmd.ExecuteNonQuery();
  256. if (count <= 0)
  257. {
  258. log.Error("生成采购入库单表头失败,受影响行数<=0;");
  259. throw new Exception("生成采购入库单表头失败,受影响行数<=0;");
  260. }
  261. }
  262. catch (Exception ex)
  263. {
  264. log.Error("生成采购入库单表头失败!异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
  265. throw new Exception("生成采购入库单表头失败!异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
  266. }
  267. }
  268. else
  269. {
  270. throw new Exception("对应采购订单不存在!采购订单号:" +head.DNCode);
  271. }
  272. #endregion
  273. #region 采购入库单表体
  274. int irowno = 0;
  275. foreach (ICSPurchaseReceiveDocs body in head.details)
  276. {
  277. if (irowno == 0)
  278. {
  279. iChildId = iChildId;
  280. }
  281. else
  282. {
  283. iChildId -= 1;
  284. }
  285. //if (head.IsReturn == "1")
  286. //{
  287. // body.iQuantity = -body.iQuantity;
  288. //}
  289. sql = @"SELECT a.id,a.cInvCode,a.iUnitPrice ,a.iMoney AS 原币无税金额 ,a.ivouchrowno,
  290. a.iTax AS ,a.iSum AS ,a.iNatUnitPrice ,
  291. a.iNatMoney AS ,a.iNatTax AS ,a.iNatSum AS ,
  292. a.iTaxPrice ,a.freceivedqty AS ,a.iPerTaxRate,c.Autoid,d.cCode,d.dDate
  293. FROM dbo.PO_Podetails a
  294. INNER JOIN dbo.PO_Pomain b ON a.POID=b.POID
  295. LEFT JOIN dbo.PU_ArrivalVouchs c ON a.ID=c.iPOsID
  296. LEFT JOIN dbo.PU_ArrivalVouch d ON c.ID=d.ID
  297. where c.AutoID='" + body.DNDetailID + "'";
  298. cmd.CommandText = sql;
  299. DataTable dtPODetails = DBHelper.SQlReturnData(sql, cmd);
  300. decimal iUnitPrice = 0;
  301. decimal iNatUnitPrice = 0;
  302. decimal iTaxPrice = 0;
  303. string id = "";
  304. string code = "";
  305. string dates = "";
  306. if (dtPODetails != null && dtPODetails.Rows.Count > 0)
  307. {
  308. if (!string.IsNullOrEmpty(dtPODetails.Rows[0]["iUnitPrice"].ToString()))
  309. iUnitPrice = decimal.Parse(dtPODetails.Rows[0]["iUnitPrice"].ToString());//原币无税单价
  310. if (!string.IsNullOrEmpty(dtPODetails.Rows[0]["iNatUnitPrice"].ToString()))
  311. iNatUnitPrice = decimal.Parse(dtPODetails.Rows[0]["iNatUnitPrice"].ToString());//本币无税单价
  312. if (!string.IsNullOrEmpty(dtPODetails.Rows[0]["iTaxPrice"].ToString()))
  313. iTaxPrice = decimal.Parse(dtPODetails.Rows[0]["iTaxPrice"].ToString());//原币含税单价
  314. iTaxRate = Convert.ToDecimal(dtPODetails.Rows[0]["iPerTaxRate"]);
  315. if (!string.IsNullOrEmpty(dtPODetails.Rows[0]["Autoid"].ToString()))//采购退货单字体标识
  316. id = dtPODetails.Rows[0]["Autoid"].ToString();
  317. if (!string.IsNullOrEmpty(dtPODetails.Rows[0]["cCode"].ToString()))//采购退货单号
  318. code = dtPODetails.Rows[0]["cCode"].ToString();
  319. if (!string.IsNullOrEmpty(dtPODetails.Rows[0]["dDate"].ToString()))//采购退货单日期
  320. dates = dtPODetails.Rows[0]["dDate"].ToString();
  321. sql = @"INSERT INTO dbo.rdrecords01
  322. (
  323. AutoID ,ID ,cInvCode ,iNum ,iQuantity ,
  324. iUnitCost ,iPrice ,iAPrice ,cBatch ,iFlag ,
  325. dSDate ,iSQuantity ,iSNum ,iMoney ,iPOsID ,
  326. fACost ,iNQuantity ,chVencode ,iOriTaxCost ,iOriCost ,
  327. iOriMoney ,iOriTaxPrice ,ioriSum ,iTaxRate ,iTaxPrice ,
  328. iSum ,bTaxCost ,cPOID ,iMatSettleState ,iBillSettleCount ,
  329. bLPUseFree ,iOriTrackID ,cbaccounter ,dbKeepDate ,bCosting ,
  330. iSumBillQuantity ,bVMIUsed ,iExpiratDateCalcu ,isotype ,irowno,
  331. iArrsId,cbarvcode,dbarvdate
  332. )
  333. select
  334. @AutoID,@ID,@cInvCode,0,@iQuantity,
  335. @iUnitCost,@iPrice,@iAPrice,@cBatch,0,
  336. null,0,0,0,a.ID,
  337. @fACost,@iNQuantity,b.cVenCode,@iOriTaxCost,@iOriCost,
  338. @iOriMoney,@iOriTaxPrice,@ioriSum,@iTaxRate,@iTaxPrice,
  339. @iSum,1,@cPOID,0,0,
  340. 0,0,null,null,d.bInCost,
  341. null,0,0,0,@irowno,
  342. @iArrsId,@cbarvcode,@dbarvdate
  343. FROM dbo.PO_Podetails a
  344. INNER JOIN dbo.PO_Pomain b ON a.POID = b.POID
  345. INNER JOIN dbo.PU_ArrivalVouchs c ON a.ID = c.iPOsID
  346. INNER JOIN dbo.Warehouse d ON d.cWhCode = '{0}'
  347. WHERE a.ID = '{1}'
  348. ";
  349. sql = string.Format(sql, head.WHCode, body.DNDetailID);
  350. cmd.Parameters.Clear();
  351. cmd.Parameters.Add(new SqlParameter("@AutoID", iChildId));
  352. cmd.Parameters.Add(new SqlParameter("@ID", iFatherId));
  353. cmd.Parameters.Add(new SqlParameter("@cInvCode", body.InvCode));
  354. cmd.Parameters.Add(new SqlParameter("@iQuantity", body.Quantity));
  355. cmd.Parameters.Add(new SqlParameter("@iUnitCost", iUnitPrice));
  356. cmd.Parameters.Add(new SqlParameter("@iPrice", Math.Round(body.Quantity * iUnitPrice, 2)));
  357. cmd.Parameters.Add(new SqlParameter("@iAPrice", Math.Round(body.Quantity * iUnitPrice, 2)));
  358. cmd.Parameters.Add(new SqlParameter("@cBatch", ""));
  359. //cmd.Parameters.Add(new SqlParameter("@iSQuantity", 0));
  360. //cmd.Parameters.Add(new SqlParameter("@iMoney", 0));
  361. cmd.Parameters.Add(new SqlParameter("@fACost", iNatUnitPrice));
  362. cmd.Parameters.Add(new SqlParameter("@iNQuantity", body.Quantity));
  363. cmd.Parameters.Add(new SqlParameter("@iOriTaxCost", iTaxPrice));
  364. cmd.Parameters.Add(new SqlParameter("@iOriCost", body.Quantity * iUnitPrice));
  365. cmd.Parameters.Add(new SqlParameter("@iOriMoney", iUnitPrice));
  366. cmd.Parameters.Add(new SqlParameter("@iOriTaxPrice", Math.Round(body.Quantity * iUnitPrice, 2)));
  367. cmd.Parameters.Add(new SqlParameter("@ioriSum", Math.Round(Math.Round(iTaxPrice * body.Quantity, 2) - Math.Round(body.Quantity * iUnitPrice, 2), 2)));
  368. cmd.Parameters.Add(new SqlParameter("@iTaxRate", Math.Round(iTaxPrice * body.Quantity, 2)));
  369. cmd.Parameters.Add(new SqlParameter("@iTaxPrice", iTaxRate));
  370. cmd.Parameters.Add(new SqlParameter("@iSum", Math.Round(Math.Round(iTaxPrice * body.Quantity, 2) - Math.Round(body.Quantity * iUnitPrice, 2), 2)));
  371. cmd.Parameters.Add(new SqlParameter("@irowno",body.Sequence));
  372. cmd.Parameters.Add(new SqlParameter("@cPOID", dtPODetails.Rows[0]["cCode"].ToString()));
  373. cmd.Parameters.Add(new SqlParameter("@iArrsId", id));
  374. cmd.Parameters.Add(new SqlParameter("@cbarvcode", code));
  375. cmd.Parameters.Add(new SqlParameter("@dbarvdate", dates));
  376. cmd.CommandText = sql;
  377. try
  378. {
  379. int count = cmd.ExecuteNonQuery();
  380. if (count <= 0)
  381. {
  382. log.Error("生成采购入库单表体失败,受影响行数<=0;");
  383. throw new Exception("生成采购入库单表体失败,受影响行数<=0;");
  384. }
  385. }
  386. catch (Exception ex)
  387. {
  388. log.Error("生成采购入库单表体失败!异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
  389. throw new Exception("生成采购入库单表体失败!异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
  390. }
  391. #region 更新[采购到货单子表]PU_ArrivalVouchs 合格品入库数量20211019
  392. sql = @"UPDATE PU_ArrivalVouchs SET fValidInQuan=ISNULL(fValidInQuan,0)+@iQty WHERE Autoid=@Autoid";
  393. cmd.CommandText = sql;
  394. cmd.Parameters.Clear();
  395. cmd.Parameters.Add(new SqlParameter("@iQty", body.Quantity));
  396. cmd.Parameters.Add(new SqlParameter("@Autoid", body.DNDetailID));
  397. try
  398. {
  399. log.Info("PU_Autoid:" + body.DNDetailID);
  400. cmd.ExecuteNonQuery();
  401. }
  402. catch (Exception ex)
  403. {
  404. log.Error("回写采购到货单子表合格品入库数量失败:Autoid:" + body.DNDetailID + ";异常:" + ex.Message);
  405. throw new Exception("程序异常,请联系开发人员!");
  406. }
  407. #endregion
  408. #region 更新[采购订单子表]PO_PODetails累计到货数量和累计到货金额
  409. //sql = @"Update a set iReceivedQTY =isnull(iReceivedQTY ,0)+ @iQty,iReceivedMoney=isnull(iReceivedMoney,0)+@iMoney FROM dbo.PO_Podetails a where a.ID='" + body.iPOsID + "'";
  410. sql = @"
  411. Update a set
  412. iReceivedMoney=isnull(iReceivedMoney,0)+@iMoney
  413. ,freceivedqty=isnull(freceivedqty ,0)+ @iQty
  414. FROM dbo.PO_Podetails a where a.ID=@ID"
  415. ;
  416. //2021-11-05
  417. //1.移除 iReceivedQTY =isnull(iReceivedQTY ,0)+ @iQty 由采购到货,创建到货单CreatePU时写入iReceivedQTY,此处不再回写,累计到货数量
  418. //2.加入 freceivedqty =isnull(freceivedqty ,0) + @iQty 合格品入库数量
  419. cmd.CommandText = sql;
  420. cmd.Parameters.Clear();
  421. cmd.Parameters.Add(new SqlParameter("@iQty", body.Quantity));
  422. cmd.Parameters.Add(new SqlParameter("@iMoney", body.Quantity * iUnitPrice));
  423. cmd.Parameters.Add(new SqlParameter("@ID", body.DNDetailID));
  424. try
  425. {
  426. log.Info("iPOsID:" + body.DNDetailID);
  427. cmd.ExecuteNonQuery();
  428. }
  429. catch (Exception ex)
  430. {
  431. log.Error("回写采购订单累计到货数量和累计到货金额失败:采购订单表体行号:" + body.DNDetailID + ";异常:" + ex.Message);
  432. throw new Exception("程序异常,请联系开发人员!");
  433. }
  434. #endregion
  435. //更新现存量
  436. key.cBustypeUN = "普通采购";
  437. key.cVouchTypeUN = "01";
  438. key.TableName = "IA_ST_UnAccountVouch01";
  439. DBHelper.UpdateCurrentStock(cmd, body.InvCode, head.WHCode, body.InvCode, body.Quantity, key);
  440. }
  441. ////更新主键ID,DID
  442. //DBHelper.UpdateIDandDID("rd", head.list.Count(), cmd);
  443. }
  444. #endregion
  445. #region 判断现存量是否超入库
  446. sql = @"IF EXISTS(SELECT ID FROM dbo.PO_Podetails WHERE isnull(ireceivedqty,0)+isnull(freceivedqty,0)>iQuantity AND ID>'1000043932')
  447. BEGIN
  448. DECLARE @MSG NVARCHAR(100)
  449. SELECT @MSG='ERP入库数量不能大于订单数量ID'+CAST(ID AS NVARCHAR(100)) FROM dbo.PO_Podetails WHERE isnull(ireceivedqty,0)+isnull(freceivedqty,0)>iQuantity AND ID>'1000043932'
  450. RAISERROR(@MSG,16,1)
  451. END";
  452. cmd.CommandText = sql;
  453. #region 查询
  454. cmd.Transaction.Commit();
  455. sql = @"select a.ID,a.cCode,a.cVenCode,''as cVenName,cWhCode,''as cWhName,cARVCode,cMaker,dnmaketime,cHandler,dVeriDate,
  456. AutoID,irowno,cInvCode,iQuantity,iNum,iUnitCost,iArrsId
  457. FROM RdRecord01 a
  458. LEFT JOIN rdrecords01 b on a.ID=b.ID
  459. INNER JOIN DEPARTMENT C ON A.CDEPCODE=C.CDEPCODE
  460. INNER JOIN VENDOR D ON A.CVENCODE=D.CVENCODE WHERE 1=1 and a.ID='{0}' ";
  461. sql = string.Format(sql, iFatherId);
  462. dt = DBHelper.SQlReturnData(sql, cmd);
  463. #endregion
  464. //GetSerialCode(iFatherId.ToString());
  465. cmd.ExecuteNonQuery();
  466. #endregion
  467. }
  468. szJson = JsonConvert.SerializeObject(dt);
  469. return szJson;
  470. }
  471. catch (Exception ex)
  472. {
  473. cmd.Transaction.Rollback();
  474. log.Error(ex.Message);
  475. throw new Exception(ex.Message);
  476. }
  477. finally
  478. {
  479. if (conn.State == ConnectionState.Open)
  480. {
  481. conn.Close();
  482. }
  483. conn.Dispose();
  484. }
  485. }
  486. ///<summary>
  487. //创建采购入库单(到货单)
  488. ///</summary>
  489. ///<param name="Bills"></param>
  490. ///<returns></returns>
  491. public string CreateRdRecord01sByPOArrive(List<ICSPurchaseReceiveDoc> Bills)
  492. {
  493. string szJson = "";
  494. DataTable dt = null;
  495. decimal iTaxRate = 0;
  496. DateTime time = DateTime.Now;
  497. int num = 0;
  498. foreach (ICSPurchaseReceiveDoc head in Bills)
  499. {
  500. num = head.details.Count();
  501. }
  502. Dictionary<string, int> dic = DBHelper.GetAllCode("" + ERPDB + "", "rd01", "" + num + "");
  503. int iFatherId = Convert.ToInt32(dic["iFatherId"].ToString());
  504. int iChildId = Convert.ToInt32(dic["iChildId"].ToString());
  505. DateTime date = DateTime.Now;
  506. string iBaseCodeLen = DBHelper.GetAllRDCode("24", "" + time + "", "admin");
  507. VouchKey key = new VouchKey();
  508. //int iBaseCodeLen = Convert.ToInt32(dic["iBaseCodeLen"].ToString());
  509. //int cVouchCodeBase = Convert.ToInt32(dic["cVouchCodeBase"].ToString());
  510. List<ICSPOArrive> datas = new List<ICSPOArrive>();
  511. string json = "";
  512. if (Bills.Count <= 0)
  513. {
  514. throw new Exception("传送数据为空!");
  515. }
  516. string res = string.Empty;
  517. SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
  518. conn.Open();
  519. SqlTransaction sqlTran = conn.BeginTransaction();
  520. SqlCommand cmd = new SqlCommand();
  521. cmd.Transaction = sqlTran;
  522. cmd.Connection = conn;
  523. try
  524. {
  525. foreach (ICSPurchaseReceiveDoc head in Bills)
  526. {
  527. if (head.MTime < new DateTime(2000, 01, 01))
  528. throw new Exception("请输入正确的操作时间:" + head.MTime);
  529. string sql = "";
  530. #region 验证入库数量不能大于采购订单数量
  531. // foreach (ICSPurchaseReceiveDocs body in head.details)
  532. // {
  533. // sql = @"SELECT a.iQuantity,a.ID,isnull(a.iReceivedQTY,0) as iReceivedQTY,isnull(a.freceivedqty,0) as freceivedqty,ISNULL(c.fInExcess,0) AS fInExcess
  534. // FROM dbo.PO_Podetails a
  535. // INNER JOIN dbo.PO_Pomain b ON a.POID=b.POID
  536. // LEFT JOIN PU_ArrivalVouch d ON b.cPOID=d.cpocode
  537. // LEFT JOIN dbo.Inventory c ON a.cInvCode=c.cInvCode
  538. // WHERE d.cCode ='" + head.DNCode + "'";
  539. // cmd.CommandText = sql;
  540. // DataTable dtQty = DBHelper.SQlReturnData(sql, cmd);
  541. // if (dtQty != null && dtQty.Rows.Count > 0)
  542. // {
  543. // decimal fInExcess = decimal.Parse(dtQty.Rows[0]["fInExcess"].ToString());//入库超额上限
  544. // decimal PoQty = decimal.Parse(dtQty.Rows[0]["iQuantity"].ToString());
  545. // decimal iReceicedQty = decimal.Parse(dtQty.Rows[0]["iReceivedQTY"].ToString());//累计到货数量
  546. // decimal freceivedqty = decimal.Parse(dtQty.Rows[0]["freceivedqty"].ToString());//合格品入库数量
  547. // PoQty = PoQty * (1 + fInExcess);
  548. // log.Info("PO数量:" + PoQty.ToString()+ "入库超额上限:" + fInExcess.ToString() + ",累计到货数量:" + iReceicedQty.ToString() + ",合格品入库数量:" + freceivedqty.ToString());
  549. // //2021-11-05 回写字段变更,见行408
  550. // //decimal to = PoQty - iReceicedQty - freceivedqty;
  551. // decimal to = PoQty - freceivedqty;
  552. // if (body.Quantity > to)
  553. // {
  554. // throw new Exception("入库数量" + body.Quantity.ToString("f3") + "大于采购订单可入库数量" + to.ToString("f3")
  555. // );
  556. // }
  557. // }
  558. // }
  559. #endregion
  560. #region 采购入库单表头
  561. string BusType = "";//业务类型
  562. sql = @"select a.POID,a.cPOID,a.cVenCode,a.cDepCode,a.cexch_name,a.iTaxRate,a.cMaker,
  563. a.nflat,a.cPersonCode,a.cptcode ,b.ID,b.cCode,a.cBusType
  564. FROM dbo.PO_Pomain a
  565. LEFT JOIN PU_ArrivalVouch b ON a.cPOID=b.cpocode
  566. WHERE b.cCode ='" + head.DNCode + "'";
  567. cmd.CommandText = sql;
  568. DataTable dtPOMain = DBHelper.SQlReturnData(sql, cmd);
  569. if (dtPOMain != null && dtPOMain.Rows.Count > 0)
  570. {
  571. string cSource = "";
  572. string cCode = "";
  573. int bredvouch = 0;
  574. string cRdCode = "";
  575. string WHCode = "";
  576. BusType = dtPOMain.Rows[0]["cBusType"].ToString();
  577. //校验采购订单类型是固定资产仓库
  578. if (BusType.Equals("固定资产"))
  579. {
  580. string sqlwh = @"SELECT bWhAsset FROM Warehouse WHERE cWhCode='" + head.WHCode + "'";
  581. cmd.CommandText = sqlwh;
  582. DataTable dtwhcode = DBHelper.SQlReturnData(sqlwh, cmd);
  583. log.Info(dtwhcode.Rows[0]["bWhAsset"].ToString());
  584. if (!dtwhcode.Rows[0]["bWhAsset"].ToString().Equals("True"))
  585. {
  586. throw new Exception("到货单:" + dtPOMain.Rows[0]["cPOID"].ToString() + ",业务类型:固定资产,只能入固定资产仓库!");
  587. }
  588. else
  589. {
  590. WHCode = head.WHCode;
  591. }
  592. }
  593. else
  594. {
  595. WHCode = head.WHCode;
  596. }
  597. cSource = "采购到货单";
  598. cCode = dtPOMain.Rows[0]["cCode"].ToString();
  599. bredvouch = 0;
  600. cRdCode = "200";
  601. sql = @"
  602. INSERT INTO dbo.RdRecord01
  603. (ID ,bRdFlag ,cVouchType ,cBusType ,cSource ,
  604. cWhCode ,dDate ,cCode ,cRdCode ,cDepCode ,
  605. cPersonCode ,cVenCode ,cOrderCode ,cARVCode,
  606. cHandler ,bTransFlag ,cMaker,cDefine1,cDefine2,
  607. dVeriDate ,bpufirst ,biafirst , dARVDate ,VT_ID ,
  608. bIsSTQc ,ipurorderid ,iTaxRate ,iExchRate ,cExch_Name ,
  609. bOMFirst ,bFromPreYear ,bIsComplement ,iDiscountTaxType ,ireturncount ,
  610. iverifystate ,iswfcontrolled ,cModifyPerson ,dnmaketime ,dnverifytime ,
  611. bredvouch ,bCredit ,iPrintCount,ipurarriveid,cPTCode,cVenPUOMProtocol)
  612. SELECT
  613. @ID,1,'01',a.cBusType,@cSource,
  614. @cWhCode,@dDate,@cCode,@cRdCode,@cDepCode,
  615. @cPersonCode,a.cVenCode,a.cPOID,@cARVCode,
  616. @cHandler,0,@cMaker,a.cDefine1,a.cDefine2,
  617. @cVeriDate,0,0,@dARVDate,@VT_ID,
  618. 0,@ipurorderid,a.iTaxRate,a.nflat,a.cexch_name,
  619. 0,0,0,0,0,
  620. 0,0,'',@dnmakertime,@dnverifytime,
  621. @bredvouch,0,0,@ipurarriveid,a.cPTCode,a.cPayCode
  622. FROM dbo.PO_Pomain a
  623. LEFT JOIN PU_ArrivalVouch b ON a.cPOID=b.cpocode
  624. WHERE b.cCode ='" + head.DNCode + "'";
  625. cmd.Parameters.Clear();
  626. cmd.Parameters.Add(new SqlParameter("@ID", iFatherId));
  627. cmd.Parameters.Add(new SqlParameter("@cSource", cSource));
  628. cmd.Parameters.Add(new SqlParameter("@cWhCode", iFatherId));
  629. cmd.Parameters.Add(new SqlParameter("@dDate", Convert.ToDateTime(DateTime.Now).ToString("yyyy -MM-dd")));
  630. cmd.Parameters.Add(new SqlParameter("@cCode", iBaseCodeLen));
  631. cmd.Parameters.Add(new SqlParameter("@cDepCode", dtPOMain.Rows[0]["cDepCode"].ToString()));
  632. cmd.Parameters.Add(new SqlParameter("@cPersonCode", dtPOMain.Rows[0]["cPersonCode"].ToString()));
  633. cmd.Parameters.Add(new SqlParameter("@cARVCode", cCode));
  634. cmd.Parameters.Add(new SqlParameter("@cMaker", head.User));
  635. cmd.Parameters.Add(new SqlParameter("@cVeriDate", Convert.ToDateTime(DateTime.Now).ToString("yyyy-MM-dd")));
  636. cmd.Parameters.Add(new SqlParameter("@dARVDate", Convert.ToDateTime(head.MTime)));
  637. cmd.Parameters.Add(new SqlParameter("@VT_ID", iChildId));
  638. cmd.Parameters.Add(new SqlParameter("@ipurorderid", dtPOMain.Rows[0]["POID"].ToString()));
  639. cmd.Parameters.Add(new SqlParameter("@dnmakertime", Convert.ToDateTime(DateTime.Now).ToString()));
  640. cmd.Parameters.Add(new SqlParameter("@dnverifytime", Convert.ToDateTime(DateTime.Now).ToString()));
  641. cmd.Parameters.Add(new SqlParameter("@bredvouch", bredvouch));
  642. cmd.Parameters.Add(new SqlParameter("@ipurarriveid", dtPOMain.Rows[0]["ID"].ToString()));
  643. cmd.Parameters.Add(new SqlParameter("@cHandler", head.User));
  644. cmd.Parameters.Add(new SqlParameter("@cRdCode", cRdCode));
  645. ;
  646. cmd.CommandText = sql;
  647. try
  648. {
  649. int count = cmd.ExecuteNonQuery();
  650. if (count <= 0)
  651. {
  652. log.Error("生成采购入库单表头失败,受影响行数<=0;");
  653. throw new Exception("生成采购入库单表头失败,受影响行数<=0;");
  654. }
  655. }
  656. catch (Exception ex)
  657. {
  658. log.Error("生成采购入库单表头失败!异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
  659. throw new Exception("生成采购入库单表头失败!异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
  660. }
  661. }
  662. else
  663. {
  664. throw new Exception("对应采购订单不存在!采购订单号:" + head.DNCode);
  665. }
  666. #endregion
  667. #region 采购入库单表体
  668. int irowno = 0;
  669. foreach (ICSPurchaseReceiveDocs body in head.details)
  670. {
  671. if (irowno == 0)
  672. {
  673. iChildId = iChildId;
  674. }
  675. else
  676. {
  677. iChildId -= 1;
  678. }
  679. //if (head.IsReturn == "1")
  680. //{
  681. // body.iQuantity = -body.iQuantity;
  682. //}
  683. sql = @"SELECT a.id,a.cInvCode,a.iUnitPrice ,a.iMoney AS 原币无税金额 ,a.ivouchrowno,
  684. a.iTax AS ,a.iSum AS ,a.iNatUnitPrice ,
  685. a.iNatMoney AS ,a.iNatTax AS ,a.iNatSum AS ,
  686. a.iTaxPrice ,a.freceivedqty AS ,a.iPerTaxRate,c.Autoid,d.cCode,d.dDate
  687. FROM dbo.PO_Podetails a
  688. INNER JOIN dbo.PO_Pomain b ON a.POID=b.POID
  689. LEFT JOIN dbo.PU_ArrivalVouchs c ON a.ID=c.iPOsID
  690. LEFT JOIN dbo.PU_ArrivalVouch d ON c.ID=d.ID
  691. where c.AutoID='" + body.DNDetailID + "'";
  692. cmd.CommandText = sql;
  693. DataTable dtPODetails = DBHelper.SQlReturnData(sql, cmd);
  694. decimal iUnitPrice = 0;
  695. decimal iNatUnitPrice = 0;
  696. decimal iTaxPrice = 0;
  697. string id = "";
  698. string code = "";
  699. string dates = "";
  700. if (dtPODetails != null && dtPODetails.Rows.Count > 0)
  701. {
  702. if (!string.IsNullOrEmpty(dtPODetails.Rows[0]["iUnitPrice"].ToString()))
  703. iUnitPrice = decimal.Parse(dtPODetails.Rows[0]["iUnitPrice"].ToString());//原币无税单价
  704. if (!string.IsNullOrEmpty(dtPODetails.Rows[0]["iNatUnitPrice"].ToString()))
  705. iNatUnitPrice = decimal.Parse(dtPODetails.Rows[0]["iNatUnitPrice"].ToString());//本币无税单价
  706. if (!string.IsNullOrEmpty(dtPODetails.Rows[0]["iTaxPrice"].ToString()))
  707. iTaxPrice = decimal.Parse(dtPODetails.Rows[0]["iTaxPrice"].ToString());//原币含税单价
  708. iTaxRate = Convert.ToDecimal(dtPODetails.Rows[0]["iPerTaxRate"]);
  709. if (!string.IsNullOrEmpty(dtPODetails.Rows[0]["Autoid"].ToString()))//采购退货单字体标识
  710. id = dtPODetails.Rows[0]["Autoid"].ToString();
  711. if (!string.IsNullOrEmpty(dtPODetails.Rows[0]["cCode"].ToString()))//采购退货单号
  712. code = dtPODetails.Rows[0]["cCode"].ToString();
  713. if (!string.IsNullOrEmpty(dtPODetails.Rows[0]["dDate"].ToString()))//采购退货单日期
  714. dates = dtPODetails.Rows[0]["dDate"].ToString();
  715. sql = @"INSERT INTO dbo.rdrecords01
  716. (
  717. AutoID ,ID ,cInvCode ,iNum ,iQuantity ,
  718. iUnitCost ,iPrice ,iAPrice ,cBatch ,iFlag ,
  719. dSDate ,iSQuantity ,iSNum ,iMoney ,iPOsID ,
  720. fACost ,iNQuantity ,chVencode ,iOriTaxCost ,iOriCost ,
  721. iOriMoney ,iOriTaxPrice ,ioriSum ,iTaxRate ,iTaxPrice ,
  722. iSum ,bTaxCost ,cPOID ,iMatSettleState ,iBillSettleCount ,
  723. bLPUseFree ,iOriTrackID ,cbaccounter ,dbKeepDate ,bCosting ,
  724. iSumBillQuantity ,bVMIUsed ,iExpiratDateCalcu ,isotype ,irowno,
  725. iArrsId,cbarvcode,dbarvdate
  726. )
  727. select
  728. @AutoID,@ID,@cInvCode,0,@iQuantity,
  729. @iUnitCost,@iPrice,@iAPrice,@cBatch,0,
  730. null,0,0,0,a.ID,
  731. @fACost,@iNQuantity,b.cVenCode,@iOriTaxCost,@iOriCost,
  732. @iOriMoney,@iOriTaxPrice,@ioriSum,@iTaxRate,@iTaxPrice,
  733. @iSum,1,@cPOID,0,0,
  734. 0,0,null,null,d.bInCost,
  735. null,0,0,0,@irowno,
  736. @iArrsId,@cbarvcode,@dbarvdate
  737. FROM dbo.PO_Podetails a
  738. INNER JOIN dbo.PO_Pomain b ON a.POID = b.POID
  739. INNER JOIN dbo.PU_ArrivalVouchs c ON a.ID = c.iPOsID
  740. INNER JOIN dbo.Warehouse d ON d.cWhCode = '{0}'
  741. WHERE c.Autoid = '{1}'
  742. ";
  743. sql = string.Format(sql, head.WHCode, body.DNDetailID);
  744. cmd.Parameters.Clear();
  745. cmd.Parameters.Add(new SqlParameter("@AutoID", iChildId));
  746. cmd.Parameters.Add(new SqlParameter("@ID", iFatherId));
  747. cmd.Parameters.Add(new SqlParameter("@cInvCode", body.InvCode));
  748. cmd.Parameters.Add(new SqlParameter("@iQuantity", body.Quantity));
  749. cmd.Parameters.Add(new SqlParameter("@iUnitCost", iUnitPrice));
  750. cmd.Parameters.Add(new SqlParameter("@iPrice", Math.Round(body.Quantity * iUnitPrice, 2)));
  751. cmd.Parameters.Add(new SqlParameter("@iAPrice", Math.Round(body.Quantity * iUnitPrice, 2)));
  752. cmd.Parameters.Add(new SqlParameter("@cBatch", ""));
  753. //cmd.Parameters.Add(new SqlParameter("@iSQuantity", 0));
  754. //cmd.Parameters.Add(new SqlParameter("@iMoney", 0));
  755. cmd.Parameters.Add(new SqlParameter("@fACost", iNatUnitPrice));
  756. cmd.Parameters.Add(new SqlParameter("@iNQuantity", body.Quantity));
  757. cmd.Parameters.Add(new SqlParameter("@iOriTaxCost", iTaxPrice));
  758. cmd.Parameters.Add(new SqlParameter("@iOriCost", body.Quantity * iUnitPrice));
  759. cmd.Parameters.Add(new SqlParameter("@iOriMoney", iUnitPrice));
  760. cmd.Parameters.Add(new SqlParameter("@iOriTaxPrice", Math.Round(body.Quantity * iUnitPrice, 2)));
  761. cmd.Parameters.Add(new SqlParameter("@ioriSum", Math.Round(Math.Round(iTaxPrice * body.Quantity, 2) - Math.Round(body.Quantity * iUnitPrice, 2), 2)));
  762. cmd.Parameters.Add(new SqlParameter("@iTaxRate", Math.Round(iTaxPrice * body.Quantity, 2)));
  763. cmd.Parameters.Add(new SqlParameter("@iTaxPrice", iTaxRate));
  764. cmd.Parameters.Add(new SqlParameter("@iSum", Math.Round(Math.Round(iTaxPrice * body.Quantity, 2) - Math.Round(body.Quantity * iUnitPrice, 2), 2)));
  765. cmd.Parameters.Add(new SqlParameter("@irowno", body.Sequence));
  766. cmd.Parameters.Add(new SqlParameter("@cPOID", dtPODetails.Rows[0]["cCode"].ToString()));
  767. cmd.Parameters.Add(new SqlParameter("@iArrsId", id));
  768. cmd.Parameters.Add(new SqlParameter("@cbarvcode", code));
  769. cmd.Parameters.Add(new SqlParameter("@dbarvdate", dates));
  770. cmd.CommandText = sql;
  771. try
  772. {
  773. int count = cmd.ExecuteNonQuery();
  774. if (count <= 0)
  775. {
  776. log.Error("生成采购入库单表体失败,受影响行数<=0;");
  777. throw new Exception("生成采购入库单表体失败,受影响行数<=0;");
  778. }
  779. }
  780. catch (Exception ex)
  781. {
  782. log.Error("生成采购入库单表体失败!异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
  783. throw new Exception("生成采购入库单表体失败!异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
  784. }
  785. #region 更新[采购到货单子表]PU_ArrivalVouchs 合格品入库数量20211019
  786. sql = @"UPDATE PU_ArrivalVouchs SET fValidInQuan=ISNULL(fValidInQuan,0)+@iQty WHERE Autoid=@Autoid";
  787. cmd.CommandText = sql;
  788. cmd.Parameters.Clear();
  789. cmd.Parameters.Add(new SqlParameter("@iQty", body.Quantity));
  790. cmd.Parameters.Add(new SqlParameter("@Autoid", body.DNDetailID));
  791. try
  792. {
  793. log.Info("PU_Autoid:" + body.DNDetailID);
  794. cmd.ExecuteNonQuery();
  795. }
  796. catch (Exception ex)
  797. {
  798. log.Error("回写采购到货单子表合格品入库数量失败:Autoid:" + body.DNDetailID + ";异常:" + ex.Message);
  799. throw new Exception("程序异常,请联系开发人员!");
  800. }
  801. #endregion
  802. #region 更新[采购订单子表]PO_PODetails累计到货数量和累计到货金额
  803. // //sql = @"Update a set iReceivedQTY =isnull(iReceivedQTY ,0)+ @iQty,iReceivedMoney=isnull(iReceivedMoney,0)+@iMoney FROM dbo.PO_Podetails a where a.ID='" + body.iPOsID + "'";
  804. // sql = @"
  805. // Update a set
  806. // iReceivedMoney=isnull(iReceivedMoney,0)+@iMoney
  807. // ,freceivedqty=isnull(freceivedqty ,0)+ @iQty
  808. // FROM dbo.PO_Podetails a where a.ID=@ID"
  809. // ;
  810. // //2021-11-05
  811. // //1.移除 iReceivedQTY =isnull(iReceivedQTY ,0)+ @iQty 由采购到货,创建到货单CreatePU时写入iReceivedQTY,此处不再回写,累计到货数量
  812. // //2.加入 freceivedqty =isnull(freceivedqty ,0) + @iQty 合格品入库数量
  813. // cmd.CommandText = sql;
  814. // cmd.Parameters.Clear();
  815. // cmd.Parameters.Add(new SqlParameter("@iQty", body.Quantity));
  816. // cmd.Parameters.Add(new SqlParameter("@iMoney", body.Quantity * iUnitPrice));
  817. // cmd.Parameters.Add(new SqlParameter("@ID", body.DNDetailID));
  818. // try
  819. // {
  820. // log.Info("iPOsID:" + body.DNDetailID);
  821. // cmd.ExecuteNonQuery();
  822. // }
  823. // catch (Exception ex)
  824. // {
  825. // log.Error("回写采购订单累计到货数量和累计到货金额失败:采购订单表体行号:" + body.DNDetailID + ";异常:" + ex.Message);
  826. // throw new Exception("程序异常,请联系开发人员!");
  827. // }
  828. #endregion
  829. //更新现存量
  830. key.cBustypeUN = "普通采购";
  831. key.cVouchTypeUN = "01";
  832. key.TableName = "IA_ST_UnAccountVouch01";
  833. DBHelper.UpdateCurrentStock(cmd, body.InvCode, head.WHCode, body.InvCode, body.Quantity, key);
  834. }
  835. ////更新主键ID,DID
  836. //DBHelper.UpdateIDandDID("rd", head.list.Count(), cmd);
  837. }
  838. #endregion
  839. #region 判断现存量是否超入库
  840. sql = @"IF EXISTS(SELECT ID FROM dbo.PO_Podetails WHERE isnull(ireceivedqty,0)+isnull(freceivedqty,0)>iQuantity AND ID>'1000043932')
  841. BEGIN
  842. DECLARE @MSG NVARCHAR(100)
  843. SELECT @MSG='ERP入库数量不能大于订单数量ID'+CAST(ID AS NVARCHAR(100)) FROM dbo.PO_Podetails WHERE isnull(ireceivedqty,0)+isnull(freceivedqty,0)>iQuantity AND ID>'1000043932'
  844. RAISERROR(@MSG,16,1)
  845. END";
  846. cmd.CommandText = sql;
  847. #region 查询
  848. cmd.Transaction.Commit();
  849. sql = @"select a.ID,a.cCode,a.cVenCode,''as cVenName,cWhCode,''as cWhName,cARVCode,cMaker,dnmaketime,cHandler,dVeriDate,
  850. AutoID,irowno,cInvCode,iQuantity,iNum,iUnitCost,iArrsId
  851. FROM RdRecord01 a
  852. LEFT JOIN rdrecords01 b on a.ID=b.ID
  853. INNER JOIN DEPARTMENT C ON A.CDEPCODE=C.CDEPCODE
  854. INNER JOIN VENDOR D ON A.CVENCODE=D.CVENCODE WHERE 1=1 and a.ID='{0}' ";
  855. sql = string.Format(sql, iFatherId);
  856. dt = DBHelper.SQlReturnData(sql, cmd);
  857. #endregion
  858. //GetSerialCode(iFatherId.ToString());
  859. cmd.ExecuteNonQuery();
  860. #endregion
  861. }
  862. szJson = JsonConvert.SerializeObject(dt);
  863. return szJson;
  864. }
  865. catch (Exception ex)
  866. {
  867. cmd.Transaction.Rollback();
  868. log.Error(ex.Message);
  869. throw new Exception(ex.Message);
  870. }
  871. finally
  872. {
  873. if (conn.State == ConnectionState.Open)
  874. {
  875. conn.Close();
  876. }
  877. conn.Dispose();
  878. }
  879. }
  880. /// <summary>
  881. /// 审核采购入库单
  882. /// </summary>
  883. /// <param name="infos"></param>
  884. /// <returns></returns>
  885. public string Approve(List<ICSPurchaseReceiveDoc> infos)
  886. {
  887. List<ICSPurchaseReceiveDoc> szJson = new List<ICSPurchaseReceiveDoc>();
  888. DataTable dt = null;
  889. string json = "";
  890. if (infos.Count <= 0)
  891. {
  892. throw new Exception("传送数据为空!");
  893. }
  894. string res = string.Empty;
  895. SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
  896. conn.Open();
  897. SqlTransaction sqlTran = conn.BeginTransaction();
  898. SqlCommand cmd = new SqlCommand();
  899. cmd.Transaction = sqlTran;
  900. cmd.Connection = conn;
  901. try
  902. {
  903. string sql = string.Empty;
  904. foreach (ICSPurchaseReceiveDoc info in infos)
  905. {
  906. if (info.MTime < new DateTime(2000, 01, 01))
  907. throw new Exception("请输入正确的操作时间:" + info.MTime);
  908. sql = @"UPDATE [{0}].dbo.RdRecord01 SET cVerifier ='" + info.User + @"' ,
  909. cAuditTime=CONVERT(VARCHAR(50),GETDATE(),112),cAuditDate=GETDATE() WHERE ID='" + info.ID + "'";
  910. sql = string.Format(sql, ERPDB);
  911. DBHelper.CmdExecuteNonQuery(sql, cmd, "未查询到对应数据!");
  912. }
  913. cmd.Transaction.Commit();
  914. return json;
  915. }
  916. catch (Exception ex)
  917. {
  918. cmd.Transaction.Rollback();
  919. log.Error(ex.Message);
  920. throw new Exception(ex.Message);
  921. }
  922. finally
  923. {
  924. if (conn.State == ConnectionState.Open)
  925. {
  926. conn.Close();
  927. }
  928. conn.Dispose();
  929. }
  930. }
  931. /// <summary>
  932. /// 删除采购入库单
  933. /// </summary>
  934. /// <param name="infos"></param>
  935. /// <returns></returns>
  936. public string Delete(List<ICSPurchaseReceiveDoc> infos)
  937. {
  938. List<ICSPurchaseReceiveDoc> szJson = new List<ICSPurchaseReceiveDoc>();
  939. if (infos.Count <= 0)
  940. {
  941. throw new Exception("传送数据为空!");
  942. }
  943. string res = string.Empty;
  944. SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
  945. conn.Open();
  946. SqlTransaction sqlTran = conn.BeginTransaction();
  947. SqlCommand cmd = new SqlCommand();
  948. cmd.Transaction = sqlTran;
  949. cmd.Connection = conn;
  950. try
  951. {
  952. string sql = string.Empty;
  953. foreach (ICSPurchaseReceiveDoc info in infos)
  954. {
  955. if (info.MTime < new DateTime(2000, 01, 01))
  956. throw new Exception("请输入正确的操作时间:" + info.MTime);
  957. sql = @" DELETE [{1}].dbo.RdRecord01 WHERE ID={0}";
  958. sql = string.Format(sql, info.ID, ERPDB);
  959. DBHelper.CmdExecuteNonQuery(sql, cmd, "未查询到对应数据!");
  960. }
  961. cmd.Transaction.Commit();
  962. return res;
  963. ;
  964. }
  965. catch (Exception ex)
  966. {
  967. cmd.Transaction.Rollback();
  968. log.Error(ex.Message);
  969. throw new Exception(ex.Message);
  970. }
  971. finally
  972. {
  973. if (conn.State == ConnectionState.Open)
  974. {
  975. conn.Close();
  976. }
  977. conn.Dispose();
  978. }
  979. }
  980. //public string GetSerialCode(string ID)
  981. //{
  982. // string sql = "EXEC PROC_Update_PO_RdRecord01 '{0}'";
  983. // sql = string.Format(sql, new object[] { ID });
  984. // return DBHelper.ExecuteScalar(CommandType.Text, sql, connString).ToString();
  985. //}
  986. }
  987. }