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.

7697 lines
486 KiB

1 week ago
1 week ago
1 week ago
1 week ago
1 week ago
1 week ago
1 week ago
1 week ago
1 week ago
1 month 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.Net.Http;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace ICSSoft.DataProject
  13. {
  14. /// <summary>
  15. /// 使用中
  16. /// 更新库存表、日志表
  17. /// </summary>
  18. public class ICSWareHouseLotInfoService
  19. {
  20. private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  21. /// <summary>
  22. /// 分批
  23. /// </summary>
  24. /// <param name="Identification"></param>
  25. /// <param name="TransCode"></param>
  26. /// <param name="TransSequence"></param>
  27. /// <param name="LotNo"></param>
  28. /// <param name="Quantity"></param>
  29. /// <param name="User"></param>
  30. /// <param name="WorkPoint"></param>
  31. /// <param name="TransType"></param>
  32. /// <param name="BusinessCode"></param>
  33. /// <param name="cmd"></param>
  34. public static void WareHouseLotInfoInBatches(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  35. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID = "")
  36. {
  37. }
  38. /// <summary>
  39. /// 添加库存
  40. /// </summary>
  41. /// <param name="LocationCode"></param>
  42. /// <param name="LotNo"></param>
  43. /// <param name="Quantity"></param>
  44. /// <param name="User"></param>
  45. /// <param name="WorkPoint"></param>
  46. /// <param name="TransType"></param>
  47. /// <param name="BusinessCode"></param>
  48. /// <param name="cmd"></param>
  49. /// <param name="jointLotNo"></param>
  50. public static void WareHouseLotInfoUp(string Identification, string LocationCode, string LotNo, string Quantity, string User, string WorkPoint, string TransType,
  51. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID,string jointLotNo, string TransCode, string TransSequence)
  52. {
  53. try
  54. {
  55. #region 正常入库
  56. ///添加库存(原条码退回,更新库存;新条码直接入库)
  57. //stirng locationcode = "";
  58. string sql = string.Empty;
  59. string locationcode = "";
  60. if (BusinessCode != TransTypeEnum.SalesReturnBack.GetDescription<DBValue>())
  61. {
  62. if (string.IsNullOrWhiteSpace(LogID))
  63. {
  64. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  65. BEGIN
  66. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  67. RETURN
  68. END ";
  69. }
  70. else
  71. {
  72. sql = @"SELECT LocationCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
  73. sql = string.Format(sql, LotNo, WorkPoint);
  74. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  75. if (dt == null || dt.Rows.Count <= 0)
  76. {
  77. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  78. }
  79. locationcode = dt.Rows[0]["LocationCode"].ToString();
  80. }
  81. }
  82. if (BusinessCode == TransTypeEnum.MOStockINByProductNoTrans.GetDescription<DBValue>())
  83. {
  84. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  85. BEGIN
  86. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  87. RETURN
  88. END
  89. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  90. BEGIN
  91. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  92. BEGIN
  93. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  94. From ICSWareHouseLotInfo a
  95. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  96. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  97. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  98. END
  99. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  100. BEGIN
  101. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  102. WHERE LotNo='{0}' AND WorkPoint='{1}'
  103. END
  104. ELSE IF('" + locationcode + @"' != '{4}')
  105. BEGIN
  106. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  107. RETURN
  108. END
  109. END
  110. ELSE
  111. BEGIN
  112. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  113. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  114. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  115. BEGIN
  116. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  117. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  118. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  119. BEGIN
  120. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  121. RETURN
  122. END
  123. END
  124. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  125. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  126. FROM ICSInventoryLot a
  127. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  128. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  129. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  130. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  131. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  132. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  133. END";
  134. }
  135. else if(BusinessCode == TransTypeEnum.CodingInStockIn.GetDescription<DBValue>())
  136. {
  137. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  138. BEGIN
  139. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  140. RETURN
  141. END
  142. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  143. BEGIN
  144. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  145. BEGIN
  146. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  147. From ICSWareHouseLotInfo a
  148. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  149. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  150. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  151. END
  152. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  153. BEGIN
  154. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  155. WHERE LotNo='{0}' AND WorkPoint='{1}'
  156. END
  157. ELSE IF('" + locationcode + @"' != '{4}')
  158. BEGIN
  159. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  160. RETURN
  161. END
  162. END
  163. ELSE
  164. BEGIN
  165. -- IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  166. -- INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  167. -- WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  168. -- BEGIN
  169. -- IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  170. -- INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  171. -- WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  172. -- BEGIN
  173. -- RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  174. -- RETURN
  175. -- END
  176. -- END
  177. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  178. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  179. FROM ICSInventoryLot a
  180. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  181. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  182. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  183. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  184. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  185. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  186. END";
  187. }
  188. else
  189. {
  190. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  191. BEGIN
  192. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  193. RETURN
  194. END
  195. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  196. BEGIN
  197. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  198. BEGIN
  199. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  200. From ICSWareHouseLotInfo a
  201. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  202. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  203. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  204. END
  205. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  206. BEGIN
  207. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  208. WHERE LotNo='{0}' AND WorkPoint='{1}'
  209. END
  210. ELSE IF('" + locationcode + @"' != '{4}')
  211. BEGIN
  212. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  213. RETURN
  214. END
  215. END
  216. ELSE
  217. BEGIN
  218. -- IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  219. -- INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  220. -- WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  221. -- BEGIN
  222. -- IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  223. -- INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  224. -- WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  225. -- BEGIN
  226. -- RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  227. -- RETURN
  228. -- END
  229. -- END
  230. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  231. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  232. FROM ICSInventoryLot a
  233. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  234. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  235. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  236. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  237. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  238. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  239. END";
  240. }
  241. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  242. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  243. {
  244. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  245. }
  246. if (BusinessCode == TransTypeEnum.MOStockINByProductNoTrans.GetDescription<DBValue>())
  247. {
  248. ///添加日志
  249. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  250. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  251. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  252. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  253. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  254. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  255. '','',c.WarehouseCode,c.LocationCode,'{6}',
  256. '','0','{4}','{5}','0','',
  257. '','','',f.F_Account ,f.F_RealName ,
  258. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  259. FROM ICSInventoryLot a
  260. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  261. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  262. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  263. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  264. ";
  265. }
  266. else if (BusinessCode == TransTypeEnum.ReturnDoc.GetDescription<DBValue>()&&!string.IsNullOrEmpty(LogID))
  267. {
  268. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  269. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  270. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  271. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  272. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  273. SELECT NEWID(),'{3}','{8}','{9}',a.LotNo ,a.InvCode ,
  274. '','',c.WarehouseCode,c.LocationCode,'{6}',
  275. '','0','{4}','{5}','0','',
  276. '','','',f.F_Account ,f.F_RealName ,
  277. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  278. FROM ICSInventoryLot a
  279. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  280. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  281. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  282. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  283. ";
  284. }
  285. else if (BusinessCode == TransTypeEnum.CodingInStockIn.GetDescription<DBValue>())
  286. {
  287. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  288. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  289. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  290. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  291. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  292. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  293. '','',c.WarehouseCode,c.LocationCode,'{6}',
  294. '','0','{4}','{5}','0','',
  295. '','','',f.F_Account ,f.F_RealName ,
  296. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  297. FROM ICSInventoryLot a
  298. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  299. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  300. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  301. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  302. ";
  303. }
  304. else
  305. {
  306. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  307. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  308. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  309. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  310. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  311. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  312. '','',c.WarehouseCode,c.LocationCode,'{6}',
  313. '','0','{4}','{5}','0','',
  314. '','','',f.F_Account ,f.F_RealName ,
  315. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  316. FROM ICSInventoryLot a
  317. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  318. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  319. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  320. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  321. ";
  322. }
  323. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID,TransCode,TransSequence);
  324. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  325. {
  326. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  327. }
  328. #endregion
  329. }
  330. catch (Exception)
  331. {
  332. throw;
  333. }
  334. }
  335. /// <summary>
  336. /// 锐腾委外入库倒冲
  337. /// </summary>
  338. /// <param name="LocationCode"></param>
  339. /// <param name="LotNo"></param>
  340. /// <param name="Quantity"></param>
  341. /// <param name="User"></param>
  342. /// <param name="WorkPoint"></param>
  343. /// <param name="TransType"></param>
  344. /// <param name="BusinessCode"></param>
  345. /// <param name="cmd"></param>
  346. /// <param name="jointLotNo"></param>
  347. public static void WareHouseLotInfoBack(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  348. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo, string TransCode, string TransSequence,string InvCode,string WHCode)
  349. {
  350. try
  351. {
  352. string VenCode = string.Empty;
  353. string DisVenCode = string.Empty;
  354. string LocaCode = string.Empty;
  355. string newsql = @"select LotNo,WorkPoint,InvCode,ToWarehouseCode,MUSER,Quantity,TransSequence,TransCode
  356. from ICSWareHouseLotInfoLog
  357. WHERE Identification='{0}' AND BusinessCode='{1}'";
  358. newsql = string.Format(newsql, Identification, BusinessCode);
  359. DataTable dt = DBHelper.SQlReturnData(newsql, cmd);
  360. for (int i = 0; i < dt.Rows.Count; i++)
  361. {
  362. string ssql = @"SELECT a.ODNCode,a.Sequence,a.WorkPoint,a.VenCode
  363. FROM ICSODeliveryNotice a
  364. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.ODNCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  365. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  366. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'";
  367. ssql = string.Format(ssql, dt.Rows[i]["LotNo"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
  368. DataTable ssdt = DBHelper.SQlReturnData(ssql, cmd);
  369. if (ssdt.Rows.Count > 0)
  370. {
  371. DisVenCode = ssdt.Rows[0]["VenCode"].ToString();
  372. }
  373. string cheksql = @"select b.F_ItemCode as VenCode ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_Define1 AS LocationCode
  374. from Sys_SRM_Items a
  375. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  376. where a.F_EnCode='WWLocation' AND b.F_ItemCode='{0}'
  377. ";
  378. cheksql = string.Format(cheksql, DisVenCode);
  379. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  380. if (chekdt.Rows.Count > 0)
  381. {
  382. LocaCode = chekdt.Rows[0]["LocationCode"].ToString();
  383. }
  384. else
  385. {
  386. throw new Exception("委外供应商未维护:" + DisVenCode);
  387. }
  388. #region 委外入库,倒冲
  389. #region sql
  390. string sql = @"-- 1.创建临时表 初始单据数据 maintemp
  391. SELECT
  392. c.ODNCode AS TransCode,
  393. a.OODetailID AS DetailID,
  394. a.InvCode,
  395. b.InvName,
  396. b.InvStd,
  397. '{2}' AS Quantity,
  398. a.Amount,
  399. a.Sequence AS TransSequence,
  400. a.IssueQuantity,
  401. c.Sequence,
  402. inv.InvUnit,
  403. CAST(0 AS DECIMAL(18, 2)) AS LocationQty,
  404. inv.AmountUnit,
  405. a.ExtensionID,
  406. a.WorkPoint,
  407. ext.ProjectCode,
  408. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  409. ext.Version,
  410. ext.Brand,
  411. ext.cFree1,
  412. ext.cFree2,
  413. ext.cFree3,
  414. ext.cFree4,
  415. ext.cFree5,
  416. ext.cFree6,
  417. ext.cFree7,
  418. ext.cFree8,
  419. ext.cFree9,
  420. ext.cFree10
  421. INTO #maintemp
  422. FROM
  423. ICSOOPick a
  424. inner join ICSODeliveryNotice c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  425. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  426. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  427. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  428. INNER JOIN (
  429. SELECT a.ODNCode,a.Sequence,a.WorkPoint
  430. FROM ICSODeliveryNotice a
  431. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.ODNCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  432. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  433. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  434. ) temp ON c.ODNCode=temp.ODNCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  435. WHERE a.invcode='{3}'
  436. GROUP BY c.ODNCode,a.ParentQuantity,a.Quantity,c.Quantity,a.InvCode,b.InvName,b.InvStd,a.WhCode,a.ExtensionID,a.WorkPoint,inv.BatchEnable,a.OODetailID,a.Amount,a.Sequence,a.IssueQuantity,inv.InvName,inv.InvCode,inv.InvUnit,inv.AmountUnit,c.Sequence,
  437. ext.ProjectCode,ext.BatchCode,ext.Version,ext.Brand,ext.cFree1,ext.cFree2,ext.cFree3,ext.cFree4,ext.cFree5,ext.cFree6,ext.cFree7,ext.cFree8,ext.cFree9,ext.cFree10;
  438. select * into #resulttemp from #maintemp
  439. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  440. delete from #resulttemp
  441. -- 2.maintemp barcodetemp
  442. select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp
  443. from ICSWareHouseLotInfo a inner JOIN
  444. (select #maintemp.invcode from #maintemp group by #maintemp.InvCode) b on a.invcode = b.invcode where a.Quantity-a.lockQuantity>0
  445. AND a.WareHouseCode='{4}' and a.LocationCode='{5}'
  446. ORDER BY a.MTIME ASC
  447. -- 3.maintemp ID barcodetemp
  448. BEGIN
  449. DECLARE @transSequence int;--
  450. DECLARE @qty int;--
  451. DECLARE @needqty decimal(10, 2);--
  452. DECLARE @lotno VARCHAR(50);--
  453. DECLARE @DetailID VARCHAR(50);--ID
  454. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  455. OPEN tempCursor; --
  456. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  457. WHILE @@fetch_status=0
  458. BEGIN
  459. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  460. PRINT @transSequence
  461. WHILE @needqty>0
  462. BEGIN
  463. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  464. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  465. BEGIN
  466. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  467. BEGIN
  468. insert INTO #resulttemp (LotNo,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  469. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  470. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  471. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  472. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  473. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  474. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  475. delete from #barcodetemp where lotno = @lotno
  476. SET @needqty=@needqty-@qty
  477. END
  478. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  479. BEGIN
  480. insert INTO #resulttemp (LotNo,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  481. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  482. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  483. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  484. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  485. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  486. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  487. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  488. SET @needqty=@needqty-@qty
  489. END
  490. ELSE
  491. BEGIN
  492. insert INTO #resulttemp (LotNo,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  493. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  494. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  495. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  496. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  497. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  498. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  499. SET @needqty=0
  500. END
  501. END
  502. END
  503. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  504. END
  505. CLOSE tempCursor
  506. DEALLOCATE tempCursor
  507. END
  508. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  509. --select * from #resulttemp
  510. DROP table #maintemp
  511. DROP table #resulttemp
  512. DROP table #barcodetemp";
  513. #endregion
  514. sql = String.Format(sql, dt.Rows[i]["LotNo"].ToString(), dt.Rows[i]["WorkPoint"].ToString(), Quantity, InvCode, WHCode, LocaCode);
  515. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  516. string json = JsonConvert.SerializeObject(table);
  517. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  518. foreach (DownItemModel model in downItemModels)
  519. {
  520. if (model != null && model.LotNo == null || "" == model.LotNo)
  521. {
  522. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  523. }
  524. WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, dt.Rows[i]["WorkPoint"].ToString(), "13", "60", cmd, language, "", "", "");
  525. //回写已领数量
  526. sql = @"UPDATE ICSOOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity + ") WHERE OODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  527. sql = String.Format(sql, model.DetailID, model.TransSequence, dt.Rows[i]["WorkPoint"].ToString());
  528. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  529. {
  530. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  531. }
  532. }
  533. #endregion
  534. }
  535. }
  536. catch (Exception)
  537. {
  538. throw;
  539. }
  540. }
  541. /// <summary>
  542. /// 入库倒冲(正向)
  543. /// </summary>
  544. /// <param name="LocationCode"></param>
  545. /// <param name="LotNo"></param>
  546. /// <param name="Quantity"></param>
  547. /// <param name="User"></param>
  548. /// <param name="WorkPoint"></param>
  549. /// <param name="TransType"></param>
  550. /// <param name="BusinessCode"></param>
  551. /// <param name="cmd"></param>
  552. /// <param name="jointLotNo"></param>
  553. public static void WareHouseLotInfoBackOut(string Identification,
  554. string TransCode, string TransSequence, string InvCode, string WHCode, string Quantity, string User,
  555. string WorkPoint, string TransType, string BusinessCode,string ERPID, string ERPDetailID, string ERPCode,string ERPSequence,
  556. string cFree1, string cFree2, string cFree3, string cFree4, string cFree5, string cFree6, string cFree7, string cFree8, string cFree9, string cFree10,
  557. string ProjectCode, string Batch, string Version, string Brand,
  558. SqlCommand cmd, Dictionary<string, string> language)
  559. {
  560. try
  561. {
  562. string VenCode = string.Empty;
  563. string DisVenCode = string.Empty;
  564. string LocaCode = string.Empty;
  565. string sqlwhere = string.Empty;
  566. string ssql = @"SELECT a.ODNCode,a.Sequence,a.WorkPoint,a.VenCode
  567. FROM ICSODeliveryNotice a
  568. WHERE a.ODNCode='{0}' AND a.WorkPoint='{1}'";
  569. ssql = string.Format(ssql, TransCode, WorkPoint);
  570. DataTable ssdt = DBHelper.SQlReturnData(ssql, cmd);
  571. if (ssdt.Rows.Count > 0)
  572. {
  573. DisVenCode = ssdt.Rows[0]["VenCode"].ToString();
  574. }
  575. string cheksql = @"select b.F_ItemCode as VenCode ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_Define1 AS LocationCode
  576. from Sys_SRM_Items a
  577. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  578. where a.F_EnCode='WWLocation' AND b.F_ItemCode='{0}'
  579. ";
  580. cheksql = string.Format(cheksql, DisVenCode);
  581. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  582. if (chekdt.Rows.Count > 0)
  583. {
  584. LocaCode = chekdt.Rows[0]["LocationCode"].ToString();
  585. sqlwhere = @"AND a.invcode = '{0}' AND d.ERPID = '{3}' and a.locationcode='{4}'";
  586. }
  587. else
  588. {
  589. if (DBHelper.IsRTU9())
  590. {
  591. throw new Exception("委外供应商库位未维护:" + DisVenCode);
  592. }
  593. else
  594. {
  595. sqlwhere = @"AND a.invcode = '{0}' AND d.ERPID = '{3}'";
  596. }
  597. }
  598. string MTime = string.Empty;
  599. //1.查询先进先出字段
  600. string mtimeSql = @"SELECT Top 1 a.F_ItemName
  601. FROM Sys_SRM_ItemsDetail a
  602. INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_Id
  603. WHERE b.F_EnCode='MtimeControl' AND a.F_EnabledMark='1'
  604. ORDER BY a.F_SortCode DESc";
  605. DataTable mtimedt = DBHelper.SQlReturnData(mtimeSql, cmd);
  606. if (mtimedt.Rows[0]["F_ItemName"].ToString() == "失效日期")
  607. {
  608. MTime = "ISNULL(b.ExpirationDate,b.ProductDate)";
  609. }
  610. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "生产日期")
  611. {
  612. MTime = "b.ProductDate";
  613. }
  614. else if(mtimedt.Rows[0]["F_ItemName"].ToString() == "入库日期")
  615. {
  616. MTime = "a.InDate";
  617. }
  618. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "批次")
  619. {
  620. MTime = "isnull(c.Batchcode ,'0')";
  621. }
  622. if (BusinessCode == "9" || BusinessCode == "10") { TransType = "13"; BusinessCode = "60"; } else { TransType = "12"; BusinessCode = "61"; }
  623. #region 倒冲
  624. #region sql
  625. // sqlwhere = @"AND a.invcode = '{0}' AND a.warehousecode = '{3}'";//and c.batchcode ='{1}' and c.cfree1='{2}'
  626. if (!string.IsNullOrWhiteSpace(cFree1)) { sqlwhere += " AND c.cFree1 ='" + cFree1 + "'"; }
  627. if (!string.IsNullOrWhiteSpace(cFree2)) { sqlwhere += " AND c.cFree2 ='" + cFree2 + "'"; }
  628. if (!string.IsNullOrWhiteSpace(cFree3)) { sqlwhere += " AND c.cFree3 ='" + cFree3 + "'"; }
  629. if (!string.IsNullOrWhiteSpace(cFree4)) { sqlwhere += " AND c.cFree4 ='" + cFree4 + "'"; }
  630. if (!string.IsNullOrWhiteSpace(cFree5)) { sqlwhere += " AND c.cFree5 ='" + cFree5 + "'"; }
  631. if (!string.IsNullOrWhiteSpace(cFree6)) { sqlwhere += " AND c.cFree6 ='" + cFree6 + "'"; }
  632. if (!string.IsNullOrWhiteSpace(cFree7)) { sqlwhere += " AND c.cFree7 ='" + cFree7 + "'"; }
  633. if (!string.IsNullOrWhiteSpace(cFree8)) { sqlwhere += " AND c.cFree8 ='" + cFree8 + "'"; }
  634. if (!string.IsNullOrWhiteSpace(cFree9)) { sqlwhere += " AND c.cFree9 ='" + cFree9 + "'"; }
  635. if (!string.IsNullOrWhiteSpace(cFree10)) { sqlwhere += " AND c.cFree10 ='" + cFree10 + "'"; }
  636. //string ProjectCode, string Batch, string Version, string Brand,
  637. if (!string.IsNullOrWhiteSpace(ProjectCode)) { sqlwhere += " AND c.ProjectCode ='" + ProjectCode + "'"; }
  638. if (!string.IsNullOrWhiteSpace(Batch)) { sqlwhere += " AND c.Batch ='" + Batch + "'"; }
  639. if (!string.IsNullOrWhiteSpace(Version)) { sqlwhere += " AND c.Version ='" + Version + "'"; }
  640. if (!string.IsNullOrWhiteSpace(Brand)) { sqlwhere += " AND c.Brand ='" + Brand + "'"; }
  641. string sql = @"-- 2.根据返回的物料信息 查出库存中对应的条码信息 barcodetemp 批次 序列号 仓库 料号
  642. select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,{2} as mtime,ROW_NUMBER() OVER (ORDER BY a.InDate,a.lotno) AS Sequence into #barcodetemp
  643. from ICSWareHouseLotInfo a inner JOIN ICSInventoryLot b on a.lotno = b.lotno
  644. LEFT JOIN ICSExtension c on b.extensionid = c.id
  645. INNER JOIN ICSWarehouse d ON d.WarehouseCode=a.WarehouseCode AND d.WorkPoint=a.WorkPoint
  646. where a.Quantity-a.lockQuantity>0 {9} --order by {2} asc
  647. IF NOT EXISTS(SELECT 1 FROM #barcodetemp)
  648. BEGIN
  649. RAISERROR('',16,1)
  650. RETURN;
  651. END
  652. -- 3.maintemp ID barcodetemp
  653. BEGIN
  654. DECLARE @qty DECIMAL(18,6);--
  655. DECLARE @needqty DECIMAL(18,6);--
  656. DECLARE @lotno VARCHAR(50);--
  657. DECLARE @Mtime VARCHAR(50);--
  658. --
  659. set @needqty = {4}
  660. DECLARE tempCursor CURSOR FOR (select lotno from #barcodetemp ); --tempCursor
  661. OPEN tempCursor; --
  662. FETCH NEXT FROM tempCursor INTO @Mtime; --
  663. WHILE @@fetch_status=0
  664. BEGIN
  665. IF @needqty>0
  666. BEGIN
  667. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a where lotno =@Mtime
  668. BEGIN
  669. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')--
  670. BEGIN
  671. -- @qty
  672. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  673. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  674. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  675. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  676. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  677. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  678. c.WarehouseCode,c.LocationCode,'','',@qty,
  679. '','0','{12}','{16}','1','{6}',
  680. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  681. SYSDATETIME() ,a.WorkPoint ,'','','',''
  682. FROM ICSInventoryLot a
  683. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  684. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  685. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  686. --
  687. UPDATE ICSWareHouseLotInfo set Quantity =0 where lotno = @lotno
  688. SET @needqty=@needqty-@qty
  689. END
  690. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  691. BEGIN
  692. -- @qty
  693. -- @qty
  694. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  695. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  696. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  697. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  698. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  699. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  700. c.WarehouseCode,c.LocationCode,'','',@needqty,
  701. '','0','{12}','{16}','1','{6}',
  702. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  703. SYSDATETIME() ,a.WorkPoint ,'','','',''
  704. FROM ICSInventoryLot a
  705. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  706. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  707. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  708. --
  709. update ICSWareHouseLotInfo set quantity = @qty-@needqty where lotno = @lotno
  710. SET @needqty=@needqty-@qty
  711. END
  712. END
  713. END
  714. FETCH NEXT FROM tempCursor INTO @Mtime;
  715. END
  716. CLOSE tempCursor
  717. DEALLOCATE tempCursor
  718. -- 退
  719. IF(@needqty>0)
  720. BEGIN
  721. -- -@needqty异常退料
  722. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  723. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  724. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  725. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  726. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE10)
  727. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  728. '{3}','','','',-@needqty,
  729. '','0','{12}','{16}','1','{6}',
  730. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  731. SYSDATETIME() ,a.WorkPoint ,'','','','',''
  732. FROM ICSInventory a
  733. LEFT JOIN ICSWareHouseLotInfo c ON a.INVCODE=c.invcode AND a.WorkPoint=c.WorkPoint
  734. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  735. WHERE c.LotNo=@lotno AND a.WorkPoint='{8}'
  736. --
  737. update ICSWareHouseLotInfo set quantity = quantity-@needqty where lotno = @lotno
  738. END
  739. END
  740. DROP table #barcodetemp";
  741. sqlwhere = string.Format(sqlwhere,InvCode, "", "", WHCode, LocaCode);
  742. sql = string.Format(sql, InvCode, ERPDetailID, MTime, WHCode,
  743. Quantity, Identification, ERPID, User, WorkPoint, sqlwhere, TransCode, TransSequence,TransType, ERPCode, ERPSequence,LocaCode,BusinessCode);
  744. #endregion
  745. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  746. {
  747. throw new Exception(language.GetNameByCode("WMSAPIInfo200"));//"倒冲出错!"
  748. }
  749. #endregion
  750. }
  751. catch (Exception)
  752. {
  753. throw;
  754. }
  755. }
  756. /// <summary>
  757. /// 退货倒冲(反向)
  758. /// </summary>
  759. /// <param name="LocationCode"></param>
  760. /// <param name="LotNo"></param>
  761. /// <param name="Quantity"></param>
  762. /// <param name="User"></param>
  763. /// <param name="WorkPoint"></param>
  764. /// <param name="TransType"></param>
  765. /// <param name="BusinessCode"></param>
  766. /// <param name="cmd"></param>
  767. /// <param name="jointLotNo"></param>
  768. public static void WareHouseLotInfoBackIn(string Identification,
  769. string TransCode, string TransSequence, string InvCode, string WHCode, string Quantity, string User,
  770. string WorkPoint, string TransType, string BusinessCode, string ERPID, string ERPDetailID, string ERPCode, string ERPSequence,
  771. string cFree1, string cFree2, string cFree3, string cFree4, string cFree5, string cFree6, string cFree7, string cFree8, string cFree9, string cFree10,
  772. string ProjectCode, string Batch, string Version, string Brand,
  773. SqlCommand cmd, Dictionary<string, string> language)
  774. {
  775. try
  776. {
  777. string MTime = string.Empty;
  778. string LocaCode = string.Empty;
  779. //1.查询先进先出字段
  780. string mtimeSql = @"SELECT Top 1 a.F_ItemName
  781. FROM Sys_SRM_ItemsDetail a
  782. INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_Id
  783. WHERE b.F_EnCode='MtimeControl' AND a.F_EnabledMark='1'
  784. ORDER BY a.F_SortCode DESc";
  785. DataTable mtimedt = DBHelper.SQlReturnData(mtimeSql, cmd);
  786. if (mtimedt.Rows[0]["F_ItemName"].ToString() == "失效日期")
  787. {
  788. MTime = "ISNULL(b.ExpirationDate,b.ProductDate)";
  789. }
  790. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "生产日期")
  791. {
  792. MTime = "b.ProductDate";
  793. }
  794. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "入库日期")
  795. {
  796. MTime = "a.InDate";
  797. }
  798. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "批次")
  799. {
  800. MTime = "isnull(c.Batchcode ,'0')";
  801. }
  802. string sqlwhere = @"where a.invcode = '{0}' AND D.TransCode ='{" + TransCode + "}' and D.TransSequence='" + TransSequence + "'";
  803. string sqlpick = @"";
  804. if (BusinessCode == "11")
  805. {
  806. BusinessCode = "60"; TransType = "13";
  807. sqlwhere = @"select a.lotno,a.invcode,sum(D.quantity ) as quantity into #barcodetemp
  808. from
  809. ICSWareHouseLotInfoLOG D
  810. inner JOIN ICSWareHouseLotInfo a on a.lotno = d.lotno
  811. inner JOIN ICSInventoryLot b on a.lotno = b.lotno
  812. inner join ICSODeliveryNotice e on e.ODNCode = d.TransCode and e.Sequence = '" + TransSequence + @"'
  813. inner join ICSOOPick f on f.OODetailID = e.ODNDetailID and d.TransSequence=e.Sequence+'~'+f.Sequence
  814. inner join ICSExtension g on g.id=b.ExtensionID
  815. where d.invcode = '{0}' AND D.TransCode ='" + TransCode + @"' and businesscode ='60' and g.batchcode ='"+ Batch + @"'
  816. group by a.lotno,a.invcode";
  817. sqlpick = @"update f set f.IssueQuantity=f.IssueQuantity-"+ Math.Abs(Convert.ToDecimal(Quantity)) + @"
  818. from ICSODeliveryNotice e
  819. inner join ICSOOPick f on f.OODetailID = e.ODNDetailID
  820. where e.ODNCode ='" + TransCode + @"' and e.Sequence = '" + TransSequence + @"'";
  821. } else { BusinessCode = "61"; TransType = "12"; }
  822. #region 倒冲
  823. #region sql
  824. //and c.batchcode ='{1}' and c.cfree1='{2}'
  825. string sql = @"--从原倒冲出库的log里捞出库数据
  826. {9}
  827. IF NOT EXISTS(SELECT 1 FROM #barcodetemp)
  828. BEGIN
  829. RAISERROR('',16,1)
  830. RETURN;
  831. END
  832. -- 3.maintemp ID barcodetemp
  833. BEGIN
  834. DECLARE @qty DECIMAL(18,6);--
  835. DECLARE @needqty DECIMAL(18,6);--
  836. DECLARE @lotno VARCHAR(50);--
  837. DECLARE @Mtime VARCHAR(50);--
  838. --
  839. set @needqty = {4}
  840. DECLARE tempCursor CURSOR FOR (select lotno from #barcodetemp ); --tempCursor
  841. OPEN tempCursor; --
  842. FETCH NEXT FROM tempCursor INTO @Mtime; --
  843. WHILE @@fetch_status=0
  844. BEGIN
  845. IF @needqty>0
  846. BEGIN
  847. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a where lotno =@Mtime
  848. BEGIN
  849. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')--
  850. BEGIN
  851. -- @qty
  852. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  853. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  854. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  855. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  856. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  857. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  858. c.WarehouseCode,c.LocationCode,c.WarehouseCode,c.LocationCode,-@qty,
  859. '','0','{12}','{15}','1','{6}',
  860. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  861. SYSDATETIME() ,a.WorkPoint ,'','','',''
  862. FROM ICSInventoryLot a
  863. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  864. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  865. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  866. --
  867. UPDATE ICSWareHouseLotInfo set Quantity = Quantity+@qty where lotno = @lotno
  868. SET @needqty=@needqty-@qty
  869. END
  870. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  871. BEGIN
  872. -- @qty
  873. -- @qty
  874. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  875. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  876. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  877. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  878. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  879. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  880. c.WarehouseCode,c.LocationCode,c.WarehouseCode,c.LocationCode,-@needqty,
  881. '','0','{12}','{15}','1','{6}',
  882. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  883. SYSDATETIME() ,a.WorkPoint ,'','','',''
  884. FROM ICSInventoryLot a
  885. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  886. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  887. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  888. --
  889. update ICSWareHouseLotInfo set quantity = quantity+@needqty where lotno = @lotno
  890. SET @needqty=@needqty-@qty
  891. END
  892. END
  893. END
  894. FETCH NEXT FROM tempCursor INTO @Mtime;
  895. END
  896. CLOSE tempCursor
  897. DEALLOCATE tempCursor
  898. {16}
  899. END
  900. DROP table #barcodetemp";
  901. sqlwhere = string.Format(sqlwhere, InvCode, "", "", WHCode);
  902. sql = string.Format(sql, InvCode, ERPDetailID, MTime, WHCode,
  903. Math.Abs(Convert.ToDecimal(Quantity)), Identification, ERPID, User, WorkPoint, sqlwhere, TransCode, TransSequence, TransType, ERPCode, ERPSequence,BusinessCode, sqlpick);
  904. #endregion
  905. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  906. {
  907. throw new Exception(language.GetNameByCode("WMSAPIInfo200"));//"倒冲出错!"
  908. }
  909. #endregion
  910. }
  911. catch (Exception)
  912. {
  913. throw;
  914. }
  915. }
  916. public static void WareHouseLotInfoBackInMF(string Identification,
  917. string TransCode, string TransSequence, string InvCode, string WHCode, string Quantity, string User,
  918. string WorkPoint, string TransType, string BusinessCode, string ERPID, string ERPDetailID, string ERPCode, string ERPSequence,
  919. string cFree1, string cFree2, string cFree3, string cFree4, string cFree5, string cFree6, string cFree7, string cFree8, string cFree9, string cFree10,
  920. string ProjectCode, string Batch, string Version, string Brand, string PickID,
  921. SqlCommand cmd, Dictionary<string, string> language)
  922. {
  923. try
  924. {
  925. string MTime = string.Empty;
  926. string LocaCode = string.Empty;
  927. //1.查询先进先出字段
  928. string mtimeSql = @"SELECT Top 1 a.F_ItemName
  929. FROM Sys_SRM_ItemsDetail a
  930. INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_Id
  931. WHERE b.F_EnCode='MtimeControl' AND a.F_EnabledMark='1'
  932. ORDER BY a.F_SortCode DESc";
  933. DataTable mtimedt = DBHelper.SQlReturnData(mtimeSql, cmd);
  934. if (mtimedt.Rows[0]["F_ItemName"].ToString() == "失效日期")
  935. {
  936. MTime = "ISNULL(b.ExpirationDate,b.ProductDate)";
  937. }
  938. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "生产日期")
  939. {
  940. MTime = "b.ProductDate";
  941. }
  942. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "入库日期")
  943. {
  944. MTime = "a.InDate";
  945. }
  946. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "批次")
  947. {
  948. MTime = "isnull(c.Batchcode ,'0')";
  949. }
  950. string sqlwhere = @"where a.invcode = '{0}' AND D.TransCode ='{" + TransCode + "}' and D.TransSequence='" + TransSequence + "'";
  951. string sqlpick = @"";
  952. if (BusinessCode == "11")
  953. {
  954. BusinessCode = "60"; TransType = "13";
  955. sqlwhere = @"select a.lotno,a.invcode,sum(a.quantity ) as quantity into #barcodetemp
  956. from ICSWareHouseLotInfo a
  957. inner JOIN ICSInventoryLot b on a.lotno = b.lotno
  958. inner join ICSOOPick f on f.PickID = '" + PickID + @"' and a.WarehouseCode = f.WHCode and a.invcode = f.InvCode
  959. inner join ICSExtension g on g.id=b.ExtensionID
  960. where a.invcode = '{0}' and g.batchcode ='" + Batch + @"'
  961. group by a.lotno,a.invcode";
  962. sqlpick = @"update f set f.IssueQuantity=f.IssueQuantity-" + Math.Abs(Convert.ToDecimal(Quantity)) + @"
  963. from ICSODeliveryNotice e
  964. inner join ICSOOPick f on f.OODetailID = e.ODNDetailID
  965. where e.ODNCode ='" + TransCode + @"' and e.Sequence = '" + TransSequence + @"'";
  966. }
  967. else { BusinessCode = "61"; TransType = "12"; }
  968. #region 倒冲
  969. #region sql
  970. //and c.batchcode ='{1}' and c.cfree1='{2}'
  971. string sql = @"--从原倒冲出库的log里捞出库数据
  972. {9}
  973. IF NOT EXISTS(SELECT 1 FROM #barcodetemp)
  974. BEGIN
  975. RAISERROR('',16,1)
  976. RETURN;
  977. END
  978. -- 3.maintemp ID barcodetemp
  979. BEGIN
  980. DECLARE @qty DECIMAL(18,6);--
  981. DECLARE @needqty DECIMAL(18,6);--
  982. DECLARE @lotno VARCHAR(50);--
  983. DECLARE @Mtime VARCHAR(50);--
  984. --
  985. set @needqty = {4}
  986. DECLARE tempCursor CURSOR FOR (select lotno from #barcodetemp ); --tempCursor
  987. OPEN tempCursor; --
  988. FETCH NEXT FROM tempCursor INTO @Mtime; --
  989. WHILE @@fetch_status=0
  990. BEGIN
  991. IF @needqty>0
  992. BEGIN
  993. select top 1 @qty = @needqty,@lotno = isnull(lotno,'') from #barcodetemp a where lotno =@Mtime
  994. BEGIN
  995. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')--
  996. BEGIN
  997. -- @qty
  998. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  999. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1000. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1001. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1002. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  1003. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1004. c.WarehouseCode,c.LocationCode,c.WarehouseCode,c.LocationCode,-@qty,
  1005. '','0','{12}','{15}','1','{6}',
  1006. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1007. SYSDATETIME() ,a.WorkPoint ,'','','',''
  1008. FROM ICSInventoryLot a
  1009. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1010. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1011. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  1012. --
  1013. UPDATE ICSWareHouseLotInfo set Quantity = Quantity+@qty where lotno = @lotno
  1014. SET @needqty=@needqty-@qty
  1015. END
  1016. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1017. BEGIN
  1018. -- @qty
  1019. -- @qty
  1020. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1021. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1022. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1023. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1024. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  1025. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1026. c.WarehouseCode,c.LocationCode,c.WarehouseCode,c.LocationCode,-@needqty,
  1027. '','0','{12}','{15}','1','{6}',
  1028. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1029. SYSDATETIME() ,a.WorkPoint ,'','','',''
  1030. FROM ICSInventoryLot a
  1031. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1032. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1033. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  1034. --
  1035. update ICSWareHouseLotInfo set quantity = quantity+@needqty where lotno = @lotno
  1036. SET @needqty=@needqty-@qty
  1037. END
  1038. END
  1039. END
  1040. FETCH NEXT FROM tempCursor INTO @Mtime;
  1041. END
  1042. CLOSE tempCursor
  1043. DEALLOCATE tempCursor
  1044. {16}
  1045. END
  1046. DROP table #barcodetemp";
  1047. sqlwhere = string.Format(sqlwhere, InvCode, "", "", WHCode);
  1048. sql = string.Format(sql, InvCode, ERPDetailID, MTime, WHCode,
  1049. Math.Abs(Convert.ToDecimal(Quantity)), Identification, ERPID, User, WorkPoint, sqlwhere, TransCode, TransSequence, TransType, ERPCode, ERPSequence, BusinessCode, sqlpick);
  1050. #endregion
  1051. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1052. {
  1053. throw new Exception(language.GetNameByCode("WMSAPIInfo200"));//"倒冲出错!"
  1054. }
  1055. #endregion
  1056. }
  1057. catch (Exception)
  1058. {
  1059. throw;
  1060. }
  1061. }
  1062. /// <summary>
  1063. /// 倒冲前检验数量
  1064. /// </summary>
  1065. /// <param name="LocationCode"></param>
  1066. /// <param name="LotNo"></param>
  1067. /// <param name="Quantity"></param>
  1068. /// <param name="User"></param>
  1069. /// <param name="WorkPoint"></param>
  1070. /// <param name="TransType"></param>
  1071. /// <param name="BusinessCode"></param>
  1072. /// <param name="cmd"></param>
  1073. /// <param name="jointLotNo"></param>
  1074. public static void WareHouseLotInfoBackOutBefore(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  1075. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo, string TransCode, string TransSequence)
  1076. {
  1077. try
  1078. {
  1079. string sql = string.Empty;
  1080. string LocaCode = "";
  1081. string DisVenCode = "";
  1082. string ssql = @"SELECT a.ODNCode,a.Sequence,a.WorkPoint,a.VenCode
  1083. FROM ICSODeliveryNotice a
  1084. WHERE a.ODNCode='{0}' AND a.WorkPoint='{1}'";
  1085. ssql = string.Format(ssql, TransCode, WorkPoint);
  1086. DataTable ssdt = DBHelper.SQlReturnData(ssql, cmd);
  1087. if (ssdt.Rows.Count > 0)
  1088. {
  1089. DisVenCode = ssdt.Rows[0]["VenCode"].ToString();
  1090. }
  1091. string cheksql = @"select b.F_ItemCode as VenCode ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_Define1 AS LocationCode
  1092. from Sys_SRM_Items a
  1093. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1094. where a.F_EnCode='WWLocation' AND b.F_ItemCode='{0}'
  1095. ";
  1096. cheksql = string.Format(cheksql, DisVenCode);
  1097. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  1098. if (chekdt.Rows.Count > 0)
  1099. {
  1100. LocaCode = chekdt.Rows[0]["LocationCode"].ToString();
  1101. }
  1102. string chekscsql = @"SELECT a.InvCode FROM ICSMOPick a
  1103. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  1104. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1105. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1106. INNER JOIN ICSInventoryLotDetail d ON c.OOCode=d.TransCode AND c.Sequence=d.TransSequence and c.WorkPoint=d.WorkPoint
  1107. where d.LotNo='{0}' and a.WorkPoint='{1}' and a.SupplyType='1' and a.quantity>0";
  1108. chekscsql = string.Format(chekscsql, LotNo, WorkPoint);
  1109. DataTable chekcdts = DBHelper.SQlReturnData(chekscsql, cmd);
  1110. for (int i = 0; i < chekcdts.Rows.Count; i++)
  1111. {
  1112. #region 成品(生产)入库,倒冲
  1113. if (BusinessCode.Equals(TransTypeEnum.ManufactureReceiveDoc.GetDescription<DBValue>()))
  1114. {
  1115. #region sql
  1116. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  1117. SELECT
  1118. c.MOCode AS TransCode,
  1119. a.MODetailID AS DetailID,
  1120. a.InvCode,
  1121. b.InvName,
  1122. b.InvStd,
  1123. a.Quantity AS Quantity,
  1124. a.Amount,
  1125. a.Sequence AS TransSequence,
  1126. a.IssueQuantity,
  1127. c.Sequence,
  1128. inv.InvUnit,
  1129. cast(0 as decimal(18,6)) AS LocationQty,
  1130. inv.AmountUnit,
  1131. a.ExtensionID,
  1132. a.WorkPoint,
  1133. ext.ProjectCode,
  1134. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  1135. ext.Version,
  1136. ext.Brand,
  1137. ext.cFree1,
  1138. ext.cFree2,
  1139. ext.cFree3,
  1140. ext.cFree4,
  1141. ext.cFree5,
  1142. ext.cFree6,
  1143. ext.cFree7,
  1144. ext.cFree8,
  1145. ext.cFree9,
  1146. ext.cFree10,a.WHCODE
  1147. INTO #maintemp
  1148. FROM
  1149. ICSMOPick a
  1150. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  1151. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1152. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1153. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1154. INNER JOIN (
  1155. SELECT a.MOCode,a.Sequence,a.WorkPoint
  1156. FROM ICSMO a
  1157. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.MOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1158. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1159. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  1160. ) temp ON c.MOCode=temp.MOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  1161. WHERE a.SupplyType='1' and a.invcode='{2}'
  1162. GROUP BY c.MOCode,a.ParentQuantity,a.Quantity,c.Quantity,a.InvCode,b.InvName,b.InvStd,a.WhCode,a.ExtensionID,a.WorkPoint,inv.BatchEnable,a.MODetailID,a.Amount,a.Sequence,a.IssueQuantity,inv.InvName,inv.InvCode,inv.InvUnit,inv.AmountUnit,c.Sequence,
  1163. ext.ProjectCode,ext.BatchCode,ext.Version,ext.Brand,ext.cFree1,ext.cFree2,ext.cFree3,ext.cFree4,ext.cFree5,ext.cFree6,ext.cFree7,ext.cFree8,ext.cFree9,ext.cFree10;
  1164. select * into #resulttemp from #maintemp
  1165. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  1166. delete from #resulttemp
  1167. -- 2.maintemp barcodetemp
  1168. select a.lotno,a.invcode,cast((a.quantity-a.lockQuantity) as decimal(18,6)) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a inner JOIN
  1169. (select #maintemp.invcode,#maintemp.WHCODE from #maintemp group by #maintemp.InvCode,#maintemp.WHCODE) b on a.invcode = b.invcode and a.warehousecode =b.WHCODE where a.Quantity-a.lockQuantity>0 ORDER BY a.MTIME ASC
  1170. -- 3.maintemp ID barcodetemp
  1171. BEGIN
  1172. DECLARE @transSequence int;--
  1173. DECLARE @qty decimal(18,6);--
  1174. DECLARE @needqty decimal(18,6);--
  1175. DECLARE @lotno VARCHAR(50);--
  1176. DECLARE @DetailID VARCHAR(50);--ID
  1177. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  1178. OPEN tempCursor; --
  1179. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  1180. WHILE @@fetch_status=0
  1181. BEGIN
  1182. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  1183. PRINT @transSequence
  1184. WHILE @needqty>0
  1185. BEGIN
  1186. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  1187. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  1188. BEGIN
  1189. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  1190. BEGIN
  1191. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1192. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1193. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1194. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1195. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  1196. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1197. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1198. delete from #barcodetemp where lotno = @lotno
  1199. SET @needqty=@needqty-@qty
  1200. END
  1201. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1202. BEGIN
  1203. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1204. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1205. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1206. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1207. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  1208. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1209. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1210. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  1211. SET @needqty=@needqty-@qty
  1212. END
  1213. ELSE
  1214. BEGIN
  1215. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1216. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1217. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1218. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1219. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  1220. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1221. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1222. SET @needqty=0
  1223. END
  1224. END
  1225. END
  1226. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  1227. END
  1228. CLOSE tempCursor
  1229. DEALLOCATE tempCursor
  1230. END
  1231. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  1232. --select * from #resulttemp
  1233. DROP table #maintemp
  1234. DROP table #resulttemp
  1235. DROP table #barcodetemp";
  1236. #endregion
  1237. sql = String.Format(sql, LotNo, WorkPoint, Quantity, chekcdts.Rows[i]["InvCode"].ToString());
  1238. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  1239. string json = JsonConvert.SerializeObject(table);
  1240. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  1241. if (downItemModels.Count == 0)
  1242. {
  1243. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  1244. }
  1245. //foreach (DownItemModel model in downItemModels)
  1246. //{
  1247. // if (model != null && model.LotNo == null || "" == model.LotNo)
  1248. // {
  1249. // throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  1250. // }
  1251. //}
  1252. }
  1253. #endregion
  1254. }
  1255. string chekcsql = @"SELECT a.InvCode FROM ICSOOPick a
  1256. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  1257. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1258. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1259. INNER JOIN ICSInventoryLotDetail d ON c.OOCode=d.TransCode AND c.Sequence=d.TransSequence and c.WorkPoint=d.WorkPoint
  1260. where d.LotNo='{0}' and a.WorkPoint='{1}' and a.SupplyType='1' and a.quantity>0";
  1261. chekcsql = string.Format(chekcsql, LotNo, WorkPoint);
  1262. DataTable chekcdt = DBHelper.SQlReturnData(chekcsql, cmd);
  1263. for (int i = 0; i < chekcdt.Rows.Count; i++)
  1264. {
  1265. #region 委外入库,倒冲
  1266. if (BusinessCode.Equals(TransTypeEnum.OutsourcingReceiveDoc.GetDescription<DBValue>())|| BusinessCode.Equals(TransTypeEnum.ODeliveryNotice.GetDescription<DBValue>()))
  1267. {
  1268. if (LocaCode.Equals(""))
  1269. {
  1270. #region sql
  1271. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  1272. SELECT
  1273. c.OOCode AS TransCode,
  1274. a.OODetailID AS DetailID,
  1275. a.InvCode,
  1276. b.InvName,
  1277. b.InvStd,
  1278. a.Quantity AS Quantity,
  1279. a.Amount,
  1280. a.Sequence AS TransSequence,
  1281. a.IssueQuantity,
  1282. c.Sequence,
  1283. inv.InvUnit,
  1284. cast(0 as decimal(18,6)) AS LocationQty,
  1285. inv.AmountUnit,
  1286. a.ExtensionID,
  1287. a.WorkPoint,
  1288. ext.ProjectCode,
  1289. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  1290. ext.Version,
  1291. ext.Brand,
  1292. ext.cFree1,
  1293. ext.cFree2,
  1294. ext.cFree3,
  1295. ext.cFree4,
  1296. ext.cFree5,
  1297. ext.cFree6,
  1298. ext.cFree7,
  1299. ext.cFree8,
  1300. ext.cFree9,
  1301. ext.cFree10,a.WHCODE
  1302. INTO #maintemp
  1303. FROM
  1304. ICSOOPick a
  1305. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  1306. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1307. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1308. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1309. INNER JOIN (
  1310. SELECT a.OOCode,a.Sequence,a.WorkPoint
  1311. FROM ICSOutsourcingOrder a
  1312. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1313. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1314. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  1315. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  1316. WHERE a.SupplyType='1' and a.invcode='{4}'
  1317. GROUP BY c.OOCode,a.ParentQuantity,a.Quantity,c.Quantity,a.InvCode,b.InvName,b.InvStd,a.WhCode,a.ExtensionID,a.WorkPoint,inv.BatchEnable,a.OODetailID,a.Amount,a.Sequence,a.IssueQuantity,inv.InvName,inv.InvCode,inv.InvUnit,inv.AmountUnit,c.Sequence,
  1318. ext.ProjectCode,ext.BatchCode,ext.Version,ext.Brand,ext.cFree1,ext.cFree2,ext.cFree3,ext.cFree4,ext.cFree5,ext.cFree6,ext.cFree7,ext.cFree8,ext.cFree9,ext.cFree10;
  1319. select * into #resulttemp from #maintemp
  1320. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  1321. delete from #resulttemp
  1322. -- 2.maintemp barcodetemp
  1323. select a.lotno,a.invcode,cast((a.quantity-a.lockQuantity) as decimal(18,6)) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a inner JOIN
  1324. (select #maintemp.invcode,#maintemp.WHCODE from #maintemp group by #maintemp.InvCode,#maintemp.WHCODE) b on a.invcode = b.invcode and a.warehousecode =b.WHCODE where a.Quantity-a.lockQuantity>0 ORDER BY a.MTIME ASC
  1325. -- 3.maintemp ID barcodetemp
  1326. BEGIN
  1327. DECLARE @transSequence int;--
  1328. DECLARE @qty decimal(18,6);--
  1329. DECLARE @needqty decimal(18,6);--
  1330. DECLARE @lotno VARCHAR(50);--
  1331. DECLARE @DetailID VARCHAR(50);--ID
  1332. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  1333. OPEN tempCursor; --
  1334. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  1335. WHILE @@fetch_status=0
  1336. BEGIN
  1337. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  1338. PRINT @transSequence
  1339. WHILE @needqty>0
  1340. BEGIN
  1341. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  1342. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  1343. BEGIN
  1344. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  1345. BEGIN
  1346. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1347. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1348. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1349. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1350. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  1351. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1352. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1353. delete from #barcodetemp where lotno = @lotno
  1354. SET @needqty=@needqty-@qty
  1355. END
  1356. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1357. BEGIN
  1358. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1359. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1360. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1361. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1362. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  1363. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1364. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1365. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  1366. SET @needqty=@needqty-@qty
  1367. END
  1368. ELSE
  1369. BEGIN
  1370. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1371. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1372. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1373. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1374. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  1375. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1376. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1377. SET @needqty=0
  1378. END
  1379. END
  1380. END
  1381. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  1382. END
  1383. CLOSE tempCursor
  1384. DEALLOCATE tempCursor
  1385. END
  1386. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  1387. --select * from #resulttemp
  1388. DROP table #maintemp
  1389. DROP table #resulttemp
  1390. DROP table #barcodetemp";
  1391. #endregion
  1392. }
  1393. else
  1394. {
  1395. #region sql
  1396. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  1397. SELECT
  1398. c.OOCode AS TransCode,
  1399. a.OODetailID AS DetailID,
  1400. a.InvCode,
  1401. b.InvName,
  1402. b.InvStd,
  1403. a.Quantity AS Quantity,
  1404. a.Amount,
  1405. a.Sequence AS TransSequence,
  1406. a.IssueQuantity,
  1407. c.Sequence,
  1408. inv.InvUnit,
  1409. cast(0 as decimal(18,6)) AS LocationQty,
  1410. inv.AmountUnit,
  1411. a.ExtensionID,
  1412. a.WorkPoint,
  1413. ext.ProjectCode,
  1414. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  1415. ext.Version,
  1416. ext.Brand,
  1417. ext.cFree1,
  1418. ext.cFree2,
  1419. ext.cFree3,
  1420. ext.cFree4,
  1421. ext.cFree5,
  1422. ext.cFree6,
  1423. ext.cFree7,
  1424. ext.cFree8,
  1425. ext.cFree9,
  1426. ext.cFree10,a.WHCODE
  1427. INTO #maintemp
  1428. FROM
  1429. ICSOOPick a
  1430. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  1431. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1432. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1433. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1434. INNER JOIN (
  1435. SELECT a.OOCode,a.Sequence,a.WorkPoint
  1436. FROM ICSOutsourcingOrder a
  1437. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1438. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1439. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  1440. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  1441. WHERE a.SupplyType='1' and a.invcode='{4}'
  1442. GROUP BY c.OOCode,a.ParentQuantity,a.Quantity,c.Quantity,a.InvCode,b.InvName,b.InvStd,a.WhCode,a.ExtensionID,a.WorkPoint,inv.BatchEnable,a.OODetailID,a.Amount,a.Sequence,a.IssueQuantity,inv.InvName,inv.InvCode,inv.InvUnit,inv.AmountUnit,c.Sequence,
  1443. ext.ProjectCode,ext.BatchCode,ext.Version,ext.Brand,ext.cFree1,ext.cFree2,ext.cFree3,ext.cFree4,ext.cFree5,ext.cFree6,ext.cFree7,ext.cFree8,ext.cFree9,ext.cFree10;
  1444. select * into #resulttemp from #maintemp
  1445. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  1446. delete from #resulttemp
  1447. -- 2.maintemp barcodetemp
  1448. select a.lotno,a.invcode,cast((a.quantity-a.lockQuantity) as decimal(18,6)) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a inner JOIN
  1449. (select #maintemp.invcode,#maintemp.WHCODE from #maintemp group by #maintemp.InvCode,#maintemp.WHCODE) b on a.invcode = b.invcode and a.warehousecode =b.WHCODE where a.Quantity-a.lockQuantity>0 AND a.LocationCode='{3}' ORDER BY a.MTIME ASC
  1450. -- 3.maintemp ID barcodetemp
  1451. BEGIN
  1452. DECLARE @transSequence int;--
  1453. DECLARE @qty decimal(18,6);--
  1454. DECLARE @needqty decimal(18,6);--
  1455. DECLARE @lotno VARCHAR(50);--
  1456. DECLARE @DetailID VARCHAR(50);--ID
  1457. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  1458. OPEN tempCursor; --
  1459. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  1460. WHILE @@fetch_status=0
  1461. BEGIN
  1462. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  1463. PRINT @transSequence
  1464. WHILE @needqty>0
  1465. BEGIN
  1466. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  1467. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  1468. BEGIN
  1469. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  1470. BEGIN
  1471. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1472. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1473. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1474. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1475. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  1476. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1477. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1478. delete from #barcodetemp where lotno = @lotno
  1479. SET @needqty=@needqty-@qty
  1480. END
  1481. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1482. BEGIN
  1483. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1484. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1485. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1486. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1487. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  1488. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1489. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1490. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  1491. SET @needqty=@needqty-@qty
  1492. END
  1493. ELSE
  1494. BEGIN
  1495. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1496. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1497. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1498. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1499. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  1500. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1501. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1502. SET @needqty=0
  1503. END
  1504. END
  1505. END
  1506. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  1507. END
  1508. CLOSE tempCursor
  1509. DEALLOCATE tempCursor
  1510. END
  1511. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  1512. --select * from #resulttemp
  1513. DROP table #maintemp
  1514. DROP table #resulttemp
  1515. DROP table #barcodetemp";
  1516. #endregion
  1517. }
  1518. sql = String.Format(sql, LotNo, WorkPoint, Quantity,LocaCode, chekcdt.Rows[i]["InvCode"].ToString());
  1519. log.Debug("倒冲前检验子件数量sql:"+sql);
  1520. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  1521. string json = JsonConvert.SerializeObject(table);
  1522. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  1523. if (downItemModels.Count==0)
  1524. {
  1525. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  1526. }
  1527. //foreach (DownItemModel model in downItemModels)
  1528. //{
  1529. // if (model != null && model.LotNo == null || "" == model.LotNo)
  1530. // {
  1531. // }
  1532. //}
  1533. }
  1534. #endregion
  1535. }
  1536. }
  1537. catch (Exception ex)
  1538. {
  1539. log.Debug(ex.ToString());
  1540. }
  1541. }
  1542. /// <summary>
  1543. /// 客供料添加库存
  1544. /// </summary>
  1545. /// <param name="LocationCode"></param>
  1546. /// <param name="LotNo"></param>
  1547. /// <param name="Quantity"></param>
  1548. /// <param name="User"></param>
  1549. /// <param name="WorkPoint"></param>
  1550. /// <param name="TransType"></param>
  1551. /// <param name="BusinessCode"></param>
  1552. /// <param name="cmd"></param>
  1553. /// <param name="jointLotNo"></param>
  1554. public static void WareHouseLotByClientInfoUp(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  1555. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo,string TransCode,string TransSequence)
  1556. {
  1557. try
  1558. {
  1559. string sql = string.Empty;
  1560. string locationcode = "";
  1561. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1562. BEGIN
  1563. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1564. RETURN
  1565. END
  1566. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  1567. BEGIN
  1568. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  1569. BEGIN
  1570. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  1571. From ICSWareHouseLotInfo a
  1572. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  1573. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  1574. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1575. END
  1576. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  1577. BEGIN
  1578. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  1579. WHERE LotNo='{0}' AND WorkPoint='{1}'
  1580. END
  1581. ELSE IF('" + locationcode + @"' != '{4}')
  1582. BEGIN
  1583. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  1584. RETURN
  1585. END
  1586. END
  1587. ELSE
  1588. BEGIN
  1589. -- IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  1590. -- INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  1591. -- WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  1592. -- BEGIN
  1593. -- IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  1594. -- INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  1595. -- WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  1596. -- BEGIN
  1597. -- RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  1598. -- RETURN
  1599. -- END
  1600. -- END
  1601. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  1602. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  1603. FROM ICSInventoryLot a
  1604. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  1605. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  1606. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1607. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1608. END";
  1609. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  1610. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1611. {
  1612. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  1613. }
  1614. }
  1615. catch (Exception)
  1616. {
  1617. throw;
  1618. }
  1619. }
  1620. /// <summary>
  1621. /// 客供料上架日志记录
  1622. /// </summary>
  1623. /// <param name="Identification"></param>
  1624. /// <param name="LocationCode"></param>
  1625. /// <param name="LotNo"></param>
  1626. /// <param name="Quantity"></param>
  1627. /// <param name="User"></param>
  1628. /// <param name="WorkPoint"></param>
  1629. /// <param name="TransType"></param>
  1630. /// <param name="BusinessCode"></param>
  1631. /// <param name="cmd"></param>
  1632. /// <param name="language"></param>
  1633. /// <param name="LogID"></param>
  1634. /// <param name="jointLotNo"></param>
  1635. /// <param name="TransCode"></param>
  1636. /// <param name="TransSequence"></param>
  1637. public static void WareHouseLotByClientInfoUpLog(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  1638. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo, string TransCode, string TransSequence)
  1639. {
  1640. try
  1641. {
  1642. string sql = string.Empty;
  1643. ///添加日志
  1644. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1645. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1646. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1647. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1648. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  1649. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  1650. '','',c.WarehouseCode,c.LocationCode,'{6}',
  1651. '','0','{4}','{5}','0','',
  1652. '','','',f.F_Account ,f.F_RealName ,
  1653. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  1654. FROM ICSInventoryLot a
  1655. INNER JOIN ICSInventoryLotDetailKG b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint AND b.TransCode='{8}' AND b.TransSequence='{9}'
  1656. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1657. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1658. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1659. ";
  1660. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID, TransCode, TransSequence);
  1661. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1662. {
  1663. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1664. }
  1665. }
  1666. catch (Exception)
  1667. {
  1668. throw;
  1669. }
  1670. }
  1671. /// <summary>
  1672. /// 减少库存
  1673. /// </summary>
  1674. /// <param name="Identification"></param>
  1675. /// <param name="TransCode"></param>
  1676. /// <param name="TransSequence"></param>
  1677. /// <param name="LotNo"></param>
  1678. /// <param name="Quantity"></param>
  1679. /// <param name="User"></param>
  1680. /// <param name="WorkPoint"></param>
  1681. /// <param name="TransType"></param>
  1682. /// <param name="BusinessCode"></param>
  1683. /// <param name="cmd"></param>
  1684. public static DataTable WareHouseLotInfoDown(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  1685. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string TransID,string MergeID = "")
  1686. {
  1687. decimal LotQTYYY = 0;
  1688. decimal LotQTY = 0;
  1689. decimal SUMQTY = 0;
  1690. string INVCODE = "";
  1691. string Inspect = "";
  1692. string LotEnable = "";
  1693. string LotDocEnable = "";
  1694. string InvOQc = "";
  1695. string chekEnable = "";
  1696. string DisPrintEnable = "";
  1697. string PrintEnable = "";
  1698. string sql = "";
  1699. string lotstr = "";
  1700. int result = 0;
  1701. bool isDis = false;
  1702. List<string> NewBarCodeList = new List<string>();
  1703. DataTable dtLotno = new DataTable();
  1704. DataTable lstDt = new DataTable();
  1705. DataTable ZLtable = new DataTable();
  1706. try
  1707. {
  1708. //检验是否分批
  1709. sql = @"SELECT b.LotEnable,b.PrintEnable,b.InvOQC,b.LotDocEnable FROM ICSInventoryLot a
  1710. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  1711. where a.LotNo='{0}' and a.WorkPoint='{1}'
  1712. ";
  1713. sql = string.Format(sql, LotNo, WorkPoint);
  1714. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  1715. if (dt.Rows.Count == 0)
  1716. {
  1717. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  1718. }
  1719. else
  1720. {
  1721. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  1722. LotDocEnable = dt.Rows[0]["LotDocEnable"].ToString();
  1723. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  1724. InvOQc = dt.Rows[0]["InvOQC"].ToString();
  1725. }
  1726. log.Debug("INVOQC:"+InvOQc);
  1727. string cheksql = @"IF NOT EXISTS(select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  1728. from Sys_SRM_Items a
  1729. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1730. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  1731. BEGIN
  1732. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  1733. RETURN
  1734. END
  1735. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  1736. from Sys_SRM_Items a
  1737. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1738. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  1739. ";
  1740. cheksql = string.Format(cheksql, BusinessCode);
  1741. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  1742. if (chekdt.Rows.Count == 0)
  1743. {
  1744. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  1745. }
  1746. else
  1747. {
  1748. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  1749. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  1750. }
  1751. sql = @"select Quantity,invcode,Inspect from ICSWareHouseLotInfo
  1752. where LotNO='{0}' AND WorkPoint='{1}'";
  1753. sql = string.Format(sql, LotNo, WorkPoint);
  1754. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  1755. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  1756. LotQTY = Convert.ToDecimal(Quantity);
  1757. INVCODE = dtt.Rows[0]["invcode"].ToString();
  1758. Inspect = dtt.Rows[0]["Inspect"].ToString();
  1759. sql = @"SELECT isNULL(SUM(a.quantity)-'{3}',0) AS SumQTY FROM ICSWareHouseLotInfo a
  1760. INNER JOIN ICSReserve b ON a.invcode=b.invcode and a.workpoint=b.workpoint and a.warehousecode=b.whcode
  1761. where a.invcode='{2}' and a.workpoint='{1}' ";
  1762. sql = string.Format(sql, LotNo, WorkPoint,INVCODE, Quantity);
  1763. DataTable Sumdtt = DBHelper.SQlReturnData(sql, cmd);
  1764. log.Debug(Sumdtt.Rows[0]["SumQTY"]);
  1765. SUMQTY = Convert.ToDecimal(Sumdtt.Rows[0]["SumQTY"]);
  1766. //Convert.ToDecimal(Sumdtt.Rows[0]["SumQTY"]);
  1767. if (LotDocEnable.Equals("True"))
  1768. {
  1769. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  1770. {
  1771. ZLtable = ICSControlModeService.GetZL();
  1772. if (ZLtable == null)
  1773. {
  1774. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  1775. }
  1776. for (int i = 0; i < ZLtable.Rows.Count; i++)
  1777. {
  1778. string zlName = ZLtable.Rows[i]["Name"].ToString();
  1779. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  1780. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  1781. if (zlTransCode.Equals(BusinessCode))
  1782. {
  1783. if (Enable.Equals("True"))
  1784. {
  1785. ///更新日志
  1786. sql = @"
  1787. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}')
  1788. BEGIN
  1789. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  1790. RETURN
  1791. END
  1792. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  1793. ";
  1794. sql = string.Format(sql, LotNo, WorkPoint, LogID,TransCode,TransSequence);
  1795. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1796. {
  1797. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  1798. }
  1799. ///更新库存
  1800. sql = @"
  1801. UPDATE ICSWareHouseLotInfo
  1802. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  1803. WHERE LotNo = '{0}'
  1804. AND WorkPoint = '{1}';
  1805. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  1806. WHERE a.LotNo = '{0}'
  1807. AND a.WorkPoint = '{1}'
  1808. AND Quantity < 0)
  1809. BEGIN
  1810. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  1811. RETURN
  1812. END
  1813. ";
  1814. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  1815. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1816. {
  1817. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1818. }
  1819. }
  1820. else
  1821. {
  1822. if (InvOQc.Equals("True"))
  1823. {
  1824. sql = @"select a.id from ICSWareHouseLotInfo a
  1825. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  1826. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  1827. sql = string.Format(sql, LotNo, WorkPoint);
  1828. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  1829. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  1830. {
  1831. sql = @"select a.id from ICSWareHouseLotInfo a
  1832. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  1833. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  1834. sql = string.Format(sql, LotNo, WorkPoint);
  1835. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  1836. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  1837. {
  1838. throw new Exception("条码在库检验,未检验完成,请确认!");
  1839. }
  1840. }
  1841. }
  1842. ///更新库存
  1843. sql = @"
  1844. UPDATE ICSWareHouseLotInfo
  1845. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  1846. WHERE LotNo = '{0}'
  1847. AND WorkPoint = '{1}';
  1848. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  1849. WHERE a.LotNo = '{0}'
  1850. AND a.WorkPoint = '{1}'
  1851. AND Quantity < 0)
  1852. BEGIN
  1853. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  1854. RETURN
  1855. END
  1856. ";
  1857. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  1858. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1859. {
  1860. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1861. }
  1862. }
  1863. }
  1864. }
  1865. ///分批前添加日志
  1866. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1867. BEGIN
  1868. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1869. RETURN
  1870. END
  1871. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  1872. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1873. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1874. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1875. MTIME,WorkPoint,EATTRIBUTE1)
  1876. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  1877. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  1878. '','0','{4}','31','0','',
  1879. '','','',f.F_Account ,f.F_RealName ,
  1880. SYSDATETIME() ,a.WorkPoint ,''
  1881. FROM ICSInventoryLot a
  1882. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1883. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1884. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1885. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1886. ";
  1887. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  1888. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1889. {
  1890. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1891. }
  1892. #region 获取分批后的条码(lotstr)
  1893. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  1894. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  1895. sql = string.Format(sql, LotNo, WorkPoint);
  1896. dt = DBHelper.SQlReturnData(sql, cmd);
  1897. if (dt.Rows.Count == 0)
  1898. {
  1899. lotstr = LotNo + "-" + 1;
  1900. }
  1901. else
  1902. {
  1903. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  1904. }
  1905. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  1906. #endregion
  1907. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  1908. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  1909. Quantity,Amount,ExtensionID,Type,PrintTimes,
  1910. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  1911. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  1912. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  1913. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  1914. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  1915. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  1916. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  1917. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  1918. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  1919. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  1920. From ICSInventoryLot a
  1921. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  1922. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  1923. cmd.CommandText = sql;
  1924. result = cmd.ExecuteNonQuery();
  1925. if (result <= 0)
  1926. {
  1927. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  1928. }
  1929. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  1930. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  1931. ,MUSER,MUSERName,GETDATE(),'{3}',''
  1932. from ICSWareHouseLotInfo
  1933. where LotNO='{1}' AND WorkPoint='{3}'";
  1934. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  1935. cmd.CommandText = sql;
  1936. result = cmd.ExecuteNonQuery();
  1937. if (result <= 0)
  1938. {
  1939. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  1940. }
  1941. //插入条码单据表
  1942. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  1943. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  1944. FROM ICSInventoryLot a
  1945. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1946. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1947. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  1948. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  1949. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1950. {
  1951. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  1952. }
  1953. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  1954. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1955. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1956. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1957. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  1958. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  1959. c.WarehouseCode,c.LocationCode,'','','{6}',
  1960. '','0','{7}','{8}','0','',
  1961. '','','',f.F_Account ,f.F_RealName ,
  1962. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  1963. FROM ICSInventoryLot a
  1964. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1965. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1966. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1967. ";
  1968. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  1969. cmd.CommandText = sql;
  1970. result = cmd.ExecuteNonQuery();
  1971. if (result <= 0)
  1972. {
  1973. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  1974. }
  1975. ///添加日志
  1976. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1977. BEGIN
  1978. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1979. RETURN
  1980. END
  1981. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  1982. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1983. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1984. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1985. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  1986. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  1987. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  1988. '','0','{7}','32','0','',
  1989. '','','',f.F_Account ,f.F_RealName ,
  1990. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  1991. FROM ICSInventoryLot a
  1992. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1993. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1994. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1995. ";
  1996. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  1997. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1998. {
  1999. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2000. }
  2001. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  2002. {
  2003. string PrintData = DBHelper.ReadPrintStream();
  2004. sql = @""+PrintData+"";
  2005. //sql = @"select A.LotNO AS OLDLotNo , C.Quantity AS OLDLotQty, A.eattribute1 as LotNo, B.Quantity AS LotQty ,b.InvCode,d.InvStd,d.InvName,b.MTime,A.TransCode
  2006. // from ICSWareHouseLotInfolog A
  2007. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  2008. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  2009. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  2010. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  2011. // ";
  2012. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  2013. log.Debug("打印数据源:" + sql);
  2014. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  2015. lstDt = dtLotno;
  2016. }
  2017. #endregion
  2018. }
  2019. else
  2020. {
  2021. NewBarCodeList.Add(LotNo);
  2022. ///添加日志
  2023. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2024. BEGIN
  2025. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2026. RETURN
  2027. END
  2028. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2029. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2030. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2031. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2032. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2033. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  2034. c.WarehouseCode,c.LocationCode,'','','{6}',
  2035. '','0','{7}','{8}','0','',
  2036. '','','',f.F_Account ,f.F_RealName ,
  2037. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2038. FROM ICSInventoryLot a
  2039. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2040. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2041. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2042. ";
  2043. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  2044. log.Debug("出库日志" + sql);
  2045. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2046. {
  2047. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2048. }
  2049. ZLtable = ICSControlModeService.GetZL();
  2050. if (ZLtable == null)
  2051. {
  2052. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  2053. }
  2054. for (int i = 0; i < ZLtable.Rows.Count; i++)
  2055. {
  2056. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  2057. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  2058. if (zlTransCode.Equals(BusinessCode))
  2059. {
  2060. isDis = true;
  2061. if (Enable.Equals("True"))
  2062. {
  2063. ///更新日志
  2064. sql = @"
  2065. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}')
  2066. BEGIN
  2067. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  2068. RETURN
  2069. END
  2070. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  2071. ";
  2072. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  2073. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2074. {
  2075. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  2076. }
  2077. ///更新库存
  2078. sql = @"
  2079. UPDATE ICSWareHouseLotInfo
  2080. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  2081. WHERE LotNo = '{0}'
  2082. AND WorkPoint = '{1}';
  2083. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2084. WHERE a.LotNo = '{0}'
  2085. AND a.WorkPoint = '{1}'
  2086. AND Quantity < 0)
  2087. BEGIN
  2088. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2089. RETURN
  2090. END
  2091. ";
  2092. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  2093. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2094. {
  2095. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2096. }
  2097. }
  2098. else
  2099. {
  2100. if (InvOQc.Equals("True"))
  2101. {
  2102. sql = @"select a.id from ICSWareHouseLotInfo a
  2103. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2104. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  2105. sql = string.Format(sql, LotNo, WorkPoint);
  2106. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  2107. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  2108. {
  2109. sql = @"select a.id from ICSWareHouseLotInfo a
  2110. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2111. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  2112. sql = string.Format(sql, LotNo, WorkPoint);
  2113. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  2114. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  2115. {
  2116. throw new Exception("条码在库检验,未检验完成,请确认!");
  2117. }
  2118. }
  2119. }
  2120. ///更新库存
  2121. sql = @"
  2122. UPDATE ICSWareHouseLotInfo
  2123. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  2124. WHERE LotNo = '{0}'
  2125. AND WorkPoint = '{1}';
  2126. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2127. WHERE a.LotNo = '{0}'
  2128. AND a.WorkPoint = '{1}'
  2129. AND Quantity < 0)
  2130. BEGIN
  2131. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2132. RETURN
  2133. END
  2134. ";
  2135. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  2136. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2137. {
  2138. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2139. }
  2140. }
  2141. }
  2142. // else { throw new Exception("单据类型未配置!"); }
  2143. }
  2144. }
  2145. }
  2146. else
  2147. {
  2148. if (LotEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  2149. {
  2150. ZLtable = ICSControlModeService.GetZL();
  2151. if (ZLtable == null)
  2152. {
  2153. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  2154. }
  2155. for (int i = 0; i < ZLtable.Rows.Count; i++)
  2156. {
  2157. string zlName = ZLtable.Rows[i]["Name"].ToString();
  2158. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  2159. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  2160. if (zlTransCode.Equals(BusinessCode))
  2161. {
  2162. if (Enable.Equals("True"))
  2163. {
  2164. ///更新日志
  2165. sql = @"
  2166. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}')
  2167. BEGIN
  2168. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  2169. RETURN
  2170. END
  2171. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  2172. ";
  2173. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  2174. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2175. {
  2176. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  2177. }
  2178. ///更新库存
  2179. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  2180. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  2181. FROM ICSReserve b
  2182. INNER JOIN ICSWareHouseLotInfo a
  2183. ON a.invcode = b.invcode
  2184. AND a.workpoint = b.workpoint
  2185. AND a.warehousecode = b.whcode
  2186. WHERE '{4}' < b.Quantity
  2187. AND b.invcode = '{3}'
  2188. AND GETDATE() > b.BeginTime
  2189. AND GETDATE() < b.EndTime;
  2190. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  2191. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  2192. AND a.workpoint=b.workpoint
  2193. AND a.warehousecode=b.whcode
  2194. WHERE a.invcode='{3}'
  2195. AND a.workpoint='{1}'
  2196. AND SYSDATETIME() > b.BeginTime
  2197. AND SYSDATETIME() < b.EndTime
  2198. AND b.enable='1')
  2199. BEGIN
  2200. IF @ReservedQuantity IS NOT NULL
  2201. BEGIN
  2202. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  2203. RETURN
  2204. END
  2205. END
  2206. UPDATE ICSWareHouseLotInfo
  2207. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  2208. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  2209. WHERE LotNo = '{0}'
  2210. AND WorkPoint = '{1}';
  2211. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2212. WHERE a.LotNo = '{0}'
  2213. AND a.WorkPoint = '{1}'
  2214. AND Quantity - LockQuantity < 0)
  2215. BEGIN
  2216. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2217. RETURN
  2218. END
  2219. ";
  2220. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY, TransCode, TransSequence);
  2221. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2222. {
  2223. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2224. }
  2225. }
  2226. else
  2227. {
  2228. if (InvOQc.Equals("True"))
  2229. {
  2230. sql = @"select a.id from ICSWareHouseLotInfo a
  2231. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2232. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  2233. sql = string.Format(sql, LotNo, WorkPoint);
  2234. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  2235. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  2236. {
  2237. sql = @"select a.id from ICSWareHouseLotInfo a
  2238. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2239. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  2240. sql = string.Format(sql, LotNo, WorkPoint);
  2241. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  2242. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  2243. {
  2244. throw new Exception("条码在库检验,未检验完成,请确认!");
  2245. }
  2246. }
  2247. }
  2248. ///更新库存
  2249. sql = @"
  2250. UPDATE ICSWareHouseLotInfo
  2251. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  2252. WHERE LotNo = '{0}'
  2253. AND WorkPoint = '{1}';
  2254. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2255. WHERE a.LotNo = '{0}'
  2256. AND a.WorkPoint = '{1}'
  2257. AND Quantity < 0)
  2258. BEGIN
  2259. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2260. RETURN
  2261. END
  2262. ";
  2263. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  2264. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2265. {
  2266. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2267. }
  2268. }
  2269. }
  2270. }
  2271. ///分批前添加日志
  2272. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2273. BEGIN
  2274. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2275. RETURN
  2276. END
  2277. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2278. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2279. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2280. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2281. MTIME,WorkPoint,EATTRIBUTE1)
  2282. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  2283. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  2284. '','0','{4}','31','0','',
  2285. '','','',f.F_Account ,f.F_RealName ,
  2286. SYSDATETIME() ,a.WorkPoint ,''
  2287. FROM ICSInventoryLot a
  2288. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2289. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2290. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2291. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2292. ";
  2293. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  2294. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2295. {
  2296. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2297. }
  2298. #region 获取分批后的条码(lotstr)
  2299. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  2300. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  2301. sql = string.Format(sql, LotNo, WorkPoint);
  2302. dt = DBHelper.SQlReturnData(sql, cmd);
  2303. if (dt.Rows.Count == 0)
  2304. {
  2305. lotstr = LotNo + "-" + 1;
  2306. }
  2307. else
  2308. {
  2309. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  2310. }
  2311. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  2312. #endregion
  2313. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  2314. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  2315. Quantity,Amount,ExtensionID,Type,PrintTimes,
  2316. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  2317. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  2318. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  2319. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  2320. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  2321. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  2322. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  2323. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  2324. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  2325. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  2326. From ICSInventoryLot a
  2327. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  2328. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  2329. cmd.CommandText = sql;
  2330. result = cmd.ExecuteNonQuery();
  2331. if (result <= 0)
  2332. {
  2333. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  2334. }
  2335. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  2336. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  2337. ,MUSER,MUSERName,GETDATE(),'{3}',''
  2338. from ICSWareHouseLotInfo
  2339. where LotNO='{1}' AND WorkPoint='{3}'";
  2340. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  2341. cmd.CommandText = sql;
  2342. result = cmd.ExecuteNonQuery();
  2343. if (result <= 0)
  2344. {
  2345. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  2346. }
  2347. //插入条码单据表
  2348. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  2349. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  2350. FROM ICSInventoryLot a
  2351. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2352. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2353. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  2354. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  2355. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2356. {
  2357. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  2358. }
  2359. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2360. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2361. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2362. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2363. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2364. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  2365. c.WarehouseCode,c.LocationCode,'','','{6}',
  2366. '','0','{7}','{8}','0','',
  2367. '','','',f.F_Account ,f.F_RealName ,
  2368. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2369. FROM ICSInventoryLot a
  2370. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2371. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2372. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2373. ";
  2374. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  2375. cmd.CommandText = sql;
  2376. result = cmd.ExecuteNonQuery();
  2377. if (result <= 0)
  2378. {
  2379. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  2380. }
  2381. ///添加日志
  2382. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2383. BEGIN
  2384. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2385. RETURN
  2386. END
  2387. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2388. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2389. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2390. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2391. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2392. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  2393. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  2394. '','0','{7}','32','0','',
  2395. '','','',f.F_Account ,f.F_RealName ,
  2396. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2397. FROM ICSInventoryLot a
  2398. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2399. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2400. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2401. ";
  2402. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  2403. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2404. {
  2405. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2406. }
  2407. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  2408. {
  2409. string PrintData = DBHelper.ReadPrintStream();
  2410. sql = @"" + PrintData + "";
  2411. //sql = @"select A.LotNO AS OLDLotNo , C.Quantity AS OLDLotQty, A.eattribute1 as LotNo, B.Quantity AS LotQty ,b.InvCode,d.InvStd,d.InvName,b.MTime,A.TransCode
  2412. // from ICSWareHouseLotInfolog A
  2413. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  2414. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  2415. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  2416. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  2417. // ";
  2418. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  2419. log.Debug("打印数据源:" + sql);
  2420. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  2421. lstDt = dtLotno;
  2422. }
  2423. #endregion
  2424. }
  2425. else
  2426. {
  2427. NewBarCodeList.Add(LotNo);
  2428. ///添加日志
  2429. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2430. BEGIN
  2431. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2432. RETURN
  2433. END
  2434. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2435. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2436. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2437. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2438. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2439. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  2440. c.WarehouseCode,c.LocationCode,'','','{6}',
  2441. '','0','{7}','{8}','0','',
  2442. '','','',f.F_Account ,f.F_RealName ,
  2443. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2444. FROM ICSInventoryLot a
  2445. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2446. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2447. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2448. ";
  2449. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  2450. log.Debug("出库日志" + sql);
  2451. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2452. {
  2453. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2454. }
  2455. ZLtable = ICSControlModeService.GetZL();
  2456. if (ZLtable == null)
  2457. {
  2458. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  2459. }
  2460. for (int i = 0; i < ZLtable.Rows.Count; i++)
  2461. {
  2462. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  2463. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  2464. if (zlTransCode.Equals(BusinessCode))
  2465. {
  2466. isDis = true;
  2467. if (Enable.Equals("True"))
  2468. {
  2469. ///更新日志
  2470. sql = @"
  2471. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}')
  2472. BEGIN
  2473. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  2474. RETURN
  2475. END
  2476. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  2477. ";
  2478. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  2479. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2480. {
  2481. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  2482. }
  2483. ///更新库存
  2484. sql = @"
  2485. UPDATE ICSWareHouseLotInfo
  2486. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  2487. WHERE LotNo = '{0}'
  2488. AND WorkPoint = '{1}';
  2489. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2490. WHERE a.LotNo = '{0}'
  2491. AND a.WorkPoint = '{1}'
  2492. AND Quantity < 0)
  2493. BEGIN
  2494. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2495. RETURN
  2496. END
  2497. ";
  2498. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  2499. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2500. {
  2501. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2502. }
  2503. }
  2504. else
  2505. {
  2506. if (InvOQc.Equals("True"))
  2507. {
  2508. sql = @"select a.id from ICSWareHouseLotInfo a
  2509. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2510. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  2511. sql = string.Format(sql, LotNo, WorkPoint);
  2512. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  2513. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  2514. {
  2515. sql = @"select a.id from ICSWareHouseLotInfo a
  2516. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2517. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  2518. sql = string.Format(sql, LotNo, WorkPoint);
  2519. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  2520. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  2521. {
  2522. throw new Exception("条码在库检验,未检验完成,请确认!");
  2523. }
  2524. }
  2525. }
  2526. ///更新库存
  2527. sql = @"
  2528. UPDATE ICSWareHouseLotInfo
  2529. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  2530. WHERE LotNo = '{0}'
  2531. AND WorkPoint = '{1}';
  2532. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2533. WHERE a.LotNo = '{0}'
  2534. AND a.WorkPoint = '{1}'
  2535. AND Quantity < 0)
  2536. BEGIN
  2537. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2538. RETURN
  2539. END
  2540. ";
  2541. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  2542. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2543. {
  2544. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2545. }
  2546. }
  2547. }
  2548. // else { throw new Exception("单据类型未配置!"); }
  2549. }
  2550. //if (isDis == false)
  2551. //{
  2552. // throw new Exception("单据类型未配置!");
  2553. //}
  2554. /////更新库存
  2555. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2556. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  2557. // BEGIN
  2558. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2559. // RETURN
  2560. // END";
  2561. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  2562. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2563. //{
  2564. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2565. //}
  2566. }
  2567. }
  2568. }
  2569. catch (Exception)
  2570. {
  2571. throw;
  2572. }
  2573. return lstDt;
  2574. }
  2575. /// <summary>
  2576. /// 减少库存(库存表四舍五入)
  2577. /// </summary>
  2578. /// <param name="Identification"></param>
  2579. /// <param name="TransCode"></param>
  2580. /// <param name="TransSequence"></param>
  2581. /// <param name="LotNo"></param>
  2582. /// <param name="Quantity"></param>
  2583. /// <param name="User"></param>
  2584. /// <param name="WorkPoint"></param>
  2585. /// <param name="TransType"></param>
  2586. /// <param name="BusinessCode"></param>
  2587. /// <param name="cmd"></param>
  2588. /// <param name="language"></param>
  2589. /// <param name="LogID"></param>
  2590. /// <param name="TransID"></param>
  2591. /// <param name="MergeID"></param>
  2592. /// <returns></returns>
  2593. public static DataTable WareHouseLotInfoDownRound(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  2594. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string TransID, string MergeID = "")
  2595. {
  2596. decimal LotQTYYY = 0;
  2597. decimal LotQTY = 0;
  2598. decimal SUMQTY = 0;
  2599. string INVCODE = "";
  2600. string Inspect = "";
  2601. string LotEnable = "";
  2602. string LotDocEnable = "";
  2603. string InvOQc = "";
  2604. string chekEnable = "";
  2605. string DisPrintEnable = "";
  2606. string PrintEnable = "";
  2607. string sql = "";
  2608. string lotstr = "";
  2609. string RoundedQuantity = Quantity;//记录四舍五入后的数量
  2610. int result = 0;
  2611. bool isDis = false;
  2612. List<string> NewBarCodeList = new List<string>();
  2613. DataTable dtLotno = new DataTable();
  2614. DataTable lstDt = new DataTable();
  2615. DataTable ZLtable = new DataTable();
  2616. try
  2617. {
  2618. //获取小数位数
  2619. sql = @"SELECT Figure FROM ICSConfiguration WHERE Code='Figure001' AND WorkPoint='{0}'";
  2620. sql = string.Format(sql, WorkPoint);
  2621. int figureNum = (int)(DBHelper.ExecuteScalar(sql, cmd));
  2622. //进行四舍五入操作
  2623. if(decimal.TryParse(Quantity,out decimal numericQuantity))
  2624. {
  2625. RoundedQuantity = Math.Round(numericQuantity,figureNum).ToString();
  2626. }
  2627. //检验是否分批
  2628. sql = @"SELECT b.LotEnable,b.PrintEnable,b.InvOQC,b.LotDocEnable FROM ICSInventoryLot a
  2629. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  2630. where a.LotNo='{0}' and a.WorkPoint='{1}'
  2631. ";
  2632. sql = string.Format(sql, LotNo, WorkPoint);
  2633. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2634. if (dt.Rows.Count == 0)
  2635. {
  2636. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  2637. }
  2638. else
  2639. {
  2640. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  2641. LotDocEnable = dt.Rows[0]["LotDocEnable"].ToString();
  2642. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  2643. InvOQc = dt.Rows[0]["InvOQC"].ToString();
  2644. }
  2645. log.Debug("INVOQC:" + InvOQc);
  2646. string cheksql = @"IF NOT EXISTS(select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  2647. from Sys_SRM_Items a
  2648. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  2649. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  2650. BEGIN
  2651. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  2652. RETURN
  2653. END
  2654. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  2655. from Sys_SRM_Items a
  2656. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  2657. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  2658. ";
  2659. cheksql = string.Format(cheksql, BusinessCode);
  2660. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  2661. if (chekdt.Rows.Count == 0)
  2662. {
  2663. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  2664. }
  2665. else
  2666. {
  2667. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  2668. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  2669. }
  2670. sql = @"select Quantity,invcode,Inspect from ICSWareHouseLotInfo
  2671. where LotNO='{0}' AND WorkPoint='{1}'";
  2672. sql = string.Format(sql, LotNo, WorkPoint);
  2673. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  2674. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  2675. LotQTY = Convert.ToDecimal(RoundedQuantity);
  2676. INVCODE = dtt.Rows[0]["invcode"].ToString();
  2677. Inspect = dtt.Rows[0]["Inspect"].ToString();
  2678. sql = @"SELECT SUM(a.quantity)-'{3}' AS SumQTY FROM ICSWareHouseLotInfo a
  2679. INNER JOIN ICSReserve b ON a.invcode=b.invcode and a.workpoint=b.workpoint
  2680. where a.invcode='{2}' and a.workpoint='{1}' and GETDATE()>b.BeginTime and GETDATE()<b.EndTime";
  2681. sql = string.Format(sql, LotNo, WorkPoint, INVCODE, RoundedQuantity);
  2682. DataTable Sumdtt = DBHelper.SQlReturnData(sql, cmd);
  2683. log.Debug(Sumdtt.Rows[0]["SumQTY"]);
  2684. SUMQTY = 0;
  2685. //Convert.ToDecimal(Sumdtt.Rows[0]["SumQTY"]);
  2686. if (LotDocEnable.Equals("True"))
  2687. {
  2688. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  2689. {
  2690. ZLtable = ICSControlModeService.GetZL();
  2691. if (ZLtable == null)
  2692. {
  2693. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  2694. }
  2695. for (int i = 0; i < ZLtable.Rows.Count; i++)
  2696. {
  2697. string zlName = ZLtable.Rows[i]["Name"].ToString();
  2698. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  2699. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  2700. if (zlTransCode.Equals(BusinessCode))
  2701. {
  2702. if (Enable.Equals("True"))
  2703. {
  2704. ///更新日志
  2705. sql = @"
  2706. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}')
  2707. BEGIN
  2708. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  2709. RETURN
  2710. END
  2711. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  2712. ";
  2713. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  2714. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2715. {
  2716. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  2717. }
  2718. ///更新库存
  2719. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  2720. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  2721. FROM ICSReserve b
  2722. INNER JOIN ICSWareHouseLotInfo a
  2723. ON a.invcode = b.invcode
  2724. AND a.workpoint = b.workpoint
  2725. AND a.warehousecode = b.whcode
  2726. WHERE '{4}' < b.Quantity
  2727. AND b.invcode = '{3}'
  2728. AND GETDATE() > b.BeginTime
  2729. AND GETDATE() < b.EndTime;
  2730. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  2731. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  2732. AND a.workpoint=b.workpoint
  2733. AND a.warehousecode=b.whcode
  2734. WHERE a.invcode='{3}'
  2735. AND a.workpoint='{1}'
  2736. AND SYSDATETIME() > b.BeginTime
  2737. AND SYSDATETIME() < b.EndTime
  2738. AND b.enable='1')
  2739. BEGIN
  2740. IF @ReservedQuantity IS NOT NULL
  2741. BEGIN
  2742. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  2743. RETURN
  2744. END
  2745. END
  2746. UPDATE ICSWareHouseLotInfo
  2747. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  2748. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  2749. WHERE LotNo = '{0}'
  2750. AND WorkPoint = '{1}';
  2751. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2752. WHERE a.LotNo = '{0}'
  2753. AND a.WorkPoint = '{1}'
  2754. AND Quantity - LockQuantity < 0)
  2755. BEGIN
  2756. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2757. RETURN
  2758. END
  2759. ";
  2760. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  2761. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2762. {
  2763. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2764. }
  2765. }
  2766. else
  2767. {
  2768. if (InvOQc.Equals("True"))
  2769. {
  2770. sql = @"select a.id from ICSWareHouseLotInfo a
  2771. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2772. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  2773. sql = string.Format(sql, LotNo, WorkPoint);
  2774. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  2775. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  2776. {
  2777. sql = @"select a.id from ICSWareHouseLotInfo a
  2778. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2779. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  2780. sql = string.Format(sql, LotNo, WorkPoint);
  2781. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  2782. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  2783. {
  2784. throw new Exception("条码在库检验,未检验完成,请确认!");
  2785. }
  2786. }
  2787. }
  2788. ///更新库存
  2789. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  2790. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  2791. FROM ICSReserve b
  2792. INNER JOIN ICSWareHouseLotInfo a
  2793. ON a.invcode = b.invcode
  2794. AND a.workpoint = b.workpoint
  2795. AND a.warehousecode = b.whcode
  2796. WHERE '{4}' < b.Quantity
  2797. AND b.invcode = '{3}'
  2798. AND GETDATE() > b.BeginTime
  2799. AND GETDATE() < b.EndTime;
  2800. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  2801. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  2802. AND a.workpoint=b.workpoint
  2803. AND a.warehousecode=b.whcode
  2804. WHERE a.invcode='{3}'
  2805. AND a.workpoint='{1}'
  2806. AND SYSDATETIME() > b.BeginTime
  2807. AND SYSDATETIME() < b.EndTime
  2808. AND b.enable='1')
  2809. BEGIN
  2810. IF @ReservedQuantity IS NOT NULL
  2811. BEGIN
  2812. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  2813. RETURN
  2814. END
  2815. END
  2816. UPDATE ICSWareHouseLotInfo
  2817. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  2818. WHERE LotNo = '{0}'
  2819. AND WorkPoint = '{1}';
  2820. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2821. WHERE a.LotNo = '{0}'
  2822. AND a.WorkPoint = '{1}'
  2823. AND Quantity - LockQuantity < 0)
  2824. BEGIN
  2825. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2826. RETURN
  2827. END
  2828. ";
  2829. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  2830. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2831. {
  2832. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2833. }
  2834. }
  2835. }
  2836. }
  2837. ///分批前添加日志
  2838. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2839. BEGIN
  2840. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2841. RETURN
  2842. END
  2843. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2844. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2845. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2846. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2847. MTIME,WorkPoint,EATTRIBUTE1)
  2848. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  2849. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  2850. '','0','{4}','31','0','',
  2851. '','','',f.F_Account ,f.F_RealName ,
  2852. SYSDATETIME() ,a.WorkPoint ,''
  2853. FROM ICSInventoryLot a
  2854. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2855. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2856. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2857. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2858. ";
  2859. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  2860. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2861. {
  2862. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2863. }
  2864. #region 获取分批后的条码(lotstr)
  2865. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  2866. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  2867. sql = string.Format(sql, LotNo, WorkPoint);
  2868. dt = DBHelper.SQlReturnData(sql, cmd);
  2869. if (dt.Rows.Count == 0)
  2870. {
  2871. lotstr = LotNo + "-" + 1;
  2872. }
  2873. else
  2874. {
  2875. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  2876. }
  2877. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  2878. #endregion
  2879. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  2880. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  2881. Quantity,Amount,ExtensionID,Type,PrintTimes,
  2882. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  2883. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  2884. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  2885. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  2886. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  2887. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  2888. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  2889. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  2890. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  2891. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  2892. From ICSInventoryLot a
  2893. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  2894. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  2895. cmd.CommandText = sql;
  2896. result = cmd.ExecuteNonQuery();
  2897. if (result <= 0)
  2898. {
  2899. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  2900. }
  2901. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  2902. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  2903. ,MUSER,MUSERName,GETDATE(),'{3}',''
  2904. from ICSWareHouseLotInfo
  2905. where LotNO='{1}' AND WorkPoint='{3}'";
  2906. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  2907. cmd.CommandText = sql;
  2908. result = cmd.ExecuteNonQuery();
  2909. if (result <= 0)
  2910. {
  2911. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  2912. }
  2913. //插入条码单据表
  2914. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  2915. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  2916. FROM ICSInventoryLot a
  2917. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2918. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2919. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  2920. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  2921. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2922. {
  2923. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  2924. }
  2925. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2926. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2927. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2928. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2929. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2930. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  2931. c.WarehouseCode,c.LocationCode,'','','{6}',
  2932. '','0','{7}','{8}','0','',
  2933. '','','',f.F_Account ,f.F_RealName ,
  2934. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2935. FROM ICSInventoryLot a
  2936. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2937. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2938. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2939. ";
  2940. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  2941. cmd.CommandText = sql;
  2942. result = cmd.ExecuteNonQuery();
  2943. if (result <= 0)
  2944. {
  2945. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  2946. }
  2947. ///添加日志
  2948. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2949. BEGIN
  2950. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2951. RETURN
  2952. END
  2953. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2954. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2955. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2956. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2957. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2958. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  2959. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  2960. '','0','{7}','32','0','',
  2961. '','','',f.F_Account ,f.F_RealName ,
  2962. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2963. FROM ICSInventoryLot a
  2964. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2965. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2966. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2967. ";
  2968. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  2969. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2970. {
  2971. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2972. }
  2973. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  2974. {
  2975. string PrintData = DBHelper.ReadPrintStream();
  2976. sql = @"" + PrintData + "";
  2977. //sql = @"select A.LotNO AS OLDLotNo , C.Quantity AS OLDLotQty, A.eattribute1 as LotNo, B.Quantity AS LotQty ,b.InvCode,d.InvStd,d.InvName,b.MTime,A.TransCode
  2978. // from ICSWareHouseLotInfolog A
  2979. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  2980. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  2981. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  2982. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  2983. // ";
  2984. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  2985. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  2986. lstDt = dtLotno;
  2987. }
  2988. #endregion
  2989. }
  2990. else
  2991. {
  2992. NewBarCodeList.Add(LotNo);
  2993. ///添加日志
  2994. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2995. BEGIN
  2996. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2997. RETURN
  2998. END
  2999. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3000. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3001. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3002. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3003. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3004. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3005. c.WarehouseCode,c.LocationCode,'','','{6}',
  3006. '','0','{7}','{8}','0','',
  3007. '','','',f.F_Account ,f.F_RealName ,
  3008. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3009. FROM ICSInventoryLot a
  3010. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3011. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3012. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3013. ";
  3014. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3015. log.Debug("出库日志" + sql);
  3016. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3017. {
  3018. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3019. }
  3020. ZLtable = ICSControlModeService.GetZL();
  3021. if (ZLtable == null)
  3022. {
  3023. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3024. }
  3025. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3026. {
  3027. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3028. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3029. if (zlTransCode.Equals(BusinessCode))
  3030. {
  3031. isDis = true;
  3032. if (Enable.Equals("True"))
  3033. {
  3034. ///更新日志
  3035. sql = @"
  3036. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}')
  3037. BEGIN
  3038. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3039. RETURN
  3040. END
  3041. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  3042. ";
  3043. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  3044. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3045. {
  3046. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3047. }
  3048. ///更新库存
  3049. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3050. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3051. FROM ICSReserve b
  3052. INNER JOIN ICSWareHouseLotInfo a
  3053. ON a.invcode = b.invcode
  3054. AND a.workpoint = b.workpoint
  3055. AND a.warehousecode = b.whcode
  3056. WHERE '{4}' < b.Quantity
  3057. AND b.invcode = '{3}'
  3058. AND GETDATE() > b.BeginTime
  3059. AND GETDATE() < b.EndTime;
  3060. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3061. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3062. AND a.workpoint=b.workpoint
  3063. AND a.warehousecode=b.whcode
  3064. WHERE a.invcode='{3}'
  3065. AND a.workpoint='{1}'
  3066. AND SYSDATETIME() > b.BeginTime
  3067. AND SYSDATETIME() < b.EndTime
  3068. AND b.enable='1')
  3069. BEGIN
  3070. IF @ReservedQuantity IS NOT NULL
  3071. BEGIN
  3072. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3073. RETURN
  3074. END
  3075. END
  3076. UPDATE ICSWareHouseLotInfo
  3077. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  3078. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  3079. WHERE LotNo = '{0}'
  3080. AND WorkPoint = '{1}';
  3081. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3082. WHERE a.LotNo = '{0}'
  3083. AND a.WorkPoint = '{1}'
  3084. AND Quantity - LockQuantity < 0)
  3085. BEGIN
  3086. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3087. RETURN
  3088. END
  3089. ";
  3090. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  3091. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3092. {
  3093. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3094. }
  3095. }
  3096. else
  3097. {
  3098. if (InvOQc.Equals("True"))
  3099. {
  3100. sql = @"select a.id from ICSWareHouseLotInfo a
  3101. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3102. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  3103. sql = string.Format(sql, LotNo, WorkPoint);
  3104. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  3105. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  3106. {
  3107. sql = @"select a.id from ICSWareHouseLotInfo a
  3108. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3109. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  3110. sql = string.Format(sql, LotNo, WorkPoint);
  3111. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  3112. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  3113. {
  3114. throw new Exception("条码在库检验,未检验完成,请确认!");
  3115. }
  3116. }
  3117. }
  3118. ///更新库存
  3119. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3120. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3121. FROM ICSReserve b
  3122. INNER JOIN ICSWareHouseLotInfo a
  3123. ON a.invcode = b.invcode
  3124. AND a.workpoint = b.workpoint
  3125. AND a.warehousecode = b.whcode
  3126. WHERE '{4}' < b.Quantity
  3127. AND b.invcode = '{3}'
  3128. AND GETDATE() > b.BeginTime
  3129. AND GETDATE() < b.EndTime;
  3130. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3131. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3132. AND a.workpoint=b.workpoint
  3133. AND a.warehousecode=b.whcode
  3134. WHERE a.invcode='{3}'
  3135. AND a.workpoint='{1}'
  3136. AND SYSDATETIME() > b.BeginTime
  3137. AND SYSDATETIME() < b.EndTime
  3138. AND b.enable='1')
  3139. BEGIN
  3140. IF @ReservedQuantity IS NOT NULL
  3141. BEGIN
  3142. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3143. RETURN
  3144. END
  3145. END
  3146. UPDATE ICSWareHouseLotInfo
  3147. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  3148. WHERE LotNo = '{0}'
  3149. AND WorkPoint = '{1}';
  3150. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3151. WHERE a.LotNo = '{0}'
  3152. AND a.WorkPoint = '{1}'
  3153. AND Quantity - LockQuantity < 0)
  3154. BEGIN
  3155. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3156. RETURN
  3157. END
  3158. ";
  3159. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  3160. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3161. {
  3162. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3163. }
  3164. }
  3165. }
  3166. // else { throw new Exception("单据类型未配置!"); }
  3167. }
  3168. //if (isDis == false)
  3169. //{
  3170. // throw new Exception("单据类型未配置!");
  3171. //}
  3172. /////更新库存
  3173. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3174. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  3175. // BEGIN
  3176. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3177. // RETURN
  3178. // END";
  3179. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3180. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3181. //{
  3182. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3183. //}
  3184. }
  3185. }
  3186. else
  3187. {
  3188. if (LotEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  3189. {
  3190. ZLtable = ICSControlModeService.GetZL();
  3191. if (ZLtable == null)
  3192. {
  3193. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3194. }
  3195. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3196. {
  3197. string zlName = ZLtable.Rows[i]["Name"].ToString();
  3198. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3199. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3200. if (zlTransCode.Equals(BusinessCode))
  3201. {
  3202. if (Enable.Equals("True"))
  3203. {
  3204. ///更新日志
  3205. sql = @"
  3206. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}')
  3207. BEGIN
  3208. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3209. RETURN
  3210. END
  3211. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  3212. ";
  3213. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  3214. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3215. {
  3216. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3217. }
  3218. ///更新库存
  3219. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3220. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3221. FROM ICSReserve b
  3222. INNER JOIN ICSWareHouseLotInfo a
  3223. ON a.invcode = b.invcode
  3224. AND a.workpoint = b.workpoint
  3225. AND a.warehousecode = b.whcode
  3226. WHERE '{4}' < b.Quantity
  3227. AND b.invcode = '{3}'
  3228. AND GETDATE() > b.BeginTime
  3229. AND GETDATE() < b.EndTime;
  3230. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3231. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3232. AND a.workpoint=b.workpoint
  3233. AND a.warehousecode=b.whcode
  3234. WHERE a.invcode='{3}'
  3235. AND a.workpoint='{1}'
  3236. AND SYSDATETIME() > b.BeginTime
  3237. AND SYSDATETIME() < b.EndTime
  3238. AND b.enable='1')
  3239. BEGIN
  3240. IF @ReservedQuantity IS NOT NULL
  3241. BEGIN
  3242. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3243. RETURN
  3244. END
  3245. END
  3246. UPDATE ICSWareHouseLotInfo
  3247. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  3248. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  3249. WHERE LotNo = '{0}'
  3250. AND WorkPoint = '{1}';
  3251. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3252. WHERE a.LotNo = '{0}'
  3253. AND a.WorkPoint = '{1}'
  3254. AND Quantity - LockQuantity < 0)
  3255. BEGIN
  3256. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3257. RETURN
  3258. END
  3259. ";
  3260. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY, TransCode, TransSequence);
  3261. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3262. {
  3263. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3264. }
  3265. }
  3266. else
  3267. {
  3268. if (InvOQc.Equals("True"))
  3269. {
  3270. sql = @"select a.id from ICSWareHouseLotInfo a
  3271. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3272. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  3273. sql = string.Format(sql, LotNo, WorkPoint);
  3274. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  3275. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  3276. {
  3277. sql = @"select a.id from ICSWareHouseLotInfo a
  3278. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3279. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  3280. sql = string.Format(sql, LotNo, WorkPoint);
  3281. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  3282. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  3283. {
  3284. throw new Exception("条码在库检验,未检验完成,请确认!");
  3285. }
  3286. }
  3287. }
  3288. ///更新库存
  3289. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3290. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3291. FROM ICSReserve b
  3292. INNER JOIN ICSWareHouseLotInfo a
  3293. ON a.invcode = b.invcode
  3294. AND a.workpoint = b.workpoint
  3295. AND a.warehousecode = b.whcode
  3296. WHERE '{4}' < b.Quantity
  3297. AND b.invcode = '{3}'
  3298. AND GETDATE() > b.BeginTime
  3299. AND GETDATE() < b.EndTime;
  3300. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3301. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3302. AND a.workpoint=b.workpoint
  3303. AND a.warehousecode=b.whcode
  3304. WHERE a.invcode='{3}'
  3305. AND a.workpoint='{1}'
  3306. AND SYSDATETIME() > b.BeginTime
  3307. AND SYSDATETIME() < b.EndTime
  3308. AND b.enable='1')
  3309. BEGIN
  3310. IF @ReservedQuantity IS NOT NULL
  3311. BEGIN
  3312. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3313. RETURN
  3314. END
  3315. END
  3316. UPDATE ICSWareHouseLotInfo
  3317. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  3318. WHERE LotNo = '{0}'
  3319. AND WorkPoint = '{1}';
  3320. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3321. WHERE a.LotNo = '{0}'
  3322. AND a.WorkPoint = '{1}'
  3323. AND Quantity - LockQuantity < 0)
  3324. BEGIN
  3325. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3326. RETURN
  3327. END
  3328. ";
  3329. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  3330. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3331. {
  3332. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3333. }
  3334. }
  3335. }
  3336. }
  3337. ///分批前添加日志
  3338. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3339. BEGIN
  3340. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3341. RETURN
  3342. END
  3343. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3344. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3345. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3346. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3347. MTIME,WorkPoint,EATTRIBUTE1)
  3348. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  3349. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  3350. '','0','{4}','31','0','',
  3351. '','','',f.F_Account ,f.F_RealName ,
  3352. SYSDATETIME() ,a.WorkPoint ,''
  3353. FROM ICSInventoryLot a
  3354. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3355. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3356. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3357. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3358. ";
  3359. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  3360. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3361. {
  3362. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3363. }
  3364. #region 获取分批后的条码(lotstr)
  3365. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  3366. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  3367. sql = string.Format(sql, LotNo, WorkPoint);
  3368. dt = DBHelper.SQlReturnData(sql, cmd);
  3369. if (dt.Rows.Count == 0)
  3370. {
  3371. lotstr = LotNo + "-" + 1;
  3372. }
  3373. else
  3374. {
  3375. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  3376. }
  3377. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  3378. #endregion
  3379. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  3380. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  3381. Quantity,Amount,ExtensionID,Type,PrintTimes,
  3382. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  3383. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  3384. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  3385. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  3386. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  3387. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  3388. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  3389. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  3390. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  3391. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  3392. From ICSInventoryLot a
  3393. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  3394. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  3395. cmd.CommandText = sql;
  3396. result = cmd.ExecuteNonQuery();
  3397. if (result <= 0)
  3398. {
  3399. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  3400. }
  3401. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3402. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  3403. ,MUSER,MUSERName,GETDATE(),'{3}',''
  3404. from ICSWareHouseLotInfo
  3405. where LotNO='{1}' AND WorkPoint='{3}'";
  3406. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  3407. cmd.CommandText = sql;
  3408. result = cmd.ExecuteNonQuery();
  3409. if (result <= 0)
  3410. {
  3411. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  3412. }
  3413. //插入条码单据表
  3414. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  3415. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  3416. FROM ICSInventoryLot a
  3417. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3418. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3419. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3420. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  3421. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3422. {
  3423. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  3424. }
  3425. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3426. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3427. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3428. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3429. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  3430. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  3431. c.WarehouseCode,c.LocationCode,'','','{6}',
  3432. '','0','{7}','{8}','0','',
  3433. '','','',f.F_Account ,f.F_RealName ,
  3434. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3435. FROM ICSInventoryLot a
  3436. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3437. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3438. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3439. ";
  3440. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  3441. cmd.CommandText = sql;
  3442. result = cmd.ExecuteNonQuery();
  3443. if (result <= 0)
  3444. {
  3445. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  3446. }
  3447. ///添加日志
  3448. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3449. BEGIN
  3450. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3451. RETURN
  3452. END
  3453. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3454. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3455. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3456. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3457. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3458. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3459. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  3460. '','0','{7}','32','0','',
  3461. '','','',f.F_Account ,f.F_RealName ,
  3462. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3463. FROM ICSInventoryLot a
  3464. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3465. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3466. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3467. ";
  3468. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3469. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3470. {
  3471. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3472. }
  3473. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  3474. {
  3475. string PrintData = DBHelper.ReadPrintStream();
  3476. sql = @"" + PrintData + "";
  3477. //sql = @"select A.LotNO AS OLDLotNo , C.Quantity AS OLDLotQty, A.eattribute1 as LotNo, B.Quantity AS LotQty ,b.InvCode,d.InvStd,d.InvName,b.MTime,A.TransCode
  3478. // from ICSWareHouseLotInfolog A
  3479. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  3480. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  3481. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  3482. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  3483. // ";
  3484. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  3485. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  3486. lstDt = dtLotno;
  3487. }
  3488. #endregion
  3489. }
  3490. else
  3491. {
  3492. NewBarCodeList.Add(LotNo);
  3493. ///添加日志
  3494. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3495. BEGIN
  3496. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3497. RETURN
  3498. END
  3499. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3500. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3501. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3502. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3503. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3504. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3505. c.WarehouseCode,c.LocationCode,'','','{6}',
  3506. '','0','{7}','{8}','0','',
  3507. '','','',f.F_Account ,f.F_RealName ,
  3508. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3509. FROM ICSInventoryLot a
  3510. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3511. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3512. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3513. ";
  3514. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3515. log.Debug("出库日志" + sql);
  3516. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3517. {
  3518. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3519. }
  3520. ZLtable = ICSControlModeService.GetZL();
  3521. if (ZLtable == null)
  3522. {
  3523. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3524. }
  3525. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3526. {
  3527. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3528. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3529. if (zlTransCode.Equals(BusinessCode))
  3530. {
  3531. isDis = true;
  3532. if (Enable.Equals("True"))
  3533. {
  3534. ///更新日志
  3535. sql = @"
  3536. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}')
  3537. BEGIN
  3538. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3539. RETURN
  3540. END
  3541. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  3542. ";
  3543. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  3544. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3545. {
  3546. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3547. }
  3548. ///更新库存
  3549. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3550. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3551. FROM ICSReserve b
  3552. INNER JOIN ICSWareHouseLotInfo a
  3553. ON a.invcode = b.invcode
  3554. AND a.workpoint = b.workpoint
  3555. AND a.warehousecode = b.whcode
  3556. WHERE '{4}' < b.Quantity
  3557. AND b.invcode = '{3}'
  3558. AND GETDATE() > b.BeginTime
  3559. AND GETDATE() < b.EndTime;
  3560. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3561. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3562. AND a.workpoint=b.workpoint
  3563. AND a.warehousecode=b.whcode
  3564. WHERE a.invcode='{3}'
  3565. AND a.workpoint='{1}'
  3566. AND SYSDATETIME() > b.BeginTime
  3567. AND SYSDATETIME() < b.EndTime
  3568. AND b.enable='1')
  3569. BEGIN
  3570. IF @ReservedQuantity IS NOT NULL
  3571. BEGIN
  3572. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3573. RETURN
  3574. END
  3575. END
  3576. UPDATE ICSWareHouseLotInfo
  3577. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  3578. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  3579. WHERE LotNo = '{0}'
  3580. AND WorkPoint = '{1}';
  3581. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3582. WHERE a.LotNo = '{0}'
  3583. AND a.WorkPoint = '{1}'
  3584. AND Quantity - LockQuantity < 0)
  3585. BEGIN
  3586. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3587. RETURN
  3588. END
  3589. ";
  3590. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  3591. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3592. {
  3593. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3594. }
  3595. }
  3596. else
  3597. {
  3598. if (InvOQc.Equals("True"))
  3599. {
  3600. sql = @"select a.id from ICSWareHouseLotInfo a
  3601. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3602. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  3603. sql = string.Format(sql, LotNo, WorkPoint);
  3604. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  3605. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  3606. {
  3607. sql = @"select a.id from ICSWareHouseLotInfo a
  3608. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3609. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  3610. sql = string.Format(sql, LotNo, WorkPoint);
  3611. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  3612. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  3613. {
  3614. throw new Exception("条码在库检验,未检验完成,请确认!");
  3615. }
  3616. }
  3617. }
  3618. ///更新库存
  3619. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3620. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3621. FROM ICSReserve b
  3622. INNER JOIN ICSWareHouseLotInfo a
  3623. ON a.invcode = b.invcode
  3624. AND a.workpoint = b.workpoint
  3625. AND a.warehousecode = b.whcode
  3626. WHERE '{4}' < b.Quantity
  3627. AND b.invcode = '{3}'
  3628. AND GETDATE() > b.BeginTime
  3629. AND GETDATE() < b.EndTime;
  3630. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3631. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3632. AND a.workpoint=b.workpoint
  3633. AND a.warehousecode=b.whcode
  3634. WHERE a.invcode='{3}'
  3635. AND a.workpoint='{1}'
  3636. AND SYSDATETIME() > b.BeginTime
  3637. AND SYSDATETIME() < b.EndTime
  3638. AND b.enable='1')
  3639. BEGIN
  3640. IF @ReservedQuantity IS NOT NULL
  3641. BEGIN
  3642. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3643. RETURN
  3644. END
  3645. END
  3646. UPDATE ICSWareHouseLotInfo
  3647. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  3648. WHERE LotNo = '{0}'
  3649. AND WorkPoint = '{1}';
  3650. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3651. WHERE a.LotNo = '{0}'
  3652. AND a.WorkPoint = '{1}'
  3653. AND Quantity - LockQuantity < 0)
  3654. BEGIN
  3655. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3656. RETURN
  3657. END
  3658. ";
  3659. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  3660. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3661. {
  3662. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3663. }
  3664. }
  3665. }
  3666. // else { throw new Exception("单据类型未配置!"); }
  3667. }
  3668. //if (isDis == false)
  3669. //{
  3670. // throw new Exception("单据类型未配置!");
  3671. //}
  3672. /////更新库存
  3673. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3674. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  3675. // BEGIN
  3676. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3677. // RETURN
  3678. // END";
  3679. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3680. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3681. //{
  3682. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3683. //}
  3684. }
  3685. }
  3686. }
  3687. catch (Exception)
  3688. {
  3689. throw;
  3690. }
  3691. return lstDt;
  3692. }
  3693. /// <summary>
  3694. /// 减少库存(奥美专用)
  3695. /// </summary>
  3696. /// <param name="Identification"></param>
  3697. /// <param name="TransCode"></param>
  3698. /// <param name="TransSequence"></param>
  3699. /// <param name="LotNo"></param>
  3700. /// <param name="Quantity"></param>
  3701. /// <param name="User"></param>
  3702. /// <param name="WorkPoint"></param>
  3703. /// <param name="TransType"></param>
  3704. /// <param name="BusinessCode"></param>
  3705. /// <param name="cmd"></param>
  3706. public static DataTable AMWareHouseLotInfoDown(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  3707. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string TransID, string MergeID = "")
  3708. {
  3709. decimal LotQTYYY = 0;
  3710. decimal LotQTY = 0;
  3711. string LotEnable = "";
  3712. string chekEnable = "";
  3713. string DisPrintEnable = "";
  3714. string PrintEnable = "";
  3715. string sql = "";
  3716. string lotstr = "";
  3717. int result = 0;
  3718. List<string> NewBarCodeList = new List<string>();
  3719. DataTable dtLotno = new DataTable();
  3720. DataTable lstDt = new DataTable();
  3721. DataTable ZLtable = new DataTable();
  3722. try
  3723. {
  3724. string amount = "";
  3725. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  3726. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3727. //sqql = string.Format(sqql, LotNo, WorkPoint);
  3728. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  3729. //amount = dtaa.Rows[0]["Amount"].ToString();
  3730. string chekksql = @"select c.EATTRIBUTE1 FROM ICSMOPick a
  3731. INNER JOIN ICSMO b ON a.MODetailID=b.MODetailID AND a.WorkPoint=b.WorkPoint
  3732. INNER JOIN ICSInventory c on a.InvCode=c.InvCode and a.WorkPoint=c.WorkPoint
  3733. WHERE b.MOCode='{0}' AND b.Sequence+'~'+a.Sequence='{3}' AND a.WorkPoint='{1}' and c.AmountEnable='1'";
  3734. chekksql = string.Format(chekksql, TransCode, WorkPoint, Quantity, TransSequence);
  3735. DataTable dta = DBHelper.SQlReturnData(chekksql, cmd);
  3736. if (dta.Rows.Count > 0)
  3737. {
  3738. Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  3739. }
  3740. //检验是否分批
  3741. sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  3742. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  3743. where a.LotNo='{0}' and a.WorkPoint='{1}'
  3744. ";
  3745. sql = string.Format(sql, LotNo, WorkPoint);
  3746. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  3747. if (dt.Rows.Count == 0)
  3748. {
  3749. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  3750. }
  3751. else
  3752. {
  3753. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  3754. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  3755. }
  3756. string cheksql = @"IF NOT EXISTS(select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  3757. from Sys_SRM_Items a
  3758. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  3759. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  3760. BEGIN
  3761. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  3762. RETURN
  3763. END
  3764. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  3765. from Sys_SRM_Items a
  3766. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  3767. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  3768. ";
  3769. cheksql = string.Format(cheksql, BusinessCode);
  3770. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  3771. if (chekdt.Rows.Count == 0)
  3772. {
  3773. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  3774. }
  3775. else
  3776. {
  3777. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  3778. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  3779. }
  3780. sql = @"select Quantity from ICSWareHouseLotInfo
  3781. where LotNO='{0}' AND WorkPoint='{1}'";
  3782. sql = string.Format(sql, LotNo, WorkPoint);
  3783. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  3784. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  3785. LotQTY = Convert.ToDecimal(Quantity);
  3786. if (!LotEnable.Equals("False") && !chekEnable.Equals("False") && LotQTYYY - LotQTY > 0)
  3787. {
  3788. ZLtable = ICSControlModeService.GetZL();
  3789. if (ZLtable == null)
  3790. {
  3791. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3792. }
  3793. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3794. {
  3795. string zlName = ZLtable.Rows[i]["Name"].ToString();
  3796. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3797. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3798. if (zlTransCode.Equals(BusinessCode))
  3799. {
  3800. if (Enable.Equals("True"))
  3801. {
  3802. ///更新日志
  3803. sql = @"
  3804. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  3805. BEGIN
  3806. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3807. RETURN
  3808. END
  3809. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  3810. ";
  3811. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  3812. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3813. {
  3814. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3815. }
  3816. ///更新库存
  3817. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3818. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  3819. BEGIN
  3820. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3821. RETURN
  3822. END";
  3823. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3824. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3825. {
  3826. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3827. }
  3828. }
  3829. else
  3830. {
  3831. ///更新库存
  3832. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3833. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  3834. BEGIN
  3835. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3836. RETURN
  3837. END";
  3838. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3839. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3840. {
  3841. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3842. }
  3843. }
  3844. }
  3845. }
  3846. ///分批前添加日志
  3847. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3848. BEGIN
  3849. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3850. RETURN
  3851. END
  3852. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  3853. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3854. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3855. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3856. MTIME,WorkPoint,EATTRIBUTE1)
  3857. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  3858. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  3859. '','0','{4}','31','0','',
  3860. '','','',f.F_Account ,f.F_RealName ,
  3861. SYSDATETIME() ,a.WorkPoint ,''
  3862. FROM ICSInventoryLot a
  3863. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3864. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3865. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3866. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3867. ";
  3868. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  3869. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3870. {
  3871. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3872. }
  3873. #region 获取分批后的条码(lotstr)
  3874. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  3875. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  3876. sql = string.Format(sql, LotNo, WorkPoint);
  3877. dt = DBHelper.SQlReturnData(sql, cmd);
  3878. if (dt.Rows.Count == 0)
  3879. {
  3880. lotstr = LotNo + "-" + 1;
  3881. }
  3882. else
  3883. {
  3884. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  3885. }
  3886. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  3887. #endregion
  3888. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  3889. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  3890. Quantity,Amount,ExtensionID,Type,PrintTimes,
  3891. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  3892. WorkPoint,EATTRIBUTE1)
  3893. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  3894. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  3895. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  3896. a.WorkPoint ,'{1}'
  3897. From ICSInventoryLot a
  3898. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  3899. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  3900. cmd.CommandText = sql;
  3901. result = cmd.ExecuteNonQuery();
  3902. if (result <= 0)
  3903. {
  3904. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  3905. }
  3906. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3907. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  3908. ,MUSER,MUSERName,GETDATE(),'{3}',''
  3909. from ICSWareHouseLotInfo
  3910. where LotNO='{1}' AND WorkPoint='{3}'";
  3911. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  3912. cmd.CommandText = sql;
  3913. result = cmd.ExecuteNonQuery();
  3914. if (result <= 0)
  3915. {
  3916. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  3917. }
  3918. //插入条码单据表
  3919. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  3920. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  3921. FROM ICSInventoryLot a
  3922. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3923. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3924. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3925. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  3926. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3927. {
  3928. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  3929. }
  3930. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  3931. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3932. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3933. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3934. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  3935. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  3936. c.WarehouseCode,c.LocationCode,'','','{6}',
  3937. '','0','{7}','{8}','0','',
  3938. '','','',f.F_Account ,f.F_RealName ,
  3939. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3940. FROM ICSInventoryLot a
  3941. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3942. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3943. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3944. ";
  3945. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr);
  3946. cmd.CommandText = sql;
  3947. result = cmd.ExecuteNonQuery();
  3948. if (result <= 0)
  3949. {
  3950. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  3951. }
  3952. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  3953. {
  3954. sql = @"select A.LotNO AS OLDLotNo , C.Quantity AS OLDLotQty, A.eattribute1 as LotNo, B.Quantity AS LotQty ,b.InvCode,d.InvStd,d.InvName,b.MTime,A.TransCode
  3955. from ICSWareHouseLotInfolog A
  3956. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  3957. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  3958. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  3959. where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  3960. ";
  3961. sql = string.Format(sql, lotstr, WorkPoint, BusinessCode);
  3962. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  3963. lstDt = dtLotno;
  3964. }
  3965. ///添加日志
  3966. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3967. BEGIN
  3968. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3969. RETURN
  3970. END
  3971. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  3972. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3973. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3974. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3975. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3976. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  3977. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  3978. '','0','{7}','32','0','',
  3979. '','','',f.F_Account ,f.F_RealName ,
  3980. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3981. FROM ICSInventoryLot a
  3982. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3983. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3984. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3985. ";
  3986. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  3987. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3988. {
  3989. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3990. }
  3991. #endregion
  3992. }
  3993. else
  3994. {
  3995. NewBarCodeList.Add(LotNo);
  3996. ///添加日志
  3997. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3998. BEGIN
  3999. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4000. RETURN
  4001. END
  4002. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4003. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4004. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4005. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4006. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4007. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  4008. c.WarehouseCode,c.LocationCode,'','','{6}',
  4009. '','0','{7}','{8}','0','',
  4010. '','','',f.F_Account ,f.F_RealName ,
  4011. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4012. FROM ICSInventoryLot a
  4013. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4014. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4015. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4016. ";
  4017. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  4018. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4019. {
  4020. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4021. }
  4022. ZLtable = ICSControlModeService.GetZL();
  4023. if (ZLtable == null)
  4024. {
  4025. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  4026. }
  4027. for (int i = 0; i < ZLtable.Rows.Count; i++)
  4028. {
  4029. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  4030. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  4031. if (zlTransCode.Equals(BusinessCode))
  4032. {
  4033. if (Enable.Equals("True"))
  4034. {
  4035. ///更新日志
  4036. sql = @"
  4037. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  4038. BEGIN
  4039. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  4040. RETURN
  4041. END
  4042. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  4043. ";
  4044. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  4045. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4046. {
  4047. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  4048. }
  4049. ///更新库存
  4050. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4051. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  4052. BEGIN
  4053. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4054. RETURN
  4055. END";
  4056. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4057. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4058. {
  4059. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4060. }
  4061. }
  4062. else
  4063. {
  4064. ///更新库存
  4065. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4066. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  4067. BEGIN
  4068. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4069. RETURN
  4070. END";
  4071. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4072. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4073. {
  4074. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4075. }
  4076. }
  4077. }
  4078. }
  4079. /////更新库存
  4080. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4081. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  4082. // BEGIN
  4083. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4084. // RETURN
  4085. // END";
  4086. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4087. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4088. //{
  4089. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4090. //}
  4091. }
  4092. }
  4093. catch (Exception)
  4094. {
  4095. throw;
  4096. }
  4097. return lstDt;
  4098. }
  4099. /// <summary>
  4100. /// 无源头调拨
  4101. /// </summary>
  4102. /// <param name="LocationCode"></param>
  4103. /// <param name="LotNo"></param>
  4104. /// <param name="Quantity"></param>
  4105. /// <param name="User"></param>
  4106. /// <param name="WorkPoint"></param>
  4107. /// <param name="TransType"></param>
  4108. /// <param name="BusinessCode"></param>
  4109. /// <param name="cmd"></param>
  4110. public static DataTable WareHouseLotInfoNoTransfer(string Identification, string WarehouseCode, string LocationCode,
  4111. string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID, string Memo)
  4112. {
  4113. decimal LotQTYYY = 0;
  4114. decimal LotQTY = 0;
  4115. String LotEnable = "";
  4116. String PrintEnable = "";
  4117. String ToWareHouseCode = "";
  4118. String ToLocationCode = "";
  4119. string lotstr = "";
  4120. int result = 0;
  4121. DataTable dtLotno = new DataTable();
  4122. DataTable lstDt = new DataTable();
  4123. List<string> NewBarCodeList = new List<string>();
  4124. string sql = "";
  4125. try
  4126. {
  4127. //检验是否分批
  4128. sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  4129. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  4130. where a.LotNo='{0}' and a.WorkPoint='{1}'
  4131. ";
  4132. sql = string.Format(sql, LotNo, WorkPoint);
  4133. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  4134. if (dt.Rows.Count == 0)
  4135. {
  4136. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  4137. }
  4138. else
  4139. {
  4140. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  4141. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  4142. }
  4143. sql = @"select Quantity from ICSWareHouseLotInfo
  4144. where LotNO='{0}' AND WorkPoint='{1}'";
  4145. sql = string.Format(sql, LotNo, WorkPoint);
  4146. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  4147. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  4148. LotQTY = Convert.ToDecimal(Quantity);
  4149. if (!LotEnable.Equals("False") && LotQTYYY - LotQTY > 0)
  4150. {
  4151. ///更新库存
  4152. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4153. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  4154. BEGIN
  4155. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4156. RETURN
  4157. END";
  4158. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4159. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4160. {
  4161. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4162. }
  4163. ///分批前添加日志
  4164. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4165. BEGIN
  4166. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4167. RETURN
  4168. END
  4169. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4170. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4171. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4172. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4173. MTIME,WorkPoint,EATTRIBUTE1)
  4174. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  4175. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  4176. '','0','{4}','31','0','',
  4177. '','','',f.F_Account ,f.F_RealName ,
  4178. SYSDATETIME() ,a.WorkPoint ,''
  4179. FROM ICSInventoryLot a
  4180. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4181. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4182. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4183. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4184. ";
  4185. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity);
  4186. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4187. {
  4188. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4189. }
  4190. #region 获取分批后的条码(lotstr)
  4191. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  4192. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  4193. sql = string.Format(sql, LotNo, WorkPoint);
  4194. dt = DBHelper.SQlReturnData(sql, cmd);
  4195. if (dt.Rows.Count == 0)
  4196. {
  4197. lotstr = LotNo + "-" + 1;
  4198. }
  4199. else
  4200. {
  4201. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  4202. }
  4203. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  4204. #endregion
  4205. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  4206. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  4207. Quantity,Amount,ExtensionID,Type,PrintTimes,
  4208. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  4209. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  4210. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  4211. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  4212. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  4213. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  4214. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  4215. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  4216. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  4217. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  4218. From ICSInventoryLot a
  4219. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  4220. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  4221. cmd.CommandText = sql;
  4222. result = cmd.ExecuteNonQuery();
  4223. if (result <= 0)
  4224. {
  4225. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  4226. }
  4227. #endregion
  4228. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  4229. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  4230. ,MUSER,MUSERName,GETDATE(),'{3}',''
  4231. from ICSWareHouseLotInfo
  4232. where LotNO='{1}' AND WorkPoint='{3}'";
  4233. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  4234. cmd.CommandText = sql;
  4235. result = cmd.ExecuteNonQuery();
  4236. if (result <= 0)
  4237. {
  4238. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  4239. }
  4240. //插入条码单据表
  4241. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  4242. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  4243. FROM ICSInventoryLot a
  4244. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4245. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4246. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  4247. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  4248. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4249. {
  4250. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  4251. }
  4252. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4253. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4254. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4255. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4256. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  4257. SELECT NEWID(),'{3}','','','{8}' ,a.InvCode ,
  4258. c.WarehouseCode,c.LocationCode,'{9}','{10}','{4}',
  4259. '{11}','0','{5}','{6}','0','',
  4260. '','','',f.F_Account ,f.F_RealName ,
  4261. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  4262. FROM ICSInventoryLot a
  4263. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4264. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4265. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4266. ";
  4267. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode,Memo);
  4268. cmd.CommandText = sql;
  4269. result = cmd.ExecuteNonQuery();
  4270. if (result <= 0)
  4271. {
  4272. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  4273. }
  4274. ///添加日志
  4275. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4276. BEGIN
  4277. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4278. RETURN
  4279. END
  4280. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4281. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4282. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4283. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4284. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4285. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  4286. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  4287. '','0','{5}','32','0','',
  4288. '','','',f.F_Account ,f.F_RealName ,
  4289. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  4290. FROM ICSInventoryLot a
  4291. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4292. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4293. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4294. ";
  4295. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, MergeID);
  4296. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4297. {
  4298. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4299. }
  4300. if (PrintEnable.Equals("True"))
  4301. {
  4302. sql = @"select A.LotNO AS OLDLotNo , C.Quantity AS OLDLotQty, A.eattribute1 as LotNO, B.Quantity AS LotQty ,b.InvCode,d.INVSTD,d.INVNAME,b.MTIME,A.TransCode
  4303. from ICSWareHouseLotInfolog A
  4304. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  4305. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  4306. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  4307. where a.BusinessCode ='105'
  4308. and A.lotno like'{0}%' and a.workpoint='{1}'
  4309. ";
  4310. sql = string.Format(sql, LotNo, WorkPoint);
  4311. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  4312. lstDt = dtLotno;
  4313. }
  4314. }
  4315. else
  4316. {
  4317. ///添加日志
  4318. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4319. BEGIN
  4320. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4321. RETURN
  4322. END
  4323. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{7}' AND LocationCode='{8}' AND WorkPoint='{1}' AND LotNo = '{0}')
  4324. BEGIN
  4325. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  4326. RETURN
  4327. END
  4328. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4329. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4330. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4331. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4332. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4333. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  4334. c.WarehouseCode,c.LocationCode,'{7}','{8}',{4},
  4335. '{10}','0','{5}','{6}','0','',
  4336. '','','',f.F_Account ,f.F_RealName ,
  4337. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4338. FROM ICSInventoryLot a
  4339. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4340. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4341. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4342. ";
  4343. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID,Memo);
  4344. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4345. {
  4346. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4347. }
  4348. ///更新库存
  4349. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4350. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  4351. BEGIN
  4352. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4353. RETURN
  4354. END";
  4355. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  4356. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4357. {
  4358. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4359. }
  4360. }
  4361. }
  4362. catch (Exception)
  4363. {
  4364. log.Error(sql);
  4365. throw;
  4366. }
  4367. return lstDt;
  4368. }
  4369. /// <summary>
  4370. /// 修改库存
  4371. /// </summary>
  4372. /// <param name="Identification"></param>
  4373. /// <param name="TransCode"></param>
  4374. /// <param name="TransSequence"></param>
  4375. /// <param name="LotNo"></param>
  4376. /// <param name="Quantity"></param>
  4377. /// <param name="User"></param>
  4378. /// <param name="WorkPoint"></param>
  4379. /// <param name="TransType"></param>
  4380. /// <param name="cmd"></param>
  4381. public static void WareHouseLotInfoUpdate(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  4382. string WorkPoint, string TransType,string CheckKind, SqlCommand cmd, Dictionary<string, string> language)
  4383. {
  4384. try
  4385. {
  4386. ///添加日志
  4387. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4388. BEGIN
  4389. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4390. RETURN
  4391. END
  4392. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4393. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4394. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4395. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4396. MTIME,WorkPoint,EATTRIBUTE1)
  4397. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  4398. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  4399. '{8}','0','{6}','{7}','0','',
  4400. '','','',f.F_Account ,f.F_RealName ,
  4401. SYSDATETIME() ,a.WorkPoint ,''
  4402. FROM ICSWareHouseLotInfo a
  4403. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4404. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4405. ";
  4406. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckBefore.GetDescription<DBValue>(), CheckKind);
  4407. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4408. {
  4409. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4410. }
  4411. ///更新库存
  4412. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity='{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'";
  4413. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4414. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4415. {
  4416. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4417. }
  4418. ///添加日志
  4419. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4420. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4421. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4422. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4423. MTIME,WorkPoint,EATTRIBUTE1)
  4424. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  4425. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  4426. '{8}','0','{6}','{7}','0','',
  4427. '','','',f.F_Account ,f.F_RealName ,
  4428. SYSDATETIME() ,a.WorkPoint ,''
  4429. FROM ICSWareHouseLotInfo a
  4430. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4431. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4432. ";
  4433. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckAfter.GetDescription<DBValue>(), CheckKind);
  4434. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4435. {
  4436. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4437. }
  4438. }
  4439. catch (Exception)
  4440. {
  4441. throw;
  4442. }
  4443. }
  4444. /// <summary>
  4445. /// 调拨
  4446. /// </summary>
  4447. /// <param name="LocationCode"></param>
  4448. /// <param name="LotNo"></param>
  4449. /// <param name="Quantity"></param>
  4450. /// <param name="User"></param>
  4451. /// <param name="WorkPoint"></param>
  4452. /// <param name="TransType"></param>
  4453. /// <param name="BusinessCode"></param>
  4454. /// <param name="cmd"></param>
  4455. public static DataTable WareHouseLotInfoTransfer(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  4456. string LotNo, string Quantity, string User, string WorkPoint,string InWorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID)
  4457. {
  4458. decimal LotQTYYY = 0;
  4459. decimal LotQTY = 0;
  4460. String LotEnable = "";
  4461. String PrintEnable = "";
  4462. String chekEnable = "";
  4463. String DisPrintEnable = "";
  4464. string lotstr = "";
  4465. int result = 0;
  4466. DataTable dtLotno = new DataTable();
  4467. DataTable lstDt = new DataTable();
  4468. List<string> NewBarCodeList = new List<string>();
  4469. string Colspan = "";
  4470. string ProjectCode = "";
  4471. string BatchCode = "";
  4472. string Version = "";
  4473. string Brand = "";
  4474. string cFree1 = "";
  4475. string cFree2 = "";
  4476. string cFree3 = "";
  4477. string cFree4 = "";
  4478. string cFree5 = "";
  4479. string cFree6 = "";
  4480. string cFree7 = "";
  4481. string cFree8 = "";
  4482. string cFree9 = "";
  4483. string cFree10 = "";
  4484. string IDD = "";
  4485. try
  4486. {
  4487. //派纳不查站点
  4488. if (DBHelper.IsPNU9())
  4489. {
  4490. string cheksql = @"IF NOT EXISTS(select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  4491. from Sys_SRM_Items a
  4492. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  4493. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  4494. BEGIN
  4495. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  4496. RETURN
  4497. END
  4498. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  4499. from Sys_SRM_Items a
  4500. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  4501. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  4502. ";
  4503. cheksql = string.Format(cheksql, BusinessCode);
  4504. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  4505. if (chekdt.Rows.Count == 0)
  4506. {
  4507. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  4508. }
  4509. else
  4510. {
  4511. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  4512. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  4513. }
  4514. //检验是否分批
  4515. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  4516. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode --AND a.WorkPoint=b.WorkPoint
  4517. where a.LotNo='{0}'
  4518. ";
  4519. sql = string.Format(sql, LotNo, WorkPoint);
  4520. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  4521. if (dt.Rows.Count == 0)
  4522. {
  4523. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  4524. }
  4525. else
  4526. {
  4527. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  4528. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  4529. }
  4530. sql = @"select Quantity from ICSWareHouseLotInfo
  4531. where LotNO='{0}' ";
  4532. sql = string.Format(sql, LotNo, WorkPoint);
  4533. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  4534. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  4535. LotQTY = Convert.ToDecimal(Quantity);
  4536. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)//增加数量判断
  4537. {
  4538. ///更新库存
  4539. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' , WorkPoint='{3}' WHERE LotNo='{0}'
  4540. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<0)
  4541. BEGIN
  4542. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4543. RETURN
  4544. END";
  4545. sql = string.Format(sql, LotNo, WorkPoint, Quantity,InWorkPoint);
  4546. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4547. {
  4548. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4549. }
  4550. ///分批前添加日志
  4551. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4552. BEGIN
  4553. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4554. RETURN
  4555. END
  4556. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4557. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4558. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4559. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4560. MTIME,WorkPoint,EATTRIBUTE1)
  4561. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  4562. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  4563. '','0','{4}','31','0','',
  4564. '','','',f.F_Account ,f.F_RealName ,
  4565. SYSDATETIME() ,'{1}' ,''
  4566. FROM ICSInventoryLot a
  4567. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo --AND a.WorkPoint=b.WorkPoint
  4568. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  4569. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4570. WHERE a.LotNo='{0}'
  4571. ";
  4572. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  4573. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4574. {
  4575. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4576. }
  4577. #region 获取分批后的条码(lotstr)
  4578. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}'
  4579. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  4580. sql = string.Format(sql, LotNo, WorkPoint);
  4581. dt = DBHelper.SQlReturnData(sql, cmd);
  4582. if (dt.Rows.Count == 0)
  4583. {
  4584. lotstr = LotNo + "-" + 1;
  4585. }
  4586. else
  4587. {
  4588. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  4589. }
  4590. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  4591. #endregion
  4592. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  4593. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  4594. Quantity,Amount,ExtensionID,Type,PrintTimes,
  4595. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  4596. WorkPoint,EATTRIBUTE1)
  4597. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  4598. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  4599. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  4600. '{3}' ,'{1}'
  4601. From ICSInventoryLot a
  4602. where a.LotNo='{1}' ";
  4603. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  4604. cmd.CommandText = sql;
  4605. result = cmd.ExecuteNonQuery();
  4606. if (result <= 0)
  4607. {
  4608. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  4609. }
  4610. #endregion
  4611. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  4612. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  4613. ,MUSER,MUSERName,GETDATE(),'{3}',''
  4614. from ICSWareHouseLotInfo
  4615. where LotNO='{1}' ";
  4616. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  4617. cmd.CommandText = sql;
  4618. result = cmd.ExecuteNonQuery();
  4619. if (result <= 0)
  4620. {
  4621. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  4622. }
  4623. //插入条码单据表
  4624. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  4625. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  4626. FROM ICSInventoryLot a
  4627. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo --AND a.WorkPoint=b.WorkPoint
  4628. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4629. WHERE a.LotNo='{0}' ";
  4630. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  4631. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4632. {
  4633. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  4634. }
  4635. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4636. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4637. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4638. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4639. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  4640. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  4641. c.WarehouseCode,c.LocationCode,'{11}','{12}','{6}',
  4642. '','0','{7}','{8}','0','',
  4643. '','','',f.F_Account ,f.F_RealName ,
  4644. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4645. FROM ICSInventoryLot a
  4646. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  4647. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4648. WHERE a.LotNo='{0}'
  4649. ";
  4650. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
  4651. cmd.CommandText = sql;
  4652. result = cmd.ExecuteNonQuery();
  4653. if (result <= 0)
  4654. {
  4655. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  4656. }
  4657. ///添加日志
  4658. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4659. BEGIN
  4660. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4661. RETURN
  4662. END
  4663. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4664. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4665. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4666. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4667. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4668. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  4669. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  4670. '','0','{7}','32','0','',
  4671. '','','',f.F_Account ,f.F_RealName ,
  4672. SYSDATETIME() ,'{1}' ,'','{9}'
  4673. FROM ICSInventoryLot a
  4674. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  4675. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4676. WHERE a.LotNo='{0}'
  4677. ";
  4678. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  4679. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4680. {
  4681. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4682. }
  4683. if (PrintEnable.Equals("True"))
  4684. {
  4685. string PrintData = DBHelper.ReadFileStream();
  4686. //sql = @""+PrintData+"";
  4687. sql = @"select A.LotNO AS OLDLotNo , C.Quantity AS OLDLotQty, A.eattribute1 as LotNo, B.Quantity AS LotQty ,b.InvCode,d.InvStd,d.InvName,b.MTime,A.TransCode
  4688. from ICSWareHouseLotInfolog A
  4689. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  4690. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  4691. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  4692. where A.lotno like '%{0}%' and a.Identification='{3}' and a.BusinessCode='{2}'";
  4693. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  4694. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  4695. lstDt = dtLotno;
  4696. }
  4697. }
  4698. else
  4699. {
  4700. if (DBHelper.IsPNU9() && TransType == "14")
  4701. {
  4702. ///添加日志
  4703. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' )
  4704. BEGIN
  4705. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4706. RETURN
  4707. END
  4708. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND LotNo = '{0}')
  4709. BEGIN
  4710. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  4711. RETURN
  4712. END
  4713. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4714. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4715. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4716. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4717. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4718. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  4719. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  4720. '','0','{7}','{8}','0','',
  4721. '','','',f.F_Account ,f.F_RealName ,
  4722. SYSDATETIME() ,'{1}' ,'','{11}'
  4723. FROM ICSInventoryLot a
  4724. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  4725. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4726. WHERE a.LotNo='{0}'
  4727. ";
  4728. sql = string.Format(sql, LotNo, InWorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  4729. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4730. {
  4731. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4732. }
  4733. }
  4734. else
  4735. {
  4736. ///添加日志
  4737. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' )
  4738. BEGIN
  4739. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4740. RETURN
  4741. END
  4742. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND LotNo = '{0}')
  4743. BEGIN
  4744. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  4745. RETURN
  4746. END
  4747. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4748. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4749. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4750. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4751. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4752. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  4753. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  4754. '','0','{7}','{8}','0','',
  4755. '','','',f.F_Account ,f.F_RealName ,
  4756. SYSDATETIME() ,'{1}' ,'','{11}'
  4757. FROM ICSInventoryLot a
  4758. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  4759. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4760. WHERE a.LotNo='{0}'
  4761. ";
  4762. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  4763. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4764. {
  4765. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4766. }
  4767. }
  4768. if (DBHelper.IsPNU9() && TransType == "14")
  4769. {
  4770. ///更新库存
  4771. //sql = @"UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  4772. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  4773. // BEGIN
  4774. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4775. // RETURN
  4776. // END";
  4777. string upsql = @"select b.ProjectCode,b.BatchCode,b.Version,b.Brand,b.cFree1,b.cFree2,b.cFree3,
  4778. b.cFree4,b.cFree5,b.cFree6,b.cFree7,b.cFree8,b.cFree9,b.cFree10 from ICSInventoryLot a
  4779. INNER JOIN ICSExtension B on B.ID=A.ExtensionID
  4780. where a.lotno='{0}' and a.WorkPoint='{1}'";
  4781. upsql = string.Format(upsql, LotNo, WorkPoint);
  4782. DataTable Sumdtt = DBHelper.SQlReturnData(upsql, cmd);
  4783. ProjectCode = Sumdtt.Rows[0]["ProjectCode"].ToString();
  4784. BatchCode = Sumdtt.Rows[0]["BatchCode"].ToString();
  4785. Version = Sumdtt.Rows[0]["Version"].ToString();
  4786. Brand = Sumdtt.Rows[0]["Brand"].ToString();
  4787. cFree1 = Sumdtt.Rows[0]["cFree1"].ToString();
  4788. cFree2 = Sumdtt.Rows[0]["cFree2"].ToString();
  4789. cFree3 = Sumdtt.Rows[0]["cFree3"].ToString();
  4790. cFree4 = Sumdtt.Rows[0]["cFree4"].ToString();
  4791. cFree5 = Sumdtt.Rows[0]["cFree5"].ToString();
  4792. cFree6 = Sumdtt.Rows[0]["cFree6"].ToString();
  4793. cFree7 = Sumdtt.Rows[0]["cFree7"].ToString();
  4794. cFree8 = Sumdtt.Rows[0]["cFree8"].ToString();
  4795. cFree9 = Sumdtt.Rows[0]["cFree9"].ToString();
  4796. cFree10 = Sumdtt.Rows[0]["cFree10"].ToString();
  4797. //检验自由项
  4798. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  4799. + "~" + Brand + "~" + cFree1
  4800. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  4801. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  4802. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  4803. string exsql = @"select ID,Colspan from ICSExtension a
  4804. where Colspan='{0}' and WorkPoint='{1}'";
  4805. exsql = string.Format(exsql, Colspan, InWorkPoint);
  4806. DataTable dttt = DBHelper.SQlReturnData(exsql, cmd);
  4807. if (dttt.Rows.Count == 0)
  4808. {
  4809. IDD = Guid.NewGuid().ToString();
  4810. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  4811. select '{17}','{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}',GETDATE(),'{15}',(select top 1 f.F_RealName from Sys_SRM_User f where f.F_Account='{15}'),'{16}'";
  4812. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, InWorkPoint, IDD);
  4813. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4814. {
  4815. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  4816. }
  4817. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  4818. uppsql = string.Format(uppsql, IDD, LotNo);
  4819. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  4820. {
  4821. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  4822. }
  4823. }
  4824. else
  4825. {
  4826. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  4827. uppsql = string.Format(uppsql, dttt.Rows[0]["ID"].ToString(), LotNo);
  4828. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  4829. {
  4830. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  4831. }
  4832. }
  4833. sql = @"IF EXISTS(SELECT id FROM ICSTransferApplication a WHERE a.TransferNO='{5}' AND isnull(EATTRIBUTE29,'')<>isnull(EATTRIBUTE30,''))
  4834. BEGIN
  4835. UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  4836. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  4837. UPDATE ICSInventoryLotDetail SET WorkPoint='{4}' WHERE LotNo='{0}'
  4838. END
  4839. ELSE
  4840. BEGIN
  4841. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  4842. UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{4}' WHERE LotNo='{0}'
  4843. END
  4844. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  4845. BEGIN
  4846. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4847. RETURN
  4848. END";
  4849. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, InWorkPoint,TransCode);
  4850. }
  4851. else if (DBHelper.IsPNU9() && TransType == "6")
  4852. {
  4853. ///更新库存
  4854. //sql = @"UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  4855. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  4856. // BEGIN
  4857. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4858. // RETURN
  4859. // END";
  4860. string upsql = @"select b.ProjectCode,b.BatchCode,b.Version,b.Brand,b.cFree1,b.cFree2,b.cFree3,
  4861. b.cFree4,b.cFree5,b.cFree6,b.cFree7,b.cFree8,b.cFree9,b.cFree10 from ICSInventoryLot a
  4862. INNER JOIN ICSExtension B on B.ID=A.ExtensionID
  4863. where a.lotno='{0}' and a.WorkPoint='{1}'";
  4864. upsql = string.Format(upsql, LotNo, WorkPoint);
  4865. DataTable Sumdtt = DBHelper.SQlReturnData(upsql, cmd);
  4866. ProjectCode = Sumdtt.Rows[0]["ProjectCode"].ToString();
  4867. BatchCode = Sumdtt.Rows[0]["BatchCode"].ToString();
  4868. Version = Sumdtt.Rows[0]["Version"].ToString();
  4869. Brand = Sumdtt.Rows[0]["Brand"].ToString();
  4870. cFree1 = Sumdtt.Rows[0]["cFree1"].ToString();
  4871. cFree2 = Sumdtt.Rows[0]["cFree2"].ToString();
  4872. cFree3 = Sumdtt.Rows[0]["cFree3"].ToString();
  4873. cFree4 = Sumdtt.Rows[0]["cFree4"].ToString();
  4874. cFree5 = Sumdtt.Rows[0]["cFree5"].ToString();
  4875. cFree6 = Sumdtt.Rows[0]["cFree6"].ToString();
  4876. cFree7 = Sumdtt.Rows[0]["cFree7"].ToString();
  4877. cFree8 = Sumdtt.Rows[0]["cFree8"].ToString();
  4878. cFree9 = Sumdtt.Rows[0]["cFree9"].ToString();
  4879. cFree10 = Sumdtt.Rows[0]["cFree10"].ToString();
  4880. //检验自由项
  4881. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  4882. + "~" + Brand + "~" + cFree1
  4883. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  4884. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  4885. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  4886. string exsql = @"select ID,Colspan from ICSExtension a
  4887. where Colspan='{0}' and WorkPoint='{1}'";
  4888. exsql = string.Format(exsql, Colspan, WorkPoint);
  4889. DataTable dttt = DBHelper.SQlReturnData(exsql, cmd);
  4890. if (dttt.Rows.Count == 0)
  4891. {
  4892. IDD = Guid.NewGuid().ToString();
  4893. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  4894. select '{17}','{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}',GETDATE(),'{15}',(select top 1 f.F_RealName from Sys_SRM_User f where f.F_Account='{15}'),'{16}'";
  4895. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, WorkPoint, IDD);
  4896. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4897. {
  4898. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  4899. }
  4900. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  4901. uppsql = string.Format(uppsql, IDD, LotNo);
  4902. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  4903. {
  4904. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  4905. }
  4906. }
  4907. else
  4908. {
  4909. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  4910. uppsql = string.Format(uppsql, dttt.Rows[0]["ID"].ToString(), LotNo);
  4911. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  4912. {
  4913. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  4914. }
  4915. }
  4916. sql = @"IF EXISTS(SELECT id FROM ICSTransferApplication a WHERE a.TransferNO='{5}' AND isnull(EATTRIBUTE29,'')<>isnull(EATTRIBUTE30,''))
  4917. BEGIN
  4918. UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  4919. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  4920. END
  4921. ELSE
  4922. BEGIN
  4923. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  4924. UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{4}' WHERE LotNo='{0}'
  4925. END
  4926. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  4927. BEGIN
  4928. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4929. RETURN
  4930. END";
  4931. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, WorkPoint, TransCode);
  4932. }
  4933. else
  4934. {
  4935. ///更新库存
  4936. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{1}' WHERE LotNo='{0}'
  4937. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  4938. BEGIN
  4939. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4940. RETURN
  4941. END";
  4942. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, WorkPoint);
  4943. }
  4944. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4945. {
  4946. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4947. }
  4948. }
  4949. DateTime now = DateTime.Now;
  4950. sql = @"select 1 from ICSContainerLot
  4951. where LotNo='{0}'
  4952. ";
  4953. sql = string.Format(sql, LotNo, WorkPoint);
  4954. log.Debug("查询容器条码关联表是否存在");
  4955. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  4956. if (dttte.Rows.Count > 0)
  4957. {
  4958. ///删除条码关联表数据
  4959. sql = @"DELETE FROM ICSContainerLot
  4960. where LotNo='{0}'
  4961. ";
  4962. sql = string.Format(sql, LotNo, WorkPoint);
  4963. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4964. {
  4965. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  4966. }
  4967. }
  4968. }
  4969. else
  4970. {
  4971. string cheksql = @"IF NOT EXISTS(select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  4972. from Sys_SRM_Items a
  4973. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  4974. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  4975. BEGIN
  4976. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  4977. RETURN
  4978. END
  4979. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  4980. from Sys_SRM_Items a
  4981. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  4982. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  4983. ";
  4984. cheksql = string.Format(cheksql, BusinessCode);
  4985. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  4986. if (chekdt.Rows.Count == 0)
  4987. {
  4988. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  4989. }
  4990. else
  4991. {
  4992. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  4993. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  4994. }
  4995. //检验是否分批
  4996. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  4997. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  4998. where a.LotNo='{0}' and a.WorkPoint='{1}'
  4999. ";
  5000. sql = string.Format(sql, LotNo, WorkPoint);
  5001. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  5002. if (dt.Rows.Count == 0)
  5003. {
  5004. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5005. }
  5006. else
  5007. {
  5008. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  5009. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  5010. }
  5011. sql = @"select Quantity from ICSWareHouseLotInfo
  5012. where LotNO='{0}' AND WorkPoint='{1}'";
  5013. sql = string.Format(sql, LotNo, WorkPoint);
  5014. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  5015. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  5016. LotQTY = Convert.ToDecimal(Quantity);
  5017. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)//增加数量判断
  5018. {
  5019. ///更新库存
  5020. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5021. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<0)
  5022. BEGIN
  5023. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5024. RETURN
  5025. END";
  5026. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5027. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5028. {
  5029. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5030. }
  5031. ///分批前添加日志
  5032. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5033. BEGIN
  5034. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5035. RETURN
  5036. END
  5037. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5038. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5039. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5040. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5041. MTIME,WorkPoint,EATTRIBUTE1)
  5042. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  5043. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  5044. '','0','{4}','31','0','',
  5045. '','','',f.F_Account ,f.F_RealName ,
  5046. SYSDATETIME() ,a.WorkPoint ,''
  5047. FROM ICSInventoryLot a
  5048. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5049. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5050. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5051. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5052. ";
  5053. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  5054. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5055. {
  5056. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5057. }
  5058. #region 获取分批后的条码(lotstr)
  5059. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  5060. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  5061. sql = string.Format(sql, LotNo, WorkPoint);
  5062. dt = DBHelper.SQlReturnData(sql, cmd);
  5063. if (dt.Rows.Count == 0)
  5064. {
  5065. lotstr = LotNo + "-" + 1;
  5066. }
  5067. else
  5068. {
  5069. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  5070. }
  5071. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  5072. #endregion
  5073. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  5074. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  5075. Quantity,Amount,ExtensionID,Type,PrintTimes,
  5076. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  5077. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  5078. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  5079. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  5080. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  5081. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  5082. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  5083. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  5084. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  5085. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  5086. From ICSInventoryLot a
  5087. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  5088. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  5089. cmd.CommandText = sql;
  5090. result = cmd.ExecuteNonQuery();
  5091. if (result <= 0)
  5092. {
  5093. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  5094. }
  5095. #endregion
  5096. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  5097. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  5098. ,MUSER,MUSERName,GETDATE(),'{3}',''
  5099. from ICSWareHouseLotInfo
  5100. where LotNO='{1}' AND WorkPoint='{3}'";
  5101. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  5102. cmd.CommandText = sql;
  5103. result = cmd.ExecuteNonQuery();
  5104. if (result <= 0)
  5105. {
  5106. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  5107. }
  5108. //插入条码单据表
  5109. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  5110. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  5111. FROM ICSInventoryLot a
  5112. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5113. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5114. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5115. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  5116. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5117. {
  5118. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  5119. }
  5120. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5121. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5122. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5123. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5124. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  5125. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  5126. c.WarehouseCode,c.LocationCode,'{11}','{12}','{6}',
  5127. '','0','{7}','{8}','0','',
  5128. '','','',f.F_Account ,f.F_RealName ,
  5129. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5130. FROM ICSInventoryLot a
  5131. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5132. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5133. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5134. ";
  5135. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
  5136. cmd.CommandText = sql;
  5137. result = cmd.ExecuteNonQuery();
  5138. if (result <= 0)
  5139. {
  5140. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  5141. }
  5142. ///添加日志
  5143. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5144. BEGIN
  5145. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5146. RETURN
  5147. END
  5148. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5149. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5150. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5151. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5152. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5153. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5154. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  5155. '','0','{7}','32','0','',
  5156. '','','',f.F_Account ,f.F_RealName ,
  5157. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5158. FROM ICSInventoryLot a
  5159. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5160. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5161. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5162. ";
  5163. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  5164. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5165. {
  5166. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5167. }
  5168. if (PrintEnable.Equals("True"))
  5169. {
  5170. string PrintData = DBHelper.ReadFileStream();
  5171. //sql = @""+PrintData+"";
  5172. sql = @"select A.LotNO AS OLDLotNo , C.Quantity AS OLDLotQty, A.eattribute1 as LotNo, B.Quantity AS LotQty ,b.InvCode,d.InvStd,d.InvName,b.MTime,A.TransCode
  5173. from ICSWareHouseLotInfolog A
  5174. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5175. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5176. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5177. where A.lotno like '%{0}%' and a.Identification='{3}' and a.workpoint='{1}' and a.BusinessCode='{2}'";
  5178. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  5179. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5180. lstDt = dtLotno;
  5181. }
  5182. }
  5183. else
  5184. {
  5185. ///添加日志
  5186. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5187. BEGIN
  5188. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5189. RETURN
  5190. END
  5191. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND WorkPoint='{1}' AND LotNo = '{0}')
  5192. BEGIN
  5193. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  5194. RETURN
  5195. END
  5196. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5197. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5198. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5199. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5200. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5201. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5202. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  5203. '','0','{7}','{8}','0','',
  5204. '','','',f.F_Account ,f.F_RealName ,
  5205. SYSDATETIME() ,a.WorkPoint ,'','{11}'
  5206. FROM ICSInventoryLot a
  5207. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5208. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5209. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5210. ";
  5211. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  5212. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5213. {
  5214. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5215. }
  5216. ///更新库存
  5217. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}',WorkPoint='{1}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5218. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<=0)
  5219. BEGIN
  5220. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5221. RETURN
  5222. END";
  5223. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  5224. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5225. {
  5226. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5227. }
  5228. }
  5229. DateTime now = DateTime.Now;
  5230. sql = @"select 1 from ICSContainerLot
  5231. where LotNo='{0}' and WorkPoint='{1}'
  5232. ";
  5233. sql = string.Format(sql, LotNo, WorkPoint);
  5234. log.Debug("查询容器条码关联表是否存在");
  5235. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  5236. if (dttte.Rows.Count > 0)
  5237. {
  5238. ///删除条码关联表数据
  5239. sql = @"DELETE FROM ICSContainerLot
  5240. where LotNo='{0}' and WorkPoint='{1}'
  5241. ";
  5242. sql = string.Format(sql, LotNo, WorkPoint);
  5243. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5244. {
  5245. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  5246. }
  5247. }
  5248. }
  5249. }
  5250. catch (Exception)
  5251. {
  5252. throw;
  5253. }
  5254. return lstDt;
  5255. }
  5256. /// <summary>
  5257. /// 移库
  5258. /// </summary>
  5259. /// <param name="LocationCode"></param>
  5260. /// <param name="LotNo"></param>
  5261. /// <param name="Quantity"></param>
  5262. /// <param name="User"></param>
  5263. /// <param name="WorkPoint"></param>
  5264. /// <param name="TransType"></param>
  5265. /// <param name="BusinessCode"></param>
  5266. /// <param name="cmd"></param>
  5267. public static void WareHouseLotInfoLibrary(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  5268. string LotNo, string User, string WorkPoint, string TransType, string BusinessCode,String ScanType, SqlCommand cmd, Dictionary<string, string> language)
  5269. {
  5270. try
  5271. {
  5272. string sql = @"SELECT WarehouseCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
  5273. sql = string.Format(sql, LotNo,WorkPoint);
  5274. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  5275. if (dt == null || dt.Rows.Count <= 0)
  5276. {
  5277. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  5278. }
  5279. string whcode = dt.Rows[0]["WarehouseCode"].ToString();
  5280. ///添加日志
  5281. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5282. BEGIN
  5283. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5284. RETURN
  5285. END
  5286. IF('" + whcode + @"' != '{8}')
  5287. BEGIN
  5288. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo394"), "{8}", whcode) + @"', 16, 1);
  5289. RETURN
  5290. END
  5291. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5292. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5293. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5294. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5295. MTIME,WorkPoint,EATTRIBUTE1 )
  5296. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5297. c.WarehouseCode,c.LocationCode,'{8}','{9}',c.Quantity,
  5298. '','0','{6}','{7}','0','',
  5299. '','','',f.F_Account ,f.F_RealName ,
  5300. SYSDATETIME() ,a.WorkPoint ,''
  5301. FROM ICSInventoryLot a
  5302. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5303. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5304. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5305. ";
  5306. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, BusinessCode, WarehouseCode, LocationCode);
  5307. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5308. {
  5309. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5310. }
  5311. ///添加库存
  5312. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity>0)
  5313. BEGIN
  5314. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  5315. RETURN
  5316. END
  5317. IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.WarehouseCode='{2}')
  5318. BEGIN
  5319. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  5320. RETURN
  5321. END
  5322. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5323. ";
  5324. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  5325. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5326. {
  5327. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  5328. }
  5329. DateTime now = DateTime.Now;
  5330. if (ScanType== "LOTNO")
  5331. {
  5332. sql = @"select 1 from ICSContainerLot
  5333. where LotNo='{0}' and WorkPoint='{1}'
  5334. ";
  5335. sql = string.Format(sql, LotNo, WorkPoint);
  5336. log.Debug("查询容器条码关联表是否存在");
  5337. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  5338. if (dttte.Rows.Count > 0)
  5339. {
  5340. ///删除条码关联表数据
  5341. sql = @"DELETE FROM ICSContainerLot
  5342. where LotNo='{0}' and WorkPoint='{1}'
  5343. ";
  5344. sql = string.Format(sql, LotNo, WorkPoint);
  5345. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5346. {
  5347. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  5348. }
  5349. }
  5350. }
  5351. }
  5352. catch (Exception)
  5353. {
  5354. throw;
  5355. }
  5356. }
  5357. /// <summary>
  5358. /// 两步调入
  5359. /// </summary>
  5360. /// <param name="LocationCode"></param>
  5361. /// <param name="LotNo"></param>
  5362. /// <param name="Quantity"></param>
  5363. /// <param name="User"></param>
  5364. /// <param name="WorkPoint"></param>
  5365. /// <param name="TransType"></param>
  5366. /// <param name="BusinessCode"></param>
  5367. /// <param name="cmd"></param>
  5368. public static void WareHouseLotInfoTwoStepTransferDocIn(string Identification, string TransCode, string TransSequence, string WarehouseCode,
  5369. string LocationCode, string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  5370. {
  5371. try
  5372. {
  5373. ///添加日志
  5374. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5375. BEGIN
  5376. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5377. RETURN
  5378. END
  5379. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5380. ToWarehouseCode,ToLocationCode,Quantity,
  5381. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5382. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5383. MTIME,WorkPoint,EATTRIBUTE1)
  5384. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5385. '{9}','{10}','{6}',
  5386. '','0','{7}','{8}','0','',
  5387. '','','',f.F_Account ,f.F_RealName ,
  5388. SYSDATETIME() ,a.WorkPoint ,''
  5389. FROM ICSInventoryLot a
  5390. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5391. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5392. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5393. ";
  5394. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode);
  5395. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5396. {
  5397. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5398. }
  5399. ///添加库存
  5400. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  5401. BEGIN
  5402. RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
  5403. RETURN
  5404. END
  5405. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}',Quantity=Quantity+'{4}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5406. ";
  5407. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, Quantity);
  5408. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5409. {
  5410. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  5411. }
  5412. }
  5413. catch (Exception)
  5414. {
  5415. throw;
  5416. }
  5417. }
  5418. /// <summary>
  5419. /// 锐腾两步调入
  5420. /// </summary>
  5421. /// <param name="LocationCode"></param>
  5422. /// <param name="LotNo"></param>
  5423. /// <param name="Quantity"></param>
  5424. /// <param name="User"></param>
  5425. /// <param name="WorkPoint"></param>
  5426. /// <param name="TransType"></param>
  5427. /// <param name="BusinessCode"></param>
  5428. /// <param name="cmd"></param>
  5429. public static void RTWareHouseLotInfoTwoStepTransferDocIn(string Identification, string TransCode, string TransSequence, string WarehouseCode,
  5430. string LocationCode, string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  5431. {
  5432. try
  5433. {
  5434. ///添加日志
  5435. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5436. BEGIN
  5437. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5438. RETURN
  5439. END
  5440. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5441. ToWarehouseCode,ToLocationCode,Quantity,
  5442. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5443. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5444. MTIME,WorkPoint,EATTRIBUTE1)
  5445. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5446. '{9}','{10}','{6}',
  5447. '','0','{7}','{8}','0','',
  5448. '','','',f.F_Account ,f.F_RealName ,
  5449. SYSDATETIME() ,a.WorkPoint ,''
  5450. FROM ICSInventoryLot a
  5451. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5452. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5453. ";
  5454. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode);
  5455. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5456. {
  5457. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5458. }
  5459. ///添加库存
  5460. sql = @"IF EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  5461. BEGIN
  5462. RAISERROR('!',16,1);
  5463. RETURN
  5464. END
  5465. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  5466. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  5467. FROM ICSInventoryLot a
  5468. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5469. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  5470. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  5471. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  5472. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5473. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5474. ";
  5475. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  5476. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5477. {
  5478. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  5479. }
  5480. }
  5481. catch (Exception)
  5482. {
  5483. throw;
  5484. }
  5485. }
  5486. /// <summary>
  5487. /// 合并日志
  5488. /// </summary>
  5489. /// <param name="Identification"></param>
  5490. /// <param name="LotNo"></param>
  5491. /// <param name="User"></param>
  5492. /// <param name="WorkPoint"></param>
  5493. /// <param name="TransType"></param>
  5494. /// <param name="BusinessCode"></param>
  5495. /// <param name="cmd"></param>
  5496. public static DataTable WareHouseLotInfoLogMerge(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode, string newLotno, SqlCommand cmd, Dictionary<string, string> language)
  5497. {
  5498. String LotEnable = "";
  5499. String PrintEnable = "";
  5500. DataTable dtLotno = new DataTable();
  5501. DataTable lstDt = new DataTable();
  5502. try
  5503. {
  5504. //检验是否分批
  5505. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  5506. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  5507. where a.LotNo='{0}' and a.WorkPoint='{1}'
  5508. ";
  5509. sql = string.Format(sql, LotNo, WorkPoint);
  5510. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  5511. if (dt.Rows.Count == 0)
  5512. {
  5513. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5514. }
  5515. else
  5516. {
  5517. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  5518. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  5519. }
  5520. ///添加日志
  5521. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5522. BEGIN
  5523. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5524. RETURN
  5525. END
  5526. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5527. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5528. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5529. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5530. MTIME,WorkPoint,EATTRIBUTE1)
  5531. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  5532. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  5533. '','0','{4}','{5}','0','',
  5534. '','','',f.F_Account ,f.F_RealName ,
  5535. SYSDATETIME() ,a.WorkPoint ,''
  5536. FROM ICSInventoryLot a
  5537. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5538. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5539. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5540. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5541. ";
  5542. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  5543. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5544. {
  5545. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5546. }
  5547. if (PrintEnable.Equals("True"))
  5548. {
  5549. sql = @"select A.LotNO , B.Quantity AS OLDLotQty, C.Quantity AS LotQty ,b.InvCode,d.INVSTD,d.INVNAME,b.MTIME,A.TransCode
  5550. from ICSWareHouseLotInfolog A
  5551. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5552. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5553. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5554. where a.BusinessCode='34'
  5555. and A.lotno = '{0}' and a.workpoint='{1}'
  5556. ";
  5557. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, newLotno);
  5558. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5559. lstDt = dtLotno;
  5560. }
  5561. }
  5562. catch (Exception)
  5563. {
  5564. throw;
  5565. }
  5566. return lstDt;
  5567. }
  5568. /// <summary>
  5569. /// 拆分、合并日志
  5570. /// </summary>
  5571. /// <param name="Identification"></param>
  5572. /// <param name="LotNo"></param>
  5573. /// <param name="User"></param>
  5574. /// <param name="WorkPoint"></param>
  5575. /// <param name="TransType"></param>
  5576. /// <param name="BusinessCode"></param>
  5577. /// <param name="cmd"></param>
  5578. public static DataTable WareHouseLotInfoLog(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode,string newLotno, SqlCommand cmd, Dictionary<string, string> language)
  5579. {
  5580. String LotEnable = "";
  5581. String PrintEnable = "";
  5582. DataTable dtLotno = new DataTable();
  5583. DataTable lstDt = new DataTable();
  5584. try{
  5585. //检验是否分批
  5586. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  5587. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  5588. where a.LotNo='{0}' and a.WorkPoint='{1}'
  5589. ";
  5590. sql = string.Format(sql, LotNo, WorkPoint);
  5591. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  5592. if (dt.Rows.Count == 0)
  5593. {
  5594. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5595. }
  5596. else
  5597. {
  5598. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  5599. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  5600. }
  5601. ///添加日志
  5602. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5603. BEGIN
  5604. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5605. RETURN
  5606. END
  5607. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5608. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5609. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5610. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5611. MTIME,WorkPoint,EATTRIBUTE1)
  5612. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  5613. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  5614. '','0','{4}','{5}','0','',
  5615. '','','',f.F_Account ,f.F_RealName ,
  5616. SYSDATETIME() ,a.WorkPoint ,''
  5617. FROM ICSInventoryLot a
  5618. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5619. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5620. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5621. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5622. ";
  5623. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  5624. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5625. {
  5626. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5627. }
  5628. //if (PrintEnable.Equals("True"))
  5629. //{
  5630. // sql = @"select A.LotNO , C.Quantity AS OLDLotQty, B.Quantity AS LotQty ,b.InvCode,d.INVSTD,d.INVNAME,b.MTIME,A.TransCode,c.LocationCode,f.BatchCode,b.EATTRIBUTE4
  5631. // from ICSWareHouseLotInfolog A
  5632. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5633. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5634. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5635. // left JOIN ICSExtension f on b.ExtensionID=f.id and b.WorkPoint=f.WorkPoint
  5636. // where a.BusinessCode='32'
  5637. // and A.lotno = '{3}' and a.workpoint='{1}'
  5638. // ";
  5639. // sql = string.Format(sql, LotNo, WorkPoint, BusinessCode,newLotno);
  5640. // dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5641. // lstDt = dtLotno;
  5642. //}
  5643. if (PrintEnable.Equals("True") )
  5644. {
  5645. string PrintData = DBHelper.ReadPrintStream();
  5646. sql = @"" + PrintData + "";
  5647. //sql = @"select A.LotNO AS OLDLotNo , C.Quantity AS OLDLotQty, A.eattribute1 as LotNo, B.Quantity AS LotQty ,b.InvCode,d.InvStd,d.InvName,b.MTime,A.TransCode
  5648. // from ICSWareHouseLotInfolog A
  5649. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5650. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5651. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5652. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  5653. // ";
  5654. sql = string.Format(sql, newLotno, WorkPoint, BusinessCode, Identification);
  5655. log.Debug("拆分数据源:"+ sql);
  5656. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5657. lstDt = dtLotno;
  5658. }
  5659. }
  5660. catch (Exception)
  5661. {
  5662. throw;
  5663. }
  5664. return lstDt;
  5665. }
  5666. /// <summary>
  5667. /// 合并
  5668. /// </summary>
  5669. /// <param name="Identification"></param>
  5670. /// <param name="LotNo"></param>
  5671. /// <param name="User"></param>
  5672. /// <param name="WorkPoint"></param>
  5673. /// <param name="TransType"></param>
  5674. /// <param name="BusinessCode"></param>
  5675. /// <param name="cmd"></param>
  5676. public static void WareHouseLotInfoMerge(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  5677. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  5678. {
  5679. try
  5680. {
  5681. ///更新目标条码库存
  5682. string sql = @"IF NOT EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  5683. INNER JOIN ICSInventoryLot b ON b.LotNo='{3}' AND a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  5684. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  5685. BEGIN
  5686. RAISERROR('" + language.GetNameByCode("WMSAPIInfo170") + @"',16,1);
  5687. RETURN
  5688. END
  5689. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  5690. BEGIN
  5691. RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
  5692. RETURN
  5693. END
  5694. IF EXISTS(
  5695. SELECT * FROM ICSWareHouseLotInfo a
  5696. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  5697. INNER JOIN ICSInventory d on c.invcode=d.invcode and c.WorkPoint=d.WorkPoint
  5698. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.BatchEnable='1'
  5699. )
  5700. BEGIN
  5701. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  5702. INNER JOIN ICSWareHouseLotInfo b ON b.LotNo='{3}' AND a.WarehouseCode=b.WarehouseCode AND a.WorkPoint=b.WorkPoint
  5703. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  5704. INNER JOIN ICSInventoryLot d on b.LotNo=d.LotNo and b.WorkPoint=d.WorkPoint
  5705. INNER JOIN ICSExtension e on c.ExtensionID=e.ID and c.WorkPoint=e.WorkPoint
  5706. INNER JOIN ICSExtension f on d.ExtensionID=f.id and d.WorkPoint=f.WorkPoint
  5707. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and e.ID=f.ID)
  5708. BEGIN
  5709. RAISERROR('/',16,1);
  5710. RETURN
  5711. END
  5712. END
  5713. IF NOT EXISTS(
  5714. SELECT * FROM ICSWareHouseLotInfo a
  5715. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  5716. INNER JOIN ICSInventory d on c.invcode=d.invcode and c.WorkPoint=d.WorkPoint
  5717. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.BatchEnable='1'
  5718. )
  5719. BEGIN
  5720. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  5721. INNER JOIN ICSWareHouseLotInfo b ON b.LotNo='{3}' AND a.WarehouseCode=b.WarehouseCode AND a.WorkPoint=b.WorkPoint
  5722. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  5723. INNER JOIN ICSInventoryLot d on b.LotNo=d.LotNo and b.WorkPoint=d.WorkPoint
  5724. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  5725. BEGIN
  5726. RAISERROR('/',16,1);
  5727. RETURN
  5728. END
  5729. END
  5730. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5731. UPDATE ICSInventoryLot SET Amount=(ISNULL(Amount,0)+(select Amount from
  5732. ICSInventoryLot where LotNo='{3}' AND WorkPoint='{1}')) WHERE LotNo='{0}' AND WorkPoint='{1}'
  5733. ";
  5734. sql = string.Format(sql, LotNo, WorkPoint, Quantity, CurrentLotNo);
  5735. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5736. {
  5737. throw new Exception(language.GetNameByCode("WMSAPIInfo169"));//"目标条码库存更新失败!");
  5738. }
  5739. ///更新原条码库存
  5740. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5741. UPDATE ICSInventoryLot SET Amount=(ISNULL(Amount,0)-(select Amount from
  5742. ICSInventoryLot where LotNo='{0}' AND WorkPoint='{1}')) WHERE LotNo='{0}' AND WorkPoint='{1}'
  5743. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  5744. BEGIN
  5745. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5746. RETURN
  5747. END";
  5748. sql = string.Format(sql, CurrentLotNo, WorkPoint, Quantity);
  5749. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5750. {
  5751. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5752. }
  5753. ///添加日志
  5754. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5755. BEGIN
  5756. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5757. RETURN
  5758. END
  5759. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5760. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5761. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5762. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5763. MTIME,WorkPoint,EATTRIBUTE1)
  5764. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  5765. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  5766. '','0','{4}','{5}','0','',
  5767. '','','',f.F_Account ,f.F_RealName ,
  5768. SYSDATETIME() ,a.WorkPoint ,''
  5769. FROM ICSInventoryLot a
  5770. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5771. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5772. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5773. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5774. ";
  5775. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  5776. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5777. {
  5778. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5779. }
  5780. }
  5781. catch (Exception)
  5782. {
  5783. throw;
  5784. }
  5785. }
  5786. /// <summary>
  5787. /// 拆分
  5788. /// </summary>
  5789. /// <param name="Identification"></param>
  5790. /// <param name="LotNo"></param>
  5791. /// <param name="User"></param>
  5792. /// <param name="WorkPoint"></param>
  5793. /// <param name="TransType"></param>
  5794. /// <param name="BusinessCode"></param>
  5795. /// <param name="cmd"></param>
  5796. public static void WareHouseLotInfoSplit(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  5797. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  5798. {
  5799. try
  5800. {
  5801. ///更新库存
  5802. string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5803. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  5804. BEGIN
  5805. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5806. RETURN
  5807. END";
  5808. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5809. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5810. {
  5811. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5812. }
  5813. #region 添加库存
  5814. //插入条码表
  5815. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5816. BEGIN
  5817. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5818. RETURN
  5819. END
  5820. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{4}' AND a.WorkPoint='{1}')
  5821. BEGIN
  5822. RAISERROR('" + language.GetNameByCode("WMSAPIInfo172") + @"',16,1);
  5823. RETURN
  5824. END
  5825. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  5826. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  5827. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  5828. SELECT NEWID(),'{4}' ,a.InvCode,a.ProductDate,a.ExpirationDate ,'{3}',a.Amount/a.Quantity*{3},a.ExtensionID,'101',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,a.LotNo,a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  5829. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  5830. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  5831. FROM ICSInventoryLot a
  5832. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5833. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5834. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo);
  5835. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5836. {
  5837. throw new Exception(language.GetNameByCode("WMSAPIInfo173"));//"条码表写入失败!");
  5838. }
  5839. //插入条码单据表
  5840. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  5841. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  5842. FROM ICSInventoryLot a
  5843. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5844. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5845. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5846. sql = string.Format(sql, LotNo, WorkPoint, User, CurrentLotNo);
  5847. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5848. {
  5849. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  5850. }
  5851. ///添加库存
  5852. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  5853. BEGIN
  5854. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  5855. RETURN
  5856. END
  5857. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1,freeze)
  5858. SELECT NEWID(),a.LotNo ,d.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',d.INdate,'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,'',d.freeze
  5859. FROM ICSInventoryLot a
  5860. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5861. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
  5862. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5863. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5864. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Quantity);
  5865. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5866. {
  5867. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  5868. }
  5869. ///添加日志
  5870. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5871. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5872. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5873. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5874. MTIME,WorkPoint,EATTRIBUTE1)
  5875. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  5876. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  5877. '','0','{4}','{5}','0','',
  5878. '','','',f.F_Account ,f.F_RealName ,
  5879. SYSDATETIME() ,a.WorkPoint ,''
  5880. FROM ICSInventoryLot a
  5881. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5882. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5883. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5884. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5885. ";
  5886. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  5887. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5888. {
  5889. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5890. }
  5891. #endregion
  5892. }
  5893. catch (Exception)
  5894. {
  5895. throw;
  5896. }
  5897. }
  5898. /// <summary>
  5899. /// 拆分(奥美)
  5900. /// </summary>
  5901. /// <param name="Identification"></param>
  5902. /// <param name="LotNo"></param>
  5903. /// <param name="User"></param>
  5904. /// <param name="WorkPoint"></param>
  5905. /// <param name="TransType"></param>
  5906. /// <param name="BusinessCode"></param>
  5907. /// <param name="cmd"></param>
  5908. public static void AMWareHouseLotInfoSplit(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  5909. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  5910. {
  5911. try
  5912. {
  5913. string amount = "";
  5914. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  5915. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5916. //sqql = string.Format(sqql, LotNo, WorkPoint);
  5917. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  5918. //amount = dtaa.Rows[0]["Amount"].ToString();
  5919. string cheksql = @"select d.EATTRIBUTE1 FROM ICSInventoryLot a
  5920. INNER JOIN ICSWareHouseLotInfo b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5921. INNER JOIN ICSInventory d on a.InvCode=d.InvCode and a.WorkPoint=d.WorkPoint
  5922. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.AmountEnable='1'";
  5923. cheksql = string.Format(cheksql, LotNo, WorkPoint);
  5924. DataTable dta = DBHelper.SQlReturnData(cheksql, cmd);
  5925. if (dta.Rows.Count > 0)
  5926. {
  5927. Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  5928. }
  5929. ///更新库存
  5930. string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5931. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  5932. BEGIN
  5933. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5934. RETURN
  5935. END";
  5936. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5937. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5938. {
  5939. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5940. }
  5941. #region 添加库存
  5942. //插入条码表
  5943. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5944. BEGIN
  5945. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5946. RETURN
  5947. END
  5948. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{4}' AND a.WorkPoint='{1}')
  5949. BEGIN
  5950. RAISERROR('" + language.GetNameByCode("WMSAPIInfo172") + @"',16,1);
  5951. RETURN
  5952. END
  5953. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  5954. SELECT NEWID(),'{4}' ,a.InvCode,a.ProductDate,a.ExpirationDate ,'{3}',a.Amount/a.Quantity*{3},a.ExtensionID,'101',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,a.LotNo
  5955. FROM ICSInventoryLot a
  5956. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5957. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5958. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo);
  5959. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5960. {
  5961. throw new Exception(language.GetNameByCode("WMSAPIInfo173"));//"条码表写入失败!");
  5962. }
  5963. //插入条码单据表
  5964. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  5965. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  5966. FROM ICSInventoryLot a
  5967. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5968. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5969. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5970. sql = string.Format(sql, LotNo, WorkPoint, User, CurrentLotNo);
  5971. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5972. {
  5973. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  5974. }
  5975. ///添加库存
  5976. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  5977. BEGIN
  5978. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  5979. RETURN
  5980. END
  5981. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  5982. SELECT NEWID(),a.LotNo ,d.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  5983. FROM ICSInventoryLot a
  5984. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5985. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
  5986. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5987. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5988. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Quantity);
  5989. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5990. {
  5991. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  5992. }
  5993. ///添加日志
  5994. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5995. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5996. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5997. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5998. MTIME,WorkPoint,EATTRIBUTE1)
  5999. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  6000. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  6001. '','0','{4}','{5}','0','',
  6002. '','','',f.F_Account ,f.F_RealName ,
  6003. SYSDATETIME() ,a.WorkPoint ,''
  6004. FROM ICSInventoryLot a
  6005. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6006. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6007. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6008. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6009. ";
  6010. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  6011. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6012. {
  6013. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6014. }
  6015. #endregion
  6016. }
  6017. catch (Exception)
  6018. {
  6019. throw;
  6020. }
  6021. }
  6022. /// <summary>
  6023. /// 回写ERP ID
  6024. /// </summary>
  6025. /// <param name="TransType"></param>
  6026. /// <param name="SourceDetailID"></param>
  6027. /// <param name="Identification"></param>
  6028. /// <param name="ID"></param>
  6029. /// <param name="DetailID"></param>
  6030. /// <param name="Code"></param>
  6031. /// <param name="Sequence"></param>
  6032. /// <param name="cmd"></param>
  6033. public static void WareHouseLotInfoLogUpdate(string TransType, string SourceDetailID, string Identification, string ID, string DetailID, string Code, string Sequence, string col, SqlCommand cmd, Dictionary<string, string> language, string BusinessCode)
  6034. {
  6035. string ERPupdate = string.Empty;
  6036. string NewERPupdate = string.Empty;
  6037. try
  6038. {
  6039. //采购入库
  6040. if (TransType == TransTypeEnum.PurchaseReceiveDoc.GetDescription())
  6041. {
  6042. ERPupdate = @"SELECT a.id
  6043. INTO #NewTempERP
  6044. FROM ICSWareHouseLotInfoLog a
  6045. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6046. INNER JOIN ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6047. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6048. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6049. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6050. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6051. WHERE c.PODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6052. and (ISNULL(a.towarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6053. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6054. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6055. where ID in (select id from #NewTempERP)
  6056. DROP TABLE #NewTempERP";
  6057. }
  6058. //客供料入库
  6059. else if (TransType == TransTypeEnum.PurchaseReceiveDoc.GetDescription())
  6060. {
  6061. ERPupdate = @"SELECT a.id
  6062. INTO #NewTempERP
  6063. FROM ICSWareHouseLotInfoLog a
  6064. INNER JOIN ICSInventoryLotDetailKG b ON a.LotNo=b.LotNo AND b.TransCode=a.TransCode AND b.TransSequence=a.TransSequence AND a.WorkPoint=b.WorkPoint
  6065. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6066. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6067. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6068. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6069. WHERE c.PODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6070. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6071. where ID in (select id from #NewTempERP)
  6072. DROP TABLE #NewTempERP";
  6073. }
  6074. //审核的到货单
  6075. else if (TransType == TransTypeEnum.DeliveryNotice.GetDescription())
  6076. {
  6077. ERPupdate = @"SELECT a.id
  6078. INTO #NewTempERP
  6079. FROM ICSWareHouseLotInfoLog a
  6080. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6081. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6082. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6083. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6084. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6085. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6086. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6087. and (ISNULL(a.towarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6088. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6089. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6090. where ID in (select id from #NewTempERP)
  6091. DROP TABLE #NewTempERP
  6092. ";
  6093. }
  6094. //采购拒收
  6095. else if (TransType == TransTypeEnum.PurchaseRejectDoc.GetDescription())
  6096. {
  6097. ERPupdate = @"SELECT a.id
  6098. INTO #NewTempERP
  6099. FROM ICSWareHouseLotInfoLog a
  6100. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6101. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6102. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6103. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6104. where ID in (select id from #NewTempERP)
  6105. DROP TABLE #NewTempERP
  6106. ";
  6107. }
  6108. //审核的委外到货单
  6109. else if (TransType == TransTypeEnum.ODeliveryNotice.GetDescription())
  6110. {
  6111. ERPupdate = @"SELECT a.id
  6112. INTO #NewTempERP
  6113. FROM ICSWareHouseLotInfoLog a
  6114. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6115. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6116. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6117. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6118. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6119. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6120. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6121. and ( ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6122. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6123. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6124. where ID in (select id from #NewTempERP)
  6125. DROP TABLE #NewTempERP
  6126. ";
  6127. }
  6128. //委外拒收
  6129. else if (TransType == TransTypeEnum.OutsourcingRejectDoc.GetDescription())
  6130. {
  6131. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6132. FROM ICSWareHouseLotInfoLog a
  6133. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6134. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6135. ";
  6136. }
  6137. //采购退货
  6138. else if (TransType == TransTypeEnum.PurchaseReceiveDoctNegative.GetDescription())
  6139. {
  6140. ERPupdate = @"SELECT a.id
  6141. INTO #NewTempERP
  6142. FROM ICSWareHouseLotInfoLog a
  6143. INNER JOIN ICSDeliveryNotice c ON a.TransCode=c.DNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6144. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6145. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6146. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6147. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6148. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}' --AND c.DNType='2'
  6149. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6150. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6151. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6152. where ID in (select id from #NewTempERP)
  6153. DROP TABLE #NewTempERP
  6154. ";
  6155. }
  6156. //委外发料
  6157. else if (TransType == TransTypeEnum.OutsourcingIssueDoc.GetDescription())
  6158. {
  6159. ERPupdate = @"SELECT a.id
  6160. INTO #NewTempERP
  6161. FROM ICSWareHouseLotInfoLog a
  6162. INNER JOIN ICSOutsourcingOrder y ON a.TransCode=y.OOCode AND a.WorkPoint=y.WorkPoint
  6163. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  6164. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6165. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6166. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6167. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6168. WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6169. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6170. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6171. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6172. where ID in (select id from #NewTempERP)
  6173. DROP TABLE #NewTempERP
  6174. ";
  6175. }
  6176. //委外退料
  6177. else if (TransType == TransTypeEnum.ICSOutsourcingIssueDoNegative.GetDescription()
  6178. || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeApply.GetDescription()
  6179. || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeIssue.GetDescription())
  6180. {
  6181. ERPupdate = @"--根据退料单退料
  6182. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6183. FROM ICSWareHouseLotInfoLog a
  6184. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6185. INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6186. INNER JOIN ICSOApplyNeg d ON c.OApplyNegCode=d.OApplyNegCode AND c.WorkPoint=d.WorkPoint
  6187. Left JOIN ICSOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE 0 END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
  6188. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6189. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6190. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6191. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6192. WHERE ISNULL(m.ApplyDetailID,ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6193. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6194. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6195. --退-
  6196. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6197. FROM ICSWareHouseLotInfoLog a
  6198. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  6199. INNER JOIN ICSOutsourcingOrder y ON b.TransCode=y.OOCode AND b.WorkPoint=y.WorkPoint
  6200. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint AND b.TransSequence = y.Sequence + '~' + x.Sequence
  6201. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6202. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6203. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6204. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6205. WHERE x.PickID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  6206. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6207. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6208. --退-
  6209. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6210. FROM ICSWareHouseLotInfoLog a
  6211. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  6212. INNER JOIN ICSOApply z ON b.TransCode=z.ApplyCode AND b.TransSequence=z.Sequence AND b.WorkPoint=z.WorkPoint
  6213. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6214. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6215. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6216. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6217. WHERE z.ApplyDetailID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  6218. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6219. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6220. --退-
  6221. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6222. FROM ICSWareHouseLotInfoLog a
  6223. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  6224. INNER JOIN ICSOIssue m ON b.TransCode=m.IssueCode AND b.TransSequence=m.Sequence AND b.WorkPoint=m.WorkPoint
  6225. LEFT JOIN ICSOOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
  6226. LEFT JOIN ICSOutsourcingOrder y ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint
  6227. LEFT JOIN ICSOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
  6228. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6229. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6230. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6231. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6232. WHERE ISNULL(m.ApplyDetailID, m.PickID)='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  6233. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6234. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6235. ";
  6236. }
  6237. //委外入库
  6238. else if (TransType == TransTypeEnum.OutsourcingReceiveDoc.GetDescription())
  6239. {
  6240. ERPupdate = @"SELECT a.id
  6241. INTO #NewTempERP
  6242. FROM ICSWareHouseLotInfoLog a
  6243. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6244. INNER JOIN ICSOutsourcingOrder c ON b.TransCode=c.OOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6245. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6246. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6247. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6248. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6249. WHERE c.OODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6250. --ISNULL(a.ToWarehouseCode, '') +
  6251. and ( ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6252. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6253. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6254. where ID in (select id from #NewTempERP)
  6255. DROP TABLE #NewTempERP";
  6256. }
  6257. //委外退货
  6258. else if (TransType == TransTypeEnum.OutsourcingReturnBack.GetDescription())
  6259. {
  6260. ERPupdate = @"SELECT a.id
  6261. INTO #NewTempERP
  6262. FROM ICSWareHouseLotInfoLog a
  6263. INNER JOIN ICSODeliveryNotice c ON a.TransCode=c.ODNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6264. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6265. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6266. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6267. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6268. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'--AND c.ODNType='2'
  6269. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6270. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6271. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6272. where ID in (select id from #NewTempERP)
  6273. DROP TABLE #NewTempERP
  6274. ";
  6275. }
  6276. //生产发料
  6277. else if (TransType == TransTypeEnum.MOIssueDoc.GetDescription())
  6278. {
  6279. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6280. // FROM ICSWareHouseLotInfoLog a
  6281. // INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
  6282. // INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  6283. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6284. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6285. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6286. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6287. // WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6288. // and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6289. // ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6290. // ";
  6291. ERPupdate = @"SELECT a.id
  6292. INTO #NewTempERP
  6293. FROM ICSWareHouseLotInfoLog a
  6294. INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
  6295. INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  6296. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6297. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6298. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6299. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6300. WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6301. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6302. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6303. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6304. where ID in (select id from #NewTempERP)
  6305. DROP TABLE #NewTempERP";
  6306. }
  6307. //生产退料
  6308. else if (TransType == TransTypeEnum.MOIssueDocNegative.GetDescription()
  6309. || TransType == TransTypeEnum.MOIssueDocNegativeApply.GetDescription()
  6310. || TransType == TransTypeEnum.MOIssueDocNegativeIssue.GetDescription())
  6311. {
  6312. ERPupdate = @"--根据退料单退料
  6313. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6314. FROM ICSWareHouseLotInfoLog a
  6315. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6316. INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6317. INNER JOIN ICSMOApplyNeg d ON c.ApplyNegCode=d.ApplyNegCode AND c.WorkPoint=d.WorkPoint
  6318. left JOIN ICSMOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE '' END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
  6319. WHERE ISNULL(m.ApplyDetailID, ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6320. ";
  6321. }
  6322. //生产入库
  6323. else if (TransType == TransTypeEnum.ManufactureReceiveDoc.GetDescription())
  6324. {
  6325. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6326. // FROM ICSWareHouseLotInfoLog a
  6327. // INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6328. // INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6329. // INNER JOIN ICSExtension docext ON docext.ID=c.ExtensionID AND docext.WorkPoint=c.WorkPoint
  6330. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6331. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6332. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6333. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6334. // WHERE c.MODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6335. // and (ISNULL(a.fromwarehousecode, '')
  6336. // + CASE WHEN ISNULL(docext.ProjectCode,'')!='' Then ISNULL(ext.ProjectCode, '') ELSE '' END
  6337. // + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END
  6338. // + CASE WHEN ISNULL(docext.Version,'')!='' Then ISNULL(ext.Version, '') ELSE '' END
  6339. // + CASE WHEN ISNULL(docext.Brand,'')!='' THEN ISNULL(ext.Brand, '') ELSE '' END
  6340. // + CASE WHEN ISNULL(docext.cFree1,'')!='' THEN ISNULL(ext.cFree1, '') ELSE '' END
  6341. // + CASE WHEN ISNULL(docext.cFree2,'')!='' THEN ISNULL(ext.cFree2, '') ELSE '' END
  6342. // + CASE WHEN ISNULL(docext.cFree3,'')!='' THEN ISNULL(ext.cFree3, '') ELSE '' END
  6343. // + CASE WHEN ISNULL(docext.cFree4,'')!='' THEN ISNULL(ext.cFree4, '') ELSE '' END
  6344. // + CASE WHEN ISNULL(docext.cFree5,'')!='' THEN ISNULL(ext.cFree5, '') ELSE '' END
  6345. // + CASE WHEN ISNULL(docext.cFree6,'')!='' THEN ISNULL(ext.cFree6, '') ELSE '' END
  6346. // + CASE WHEN ISNULL(docext.cFree7,'')!='' THEN ISNULL(ext.cFree7, '') ELSE '' END
  6347. // + CASE WHEN ISNULL(docext.cFree8,'')!='' THEN ISNULL(ext.cFree8, '') ELSE '' END
  6348. // + CASE WHEN ISNULL(docext.cFree9,'')!='' THEN ISNULL(ext.cFree9, '') ELSE '' END
  6349. // + CASE WHEN ISNULL(docext.cFree10,'')!='' THEN ISNULL(ext.cFree10, '') ELSE '' END)='{6}'
  6350. //";
  6351. ERPupdate = @"SELECT a.id
  6352. INTO #NewTempERP
  6353. FROM ICSWareHouseLotInfoLog a
  6354. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6355. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6356. INNER JOIN ICSExtension docext ON docext.ID=c.ExtensionID AND docext.WorkPoint=c.WorkPoint
  6357. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6358. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6359. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6360. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6361. WHERE c.MODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6362. and (ISNULL(a.ToWarehouseCode, '')
  6363. + CASE WHEN ISNULL(docext.ProjectCode,'')!='' Then ISNULL(ext.ProjectCode, '') ELSE '' END
  6364. + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END
  6365. + CASE WHEN ISNULL(docext.Version,'')!='' Then ISNULL(ext.Version, '') ELSE '' END
  6366. + CASE WHEN ISNULL(docext.Brand,'')!='' THEN ISNULL(ext.Brand, '') ELSE '' END
  6367. + CASE WHEN ISNULL(docext.cFree1,'')!='' THEN ISNULL(ext.cFree1, '') ELSE '' END
  6368. + CASE WHEN ISNULL(docext.cFree2,'')!='' THEN ISNULL(ext.cFree2, '') ELSE '' END
  6369. + CASE WHEN ISNULL(docext.cFree3,'')!='' THEN ISNULL(ext.cFree3, '') ELSE '' END
  6370. + CASE WHEN ISNULL(docext.cFree4,'')!='' THEN ISNULL(ext.cFree4, '') ELSE '' END
  6371. + CASE WHEN ISNULL(docext.cFree5,'')!='' THEN ISNULL(ext.cFree5, '') ELSE '' END
  6372. + CASE WHEN ISNULL(docext.cFree6,'')!='' THEN ISNULL(ext.cFree6, '') ELSE '' END
  6373. + CASE WHEN ISNULL(docext.cFree7,'')!='' THEN ISNULL(ext.cFree7, '') ELSE '' END
  6374. + CASE WHEN ISNULL(docext.cFree8,'')!='' THEN ISNULL(ext.cFree8, '') ELSE '' END
  6375. + CASE WHEN ISNULL(docext.cFree9,'')!='' THEN ISNULL(ext.cFree9, '') ELSE '' END
  6376. + CASE WHEN ISNULL(docext.cFree10,'')!='' THEN ISNULL(ext.cFree10, '') ELSE '' END)='{6}'
  6377. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6378. where ID in (select id from #NewTempERP)
  6379. DROP TABLE #NewTempERP
  6380. ";
  6381. }
  6382. //开立的生产入库单
  6383. else if (TransType == TransTypeEnum.ManufactureReceive.GetDescription())
  6384. {
  6385. ERPupdate = @"SELECT a.id
  6386. INTO #NewTempERP
  6387. FROM ICSWareHouseLotInfoLog a
  6388. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6389. INNER JOIN ICSManufactureReceive c ON b.TransCode=c.RCVCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6390. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  6391. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6392. where ID in (select id from #NewTempERP)
  6393. DROP TABLE #NewTempERP
  6394. ";
  6395. }
  6396. //销售出库
  6397. else if (TransType == TransTypeEnum.SalesShipmentDoc.GetDescription())
  6398. {
  6399. ERPupdate = @"SELECT a.id
  6400. INTO #NewTempERP
  6401. FROM ICSWareHouseLotInfoLog a
  6402. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6403. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6404. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6405. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6406. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6407. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  6408. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6409. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6410. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6411. where ID in (select id from #NewTempERP)
  6412. DROP TABLE #NewTempERP
  6413. ";
  6414. }
  6415. //销售退货
  6416. else if (TransType == TransTypeEnum.SalesShipmentDocNegative.GetDescription())
  6417. {
  6418. ERPupdate = @"SELECT a.id
  6419. INTO #NewTempERP
  6420. FROM ICSWareHouseLotInfoLog a
  6421. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6422. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6423. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6424. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6425. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6426. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  6427. and (ISNULL(a.ToWarehouseCode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6428. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6429. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6430. where ID in (select id from #NewTempERP)
  6431. DROP TABLE #NewTempERP";
  6432. }
  6433. //返工工单
  6434. else if (TransType == TransTypeEnum.ReWorkReceiveMo.GetDescription())
  6435. {
  6436. ERPupdate = @"SELECT a.id
  6437. INTO #NewTempERP
  6438. FROM ICSWareHouseLotInfoLog a
  6439. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6440. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.WorkPoint=c.WorkPoint
  6441. INNER JOIN ICSMOPick d ON d.MODetailID=c.MODetailID AND d.WorkPoint=c.WorkPoint and b.TransSequence=c.Sequence+'-'+d.Sequence
  6442. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6443. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6444. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6445. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6446. WHERE d.PickID='{3}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6447. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6448. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6449. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6450. where ID in (select id from #NewTempERP)
  6451. DROP TABLE #NewTempERP
  6452. ";
  6453. }
  6454. //一步调拨
  6455. else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
  6456. {
  6457. ERPupdate = @"SELECT a.id
  6458. INTO #NewTempERP
  6459. FROM ICSWareHouseLotInfoLog a
  6460. INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6461. WHERE c.TransferID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  6462. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6463. where ID in (select id from #NewTempERP)
  6464. DROP TABLE #NewTempERP
  6465. ";
  6466. }
  6467. //调拨
  6468. else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
  6469. {
  6470. ERPupdate = @"SELECT a.id
  6471. INTO #NewTempERP
  6472. FROM ICSWareHouseLotInfoLog a
  6473. INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6474. WHERE c.TransferID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  6475. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6476. where ID in (select id from #NewTempERP)
  6477. DROP TABLE #NewTempERP
  6478. ";
  6479. }
  6480. //无源头调拨
  6481. else if (TransType == TransTypeEnum.StepNoTransferDocIn.GetDescription())
  6482. {
  6483. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6484. FROM ICSWareHouseLotInfoLog a
  6485. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6486. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6487. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6488. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6489. WHERE a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode='70'
  6490. and (ISNULL(a.FromWareHouseCode, '')+ ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6491. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6492. ";
  6493. }
  6494. //两步调出
  6495. else if (TransType == TransTypeEnum.TwoStepTransferDocOut.GetDescription())
  6496. {
  6497. ERPupdate = @"SELECT a.id
  6498. INTO #NewTempERP
  6499. FROM ICSWareHouseLotInfoLog a
  6500. INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6501. INNER JOIN ICSTransfer d ON c.TransferDetailID=d.TransferDetailID AND c.WorkPoint=d.WorkPoint
  6502. WHERE c.OutID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6503. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6504. where ID in (select id from #NewTempERP)
  6505. DROP TABLE #NewTempERP
  6506. ";
  6507. }
  6508. //两步调入
  6509. else if (TransType == TransTypeEnum.TwoStepTransferDocIn.GetDescription())
  6510. {
  6511. ERPupdate = @"SELECT a.id
  6512. INTO #NewTempERP
  6513. FROM ICSWareHouseLotInfoLog a
  6514. INNER JOIN ICSOtherIn b ON a.TransCode=b.InCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  6515. INNER JOIN ICSTransfer c ON b.TransferDetailID=c.TransferDetailID AND b.WorkPoint=c.WorkPoint
  6516. WHERE b.InID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6517. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6518. where ID in (select id from #NewTempERP)
  6519. DROP TABLE #NewTempERP
  6520. ";
  6521. }
  6522. //销售退货-原条码
  6523. else if (TransType == TransTypeEnum.SalesReturnBack.GetDescription())
  6524. {
  6525. ERPupdate = @"SELECT a.id
  6526. INTO #NewTempERP
  6527. FROM ICSWareHouseLotInfoLog a
  6528. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6529. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6530. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6531. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6532. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6533. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  6534. and (ISNULL(a.ToWarehouseCode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6535. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6536. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6537. where ID in (select id from #NewTempERP)
  6538. DROP TABLE #NewTempERP";
  6539. }
  6540. //其他出库
  6541. else if (TransType == TransTypeEnum.OtherOutDoc.GetDescription())
  6542. {
  6543. ERPupdate = @"SELECT a.id
  6544. INTO #NewTempERP
  6545. FROM ICSWareHouseLotInfoLog a
  6546. INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6547. WHERE c.OutID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  6548. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6549. where ID in (select id from #NewTempERP)
  6550. DROP TABLE #NewTempERP
  6551. ";
  6552. }
  6553. //其他入库
  6554. else if (TransType == TransTypeEnum.OtherInDoc.GetDescription())
  6555. {
  6556. ERPupdate = @"SELECT a.id
  6557. INTO #NewTempERP
  6558. FROM ICSWareHouseLotInfoLog a
  6559. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6560. INNER JOIN ICSOtherIn c ON b.TransCode=c.InCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6561. WHERE c.InID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6562. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6563. where ID in (select id from #NewTempERP)
  6564. DROP TABLE #NewTempERP
  6565. ";
  6566. }
  6567. //采购入库-入库单
  6568. else if (TransType == TransTypeEnum.PurchaseReceiveRevDoc.GetDescription())
  6569. {
  6570. ERPupdate = @"SELECT a.id
  6571. INTO #NewTempERP
  6572. FROM ICSWareHouseLotInfoLog a
  6573. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6574. INNER JOIN ICSPurchaseReceive c ON b.TransCode=c.RcvCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6575. WHERE c.RcvID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6576. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6577. where ID in (select id from #NewTempERP)
  6578. DROP TABLE #NewTempERP
  6579. ";
  6580. }
  6581. //委外入库-入库单
  6582. else if (TransType == TransTypeEnum.OutsourcingReceiveRevDoc.GetDescription())
  6583. {
  6584. ERPupdate = @"SELECT a.id
  6585. INTO #NewTempERP
  6586. FROM ICSWareHouseLotInfoLog a
  6587. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6588. INNER JOIN ICSOutsourcingReceive c ON b.TransCode=c.RcvCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6589. WHERE c.RcvID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6590. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6591. where ID in (select id from #NewTempERP)
  6592. DROP TABLE #NewTempERP
  6593. ";
  6594. }
  6595. //拆卸单
  6596. else if (TransType == TransTypeEnum.DisassemblyDoc.GetDescription())
  6597. {
  6598. ERPupdate = @"UPDATE d set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6599. FROM ICSWareHouseLotInfoLog a
  6600. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6601. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6602. INNER JOIN ICSWareHouseLotInfoLog d ON b.TransCode=d.TransCode AND d.TransSequence='1' AND b.WorkPoint=d.WorkPoint
  6603. WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND d.ERPUpload='0' AND a.BusinessCode ='{7}'
  6604. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6605. FROM ICSWareHouseLotInfoLog a
  6606. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6607. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6608. WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.DABDOCType='2' AND a.BusinessCode ='{7}'
  6609. ";
  6610. }
  6611. //领料申请单
  6612. else if (TransType == TransTypeEnum.MOApply.GetDescription())
  6613. {
  6614. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6615. // FROM ICSWareHouseLotInfoLog a
  6616. // INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6617. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6618. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6619. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6620. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6621. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6622. // and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6623. // ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6624. // ";
  6625. ERPupdate = @"SELECT a.id
  6626. INTO #NewTempERP
  6627. FROM ICSWareHouseLotInfoLog a
  6628. INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6629. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6630. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6631. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6632. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6633. WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6634. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6635. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6636. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6637. where ID in (select id from #NewTempERP)
  6638. DROP TABLE #NewTempERP
  6639. ";
  6640. }
  6641. //补料申请单
  6642. else if (TransType == TransTypeEnum.MOReplenishment.GetDescription())
  6643. {
  6644. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6645. // FROM ICSWareHouseLotInfoLog a
  6646. // INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6647. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6648. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6649. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6650. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6651. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6652. // and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6653. // ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6654. // ";
  6655. ERPupdate = @"SELECT a.id
  6656. INTO #NewTempERP
  6657. FROM ICSWareHouseLotInfoLog a
  6658. INNER JOIN ICSMOReplenishment c ON a.TransCode=c.ReplenishmentCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6659. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6660. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6661. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6662. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6663. WHERE c.ReplenishmentDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6664. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6665. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6666. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6667. where ID in (select id from #NewTempERP)
  6668. DROP TABLE #NewTempERP
  6669. ";
  6670. }
  6671. //委外领料申请单
  6672. else if (TransType == TransTypeEnum.OOApply.GetDescription())
  6673. {
  6674. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6675. // FROM ICSWareHouseLotInfoLog a
  6676. // INNER JOIN ICSOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6677. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6678. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6679. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6680. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6681. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6682. // and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6683. // ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6684. // ";
  6685. ERPupdate = @"SELECT a.id
  6686. INTO #NewTempERP
  6687. FROM ICSWareHouseLotInfoLog a
  6688. INNER JOIN ICSOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6689. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6690. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6691. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6692. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6693. WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6694. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6695. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6696. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6697. where ID in (select id from #NewTempERP)
  6698. DROP TABLE #NewTempERP
  6699. ";
  6700. }
  6701. //开立材料出库
  6702. else if (TransType == TransTypeEnum.MOIssue.GetDescription())
  6703. {
  6704. ERPupdate = @"SELECT a.id
  6705. INTO #NewTempERP
  6706. FROM ICSWareHouseLotInfoLog a
  6707. INNER JOIN ICSMOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6708. WHERE c.IssueID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6709. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6710. where ID in (select id from #NewTempERP)
  6711. DROP TABLE #NewTempERP
  6712. ";
  6713. }
  6714. //开立委外材料出库
  6715. else if (TransType == TransTypeEnum.OOIssue.GetDescription())
  6716. {
  6717. ERPupdate = @"SELECT a.id
  6718. INTO #NewTempERP
  6719. FROM ICSWareHouseLotInfoLog a
  6720. INNER JOIN ICSMOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6721. WHERE c.IssueID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6722. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6723. where ID in (select id from #NewTempERP)
  6724. DROP TABLE #NewTempERP
  6725. ";
  6726. }
  6727. //开立红字入库单
  6728. else if (TransType == TransTypeEnum.PurchaseReceive.GetDescription())
  6729. {
  6730. ERPupdate = @"SELECT a.id
  6731. INTO #NewTempERP
  6732. FROM ICSWareHouseLotInfoLog a
  6733. INNER JOIN ICSPurchaseReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6734. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  6735. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6736. where ID in (select id from #NewTempERP)
  6737. DROP TABLE #NewTempERP
  6738. ";
  6739. }
  6740. //开立委外红字入库单
  6741. else if (TransType == TransTypeEnum.OutsourcingReceiveDocNegative.GetDescription())
  6742. {
  6743. ERPupdate = @"SELECT a.id
  6744. INTO #NewTempERP
  6745. FROM ICSWareHouseLotInfoLog a
  6746. INNER JOIN ICSOutsourcingReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6747. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  6748. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6749. where ID in (select id from #NewTempERP)
  6750. DROP TABLE #NewTempERP
  6751. ";
  6752. }
  6753. //借用
  6754. else if (TransType == TransTypeEnum.BrrowDoc.GetDescription())
  6755. {
  6756. ERPupdate = @"SELECT a.id
  6757. INTO #NewTempERP
  6758. FROM ICSWareHouseLotInfoLog a
  6759. INNER JOIN ICSBrrow c ON a.TransCode=c.BrrowCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6760. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6761. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6762. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6763. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6764. WHERE c.BrrowDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6765. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6766. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6767. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6768. where ID in (select id from #NewTempERP)
  6769. DROP TABLE #NewTempERP";
  6770. }
  6771. //归还
  6772. else if (TransType == TransTypeEnum.ReturnDoc.GetDescription())
  6773. {
  6774. ERPupdate = @"SELECT a.id
  6775. INTO #NewTempERP
  6776. FROM ICSWareHouseLotInfoLog a
  6777. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6778. INNER JOIN ICSReturn c ON b.TransCode=c.ReturnCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6779. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6780. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6781. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6782. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6783. WHERE c.ReturnDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6784. and (ISNULL(a.tohwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  6785. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  6786. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6787. where ID in (select id from #NewTempERP)
  6788. DROP TABLE #NewTempERP";
  6789. }
  6790. //销售出库-出库单
  6791. else if (TransType == TransTypeEnum.SalesShipmentOutDoc.GetDescription())
  6792. {
  6793. ERPupdate = @"SELECT a.id
  6794. INTO #NewTempERP
  6795. FROM ICSWareHouseLotInfoLog a
  6796. INNER JOIN ICSSSD c ON a.TransCode=c.SSDCOde AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6797. WHERE c.SSDID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  6798. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6799. where ID in (select id from #NewTempERP)
  6800. DROP TABLE #NewTempERP
  6801. ";
  6802. }
  6803. ERPupdate = string.Format(ERPupdate, SourceDetailID, Identification, ID, DetailID, Code, Sequence, col, BusinessCode);
  6804. if (!DBHelper.ExecuteNonQuery(ERPupdate, cmd))
  6805. {
  6806. throw new Exception(TransType + language.GetNameByCode("WMSAPIInfo175"));//"回写日志失败!");
  6807. }
  6808. }
  6809. catch (Exception ex)
  6810. {
  6811. log.Debug(ex.ToString());
  6812. log.Debug(TransType + Environment.NewLine + ERPupdate);
  6813. }
  6814. }
  6815. /// <summary>
  6816. /// 倒冲时子件已领数量回写
  6817. /// </summary>
  6818. public static void DetailQTYUpdate()
  6819. {
  6820. }
  6821. /// <summary>
  6822. /// 生成条码
  6823. /// </summary>
  6824. /// <param name="LotNo"></param>
  6825. /// <param name="Quantity"></param>
  6826. /// <param name="TransCode"></param>
  6827. /// <param name="TransSequence"></param>
  6828. /// <param name="WorkPoint"></param>
  6829. /// <param name="Identification"></param>
  6830. /// <param name="User"></param>
  6831. /// <param name="InvCode"></param>
  6832. /// <param name="BusinessCode"></param>
  6833. /// <param name="ProjectCode"></param>
  6834. /// <param name="BatchCode"></param>
  6835. /// <param name="Version"></param>
  6836. /// <param name="Brand"></param>
  6837. /// <param name="cFree1"></param>
  6838. /// <param name="cFree2"></param>
  6839. /// <param name="cFree3"></param>
  6840. /// <param name="cFree4"></param>
  6841. /// <param name="cFree5"></param>
  6842. /// <param name="cFree6"></param>
  6843. /// <param name="cFree7"></param>
  6844. /// <param name="cFree8"></param>
  6845. /// <param name="cFree9"></param>
  6846. /// <param name="cFree10"></param>
  6847. /// <param name="cmd"></param>
  6848. /// <param name="language"></param>
  6849. public static void CreateLotNo(string LotNo, string Quantity, string TransCode, string TransSequence, string WorkPoint, string Identification, string User, string InvCode, string BusinessCode,
  6850. string ProjectCode, string BatchCode, string Version, string Brand, string cFree1, string cFree2, string cFree3, string cFree4, string cFree5,string cFree6, string cFree7, string cFree8, string cFree9, string cFree10, SqlCommand cmd, Dictionary<string, string> language,string LocationCode,string OLDLotNo)
  6851. {
  6852. try
  6853. {
  6854. String EffectiveEnable = "";
  6855. String Colspan = "";
  6856. String IDD = "";
  6857. int EffectiveDays = 0;
  6858. String Time = "";
  6859. int EffectiveDayss = 0;
  6860. DateTime dtt;
  6861. DateTime now = DateTime.Now;
  6862. string sql = string.Empty;
  6863. //string sql = @"select EffectiveEnable,EffectiveDays from ICSInventory a
  6864. // Left Join ICSMO b ON a.InvCode=b.InvCode and a.WorkPoint = b.WorkPoint
  6865. // where b.MoCode='{0}' and b.WorkPoint='{1}'";
  6866. //sql = string.Format(sql, TransCode, WorkPoint);
  6867. //DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  6868. //if (dt.Rows.Count == 0)
  6869. //{
  6870. // throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  6871. //}
  6872. //else
  6873. //{
  6874. // EffectiveEnable = dt.Rows[0]["EffectiveEnable"].ToString();
  6875. //EffectiveDays = Convert.ToInt32(dt.Rows[0]["EffectiveDays"]);
  6876. //}
  6877. //EffectiveDayss = Convert.ToInt32(EffectiveDays);
  6878. //if (!EffectiveEnable.Equals("False"))
  6879. //{
  6880. int year = now.Year;
  6881. int month = now.Month;
  6882. int day = now.Day;
  6883. int n = DateTime.DaysInMonth(year, month);
  6884. int k = day + EffectiveDays;
  6885. if (k > n)
  6886. {
  6887. day = EffectiveDays - (n - day);
  6888. month = month + 1;
  6889. if (month > 12)
  6890. {
  6891. month = 1;
  6892. year = year + 1;
  6893. }
  6894. }
  6895. else
  6896. {
  6897. day = day + EffectiveDays;
  6898. }
  6899. Time = year + "-" + month + "-" + day;
  6900. //}
  6901. //else
  6902. //{
  6903. // Time = "2999-12-31 00:00:00.000";
  6904. //}
  6905. dtt = Convert.ToDateTime(Time);
  6906. //检验自由项
  6907. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  6908. + "~" + Brand + "~" + cFree1
  6909. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  6910. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  6911. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  6912. sql = @"select ID,Colspan from ICSExtension a
  6913. where Colspan='{0}' and WorkPoint='{1}'";
  6914. sql = string.Format(sql, Colspan, WorkPoint);
  6915. DataTable dttt = DBHelper.SQlReturnData(sql, cmd);
  6916. if (dttt.Rows.Count == 0)
  6917. {
  6918. IDD = Guid.NewGuid().ToString();
  6919. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  6920. select '{17}','{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}',GETDATE(),'{15}',f.F_RealName,'{16}'from Sys_SRM_User f where f.F_Account='{15}' and f.F_Location='{16}'";
  6921. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, WorkPoint, IDD);
  6922. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6923. {
  6924. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  6925. }
  6926. }
  6927. else
  6928. {
  6929. IDD = dttt.Rows[0]["ID"].ToString();
  6930. }
  6931. //存入条码表
  6932. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{4}')
  6933. BEGIN
  6934. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6935. RETURN
  6936. END
  6937. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  6938. Quantity,Amount,ExtensionID,Type,PrintTimes,
  6939. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  6940. WorkPoint,EATTRIBUTE1)
  6941. SELECT TOP 1 NEWID(),'{0}','{8}',GETDATE(),'{6}',
  6942. '{1}','0','{7}','16',null,
  6943. null,null,'{2}' ,f.F_RealName ,GETDATE(),
  6944. '{4}' ,''
  6945. FROM Sys_SRM_User f
  6946. where f.F_Account='{2}' and f.F_Location='{4}'
  6947. ";
  6948. sql = string.Format(sql, LotNo, Quantity, User, TransCode, WorkPoint, TransSequence, dtt, IDD,InvCode);
  6949. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6950. {
  6951. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  6952. }
  6953. ///存入条码关联表
  6954. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{3}')
  6955. BEGIN
  6956. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6957. RETURN
  6958. END
  6959. INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,
  6960. WorkPoint,EATTRIBUTE1)
  6961. SELECT '{4}','{0}','{1}',f.F_Account ,f.F_RealName,GETDATE(),
  6962. a.WorkPoint,''
  6963. FROM ICSInventoryLot a
  6964. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6965. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6966. WHERE a.LotNo='{5}' AND a.WorkPoint='{3}'
  6967. ";
  6968. sql = string.Format(sql, TransCode, TransSequence, User, WorkPoint, LotNo, OLDLotNo);
  6969. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6970. {
  6971. throw new Exception(language.GetNameByCode("WMSAPIInfo367"));
  6972. }
  6973. //存入库存表
  6974. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  6975. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'0',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  6976. FROM ICSInventoryLot a
  6977. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6978. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6979. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  6980. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  6981. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6982. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  6983. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  6984. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6985. {
  6986. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  6987. }
  6988. }
  6989. catch (Exception)
  6990. {
  6991. throw;
  6992. }
  6993. }
  6994. /// <summary>
  6995. /// 东辉日志表记录交接人EATTRIBUTE3
  6996. /// </summary>
  6997. /// <param name="TransType"></param>
  6998. /// <param name="BusinessCode"></param>
  6999. /// <param name="Heir"></param>
  7000. /// <param name="cmd"></param>
  7001. public static void WareHouseLotInfoLogUpdateHeir(string Identification, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language,string Heir)
  7002. {
  7003. try
  7004. {
  7005. ///更新日志表
  7006. string sql = @"
  7007. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE3='{2}' WHERE Identification='{0}' and BusinessCode ='{1}'
  7008. ";
  7009. sql = string.Format(sql, Identification, BusinessCode, Heir);
  7010. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7011. {
  7012. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));//"库存表更新失败!");
  7013. }
  7014. }
  7015. catch (Exception)
  7016. {
  7017. throw;
  7018. }
  7019. }
  7020. //public void AutoWarehousingCreate()
  7021. //{
  7022. //}
  7023. }
  7024. }