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.

7696 lines
487 KiB

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. else 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 a.warehousecode = '{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 a.warehousecode = '{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. where a.Quantity-a.lockQuantity>0 {9} --order by {2} asc
  646. IF NOT EXISTS(SELECT 1 FROM #barcodetemp)
  647. BEGIN
  648. RAISERROR('',16,1)
  649. RETURN;
  650. END
  651. -- 3.maintemp ID barcodetemp
  652. BEGIN
  653. DECLARE @qty DECIMAL(18,6);--
  654. DECLARE @needqty DECIMAL(18,6);--
  655. DECLARE @lotno VARCHAR(50);--
  656. DECLARE @Mtime VARCHAR(50);--
  657. --
  658. set @needqty = {4}
  659. DECLARE tempCursor CURSOR FOR (select lotno from #barcodetemp ); --tempCursor
  660. OPEN tempCursor; --
  661. FETCH NEXT FROM tempCursor INTO @Mtime; --
  662. WHILE @@fetch_status=0
  663. BEGIN
  664. IF @needqty>0
  665. BEGIN
  666. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a where lotno =@Mtime
  667. BEGIN
  668. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')--
  669. BEGIN
  670. -- @qty
  671. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  672. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  673. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  674. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  675. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  676. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  677. c.WarehouseCode,c.LocationCode,'','',@qty,
  678. '','0','{12}','{16}','1','{6}',
  679. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  680. SYSDATETIME() ,a.WorkPoint ,'','','',''
  681. FROM ICSInventoryLot a
  682. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  683. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  684. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  685. --
  686. UPDATE ICSWareHouseLotInfo set Quantity =0 where lotno = @lotno
  687. SET @needqty=@needqty-@qty
  688. END
  689. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  690. BEGIN
  691. -- @qty
  692. -- @qty
  693. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  694. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  695. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  696. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  697. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  698. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  699. c.WarehouseCode,c.LocationCode,'','',@needqty,
  700. '','0','{12}','{16}','1','{6}',
  701. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  702. SYSDATETIME() ,a.WorkPoint ,'','','',''
  703. FROM ICSInventoryLot a
  704. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  705. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  706. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  707. --
  708. update ICSWareHouseLotInfo set quantity = @qty-@needqty where lotno = @lotno
  709. SET @needqty=@needqty-@qty
  710. END
  711. END
  712. END
  713. FETCH NEXT FROM tempCursor INTO @Mtime;
  714. END
  715. CLOSE tempCursor
  716. DEALLOCATE tempCursor
  717. -- 退
  718. IF(@needqty>0)
  719. BEGIN
  720. -- -@needqty异常退料
  721. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  722. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  723. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  724. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  725. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE10)
  726. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  727. '{3}','','','',-@needqty,
  728. '','0','{12}','{16}','1','{6}',
  729. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  730. SYSDATETIME() ,a.WorkPoint ,'','','','',''
  731. FROM ICSInventory a
  732. LEFT JOIN ICSWareHouseLotInfo c ON a.INVCODE=c.invcode AND a.WorkPoint=c.WorkPoint
  733. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  734. WHERE c.LotNo=@lotno AND a.WorkPoint='{8}'
  735. --
  736. update ICSWareHouseLotInfo set quantity = quantity-@needqty where lotno = @lotno
  737. END
  738. END
  739. DROP table #barcodetemp";
  740. sqlwhere = string.Format(sqlwhere,InvCode, "", "", WHCode, LocaCode);
  741. sql = string.Format(sql, InvCode, ERPDetailID, MTime, WHCode,
  742. Quantity, Identification, ERPID, User, WorkPoint, sqlwhere, TransCode, TransSequence,TransType, ERPCode, ERPSequence,LocaCode,BusinessCode);
  743. #endregion
  744. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  745. {
  746. throw new Exception(language.GetNameByCode("WMSAPIInfo200"));//"倒冲出错!"
  747. }
  748. #endregion
  749. }
  750. catch (Exception)
  751. {
  752. throw;
  753. }
  754. }
  755. /// <summary>
  756. /// 退货倒冲(反向)
  757. /// </summary>
  758. /// <param name="LocationCode"></param>
  759. /// <param name="LotNo"></param>
  760. /// <param name="Quantity"></param>
  761. /// <param name="User"></param>
  762. /// <param name="WorkPoint"></param>
  763. /// <param name="TransType"></param>
  764. /// <param name="BusinessCode"></param>
  765. /// <param name="cmd"></param>
  766. /// <param name="jointLotNo"></param>
  767. public static void WareHouseLotInfoBackIn(string Identification,
  768. string TransCode, string TransSequence, string InvCode, string WHCode, string Quantity, string User,
  769. string WorkPoint, string TransType, string BusinessCode, string ERPID, string ERPDetailID, string ERPCode, string ERPSequence,
  770. string cFree1, string cFree2, string cFree3, string cFree4, string cFree5, string cFree6, string cFree7, string cFree8, string cFree9, string cFree10,
  771. string ProjectCode, string Batch, string Version, string Brand,
  772. SqlCommand cmd, Dictionary<string, string> language)
  773. {
  774. try
  775. {
  776. string MTime = string.Empty;
  777. string LocaCode = string.Empty;
  778. //1.查询先进先出字段
  779. string mtimeSql = @"SELECT Top 1 a.F_ItemName
  780. FROM Sys_SRM_ItemsDetail a
  781. INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_Id
  782. WHERE b.F_EnCode='MtimeControl' AND a.F_EnabledMark='1'
  783. ORDER BY a.F_SortCode DESc";
  784. DataTable mtimedt = DBHelper.SQlReturnData(mtimeSql, cmd);
  785. if (mtimedt.Rows[0]["F_ItemName"].ToString() == "失效日期")
  786. {
  787. MTime = "ISNULL(b.ExpirationDate,b.ProductDate)";
  788. }
  789. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "生产日期")
  790. {
  791. MTime = "b.ProductDate";
  792. }
  793. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "入库日期")
  794. {
  795. MTime = "a.InDate";
  796. }
  797. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "批次")
  798. {
  799. MTime = "isnull(c.Batchcode ,'0')";
  800. }
  801. string sqlwhere = @"where a.invcode = '{0}' AND D.TransCode ='{" + TransCode + "}' and D.TransSequence='" + TransSequence + "'";
  802. string sqlpick = @"";
  803. if (BusinessCode == "11")
  804. {
  805. BusinessCode = "60"; TransType = "13";
  806. sqlwhere = @"select a.lotno,a.invcode,sum(D.quantity ) as quantity into #barcodetemp
  807. from
  808. ICSWareHouseLotInfoLOG D
  809. inner JOIN ICSWareHouseLotInfo a on a.lotno = d.lotno
  810. inner JOIN ICSInventoryLot b on a.lotno = b.lotno
  811. inner join ICSODeliveryNotice e on e.ODNCode = d.TransCode and e.Sequence = '" + TransSequence + @"'
  812. inner join ICSOOPick f on f.OODetailID = e.ODNDetailID and d.TransSequence=e.Sequence+'~'+f.Sequence
  813. inner join ICSExtension g on g.id=b.ExtensionID
  814. where d.invcode = '{0}' AND D.TransCode ='" + TransCode + @"' and businesscode ='60' and g.batchcode ='"+ Batch + @"'
  815. group by a.lotno,a.invcode";
  816. sqlpick = @"update f set f.IssueQuantity=f.IssueQuantity-"+ Math.Abs(Convert.ToDecimal(Quantity)) + @"
  817. from ICSODeliveryNotice e
  818. inner join ICSOOPick f on f.OODetailID = e.ODNDetailID
  819. where e.ODNCode ='" + TransCode + @"' and e.Sequence = '" + TransSequence + @"'";
  820. } else { BusinessCode = "61"; TransType = "12"; }
  821. #region 倒冲
  822. #region sql
  823. //and c.batchcode ='{1}' and c.cfree1='{2}'
  824. string sql = @"--从原倒冲出库的log里捞出库数据
  825. {9}
  826. IF NOT EXISTS(SELECT 1 FROM #barcodetemp)
  827. BEGIN
  828. RAISERROR('',16,1)
  829. RETURN;
  830. END
  831. -- 3.maintemp ID barcodetemp
  832. BEGIN
  833. DECLARE @qty DECIMAL(18,6);--
  834. DECLARE @needqty DECIMAL(18,6);--
  835. DECLARE @lotno VARCHAR(50);--
  836. DECLARE @Mtime VARCHAR(50);--
  837. --
  838. set @needqty = {4}
  839. DECLARE tempCursor CURSOR FOR (select lotno from #barcodetemp ); --tempCursor
  840. OPEN tempCursor; --
  841. FETCH NEXT FROM tempCursor INTO @Mtime; --
  842. WHILE @@fetch_status=0
  843. BEGIN
  844. IF @needqty>0
  845. BEGIN
  846. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a where lotno =@Mtime
  847. BEGIN
  848. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')--
  849. BEGIN
  850. -- @qty
  851. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  852. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  853. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  854. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  855. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  856. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  857. c.WarehouseCode,c.LocationCode,c.WarehouseCode,c.LocationCode,-@qty,
  858. '','0','{12}','{15}','1','{6}',
  859. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  860. SYSDATETIME() ,a.WorkPoint ,'','','',''
  861. FROM ICSInventoryLot a
  862. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  863. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  864. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  865. --
  866. UPDATE ICSWareHouseLotInfo set Quantity = Quantity+@qty where lotno = @lotno
  867. SET @needqty=@needqty-@qty
  868. END
  869. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  870. BEGIN
  871. -- @qty
  872. -- @qty
  873. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  874. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  875. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  876. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  877. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  878. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  879. c.WarehouseCode,c.LocationCode,c.WarehouseCode,c.LocationCode,-@needqty,
  880. '','0','{12}','{15}','1','{6}',
  881. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  882. SYSDATETIME() ,a.WorkPoint ,'','','',''
  883. FROM ICSInventoryLot a
  884. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  885. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  886. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  887. --
  888. update ICSWareHouseLotInfo set quantity = quantity+@needqty where lotno = @lotno
  889. SET @needqty=@needqty-@qty
  890. END
  891. END
  892. END
  893. FETCH NEXT FROM tempCursor INTO @Mtime;
  894. END
  895. CLOSE tempCursor
  896. DEALLOCATE tempCursor
  897. {16}
  898. END
  899. DROP table #barcodetemp";
  900. sqlwhere = string.Format(sqlwhere, InvCode, "", "", WHCode);
  901. sql = string.Format(sql, InvCode, ERPDetailID, MTime, WHCode,
  902. Math.Abs(Convert.ToDecimal(Quantity)), Identification, ERPID, User, WorkPoint, sqlwhere, TransCode, TransSequence, TransType, ERPCode, ERPSequence,BusinessCode, sqlpick);
  903. #endregion
  904. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  905. {
  906. throw new Exception(language.GetNameByCode("WMSAPIInfo200"));//"倒冲出错!"
  907. }
  908. #endregion
  909. }
  910. catch (Exception)
  911. {
  912. throw;
  913. }
  914. }
  915. public static void WareHouseLotInfoBackInMF(string Identification,
  916. string TransCode, string TransSequence, string InvCode, string WHCode, string Quantity, string User,
  917. string WorkPoint, string TransType, string BusinessCode, string ERPID, string ERPDetailID, string ERPCode, string ERPSequence,
  918. string cFree1, string cFree2, string cFree3, string cFree4, string cFree5, string cFree6, string cFree7, string cFree8, string cFree9, string cFree10,
  919. string ProjectCode, string Batch, string Version, string Brand, string PickID,
  920. SqlCommand cmd, Dictionary<string, string> language)
  921. {
  922. try
  923. {
  924. string MTime = string.Empty;
  925. string LocaCode = string.Empty;
  926. //1.查询先进先出字段
  927. string mtimeSql = @"SELECT Top 1 a.F_ItemName
  928. FROM Sys_SRM_ItemsDetail a
  929. INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_Id
  930. WHERE b.F_EnCode='MtimeControl' AND a.F_EnabledMark='1'
  931. ORDER BY a.F_SortCode DESc";
  932. DataTable mtimedt = DBHelper.SQlReturnData(mtimeSql, cmd);
  933. if (mtimedt.Rows[0]["F_ItemName"].ToString() == "失效日期")
  934. {
  935. MTime = "ISNULL(b.ExpirationDate,b.ProductDate)";
  936. }
  937. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "生产日期")
  938. {
  939. MTime = "b.ProductDate";
  940. }
  941. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "入库日期")
  942. {
  943. MTime = "a.InDate";
  944. }
  945. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "批次")
  946. {
  947. MTime = "isnull(c.Batchcode ,'0')";
  948. }
  949. string sqlwhere = @"where a.invcode = '{0}' AND D.TransCode ='{" + TransCode + "}' and D.TransSequence='" + TransSequence + "'";
  950. string sqlpick = @"";
  951. if (BusinessCode == "11")
  952. {
  953. BusinessCode = "60"; TransType = "13";
  954. sqlwhere = @"select a.lotno,a.invcode,sum(a.quantity ) as quantity into #barcodetemp
  955. from ICSWareHouseLotInfo a
  956. inner JOIN ICSInventoryLot b on a.lotno = b.lotno
  957. inner join ICSOOPick f on f.PickID = '" + PickID + @"' and a.WarehouseCode = f.WHCode and a.invcode = f.InvCode
  958. inner join ICSExtension g on g.id=b.ExtensionID
  959. where a.invcode = '{0}' and g.batchcode ='" + Batch + @"'
  960. group by a.lotno,a.invcode";
  961. sqlpick = @"update f set f.IssueQuantity=f.IssueQuantity-" + Math.Abs(Convert.ToDecimal(Quantity)) + @"
  962. from ICSODeliveryNotice e
  963. inner join ICSOOPick f on f.OODetailID = e.ODNDetailID
  964. where e.ODNCode ='" + TransCode + @"' and e.Sequence = '" + TransSequence + @"'";
  965. }
  966. else { BusinessCode = "61"; TransType = "12"; }
  967. #region 倒冲
  968. #region sql
  969. //and c.batchcode ='{1}' and c.cfree1='{2}'
  970. string sql = @"--从原倒冲出库的log里捞出库数据
  971. {9}
  972. IF NOT EXISTS(SELECT 1 FROM #barcodetemp)
  973. BEGIN
  974. RAISERROR('',16,1)
  975. RETURN;
  976. END
  977. -- 3.maintemp ID barcodetemp
  978. BEGIN
  979. DECLARE @qty DECIMAL(18,6);--
  980. DECLARE @needqty DECIMAL(18,6);--
  981. DECLARE @lotno VARCHAR(50);--
  982. DECLARE @Mtime VARCHAR(50);--
  983. --
  984. set @needqty = {4}
  985. DECLARE tempCursor CURSOR FOR (select lotno from #barcodetemp ); --tempCursor
  986. OPEN tempCursor; --
  987. FETCH NEXT FROM tempCursor INTO @Mtime; --
  988. WHILE @@fetch_status=0
  989. BEGIN
  990. IF @needqty>0
  991. BEGIN
  992. select top 1 @qty = @needqty,@lotno = isnull(lotno,'') from #barcodetemp a where lotno =@Mtime
  993. BEGIN
  994. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')--
  995. BEGIN
  996. -- @qty
  997. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  998. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  999. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1000. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1001. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  1002. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1003. c.WarehouseCode,c.LocationCode,c.WarehouseCode,c.LocationCode,-@qty,
  1004. '','0','{12}','{15}','1','{6}',
  1005. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1006. SYSDATETIME() ,a.WorkPoint ,'','','',''
  1007. FROM ICSInventoryLot a
  1008. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1009. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1010. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  1011. --
  1012. UPDATE ICSWareHouseLotInfo set Quantity = Quantity+@qty where lotno = @lotno
  1013. SET @needqty=@needqty-@qty
  1014. END
  1015. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1016. BEGIN
  1017. -- @qty
  1018. -- @qty
  1019. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1020. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1021. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1022. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1023. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  1024. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1025. c.WarehouseCode,c.LocationCode,c.WarehouseCode,c.LocationCode,-@needqty,
  1026. '','0','{12}','{15}','1','{6}',
  1027. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1028. SYSDATETIME() ,a.WorkPoint ,'','','',''
  1029. FROM ICSInventoryLot a
  1030. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1031. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1032. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  1033. --
  1034. update ICSWareHouseLotInfo set quantity = quantity+@needqty where lotno = @lotno
  1035. SET @needqty=@needqty-@qty
  1036. END
  1037. END
  1038. END
  1039. FETCH NEXT FROM tempCursor INTO @Mtime;
  1040. END
  1041. CLOSE tempCursor
  1042. DEALLOCATE tempCursor
  1043. {16}
  1044. END
  1045. DROP table #barcodetemp";
  1046. sqlwhere = string.Format(sqlwhere, InvCode, "", "", WHCode);
  1047. sql = string.Format(sql, InvCode, ERPDetailID, MTime, WHCode,
  1048. Math.Abs(Convert.ToDecimal(Quantity)), Identification, ERPID, User, WorkPoint, sqlwhere, TransCode, TransSequence, TransType, ERPCode, ERPSequence, BusinessCode, sqlpick);
  1049. #endregion
  1050. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1051. {
  1052. throw new Exception(language.GetNameByCode("WMSAPIInfo200"));//"倒冲出错!"
  1053. }
  1054. #endregion
  1055. }
  1056. catch (Exception)
  1057. {
  1058. throw;
  1059. }
  1060. }
  1061. /// <summary>
  1062. /// 倒冲前检验数量
  1063. /// </summary>
  1064. /// <param name="LocationCode"></param>
  1065. /// <param name="LotNo"></param>
  1066. /// <param name="Quantity"></param>
  1067. /// <param name="User"></param>
  1068. /// <param name="WorkPoint"></param>
  1069. /// <param name="TransType"></param>
  1070. /// <param name="BusinessCode"></param>
  1071. /// <param name="cmd"></param>
  1072. /// <param name="jointLotNo"></param>
  1073. public static void WareHouseLotInfoBackOutBefore(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  1074. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo, string TransCode, string TransSequence)
  1075. {
  1076. try
  1077. {
  1078. string sql = string.Empty;
  1079. string LocaCode = "";
  1080. string DisVenCode = "";
  1081. string ssql = @"SELECT a.ODNCode,a.Sequence,a.WorkPoint,a.VenCode
  1082. FROM ICSODeliveryNotice a
  1083. WHERE a.ODNCode='{0}' AND a.WorkPoint='{1}'";
  1084. ssql = string.Format(ssql, TransCode, WorkPoint);
  1085. DataTable ssdt = DBHelper.SQlReturnData(ssql, cmd);
  1086. if (ssdt.Rows.Count > 0)
  1087. {
  1088. DisVenCode = ssdt.Rows[0]["VenCode"].ToString();
  1089. }
  1090. string cheksql = @"select b.F_ItemCode as VenCode ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_Define1 AS LocationCode
  1091. from Sys_SRM_Items a
  1092. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1093. where a.F_EnCode='WWLocation' AND b.F_ItemCode='{0}'
  1094. ";
  1095. cheksql = string.Format(cheksql, DisVenCode);
  1096. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  1097. if (chekdt.Rows.Count > 0)
  1098. {
  1099. LocaCode = chekdt.Rows[0]["LocationCode"].ToString();
  1100. }
  1101. string chekscsql = @"SELECT a.InvCode FROM ICSMOPick a
  1102. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  1103. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1104. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1105. INNER JOIN ICSInventoryLotDetail d ON c.OOCode=d.TransCode AND c.Sequence=d.TransSequence and c.WorkPoint=d.WorkPoint
  1106. where d.LotNo='{0}' and a.WorkPoint='{1}' and a.SupplyType='1' and a.quantity>0";
  1107. chekscsql = string.Format(chekscsql, LotNo, WorkPoint);
  1108. DataTable chekcdts = DBHelper.SQlReturnData(chekscsql, cmd);
  1109. for (int i = 0; i < chekcdts.Rows.Count; i++)
  1110. {
  1111. #region 成品(生产)入库,倒冲
  1112. if (BusinessCode.Equals(TransTypeEnum.ManufactureReceiveDoc.GetDescription<DBValue>()))
  1113. {
  1114. #region sql
  1115. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  1116. SELECT
  1117. c.MOCode AS TransCode,
  1118. a.MODetailID AS DetailID,
  1119. a.InvCode,
  1120. b.InvName,
  1121. b.InvStd,
  1122. a.Quantity AS Quantity,
  1123. a.Amount,
  1124. a.Sequence AS TransSequence,
  1125. a.IssueQuantity,
  1126. c.Sequence,
  1127. inv.InvUnit,
  1128. cast(0 as decimal(18,6)) AS LocationQty,
  1129. inv.AmountUnit,
  1130. a.ExtensionID,
  1131. a.WorkPoint,
  1132. ext.ProjectCode,
  1133. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  1134. ext.Version,
  1135. ext.Brand,
  1136. ext.cFree1,
  1137. ext.cFree2,
  1138. ext.cFree3,
  1139. ext.cFree4,
  1140. ext.cFree5,
  1141. ext.cFree6,
  1142. ext.cFree7,
  1143. ext.cFree8,
  1144. ext.cFree9,
  1145. ext.cFree10,a.WHCODE
  1146. INTO #maintemp
  1147. FROM
  1148. ICSMOPick a
  1149. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  1150. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1151. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1152. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1153. INNER JOIN (
  1154. SELECT a.MOCode,a.Sequence,a.WorkPoint
  1155. FROM ICSMO a
  1156. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.MOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1157. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1158. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  1159. ) temp ON c.MOCode=temp.MOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  1160. WHERE a.SupplyType='1' and a.invcode='{2}'
  1161. 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,
  1162. 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;
  1163. select * into #resulttemp from #maintemp
  1164. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  1165. delete from #resulttemp
  1166. -- 2.maintemp barcodetemp
  1167. 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
  1168. (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
  1169. -- 3.maintemp ID barcodetemp
  1170. BEGIN
  1171. DECLARE @transSequence int;--
  1172. DECLARE @qty decimal(18,6);--
  1173. DECLARE @needqty decimal(18,6);--
  1174. DECLARE @lotno VARCHAR(50);--
  1175. DECLARE @DetailID VARCHAR(50);--ID
  1176. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  1177. OPEN tempCursor; --
  1178. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  1179. WHILE @@fetch_status=0
  1180. BEGIN
  1181. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  1182. PRINT @transSequence
  1183. WHILE @needqty>0
  1184. BEGIN
  1185. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  1186. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  1187. BEGIN
  1188. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  1189. BEGIN
  1190. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1191. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1192. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1193. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1194. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  1195. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1196. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1197. delete from #barcodetemp where lotno = @lotno
  1198. SET @needqty=@needqty-@qty
  1199. END
  1200. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1201. BEGIN
  1202. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1203. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1204. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1205. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1206. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  1207. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1208. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1209. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  1210. SET @needqty=@needqty-@qty
  1211. END
  1212. ELSE
  1213. BEGIN
  1214. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1215. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1216. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1217. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1218. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  1219. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1220. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1221. SET @needqty=0
  1222. END
  1223. END
  1224. END
  1225. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  1226. END
  1227. CLOSE tempCursor
  1228. DEALLOCATE tempCursor
  1229. END
  1230. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  1231. --select * from #resulttemp
  1232. DROP table #maintemp
  1233. DROP table #resulttemp
  1234. DROP table #barcodetemp";
  1235. #endregion
  1236. sql = String.Format(sql, LotNo, WorkPoint, Quantity, chekcdts.Rows[i]["InvCode"].ToString());
  1237. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  1238. string json = JsonConvert.SerializeObject(table);
  1239. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  1240. if (downItemModels.Count == 0)
  1241. {
  1242. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  1243. }
  1244. //foreach (DownItemModel model in downItemModels)
  1245. //{
  1246. // if (model != null && model.LotNo == null || "" == model.LotNo)
  1247. // {
  1248. // throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  1249. // }
  1250. //}
  1251. }
  1252. #endregion
  1253. }
  1254. string chekcsql = @"SELECT a.InvCode FROM ICSOOPick a
  1255. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  1256. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1257. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1258. INNER JOIN ICSInventoryLotDetail d ON c.OOCode=d.TransCode AND c.Sequence=d.TransSequence and c.WorkPoint=d.WorkPoint
  1259. where d.LotNo='{0}' and a.WorkPoint='{1}' and a.SupplyType='1' and a.quantity>0";
  1260. chekcsql = string.Format(chekcsql, LotNo, WorkPoint);
  1261. DataTable chekcdt = DBHelper.SQlReturnData(chekcsql, cmd);
  1262. for (int i = 0; i < chekcdt.Rows.Count; i++)
  1263. {
  1264. #region 委外入库,倒冲
  1265. if (BusinessCode.Equals(TransTypeEnum.OutsourcingReceiveDoc.GetDescription<DBValue>())|| BusinessCode.Equals(TransTypeEnum.ODeliveryNotice.GetDescription<DBValue>()))
  1266. {
  1267. if (LocaCode.Equals(""))
  1268. {
  1269. #region sql
  1270. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  1271. SELECT
  1272. c.OOCode AS TransCode,
  1273. a.OODetailID AS DetailID,
  1274. a.InvCode,
  1275. b.InvName,
  1276. b.InvStd,
  1277. a.Quantity AS Quantity,
  1278. a.Amount,
  1279. a.Sequence AS TransSequence,
  1280. a.IssueQuantity,
  1281. c.Sequence,
  1282. inv.InvUnit,
  1283. cast(0 as decimal(18,6)) AS LocationQty,
  1284. inv.AmountUnit,
  1285. a.ExtensionID,
  1286. a.WorkPoint,
  1287. ext.ProjectCode,
  1288. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  1289. ext.Version,
  1290. ext.Brand,
  1291. ext.cFree1,
  1292. ext.cFree2,
  1293. ext.cFree3,
  1294. ext.cFree4,
  1295. ext.cFree5,
  1296. ext.cFree6,
  1297. ext.cFree7,
  1298. ext.cFree8,
  1299. ext.cFree9,
  1300. ext.cFree10,a.WHCODE
  1301. INTO #maintemp
  1302. FROM
  1303. ICSOOPick a
  1304. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  1305. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1306. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1307. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1308. INNER JOIN (
  1309. SELECT a.OOCode,a.Sequence,a.WorkPoint
  1310. FROM ICSOutsourcingOrder a
  1311. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1312. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1313. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  1314. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  1315. WHERE a.SupplyType='1' and a.invcode='{4}'
  1316. 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,
  1317. 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;
  1318. select * into #resulttemp from #maintemp
  1319. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  1320. delete from #resulttemp
  1321. -- 2.maintemp barcodetemp
  1322. 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
  1323. (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
  1324. -- 3.maintemp ID barcodetemp
  1325. BEGIN
  1326. DECLARE @transSequence int;--
  1327. DECLARE @qty decimal(18,6);--
  1328. DECLARE @needqty decimal(18,6);--
  1329. DECLARE @lotno VARCHAR(50);--
  1330. DECLARE @DetailID VARCHAR(50);--ID
  1331. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  1332. OPEN tempCursor; --
  1333. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  1334. WHILE @@fetch_status=0
  1335. BEGIN
  1336. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  1337. PRINT @transSequence
  1338. WHILE @needqty>0
  1339. BEGIN
  1340. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  1341. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  1342. BEGIN
  1343. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  1344. BEGIN
  1345. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1346. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1347. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1348. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1349. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  1350. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1351. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1352. delete from #barcodetemp where lotno = @lotno
  1353. SET @needqty=@needqty-@qty
  1354. END
  1355. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1356. BEGIN
  1357. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1358. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1359. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1360. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1361. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  1362. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1363. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1364. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  1365. SET @needqty=@needqty-@qty
  1366. END
  1367. ELSE
  1368. BEGIN
  1369. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1370. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1371. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1372. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1373. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  1374. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1375. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1376. SET @needqty=0
  1377. END
  1378. END
  1379. END
  1380. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  1381. END
  1382. CLOSE tempCursor
  1383. DEALLOCATE tempCursor
  1384. END
  1385. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  1386. --select * from #resulttemp
  1387. DROP table #maintemp
  1388. DROP table #resulttemp
  1389. DROP table #barcodetemp";
  1390. #endregion
  1391. }
  1392. else
  1393. {
  1394. #region sql
  1395. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  1396. SELECT
  1397. c.OOCode AS TransCode,
  1398. a.OODetailID AS DetailID,
  1399. a.InvCode,
  1400. b.InvName,
  1401. b.InvStd,
  1402. a.Quantity AS Quantity,
  1403. a.Amount,
  1404. a.Sequence AS TransSequence,
  1405. a.IssueQuantity,
  1406. c.Sequence,
  1407. inv.InvUnit,
  1408. cast(0 as decimal(18,6)) AS LocationQty,
  1409. inv.AmountUnit,
  1410. a.ExtensionID,
  1411. a.WorkPoint,
  1412. ext.ProjectCode,
  1413. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  1414. ext.Version,
  1415. ext.Brand,
  1416. ext.cFree1,
  1417. ext.cFree2,
  1418. ext.cFree3,
  1419. ext.cFree4,
  1420. ext.cFree5,
  1421. ext.cFree6,
  1422. ext.cFree7,
  1423. ext.cFree8,
  1424. ext.cFree9,
  1425. ext.cFree10,a.WHCODE
  1426. INTO #maintemp
  1427. FROM
  1428. ICSOOPick a
  1429. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  1430. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1431. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1432. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1433. INNER JOIN (
  1434. SELECT a.OOCode,a.Sequence,a.WorkPoint
  1435. FROM ICSOutsourcingOrder a
  1436. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1437. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1438. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  1439. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  1440. WHERE a.SupplyType='1' and a.invcode='{4}'
  1441. 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,
  1442. 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;
  1443. select * into #resulttemp from #maintemp
  1444. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  1445. delete from #resulttemp
  1446. -- 2.maintemp barcodetemp
  1447. 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
  1448. (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
  1449. -- 3.maintemp ID barcodetemp
  1450. BEGIN
  1451. DECLARE @transSequence int;--
  1452. DECLARE @qty decimal(18,6);--
  1453. DECLARE @needqty decimal(18,6);--
  1454. DECLARE @lotno VARCHAR(50);--
  1455. DECLARE @DetailID VARCHAR(50);--ID
  1456. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  1457. OPEN tempCursor; --
  1458. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  1459. WHILE @@fetch_status=0
  1460. BEGIN
  1461. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  1462. PRINT @transSequence
  1463. WHILE @needqty>0
  1464. BEGIN
  1465. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  1466. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  1467. BEGIN
  1468. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  1469. BEGIN
  1470. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1471. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1472. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1473. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1474. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  1475. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1476. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1477. delete from #barcodetemp where lotno = @lotno
  1478. SET @needqty=@needqty-@qty
  1479. END
  1480. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1481. BEGIN
  1482. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1483. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1484. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1485. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1486. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  1487. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1488. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1489. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  1490. SET @needqty=@needqty-@qty
  1491. END
  1492. ELSE
  1493. BEGIN
  1494. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1495. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1496. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1497. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1498. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  1499. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1500. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1501. SET @needqty=0
  1502. END
  1503. END
  1504. END
  1505. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  1506. END
  1507. CLOSE tempCursor
  1508. DEALLOCATE tempCursor
  1509. END
  1510. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  1511. --select * from #resulttemp
  1512. DROP table #maintemp
  1513. DROP table #resulttemp
  1514. DROP table #barcodetemp";
  1515. #endregion
  1516. }
  1517. sql = String.Format(sql, LotNo, WorkPoint, Quantity,LocaCode, chekcdt.Rows[i]["InvCode"].ToString());
  1518. log.Debug("倒冲前检验子件数量sql:"+sql);
  1519. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  1520. string json = JsonConvert.SerializeObject(table);
  1521. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  1522. if (downItemModels.Count==0)
  1523. {
  1524. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  1525. }
  1526. //foreach (DownItemModel model in downItemModels)
  1527. //{
  1528. // if (model != null && model.LotNo == null || "" == model.LotNo)
  1529. // {
  1530. // }
  1531. //}
  1532. }
  1533. #endregion
  1534. }
  1535. }
  1536. catch (Exception ex)
  1537. {
  1538. log.Debug(ex.ToString());
  1539. }
  1540. }
  1541. /// <summary>
  1542. /// 客供料添加库存
  1543. /// </summary>
  1544. /// <param name="LocationCode"></param>
  1545. /// <param name="LotNo"></param>
  1546. /// <param name="Quantity"></param>
  1547. /// <param name="User"></param>
  1548. /// <param name="WorkPoint"></param>
  1549. /// <param name="TransType"></param>
  1550. /// <param name="BusinessCode"></param>
  1551. /// <param name="cmd"></param>
  1552. /// <param name="jointLotNo"></param>
  1553. public static void WareHouseLotByClientInfoUp(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  1554. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo,string TransCode,string TransSequence)
  1555. {
  1556. try
  1557. {
  1558. string sql = string.Empty;
  1559. string locationcode = "";
  1560. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1561. BEGIN
  1562. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1563. RETURN
  1564. END
  1565. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  1566. BEGIN
  1567. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  1568. BEGIN
  1569. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  1570. From ICSWareHouseLotInfo a
  1571. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  1572. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  1573. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1574. END
  1575. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  1576. BEGIN
  1577. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  1578. WHERE LotNo='{0}' AND WorkPoint='{1}'
  1579. END
  1580. ELSE IF('" + locationcode + @"' != '{4}')
  1581. BEGIN
  1582. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  1583. RETURN
  1584. END
  1585. END
  1586. ELSE
  1587. BEGIN
  1588. -- IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  1589. -- INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  1590. -- WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  1591. -- BEGIN
  1592. -- IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  1593. -- INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  1594. -- WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  1595. -- BEGIN
  1596. -- RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  1597. -- RETURN
  1598. -- END
  1599. -- END
  1600. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  1601. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  1602. FROM ICSInventoryLot a
  1603. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  1604. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  1605. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1606. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1607. END";
  1608. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  1609. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1610. {
  1611. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  1612. }
  1613. }
  1614. catch (Exception)
  1615. {
  1616. throw;
  1617. }
  1618. }
  1619. /// <summary>
  1620. /// 客供料上架日志记录
  1621. /// </summary>
  1622. /// <param name="Identification"></param>
  1623. /// <param name="LocationCode"></param>
  1624. /// <param name="LotNo"></param>
  1625. /// <param name="Quantity"></param>
  1626. /// <param name="User"></param>
  1627. /// <param name="WorkPoint"></param>
  1628. /// <param name="TransType"></param>
  1629. /// <param name="BusinessCode"></param>
  1630. /// <param name="cmd"></param>
  1631. /// <param name="language"></param>
  1632. /// <param name="LogID"></param>
  1633. /// <param name="jointLotNo"></param>
  1634. /// <param name="TransCode"></param>
  1635. /// <param name="TransSequence"></param>
  1636. public static void WareHouseLotByClientInfoUpLog(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  1637. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo, string TransCode, string TransSequence)
  1638. {
  1639. try
  1640. {
  1641. string sql = string.Empty;
  1642. ///添加日志
  1643. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1644. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1645. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1646. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1647. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  1648. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  1649. '','',c.WarehouseCode,c.LocationCode,'{6}',
  1650. '','0','{4}','{5}','0','',
  1651. '','','',f.F_Account ,f.F_RealName ,
  1652. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  1653. FROM ICSInventoryLot a
  1654. INNER JOIN ICSInventoryLotDetailKG b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint AND b.TransCode='{8}' AND b.TransSequence='{9}'
  1655. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1656. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1657. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1658. ";
  1659. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID, TransCode, TransSequence);
  1660. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1661. {
  1662. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1663. }
  1664. }
  1665. catch (Exception)
  1666. {
  1667. throw;
  1668. }
  1669. }
  1670. /// <summary>
  1671. /// 减少库存
  1672. /// </summary>
  1673. /// <param name="Identification"></param>
  1674. /// <param name="TransCode"></param>
  1675. /// <param name="TransSequence"></param>
  1676. /// <param name="LotNo"></param>
  1677. /// <param name="Quantity"></param>
  1678. /// <param name="User"></param>
  1679. /// <param name="WorkPoint"></param>
  1680. /// <param name="TransType"></param>
  1681. /// <param name="BusinessCode"></param>
  1682. /// <param name="cmd"></param>
  1683. public static DataTable WareHouseLotInfoDown(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  1684. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string TransID,string MergeID = "")
  1685. {
  1686. decimal LotQTYYY = 0;
  1687. decimal LotQTY = 0;
  1688. decimal SUMQTY = 0;
  1689. string INVCODE = "";
  1690. string Inspect = "";
  1691. string LotEnable = "";
  1692. string LotDocEnable = "";
  1693. string InvOQc = "";
  1694. string chekEnable = "";
  1695. string DisPrintEnable = "";
  1696. string PrintEnable = "";
  1697. string sql = "";
  1698. string lotstr = "";
  1699. int result = 0;
  1700. bool isDis = false;
  1701. List<string> NewBarCodeList = new List<string>();
  1702. DataTable dtLotno = new DataTable();
  1703. DataTable lstDt = new DataTable();
  1704. DataTable ZLtable = new DataTable();
  1705. try
  1706. {
  1707. //检验是否分批
  1708. sql = @"SELECT b.LotEnable,b.PrintEnable,b.InvOQC,b.LotDocEnable FROM ICSInventoryLot a
  1709. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  1710. where a.LotNo='{0}' and a.WorkPoint='{1}'
  1711. ";
  1712. sql = string.Format(sql, LotNo, WorkPoint);
  1713. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  1714. if (dt.Rows.Count == 0)
  1715. {
  1716. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  1717. }
  1718. else
  1719. {
  1720. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  1721. LotDocEnable = dt.Rows[0]["LotDocEnable"].ToString();
  1722. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  1723. InvOQc = dt.Rows[0]["InvOQC"].ToString();
  1724. }
  1725. log.Debug("INVOQC:"+InvOQc);
  1726. 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
  1727. from Sys_SRM_Items a
  1728. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1729. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  1730. BEGIN
  1731. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  1732. RETURN
  1733. END
  1734. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  1735. from Sys_SRM_Items a
  1736. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1737. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  1738. ";
  1739. cheksql = string.Format(cheksql, BusinessCode);
  1740. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  1741. if (chekdt.Rows.Count == 0)
  1742. {
  1743. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  1744. }
  1745. else
  1746. {
  1747. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  1748. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  1749. }
  1750. sql = @"select Quantity,invcode,Inspect from ICSWareHouseLotInfo
  1751. where LotNO='{0}' AND WorkPoint='{1}'";
  1752. sql = string.Format(sql, LotNo, WorkPoint);
  1753. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  1754. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  1755. LotQTY = Convert.ToDecimal(Quantity);
  1756. INVCODE = dtt.Rows[0]["invcode"].ToString();
  1757. Inspect = dtt.Rows[0]["Inspect"].ToString();
  1758. sql = @"SELECT isNULL(SUM(a.quantity)-'{3}',0) AS SumQTY FROM ICSWareHouseLotInfo a
  1759. INNER JOIN ICSReserve b ON a.invcode=b.invcode and a.workpoint=b.workpoint and a.warehousecode=b.whcode
  1760. where a.invcode='{2}' and a.workpoint='{1}' ";
  1761. sql = string.Format(sql, LotNo, WorkPoint,INVCODE, Quantity);
  1762. DataTable Sumdtt = DBHelper.SQlReturnData(sql, cmd);
  1763. log.Debug(Sumdtt.Rows[0]["SumQTY"]);
  1764. SUMQTY = Convert.ToDecimal(Sumdtt.Rows[0]["SumQTY"]);
  1765. //Convert.ToDecimal(Sumdtt.Rows[0]["SumQTY"]);
  1766. if (LotDocEnable.Equals("True"))
  1767. {
  1768. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  1769. {
  1770. ZLtable = ICSControlModeService.GetZL();
  1771. if (ZLtable == null)
  1772. {
  1773. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  1774. }
  1775. for (int i = 0; i < ZLtable.Rows.Count; i++)
  1776. {
  1777. string zlName = ZLtable.Rows[i]["Name"].ToString();
  1778. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  1779. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  1780. if (zlTransCode.Equals(BusinessCode))
  1781. {
  1782. if (Enable.Equals("True"))
  1783. {
  1784. ///更新日志
  1785. sql = @"
  1786. 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}')
  1787. BEGIN
  1788. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  1789. RETURN
  1790. END
  1791. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  1792. ";
  1793. sql = string.Format(sql, LotNo, WorkPoint, LogID,TransCode,TransSequence);
  1794. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1795. {
  1796. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  1797. }
  1798. ///更新库存
  1799. sql = @"
  1800. UPDATE ICSWareHouseLotInfo
  1801. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  1802. WHERE LotNo = '{0}'
  1803. AND WorkPoint = '{1}';
  1804. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  1805. WHERE a.LotNo = '{0}'
  1806. AND a.WorkPoint = '{1}'
  1807. AND Quantity < 0)
  1808. BEGIN
  1809. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  1810. RETURN
  1811. END
  1812. ";
  1813. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  1814. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1815. {
  1816. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1817. }
  1818. }
  1819. else
  1820. {
  1821. if (InvOQc.Equals("True"))
  1822. {
  1823. sql = @"select a.id from ICSWareHouseLotInfo a
  1824. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  1825. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  1826. sql = string.Format(sql, LotNo, WorkPoint);
  1827. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  1828. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  1829. {
  1830. sql = @"select a.id from ICSWareHouseLotInfo a
  1831. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  1832. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  1833. sql = string.Format(sql, LotNo, WorkPoint);
  1834. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  1835. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  1836. {
  1837. throw new Exception("条码在库检验,未检验完成,请确认!");
  1838. }
  1839. }
  1840. }
  1841. ///更新库存
  1842. sql = @"
  1843. UPDATE ICSWareHouseLotInfo
  1844. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  1845. WHERE LotNo = '{0}'
  1846. AND WorkPoint = '{1}';
  1847. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  1848. WHERE a.LotNo = '{0}'
  1849. AND a.WorkPoint = '{1}'
  1850. AND Quantity < 0)
  1851. BEGIN
  1852. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  1853. RETURN
  1854. END
  1855. ";
  1856. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  1857. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1858. {
  1859. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1860. }
  1861. }
  1862. }
  1863. }
  1864. ///分批前添加日志
  1865. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1866. BEGIN
  1867. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1868. RETURN
  1869. END
  1870. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  1871. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1872. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1873. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1874. MTIME,WorkPoint,EATTRIBUTE1)
  1875. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  1876. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  1877. '','0','{4}','31','0','',
  1878. '','','',f.F_Account ,f.F_RealName ,
  1879. SYSDATETIME() ,a.WorkPoint ,''
  1880. FROM ICSInventoryLot a
  1881. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1882. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1883. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1884. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1885. ";
  1886. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  1887. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1888. {
  1889. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1890. }
  1891. #region 获取分批后的条码(lotstr)
  1892. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  1893. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  1894. sql = string.Format(sql, LotNo, WorkPoint);
  1895. dt = DBHelper.SQlReturnData(sql, cmd);
  1896. if (dt.Rows.Count == 0)
  1897. {
  1898. lotstr = LotNo + "-" + 1;
  1899. }
  1900. else
  1901. {
  1902. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  1903. }
  1904. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  1905. #endregion
  1906. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  1907. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  1908. Quantity,Amount,ExtensionID,Type,PrintTimes,
  1909. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  1910. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  1911. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  1912. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  1913. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  1914. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  1915. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  1916. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  1917. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  1918. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  1919. From ICSInventoryLot a
  1920. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  1921. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  1922. cmd.CommandText = sql;
  1923. result = cmd.ExecuteNonQuery();
  1924. if (result <= 0)
  1925. {
  1926. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  1927. }
  1928. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  1929. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  1930. ,MUSER,MUSERName,GETDATE(),'{3}',''
  1931. from ICSWareHouseLotInfo
  1932. where LotNO='{1}' AND WorkPoint='{3}'";
  1933. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  1934. cmd.CommandText = sql;
  1935. result = cmd.ExecuteNonQuery();
  1936. if (result <= 0)
  1937. {
  1938. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  1939. }
  1940. //插入条码单据表
  1941. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  1942. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  1943. FROM ICSInventoryLot a
  1944. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1945. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1946. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  1947. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  1948. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1949. {
  1950. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  1951. }
  1952. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  1953. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1954. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1955. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1956. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  1957. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  1958. c.WarehouseCode,c.LocationCode,'','','{6}',
  1959. '','0','{7}','{8}','0','',
  1960. '','','',f.F_Account ,f.F_RealName ,
  1961. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  1962. FROM ICSInventoryLot a
  1963. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1964. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1965. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1966. ";
  1967. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  1968. cmd.CommandText = sql;
  1969. result = cmd.ExecuteNonQuery();
  1970. if (result <= 0)
  1971. {
  1972. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  1973. }
  1974. ///添加日志
  1975. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1976. BEGIN
  1977. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1978. RETURN
  1979. END
  1980. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  1981. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1982. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1983. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1984. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  1985. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  1986. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  1987. '','0','{7}','32','0','',
  1988. '','','',f.F_Account ,f.F_RealName ,
  1989. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  1990. FROM ICSInventoryLot a
  1991. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1992. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1993. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1994. ";
  1995. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  1996. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1997. {
  1998. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1999. }
  2000. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  2001. {
  2002. string PrintData = DBHelper.ReadPrintStream();
  2003. sql = @""+PrintData+"";
  2004. //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
  2005. // from ICSWareHouseLotInfolog A
  2006. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  2007. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  2008. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  2009. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  2010. // ";
  2011. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  2012. log.Debug("打印数据源:" + sql);
  2013. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  2014. lstDt = dtLotno;
  2015. }
  2016. #endregion
  2017. }
  2018. else
  2019. {
  2020. NewBarCodeList.Add(LotNo);
  2021. ///添加日志
  2022. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2023. BEGIN
  2024. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2025. RETURN
  2026. END
  2027. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2028. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2029. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2030. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2031. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2032. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  2033. c.WarehouseCode,c.LocationCode,'','','{6}',
  2034. '','0','{7}','{8}','0','',
  2035. '','','',f.F_Account ,f.F_RealName ,
  2036. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2037. FROM ICSInventoryLot a
  2038. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2039. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2040. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2041. ";
  2042. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  2043. log.Debug("出库日志" + sql);
  2044. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2045. {
  2046. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2047. }
  2048. ZLtable = ICSControlModeService.GetZL();
  2049. if (ZLtable == null)
  2050. {
  2051. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  2052. }
  2053. for (int i = 0; i < ZLtable.Rows.Count; i++)
  2054. {
  2055. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  2056. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  2057. if (zlTransCode.Equals(BusinessCode))
  2058. {
  2059. isDis = true;
  2060. if (Enable.Equals("True"))
  2061. {
  2062. ///更新日志
  2063. sql = @"
  2064. 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}')
  2065. BEGIN
  2066. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  2067. RETURN
  2068. END
  2069. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  2070. ";
  2071. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  2072. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2073. {
  2074. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  2075. }
  2076. ///更新库存
  2077. sql = @"
  2078. UPDATE ICSWareHouseLotInfo
  2079. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  2080. WHERE LotNo = '{0}'
  2081. AND WorkPoint = '{1}';
  2082. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2083. WHERE a.LotNo = '{0}'
  2084. AND a.WorkPoint = '{1}'
  2085. AND Quantity < 0)
  2086. BEGIN
  2087. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2088. RETURN
  2089. END
  2090. ";
  2091. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  2092. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2093. {
  2094. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2095. }
  2096. }
  2097. else
  2098. {
  2099. if (InvOQc.Equals("True"))
  2100. {
  2101. sql = @"select a.id from ICSWareHouseLotInfo a
  2102. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2103. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  2104. sql = string.Format(sql, LotNo, WorkPoint);
  2105. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  2106. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  2107. {
  2108. sql = @"select a.id from ICSWareHouseLotInfo a
  2109. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2110. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  2111. sql = string.Format(sql, LotNo, WorkPoint);
  2112. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  2113. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  2114. {
  2115. throw new Exception("条码在库检验,未检验完成,请确认!");
  2116. }
  2117. }
  2118. }
  2119. ///更新库存
  2120. sql = @"
  2121. UPDATE ICSWareHouseLotInfo
  2122. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  2123. WHERE LotNo = '{0}'
  2124. AND WorkPoint = '{1}';
  2125. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2126. WHERE a.LotNo = '{0}'
  2127. AND a.WorkPoint = '{1}'
  2128. AND Quantity < 0)
  2129. BEGIN
  2130. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2131. RETURN
  2132. END
  2133. ";
  2134. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  2135. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2136. {
  2137. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2138. }
  2139. }
  2140. }
  2141. // else { throw new Exception("单据类型未配置!"); }
  2142. }
  2143. }
  2144. }
  2145. else
  2146. {
  2147. if (LotEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  2148. {
  2149. ZLtable = ICSControlModeService.GetZL();
  2150. if (ZLtable == null)
  2151. {
  2152. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  2153. }
  2154. for (int i = 0; i < ZLtable.Rows.Count; i++)
  2155. {
  2156. string zlName = ZLtable.Rows[i]["Name"].ToString();
  2157. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  2158. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  2159. if (zlTransCode.Equals(BusinessCode))
  2160. {
  2161. if (Enable.Equals("True"))
  2162. {
  2163. ///更新日志
  2164. sql = @"
  2165. 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}')
  2166. BEGIN
  2167. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  2168. RETURN
  2169. END
  2170. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  2171. ";
  2172. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  2173. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2174. {
  2175. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  2176. }
  2177. ///更新库存
  2178. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  2179. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  2180. FROM ICSReserve b
  2181. INNER JOIN ICSWareHouseLotInfo a
  2182. ON a.invcode = b.invcode
  2183. AND a.workpoint = b.workpoint
  2184. AND a.warehousecode = b.whcode
  2185. WHERE '{4}' < b.Quantity
  2186. AND b.invcode = '{3}'
  2187. AND GETDATE() > b.BeginTime
  2188. AND GETDATE() < b.EndTime;
  2189. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  2190. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  2191. AND a.workpoint=b.workpoint
  2192. AND a.warehousecode=b.whcode
  2193. WHERE a.invcode='{3}'
  2194. AND a.workpoint='{1}'
  2195. AND SYSDATETIME() > b.BeginTime
  2196. AND SYSDATETIME() < b.EndTime
  2197. AND b.enable='1')
  2198. BEGIN
  2199. IF @ReservedQuantity IS NOT NULL
  2200. BEGIN
  2201. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  2202. RETURN
  2203. END
  2204. END
  2205. UPDATE ICSWareHouseLotInfo
  2206. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  2207. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  2208. WHERE LotNo = '{0}'
  2209. AND WorkPoint = '{1}';
  2210. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2211. WHERE a.LotNo = '{0}'
  2212. AND a.WorkPoint = '{1}'
  2213. AND Quantity - LockQuantity < 0)
  2214. BEGIN
  2215. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2216. RETURN
  2217. END
  2218. ";
  2219. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY, TransCode, TransSequence);
  2220. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2221. {
  2222. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2223. }
  2224. }
  2225. else
  2226. {
  2227. if (InvOQc.Equals("True"))
  2228. {
  2229. sql = @"select a.id from ICSWareHouseLotInfo a
  2230. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2231. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  2232. sql = string.Format(sql, LotNo, WorkPoint);
  2233. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  2234. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  2235. {
  2236. sql = @"select a.id from ICSWareHouseLotInfo a
  2237. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2238. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  2239. sql = string.Format(sql, LotNo, WorkPoint);
  2240. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  2241. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  2242. {
  2243. throw new Exception("条码在库检验,未检验完成,请确认!");
  2244. }
  2245. }
  2246. }
  2247. ///更新库存
  2248. sql = @"
  2249. UPDATE ICSWareHouseLotInfo
  2250. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  2251. WHERE LotNo = '{0}'
  2252. AND WorkPoint = '{1}';
  2253. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2254. WHERE a.LotNo = '{0}'
  2255. AND a.WorkPoint = '{1}'
  2256. AND Quantity < 0)
  2257. BEGIN
  2258. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2259. RETURN
  2260. END
  2261. ";
  2262. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  2263. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2264. {
  2265. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2266. }
  2267. }
  2268. }
  2269. }
  2270. ///分批前添加日志
  2271. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2272. BEGIN
  2273. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2274. RETURN
  2275. END
  2276. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2277. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2278. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2279. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2280. MTIME,WorkPoint,EATTRIBUTE1)
  2281. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  2282. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  2283. '','0','{4}','31','0','',
  2284. '','','',f.F_Account ,f.F_RealName ,
  2285. SYSDATETIME() ,a.WorkPoint ,''
  2286. FROM ICSInventoryLot a
  2287. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2288. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2289. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2290. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2291. ";
  2292. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  2293. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2294. {
  2295. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2296. }
  2297. #region 获取分批后的条码(lotstr)
  2298. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  2299. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  2300. sql = string.Format(sql, LotNo, WorkPoint);
  2301. dt = DBHelper.SQlReturnData(sql, cmd);
  2302. if (dt.Rows.Count == 0)
  2303. {
  2304. lotstr = LotNo + "-" + 1;
  2305. }
  2306. else
  2307. {
  2308. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  2309. }
  2310. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  2311. #endregion
  2312. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  2313. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  2314. Quantity,Amount,ExtensionID,Type,PrintTimes,
  2315. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  2316. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  2317. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  2318. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  2319. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  2320. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  2321. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  2322. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  2323. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  2324. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  2325. From ICSInventoryLot a
  2326. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  2327. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  2328. cmd.CommandText = sql;
  2329. result = cmd.ExecuteNonQuery();
  2330. if (result <= 0)
  2331. {
  2332. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  2333. }
  2334. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  2335. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  2336. ,MUSER,MUSERName,GETDATE(),'{3}',''
  2337. from ICSWareHouseLotInfo
  2338. where LotNO='{1}' AND WorkPoint='{3}'";
  2339. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  2340. cmd.CommandText = sql;
  2341. result = cmd.ExecuteNonQuery();
  2342. if (result <= 0)
  2343. {
  2344. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  2345. }
  2346. //插入条码单据表
  2347. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  2348. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  2349. FROM ICSInventoryLot a
  2350. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2351. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2352. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  2353. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  2354. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2355. {
  2356. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  2357. }
  2358. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2359. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2360. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2361. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2362. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2363. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  2364. c.WarehouseCode,c.LocationCode,'','','{6}',
  2365. '','0','{7}','{8}','0','',
  2366. '','','',f.F_Account ,f.F_RealName ,
  2367. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2368. FROM ICSInventoryLot a
  2369. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2370. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2371. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2372. ";
  2373. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  2374. cmd.CommandText = sql;
  2375. result = cmd.ExecuteNonQuery();
  2376. if (result <= 0)
  2377. {
  2378. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  2379. }
  2380. ///添加日志
  2381. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2382. BEGIN
  2383. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2384. RETURN
  2385. END
  2386. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2387. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2388. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2389. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2390. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2391. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  2392. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  2393. '','0','{7}','32','0','',
  2394. '','','',f.F_Account ,f.F_RealName ,
  2395. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2396. FROM ICSInventoryLot a
  2397. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2398. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2399. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2400. ";
  2401. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  2402. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2403. {
  2404. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2405. }
  2406. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  2407. {
  2408. string PrintData = DBHelper.ReadPrintStream();
  2409. sql = @"" + PrintData + "";
  2410. //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
  2411. // from ICSWareHouseLotInfolog A
  2412. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  2413. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  2414. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  2415. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  2416. // ";
  2417. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  2418. log.Debug("打印数据源:" + sql);
  2419. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  2420. lstDt = dtLotno;
  2421. }
  2422. #endregion
  2423. }
  2424. else
  2425. {
  2426. NewBarCodeList.Add(LotNo);
  2427. ///添加日志
  2428. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2429. BEGIN
  2430. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2431. RETURN
  2432. END
  2433. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2434. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2435. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2436. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2437. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2438. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  2439. c.WarehouseCode,c.LocationCode,'','','{6}',
  2440. '','0','{7}','{8}','0','',
  2441. '','','',f.F_Account ,f.F_RealName ,
  2442. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2443. FROM ICSInventoryLot a
  2444. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2445. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2446. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2447. ";
  2448. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  2449. log.Debug("出库日志" + sql);
  2450. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2451. {
  2452. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2453. }
  2454. ZLtable = ICSControlModeService.GetZL();
  2455. if (ZLtable == null)
  2456. {
  2457. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  2458. }
  2459. for (int i = 0; i < ZLtable.Rows.Count; i++)
  2460. {
  2461. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  2462. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  2463. if (zlTransCode.Equals(BusinessCode))
  2464. {
  2465. isDis = true;
  2466. if (Enable.Equals("True"))
  2467. {
  2468. ///更新日志
  2469. sql = @"
  2470. 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}')
  2471. BEGIN
  2472. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  2473. RETURN
  2474. END
  2475. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  2476. ";
  2477. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  2478. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2479. {
  2480. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  2481. }
  2482. ///更新库存
  2483. sql = @"
  2484. UPDATE ICSWareHouseLotInfo
  2485. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  2486. WHERE LotNo = '{0}'
  2487. AND WorkPoint = '{1}';
  2488. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2489. WHERE a.LotNo = '{0}'
  2490. AND a.WorkPoint = '{1}'
  2491. AND Quantity < 0)
  2492. BEGIN
  2493. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2494. RETURN
  2495. END
  2496. ";
  2497. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  2498. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2499. {
  2500. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2501. }
  2502. }
  2503. else
  2504. {
  2505. if (InvOQc.Equals("True"))
  2506. {
  2507. sql = @"select a.id from ICSWareHouseLotInfo a
  2508. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2509. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  2510. sql = string.Format(sql, LotNo, WorkPoint);
  2511. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  2512. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  2513. {
  2514. sql = @"select a.id from ICSWareHouseLotInfo a
  2515. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2516. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  2517. sql = string.Format(sql, LotNo, WorkPoint);
  2518. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  2519. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  2520. {
  2521. throw new Exception("条码在库检验,未检验完成,请确认!");
  2522. }
  2523. }
  2524. }
  2525. ///更新库存
  2526. sql = @"
  2527. UPDATE ICSWareHouseLotInfo
  2528. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  2529. WHERE LotNo = '{0}'
  2530. AND WorkPoint = '{1}';
  2531. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2532. WHERE a.LotNo = '{0}'
  2533. AND a.WorkPoint = '{1}'
  2534. AND Quantity < 0)
  2535. BEGIN
  2536. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2537. RETURN
  2538. END
  2539. ";
  2540. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  2541. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2542. {
  2543. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2544. }
  2545. }
  2546. }
  2547. // else { throw new Exception("单据类型未配置!"); }
  2548. }
  2549. //if (isDis == false)
  2550. //{
  2551. // throw new Exception("单据类型未配置!");
  2552. //}
  2553. /////更新库存
  2554. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2555. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  2556. // BEGIN
  2557. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2558. // RETURN
  2559. // END";
  2560. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  2561. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2562. //{
  2563. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2564. //}
  2565. }
  2566. }
  2567. }
  2568. catch (Exception)
  2569. {
  2570. throw;
  2571. }
  2572. return lstDt;
  2573. }
  2574. /// <summary>
  2575. /// 减少库存(库存表四舍五入)
  2576. /// </summary>
  2577. /// <param name="Identification"></param>
  2578. /// <param name="TransCode"></param>
  2579. /// <param name="TransSequence"></param>
  2580. /// <param name="LotNo"></param>
  2581. /// <param name="Quantity"></param>
  2582. /// <param name="User"></param>
  2583. /// <param name="WorkPoint"></param>
  2584. /// <param name="TransType"></param>
  2585. /// <param name="BusinessCode"></param>
  2586. /// <param name="cmd"></param>
  2587. /// <param name="language"></param>
  2588. /// <param name="LogID"></param>
  2589. /// <param name="TransID"></param>
  2590. /// <param name="MergeID"></param>
  2591. /// <returns></returns>
  2592. public static DataTable WareHouseLotInfoDownRound(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  2593. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string TransID, string MergeID = "")
  2594. {
  2595. decimal LotQTYYY = 0;
  2596. decimal LotQTY = 0;
  2597. decimal SUMQTY = 0;
  2598. string INVCODE = "";
  2599. string Inspect = "";
  2600. string LotEnable = "";
  2601. string LotDocEnable = "";
  2602. string InvOQc = "";
  2603. string chekEnable = "";
  2604. string DisPrintEnable = "";
  2605. string PrintEnable = "";
  2606. string sql = "";
  2607. string lotstr = "";
  2608. string RoundedQuantity = Quantity;//记录四舍五入后的数量
  2609. int result = 0;
  2610. bool isDis = false;
  2611. List<string> NewBarCodeList = new List<string>();
  2612. DataTable dtLotno = new DataTable();
  2613. DataTable lstDt = new DataTable();
  2614. DataTable ZLtable = new DataTable();
  2615. try
  2616. {
  2617. //获取小数位数
  2618. sql = @"SELECT Figure FROM ICSConfiguration WHERE Code='Figure001' AND WorkPoint='{0}'";
  2619. sql = string.Format(sql, WorkPoint);
  2620. int figureNum = (int)(DBHelper.ExecuteScalar(sql, cmd));
  2621. //进行四舍五入操作
  2622. if(decimal.TryParse(Quantity,out decimal numericQuantity))
  2623. {
  2624. RoundedQuantity = Math.Round(numericQuantity,figureNum).ToString();
  2625. }
  2626. //检验是否分批
  2627. sql = @"SELECT b.LotEnable,b.PrintEnable,b.InvOQC,b.LotDocEnable FROM ICSInventoryLot a
  2628. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  2629. where a.LotNo='{0}' and a.WorkPoint='{1}'
  2630. ";
  2631. sql = string.Format(sql, LotNo, WorkPoint);
  2632. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2633. if (dt.Rows.Count == 0)
  2634. {
  2635. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  2636. }
  2637. else
  2638. {
  2639. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  2640. LotDocEnable = dt.Rows[0]["LotDocEnable"].ToString();
  2641. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  2642. InvOQc = dt.Rows[0]["InvOQC"].ToString();
  2643. }
  2644. log.Debug("INVOQC:" + InvOQc);
  2645. 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
  2646. from Sys_SRM_Items a
  2647. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  2648. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  2649. BEGIN
  2650. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  2651. RETURN
  2652. END
  2653. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  2654. from Sys_SRM_Items a
  2655. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  2656. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  2657. ";
  2658. cheksql = string.Format(cheksql, BusinessCode);
  2659. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  2660. if (chekdt.Rows.Count == 0)
  2661. {
  2662. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  2663. }
  2664. else
  2665. {
  2666. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  2667. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  2668. }
  2669. sql = @"select Quantity,invcode,Inspect from ICSWareHouseLotInfo
  2670. where LotNO='{0}' AND WorkPoint='{1}'";
  2671. sql = string.Format(sql, LotNo, WorkPoint);
  2672. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  2673. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  2674. LotQTY = Convert.ToDecimal(RoundedQuantity);
  2675. INVCODE = dtt.Rows[0]["invcode"].ToString();
  2676. Inspect = dtt.Rows[0]["Inspect"].ToString();
  2677. sql = @"SELECT SUM(a.quantity)-'{3}' AS SumQTY FROM ICSWareHouseLotInfo a
  2678. INNER JOIN ICSReserve b ON a.invcode=b.invcode and a.workpoint=b.workpoint
  2679. where a.invcode='{2}' and a.workpoint='{1}' and GETDATE()>b.BeginTime and GETDATE()<b.EndTime";
  2680. sql = string.Format(sql, LotNo, WorkPoint, INVCODE, RoundedQuantity);
  2681. DataTable Sumdtt = DBHelper.SQlReturnData(sql, cmd);
  2682. log.Debug(Sumdtt.Rows[0]["SumQTY"]);
  2683. SUMQTY = 0;
  2684. //Convert.ToDecimal(Sumdtt.Rows[0]["SumQTY"]);
  2685. if (LotDocEnable.Equals("True"))
  2686. {
  2687. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  2688. {
  2689. ZLtable = ICSControlModeService.GetZL();
  2690. if (ZLtable == null)
  2691. {
  2692. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  2693. }
  2694. for (int i = 0; i < ZLtable.Rows.Count; i++)
  2695. {
  2696. string zlName = ZLtable.Rows[i]["Name"].ToString();
  2697. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  2698. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  2699. if (zlTransCode.Equals(BusinessCode))
  2700. {
  2701. if (Enable.Equals("True"))
  2702. {
  2703. ///更新日志
  2704. sql = @"
  2705. 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}')
  2706. BEGIN
  2707. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  2708. RETURN
  2709. END
  2710. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  2711. ";
  2712. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  2713. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2714. {
  2715. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  2716. }
  2717. ///更新库存
  2718. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  2719. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  2720. FROM ICSReserve b
  2721. INNER JOIN ICSWareHouseLotInfo a
  2722. ON a.invcode = b.invcode
  2723. AND a.workpoint = b.workpoint
  2724. AND a.warehousecode = b.whcode
  2725. WHERE '{4}' < b.Quantity
  2726. AND b.invcode = '{3}'
  2727. AND GETDATE() > b.BeginTime
  2728. AND GETDATE() < b.EndTime;
  2729. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  2730. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  2731. AND a.workpoint=b.workpoint
  2732. AND a.warehousecode=b.whcode
  2733. WHERE a.invcode='{3}'
  2734. AND a.workpoint='{1}'
  2735. AND SYSDATETIME() > b.BeginTime
  2736. AND SYSDATETIME() < b.EndTime
  2737. AND b.enable='1')
  2738. BEGIN
  2739. IF @ReservedQuantity IS NOT NULL
  2740. BEGIN
  2741. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  2742. RETURN
  2743. END
  2744. END
  2745. UPDATE ICSWareHouseLotInfo
  2746. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  2747. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  2748. WHERE LotNo = '{0}'
  2749. AND WorkPoint = '{1}';
  2750. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2751. WHERE a.LotNo = '{0}'
  2752. AND a.WorkPoint = '{1}'
  2753. AND Quantity - LockQuantity < 0)
  2754. BEGIN
  2755. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2756. RETURN
  2757. END
  2758. ";
  2759. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  2760. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2761. {
  2762. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2763. }
  2764. }
  2765. else
  2766. {
  2767. if (InvOQc.Equals("True"))
  2768. {
  2769. sql = @"select a.id from ICSWareHouseLotInfo a
  2770. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2771. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  2772. sql = string.Format(sql, LotNo, WorkPoint);
  2773. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  2774. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  2775. {
  2776. sql = @"select a.id from ICSWareHouseLotInfo a
  2777. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2778. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  2779. sql = string.Format(sql, LotNo, WorkPoint);
  2780. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  2781. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  2782. {
  2783. throw new Exception("条码在库检验,未检验完成,请确认!");
  2784. }
  2785. }
  2786. }
  2787. ///更新库存
  2788. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  2789. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  2790. FROM ICSReserve b
  2791. INNER JOIN ICSWareHouseLotInfo a
  2792. ON a.invcode = b.invcode
  2793. AND a.workpoint = b.workpoint
  2794. AND a.warehousecode = b.whcode
  2795. WHERE '{4}' < b.Quantity
  2796. AND b.invcode = '{3}'
  2797. AND GETDATE() > b.BeginTime
  2798. AND GETDATE() < b.EndTime;
  2799. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  2800. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  2801. AND a.workpoint=b.workpoint
  2802. AND a.warehousecode=b.whcode
  2803. WHERE a.invcode='{3}'
  2804. AND a.workpoint='{1}'
  2805. AND SYSDATETIME() > b.BeginTime
  2806. AND SYSDATETIME() < b.EndTime
  2807. AND b.enable='1')
  2808. BEGIN
  2809. IF @ReservedQuantity IS NOT NULL
  2810. BEGIN
  2811. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  2812. RETURN
  2813. END
  2814. END
  2815. UPDATE ICSWareHouseLotInfo
  2816. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  2817. WHERE LotNo = '{0}'
  2818. AND WorkPoint = '{1}';
  2819. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2820. WHERE a.LotNo = '{0}'
  2821. AND a.WorkPoint = '{1}'
  2822. AND Quantity - LockQuantity < 0)
  2823. BEGIN
  2824. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2825. RETURN
  2826. END
  2827. ";
  2828. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  2829. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2830. {
  2831. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2832. }
  2833. }
  2834. }
  2835. }
  2836. ///分批前添加日志
  2837. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2838. BEGIN
  2839. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2840. RETURN
  2841. END
  2842. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2843. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2844. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2845. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2846. MTIME,WorkPoint,EATTRIBUTE1)
  2847. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  2848. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  2849. '','0','{4}','31','0','',
  2850. '','','',f.F_Account ,f.F_RealName ,
  2851. SYSDATETIME() ,a.WorkPoint ,''
  2852. FROM ICSInventoryLot a
  2853. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2854. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2855. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2856. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2857. ";
  2858. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  2859. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2860. {
  2861. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2862. }
  2863. #region 获取分批后的条码(lotstr)
  2864. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  2865. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  2866. sql = string.Format(sql, LotNo, WorkPoint);
  2867. dt = DBHelper.SQlReturnData(sql, cmd);
  2868. if (dt.Rows.Count == 0)
  2869. {
  2870. lotstr = LotNo + "-" + 1;
  2871. }
  2872. else
  2873. {
  2874. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  2875. }
  2876. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  2877. #endregion
  2878. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  2879. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  2880. Quantity,Amount,ExtensionID,Type,PrintTimes,
  2881. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  2882. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  2883. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  2884. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  2885. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  2886. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  2887. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  2888. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  2889. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  2890. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  2891. From ICSInventoryLot a
  2892. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  2893. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  2894. cmd.CommandText = sql;
  2895. result = cmd.ExecuteNonQuery();
  2896. if (result <= 0)
  2897. {
  2898. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  2899. }
  2900. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  2901. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  2902. ,MUSER,MUSERName,GETDATE(),'{3}',''
  2903. from ICSWareHouseLotInfo
  2904. where LotNO='{1}' AND WorkPoint='{3}'";
  2905. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  2906. cmd.CommandText = sql;
  2907. result = cmd.ExecuteNonQuery();
  2908. if (result <= 0)
  2909. {
  2910. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  2911. }
  2912. //插入条码单据表
  2913. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  2914. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  2915. FROM ICSInventoryLot a
  2916. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2917. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2918. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  2919. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  2920. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2921. {
  2922. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  2923. }
  2924. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2925. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2926. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2927. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2928. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2929. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  2930. c.WarehouseCode,c.LocationCode,'','','{6}',
  2931. '','0','{7}','{8}','0','',
  2932. '','','',f.F_Account ,f.F_RealName ,
  2933. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2934. FROM ICSInventoryLot a
  2935. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2936. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2937. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2938. ";
  2939. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  2940. cmd.CommandText = sql;
  2941. result = cmd.ExecuteNonQuery();
  2942. if (result <= 0)
  2943. {
  2944. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  2945. }
  2946. ///添加日志
  2947. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2948. BEGIN
  2949. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2950. RETURN
  2951. END
  2952. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2953. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2954. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2955. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2956. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2957. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  2958. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  2959. '','0','{7}','32','0','',
  2960. '','','',f.F_Account ,f.F_RealName ,
  2961. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2962. FROM ICSInventoryLot a
  2963. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2964. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2965. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2966. ";
  2967. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  2968. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2969. {
  2970. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2971. }
  2972. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  2973. {
  2974. string PrintData = DBHelper.ReadPrintStream();
  2975. sql = @"" + PrintData + "";
  2976. //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
  2977. // from ICSWareHouseLotInfolog A
  2978. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  2979. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  2980. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  2981. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  2982. // ";
  2983. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  2984. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  2985. lstDt = dtLotno;
  2986. }
  2987. #endregion
  2988. }
  2989. else
  2990. {
  2991. NewBarCodeList.Add(LotNo);
  2992. ///添加日志
  2993. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2994. BEGIN
  2995. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2996. RETURN
  2997. END
  2998. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2999. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3000. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3001. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3002. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3003. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3004. c.WarehouseCode,c.LocationCode,'','','{6}',
  3005. '','0','{7}','{8}','0','',
  3006. '','','',f.F_Account ,f.F_RealName ,
  3007. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3008. FROM ICSInventoryLot a
  3009. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3010. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3011. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3012. ";
  3013. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3014. log.Debug("出库日志" + sql);
  3015. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3016. {
  3017. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3018. }
  3019. ZLtable = ICSControlModeService.GetZL();
  3020. if (ZLtable == null)
  3021. {
  3022. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3023. }
  3024. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3025. {
  3026. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3027. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3028. if (zlTransCode.Equals(BusinessCode))
  3029. {
  3030. isDis = true;
  3031. if (Enable.Equals("True"))
  3032. {
  3033. ///更新日志
  3034. sql = @"
  3035. 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}')
  3036. BEGIN
  3037. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3038. RETURN
  3039. END
  3040. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  3041. ";
  3042. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  3043. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3044. {
  3045. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3046. }
  3047. ///更新库存
  3048. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3049. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3050. FROM ICSReserve b
  3051. INNER JOIN ICSWareHouseLotInfo a
  3052. ON a.invcode = b.invcode
  3053. AND a.workpoint = b.workpoint
  3054. AND a.warehousecode = b.whcode
  3055. WHERE '{4}' < b.Quantity
  3056. AND b.invcode = '{3}'
  3057. AND GETDATE() > b.BeginTime
  3058. AND GETDATE() < b.EndTime;
  3059. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3060. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3061. AND a.workpoint=b.workpoint
  3062. AND a.warehousecode=b.whcode
  3063. WHERE a.invcode='{3}'
  3064. AND a.workpoint='{1}'
  3065. AND SYSDATETIME() > b.BeginTime
  3066. AND SYSDATETIME() < b.EndTime
  3067. AND b.enable='1')
  3068. BEGIN
  3069. IF @ReservedQuantity IS NOT NULL
  3070. BEGIN
  3071. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3072. RETURN
  3073. END
  3074. END
  3075. UPDATE ICSWareHouseLotInfo
  3076. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  3077. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  3078. WHERE LotNo = '{0}'
  3079. AND WorkPoint = '{1}';
  3080. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3081. WHERE a.LotNo = '{0}'
  3082. AND a.WorkPoint = '{1}'
  3083. AND Quantity - LockQuantity < 0)
  3084. BEGIN
  3085. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3086. RETURN
  3087. END
  3088. ";
  3089. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  3090. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3091. {
  3092. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3093. }
  3094. }
  3095. else
  3096. {
  3097. if (InvOQc.Equals("True"))
  3098. {
  3099. sql = @"select a.id from ICSWareHouseLotInfo a
  3100. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3101. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  3102. sql = string.Format(sql, LotNo, WorkPoint);
  3103. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  3104. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  3105. {
  3106. sql = @"select a.id from ICSWareHouseLotInfo a
  3107. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3108. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  3109. sql = string.Format(sql, LotNo, WorkPoint);
  3110. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  3111. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  3112. {
  3113. throw new Exception("条码在库检验,未检验完成,请确认!");
  3114. }
  3115. }
  3116. }
  3117. ///更新库存
  3118. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3119. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3120. FROM ICSReserve b
  3121. INNER JOIN ICSWareHouseLotInfo a
  3122. ON a.invcode = b.invcode
  3123. AND a.workpoint = b.workpoint
  3124. AND a.warehousecode = b.whcode
  3125. WHERE '{4}' < b.Quantity
  3126. AND b.invcode = '{3}'
  3127. AND GETDATE() > b.BeginTime
  3128. AND GETDATE() < b.EndTime;
  3129. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3130. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3131. AND a.workpoint=b.workpoint
  3132. AND a.warehousecode=b.whcode
  3133. WHERE a.invcode='{3}'
  3134. AND a.workpoint='{1}'
  3135. AND SYSDATETIME() > b.BeginTime
  3136. AND SYSDATETIME() < b.EndTime
  3137. AND b.enable='1')
  3138. BEGIN
  3139. IF @ReservedQuantity IS NOT NULL
  3140. BEGIN
  3141. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3142. RETURN
  3143. END
  3144. END
  3145. UPDATE ICSWareHouseLotInfo
  3146. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  3147. WHERE LotNo = '{0}'
  3148. AND WorkPoint = '{1}';
  3149. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3150. WHERE a.LotNo = '{0}'
  3151. AND a.WorkPoint = '{1}'
  3152. AND Quantity - LockQuantity < 0)
  3153. BEGIN
  3154. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3155. RETURN
  3156. END
  3157. ";
  3158. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  3159. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3160. {
  3161. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3162. }
  3163. }
  3164. }
  3165. // else { throw new Exception("单据类型未配置!"); }
  3166. }
  3167. //if (isDis == false)
  3168. //{
  3169. // throw new Exception("单据类型未配置!");
  3170. //}
  3171. /////更新库存
  3172. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3173. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  3174. // BEGIN
  3175. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3176. // RETURN
  3177. // END";
  3178. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3179. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3180. //{
  3181. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3182. //}
  3183. }
  3184. }
  3185. else
  3186. {
  3187. if (LotEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  3188. {
  3189. ZLtable = ICSControlModeService.GetZL();
  3190. if (ZLtable == null)
  3191. {
  3192. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3193. }
  3194. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3195. {
  3196. string zlName = ZLtable.Rows[i]["Name"].ToString();
  3197. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3198. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3199. if (zlTransCode.Equals(BusinessCode))
  3200. {
  3201. if (Enable.Equals("True"))
  3202. {
  3203. ///更新日志
  3204. sql = @"
  3205. 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}')
  3206. BEGIN
  3207. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3208. RETURN
  3209. END
  3210. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  3211. ";
  3212. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  3213. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3214. {
  3215. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3216. }
  3217. ///更新库存
  3218. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3219. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3220. FROM ICSReserve b
  3221. INNER JOIN ICSWareHouseLotInfo a
  3222. ON a.invcode = b.invcode
  3223. AND a.workpoint = b.workpoint
  3224. AND a.warehousecode = b.whcode
  3225. WHERE '{4}' < b.Quantity
  3226. AND b.invcode = '{3}'
  3227. AND GETDATE() > b.BeginTime
  3228. AND GETDATE() < b.EndTime;
  3229. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3230. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3231. AND a.workpoint=b.workpoint
  3232. AND a.warehousecode=b.whcode
  3233. WHERE a.invcode='{3}'
  3234. AND a.workpoint='{1}'
  3235. AND SYSDATETIME() > b.BeginTime
  3236. AND SYSDATETIME() < b.EndTime
  3237. AND b.enable='1')
  3238. BEGIN
  3239. IF @ReservedQuantity IS NOT NULL
  3240. BEGIN
  3241. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3242. RETURN
  3243. END
  3244. END
  3245. UPDATE ICSWareHouseLotInfo
  3246. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  3247. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  3248. WHERE LotNo = '{0}'
  3249. AND WorkPoint = '{1}';
  3250. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3251. WHERE a.LotNo = '{0}'
  3252. AND a.WorkPoint = '{1}'
  3253. AND Quantity - LockQuantity < 0)
  3254. BEGIN
  3255. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3256. RETURN
  3257. END
  3258. ";
  3259. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY, TransCode, TransSequence);
  3260. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3261. {
  3262. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3263. }
  3264. }
  3265. else
  3266. {
  3267. if (InvOQc.Equals("True"))
  3268. {
  3269. sql = @"select a.id from ICSWareHouseLotInfo a
  3270. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3271. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  3272. sql = string.Format(sql, LotNo, WorkPoint);
  3273. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  3274. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  3275. {
  3276. sql = @"select a.id from ICSWareHouseLotInfo a
  3277. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3278. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  3279. sql = string.Format(sql, LotNo, WorkPoint);
  3280. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  3281. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  3282. {
  3283. throw new Exception("条码在库检验,未检验完成,请确认!");
  3284. }
  3285. }
  3286. }
  3287. ///更新库存
  3288. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3289. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3290. FROM ICSReserve b
  3291. INNER JOIN ICSWareHouseLotInfo a
  3292. ON a.invcode = b.invcode
  3293. AND a.workpoint = b.workpoint
  3294. AND a.warehousecode = b.whcode
  3295. WHERE '{4}' < b.Quantity
  3296. AND b.invcode = '{3}'
  3297. AND GETDATE() > b.BeginTime
  3298. AND GETDATE() < b.EndTime;
  3299. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3300. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3301. AND a.workpoint=b.workpoint
  3302. AND a.warehousecode=b.whcode
  3303. WHERE a.invcode='{3}'
  3304. AND a.workpoint='{1}'
  3305. AND SYSDATETIME() > b.BeginTime
  3306. AND SYSDATETIME() < b.EndTime
  3307. AND b.enable='1')
  3308. BEGIN
  3309. IF @ReservedQuantity IS NOT NULL
  3310. BEGIN
  3311. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3312. RETURN
  3313. END
  3314. END
  3315. UPDATE ICSWareHouseLotInfo
  3316. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  3317. WHERE LotNo = '{0}'
  3318. AND WorkPoint = '{1}';
  3319. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3320. WHERE a.LotNo = '{0}'
  3321. AND a.WorkPoint = '{1}'
  3322. AND Quantity - LockQuantity < 0)
  3323. BEGIN
  3324. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3325. RETURN
  3326. END
  3327. ";
  3328. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  3329. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3330. {
  3331. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3332. }
  3333. }
  3334. }
  3335. }
  3336. ///分批前添加日志
  3337. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3338. BEGIN
  3339. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3340. RETURN
  3341. END
  3342. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3343. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3344. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3345. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3346. MTIME,WorkPoint,EATTRIBUTE1)
  3347. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  3348. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  3349. '','0','{4}','31','0','',
  3350. '','','',f.F_Account ,f.F_RealName ,
  3351. SYSDATETIME() ,a.WorkPoint ,''
  3352. FROM ICSInventoryLot a
  3353. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3354. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3355. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3356. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3357. ";
  3358. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  3359. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3360. {
  3361. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3362. }
  3363. #region 获取分批后的条码(lotstr)
  3364. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  3365. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  3366. sql = string.Format(sql, LotNo, WorkPoint);
  3367. dt = DBHelper.SQlReturnData(sql, cmd);
  3368. if (dt.Rows.Count == 0)
  3369. {
  3370. lotstr = LotNo + "-" + 1;
  3371. }
  3372. else
  3373. {
  3374. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  3375. }
  3376. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  3377. #endregion
  3378. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  3379. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  3380. Quantity,Amount,ExtensionID,Type,PrintTimes,
  3381. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  3382. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  3383. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  3384. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  3385. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  3386. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  3387. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  3388. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  3389. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  3390. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  3391. From ICSInventoryLot a
  3392. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  3393. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  3394. cmd.CommandText = sql;
  3395. result = cmd.ExecuteNonQuery();
  3396. if (result <= 0)
  3397. {
  3398. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  3399. }
  3400. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3401. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  3402. ,MUSER,MUSERName,GETDATE(),'{3}',''
  3403. from ICSWareHouseLotInfo
  3404. where LotNO='{1}' AND WorkPoint='{3}'";
  3405. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  3406. cmd.CommandText = sql;
  3407. result = cmd.ExecuteNonQuery();
  3408. if (result <= 0)
  3409. {
  3410. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  3411. }
  3412. //插入条码单据表
  3413. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  3414. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  3415. FROM ICSInventoryLot a
  3416. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3417. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3418. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3419. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  3420. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3421. {
  3422. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  3423. }
  3424. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3425. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3426. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3427. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3428. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  3429. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  3430. c.WarehouseCode,c.LocationCode,'','','{6}',
  3431. '','0','{7}','{8}','0','',
  3432. '','','',f.F_Account ,f.F_RealName ,
  3433. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3434. FROM ICSInventoryLot a
  3435. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3436. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3437. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3438. ";
  3439. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  3440. cmd.CommandText = sql;
  3441. result = cmd.ExecuteNonQuery();
  3442. if (result <= 0)
  3443. {
  3444. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  3445. }
  3446. ///添加日志
  3447. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3448. BEGIN
  3449. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3450. RETURN
  3451. END
  3452. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3453. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3454. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3455. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3456. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3457. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3458. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  3459. '','0','{7}','32','0','',
  3460. '','','',f.F_Account ,f.F_RealName ,
  3461. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3462. FROM ICSInventoryLot a
  3463. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3464. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3465. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3466. ";
  3467. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3468. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3469. {
  3470. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3471. }
  3472. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  3473. {
  3474. string PrintData = DBHelper.ReadPrintStream();
  3475. sql = @"" + PrintData + "";
  3476. //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
  3477. // from ICSWareHouseLotInfolog A
  3478. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  3479. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  3480. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  3481. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  3482. // ";
  3483. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  3484. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  3485. lstDt = dtLotno;
  3486. }
  3487. #endregion
  3488. }
  3489. else
  3490. {
  3491. NewBarCodeList.Add(LotNo);
  3492. ///添加日志
  3493. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3494. BEGIN
  3495. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3496. RETURN
  3497. END
  3498. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3499. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3500. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3501. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3502. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3503. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3504. c.WarehouseCode,c.LocationCode,'','','{6}',
  3505. '','0','{7}','{8}','0','',
  3506. '','','',f.F_Account ,f.F_RealName ,
  3507. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3508. FROM ICSInventoryLot a
  3509. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3510. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3511. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3512. ";
  3513. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3514. log.Debug("出库日志" + sql);
  3515. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3516. {
  3517. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3518. }
  3519. ZLtable = ICSControlModeService.GetZL();
  3520. if (ZLtable == null)
  3521. {
  3522. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3523. }
  3524. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3525. {
  3526. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3527. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3528. if (zlTransCode.Equals(BusinessCode))
  3529. {
  3530. isDis = true;
  3531. if (Enable.Equals("True"))
  3532. {
  3533. ///更新日志
  3534. sql = @"
  3535. 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}')
  3536. BEGIN
  3537. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3538. RETURN
  3539. END
  3540. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  3541. ";
  3542. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  3543. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3544. {
  3545. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3546. }
  3547. ///更新库存
  3548. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3549. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3550. FROM ICSReserve b
  3551. INNER JOIN ICSWareHouseLotInfo a
  3552. ON a.invcode = b.invcode
  3553. AND a.workpoint = b.workpoint
  3554. AND a.warehousecode = b.whcode
  3555. WHERE '{4}' < b.Quantity
  3556. AND b.invcode = '{3}'
  3557. AND GETDATE() > b.BeginTime
  3558. AND GETDATE() < b.EndTime;
  3559. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3560. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3561. AND a.workpoint=b.workpoint
  3562. AND a.warehousecode=b.whcode
  3563. WHERE a.invcode='{3}'
  3564. AND a.workpoint='{1}'
  3565. AND SYSDATETIME() > b.BeginTime
  3566. AND SYSDATETIME() < b.EndTime
  3567. AND b.enable='1')
  3568. BEGIN
  3569. IF @ReservedQuantity IS NOT NULL
  3570. BEGIN
  3571. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3572. RETURN
  3573. END
  3574. END
  3575. UPDATE ICSWareHouseLotInfo
  3576. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  3577. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  3578. WHERE LotNo = '{0}'
  3579. AND WorkPoint = '{1}';
  3580. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3581. WHERE a.LotNo = '{0}'
  3582. AND a.WorkPoint = '{1}'
  3583. AND Quantity - LockQuantity < 0)
  3584. BEGIN
  3585. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3586. RETURN
  3587. END
  3588. ";
  3589. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  3590. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3591. {
  3592. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3593. }
  3594. }
  3595. else
  3596. {
  3597. if (InvOQc.Equals("True"))
  3598. {
  3599. sql = @"select a.id from ICSWareHouseLotInfo a
  3600. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3601. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  3602. sql = string.Format(sql, LotNo, WorkPoint);
  3603. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  3604. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  3605. {
  3606. sql = @"select a.id from ICSWareHouseLotInfo a
  3607. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3608. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  3609. sql = string.Format(sql, LotNo, WorkPoint);
  3610. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  3611. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  3612. {
  3613. throw new Exception("条码在库检验,未检验完成,请确认!");
  3614. }
  3615. }
  3616. }
  3617. ///更新库存
  3618. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3619. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3620. FROM ICSReserve b
  3621. INNER JOIN ICSWareHouseLotInfo a
  3622. ON a.invcode = b.invcode
  3623. AND a.workpoint = b.workpoint
  3624. AND a.warehousecode = b.whcode
  3625. WHERE '{4}' < b.Quantity
  3626. AND b.invcode = '{3}'
  3627. AND GETDATE() > b.BeginTime
  3628. AND GETDATE() < b.EndTime;
  3629. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3630. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3631. AND a.workpoint=b.workpoint
  3632. AND a.warehousecode=b.whcode
  3633. WHERE a.invcode='{3}'
  3634. AND a.workpoint='{1}'
  3635. AND SYSDATETIME() > b.BeginTime
  3636. AND SYSDATETIME() < b.EndTime
  3637. AND b.enable='1')
  3638. BEGIN
  3639. IF @ReservedQuantity IS NOT NULL
  3640. BEGIN
  3641. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3642. RETURN
  3643. END
  3644. END
  3645. UPDATE ICSWareHouseLotInfo
  3646. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  3647. WHERE LotNo = '{0}'
  3648. AND WorkPoint = '{1}';
  3649. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3650. WHERE a.LotNo = '{0}'
  3651. AND a.WorkPoint = '{1}'
  3652. AND Quantity - LockQuantity < 0)
  3653. BEGIN
  3654. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3655. RETURN
  3656. END
  3657. ";
  3658. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  3659. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3660. {
  3661. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3662. }
  3663. }
  3664. }
  3665. // else { throw new Exception("单据类型未配置!"); }
  3666. }
  3667. //if (isDis == false)
  3668. //{
  3669. // throw new Exception("单据类型未配置!");
  3670. //}
  3671. /////更新库存
  3672. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3673. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  3674. // BEGIN
  3675. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3676. // RETURN
  3677. // END";
  3678. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3679. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3680. //{
  3681. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3682. //}
  3683. }
  3684. }
  3685. }
  3686. catch (Exception)
  3687. {
  3688. throw;
  3689. }
  3690. return lstDt;
  3691. }
  3692. /// <summary>
  3693. /// 减少库存(奥美专用)
  3694. /// </summary>
  3695. /// <param name="Identification"></param>
  3696. /// <param name="TransCode"></param>
  3697. /// <param name="TransSequence"></param>
  3698. /// <param name="LotNo"></param>
  3699. /// <param name="Quantity"></param>
  3700. /// <param name="User"></param>
  3701. /// <param name="WorkPoint"></param>
  3702. /// <param name="TransType"></param>
  3703. /// <param name="BusinessCode"></param>
  3704. /// <param name="cmd"></param>
  3705. public static DataTable AMWareHouseLotInfoDown(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  3706. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string TransID, string MergeID = "")
  3707. {
  3708. decimal LotQTYYY = 0;
  3709. decimal LotQTY = 0;
  3710. string LotEnable = "";
  3711. string chekEnable = "";
  3712. string DisPrintEnable = "";
  3713. string PrintEnable = "";
  3714. string sql = "";
  3715. string lotstr = "";
  3716. int result = 0;
  3717. List<string> NewBarCodeList = new List<string>();
  3718. DataTable dtLotno = new DataTable();
  3719. DataTable lstDt = new DataTable();
  3720. DataTable ZLtable = new DataTable();
  3721. try
  3722. {
  3723. string amount = "";
  3724. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  3725. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3726. //sqql = string.Format(sqql, LotNo, WorkPoint);
  3727. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  3728. //amount = dtaa.Rows[0]["Amount"].ToString();
  3729. string chekksql = @"select c.EATTRIBUTE1 FROM ICSMOPick a
  3730. INNER JOIN ICSMO b ON a.MODetailID=b.MODetailID AND a.WorkPoint=b.WorkPoint
  3731. INNER JOIN ICSInventory c on a.InvCode=c.InvCode and a.WorkPoint=c.WorkPoint
  3732. WHERE b.MOCode='{0}' AND b.Sequence+'~'+a.Sequence='{3}' AND a.WorkPoint='{1}' and c.AmountEnable='1'";
  3733. chekksql = string.Format(chekksql, TransCode, WorkPoint, Quantity, TransSequence);
  3734. DataTable dta = DBHelper.SQlReturnData(chekksql, cmd);
  3735. if (dta.Rows.Count > 0)
  3736. {
  3737. Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  3738. }
  3739. //检验是否分批
  3740. sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  3741. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  3742. where a.LotNo='{0}' and a.WorkPoint='{1}'
  3743. ";
  3744. sql = string.Format(sql, LotNo, WorkPoint);
  3745. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  3746. if (dt.Rows.Count == 0)
  3747. {
  3748. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  3749. }
  3750. else
  3751. {
  3752. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  3753. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  3754. }
  3755. 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
  3756. from Sys_SRM_Items a
  3757. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  3758. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  3759. BEGIN
  3760. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  3761. RETURN
  3762. END
  3763. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  3764. from Sys_SRM_Items a
  3765. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  3766. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  3767. ";
  3768. cheksql = string.Format(cheksql, BusinessCode);
  3769. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  3770. if (chekdt.Rows.Count == 0)
  3771. {
  3772. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  3773. }
  3774. else
  3775. {
  3776. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  3777. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  3778. }
  3779. sql = @"select Quantity from ICSWareHouseLotInfo
  3780. where LotNO='{0}' AND WorkPoint='{1}'";
  3781. sql = string.Format(sql, LotNo, WorkPoint);
  3782. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  3783. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  3784. LotQTY = Convert.ToDecimal(Quantity);
  3785. if (!LotEnable.Equals("False") && !chekEnable.Equals("False") && LotQTYYY - LotQTY > 0)
  3786. {
  3787. ZLtable = ICSControlModeService.GetZL();
  3788. if (ZLtable == null)
  3789. {
  3790. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3791. }
  3792. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3793. {
  3794. string zlName = ZLtable.Rows[i]["Name"].ToString();
  3795. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3796. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3797. if (zlTransCode.Equals(BusinessCode))
  3798. {
  3799. if (Enable.Equals("True"))
  3800. {
  3801. ///更新日志
  3802. sql = @"
  3803. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  3804. BEGIN
  3805. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3806. RETURN
  3807. END
  3808. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  3809. ";
  3810. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  3811. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3812. {
  3813. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3814. }
  3815. ///更新库存
  3816. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3817. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  3818. BEGIN
  3819. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3820. RETURN
  3821. END";
  3822. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3823. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3824. {
  3825. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3826. }
  3827. }
  3828. else
  3829. {
  3830. ///更新库存
  3831. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3832. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  3833. BEGIN
  3834. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3835. RETURN
  3836. END";
  3837. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3838. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3839. {
  3840. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3841. }
  3842. }
  3843. }
  3844. }
  3845. ///分批前添加日志
  3846. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3847. BEGIN
  3848. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3849. RETURN
  3850. END
  3851. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  3852. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3853. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3854. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3855. MTIME,WorkPoint,EATTRIBUTE1)
  3856. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  3857. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  3858. '','0','{4}','31','0','',
  3859. '','','',f.F_Account ,f.F_RealName ,
  3860. SYSDATETIME() ,a.WorkPoint ,''
  3861. FROM ICSInventoryLot a
  3862. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3863. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3864. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3865. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3866. ";
  3867. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  3868. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3869. {
  3870. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3871. }
  3872. #region 获取分批后的条码(lotstr)
  3873. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  3874. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  3875. sql = string.Format(sql, LotNo, WorkPoint);
  3876. dt = DBHelper.SQlReturnData(sql, cmd);
  3877. if (dt.Rows.Count == 0)
  3878. {
  3879. lotstr = LotNo + "-" + 1;
  3880. }
  3881. else
  3882. {
  3883. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  3884. }
  3885. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  3886. #endregion
  3887. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  3888. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  3889. Quantity,Amount,ExtensionID,Type,PrintTimes,
  3890. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  3891. WorkPoint,EATTRIBUTE1)
  3892. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  3893. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  3894. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  3895. a.WorkPoint ,'{1}'
  3896. From ICSInventoryLot a
  3897. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  3898. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  3899. cmd.CommandText = sql;
  3900. result = cmd.ExecuteNonQuery();
  3901. if (result <= 0)
  3902. {
  3903. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  3904. }
  3905. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3906. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  3907. ,MUSER,MUSERName,GETDATE(),'{3}',''
  3908. from ICSWareHouseLotInfo
  3909. where LotNO='{1}' AND WorkPoint='{3}'";
  3910. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  3911. cmd.CommandText = sql;
  3912. result = cmd.ExecuteNonQuery();
  3913. if (result <= 0)
  3914. {
  3915. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  3916. }
  3917. //插入条码单据表
  3918. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  3919. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  3920. FROM ICSInventoryLot a
  3921. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3922. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3923. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3924. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  3925. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3926. {
  3927. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  3928. }
  3929. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  3930. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3931. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3932. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3933. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  3934. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  3935. c.WarehouseCode,c.LocationCode,'','','{6}',
  3936. '','0','{7}','{8}','0','',
  3937. '','','',f.F_Account ,f.F_RealName ,
  3938. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3939. FROM ICSInventoryLot a
  3940. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3941. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3942. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3943. ";
  3944. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr);
  3945. cmd.CommandText = sql;
  3946. result = cmd.ExecuteNonQuery();
  3947. if (result <= 0)
  3948. {
  3949. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  3950. }
  3951. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  3952. {
  3953. 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
  3954. from ICSWareHouseLotInfolog A
  3955. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  3956. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  3957. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  3958. where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  3959. ";
  3960. sql = string.Format(sql, lotstr, WorkPoint, BusinessCode);
  3961. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  3962. lstDt = dtLotno;
  3963. }
  3964. ///添加日志
  3965. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3966. BEGIN
  3967. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3968. RETURN
  3969. END
  3970. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  3971. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3972. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3973. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3974. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3975. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  3976. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  3977. '','0','{7}','32','0','',
  3978. '','','',f.F_Account ,f.F_RealName ,
  3979. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3980. FROM ICSInventoryLot a
  3981. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3982. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3983. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3984. ";
  3985. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  3986. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3987. {
  3988. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3989. }
  3990. #endregion
  3991. }
  3992. else
  3993. {
  3994. NewBarCodeList.Add(LotNo);
  3995. ///添加日志
  3996. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3997. BEGIN
  3998. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3999. RETURN
  4000. END
  4001. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4002. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4003. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4004. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4005. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4006. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  4007. c.WarehouseCode,c.LocationCode,'','','{6}',
  4008. '','0','{7}','{8}','0','',
  4009. '','','',f.F_Account ,f.F_RealName ,
  4010. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4011. FROM ICSInventoryLot a
  4012. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4013. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4014. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4015. ";
  4016. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  4017. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4018. {
  4019. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4020. }
  4021. ZLtable = ICSControlModeService.GetZL();
  4022. if (ZLtable == null)
  4023. {
  4024. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  4025. }
  4026. for (int i = 0; i < ZLtable.Rows.Count; i++)
  4027. {
  4028. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  4029. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  4030. if (zlTransCode.Equals(BusinessCode))
  4031. {
  4032. if (Enable.Equals("True"))
  4033. {
  4034. ///更新日志
  4035. sql = @"
  4036. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  4037. BEGIN
  4038. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  4039. RETURN
  4040. END
  4041. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  4042. ";
  4043. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  4044. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4045. {
  4046. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  4047. }
  4048. ///更新库存
  4049. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4050. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  4051. BEGIN
  4052. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4053. RETURN
  4054. END";
  4055. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4056. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4057. {
  4058. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4059. }
  4060. }
  4061. else
  4062. {
  4063. ///更新库存
  4064. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4065. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  4066. BEGIN
  4067. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4068. RETURN
  4069. END";
  4070. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4071. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4072. {
  4073. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4074. }
  4075. }
  4076. }
  4077. }
  4078. /////更新库存
  4079. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4080. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  4081. // BEGIN
  4082. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4083. // RETURN
  4084. // END";
  4085. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4086. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4087. //{
  4088. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4089. //}
  4090. }
  4091. }
  4092. catch (Exception)
  4093. {
  4094. throw;
  4095. }
  4096. return lstDt;
  4097. }
  4098. /// <summary>
  4099. /// 无源头调拨
  4100. /// </summary>
  4101. /// <param name="LocationCode"></param>
  4102. /// <param name="LotNo"></param>
  4103. /// <param name="Quantity"></param>
  4104. /// <param name="User"></param>
  4105. /// <param name="WorkPoint"></param>
  4106. /// <param name="TransType"></param>
  4107. /// <param name="BusinessCode"></param>
  4108. /// <param name="cmd"></param>
  4109. public static DataTable WareHouseLotInfoNoTransfer(string Identification, string WarehouseCode, string LocationCode,
  4110. string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID, string Memo)
  4111. {
  4112. decimal LotQTYYY = 0;
  4113. decimal LotQTY = 0;
  4114. String LotEnable = "";
  4115. String PrintEnable = "";
  4116. String ToWareHouseCode = "";
  4117. String ToLocationCode = "";
  4118. string lotstr = "";
  4119. int result = 0;
  4120. DataTable dtLotno = new DataTable();
  4121. DataTable lstDt = new DataTable();
  4122. List<string> NewBarCodeList = new List<string>();
  4123. string sql = "";
  4124. try
  4125. {
  4126. //检验是否分批
  4127. sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  4128. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  4129. where a.LotNo='{0}' and a.WorkPoint='{1}'
  4130. ";
  4131. sql = string.Format(sql, LotNo, WorkPoint);
  4132. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  4133. if (dt.Rows.Count == 0)
  4134. {
  4135. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  4136. }
  4137. else
  4138. {
  4139. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  4140. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  4141. }
  4142. sql = @"select Quantity from ICSWareHouseLotInfo
  4143. where LotNO='{0}' AND WorkPoint='{1}'";
  4144. sql = string.Format(sql, LotNo, WorkPoint);
  4145. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  4146. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  4147. LotQTY = Convert.ToDecimal(Quantity);
  4148. if (!LotEnable.Equals("False") && LotQTYYY - LotQTY > 0)
  4149. {
  4150. ///更新库存
  4151. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4152. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  4153. BEGIN
  4154. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4155. RETURN
  4156. END";
  4157. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4158. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4159. {
  4160. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4161. }
  4162. ///分批前添加日志
  4163. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4164. BEGIN
  4165. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4166. RETURN
  4167. END
  4168. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4169. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4170. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4171. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4172. MTIME,WorkPoint,EATTRIBUTE1)
  4173. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  4174. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  4175. '','0','{4}','31','0','',
  4176. '','','',f.F_Account ,f.F_RealName ,
  4177. SYSDATETIME() ,a.WorkPoint ,''
  4178. FROM ICSInventoryLot a
  4179. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4180. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4181. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4182. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4183. ";
  4184. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity);
  4185. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4186. {
  4187. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4188. }
  4189. #region 获取分批后的条码(lotstr)
  4190. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  4191. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  4192. sql = string.Format(sql, LotNo, WorkPoint);
  4193. dt = DBHelper.SQlReturnData(sql, cmd);
  4194. if (dt.Rows.Count == 0)
  4195. {
  4196. lotstr = LotNo + "-" + 1;
  4197. }
  4198. else
  4199. {
  4200. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  4201. }
  4202. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  4203. #endregion
  4204. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  4205. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  4206. Quantity,Amount,ExtensionID,Type,PrintTimes,
  4207. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  4208. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  4209. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  4210. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  4211. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  4212. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  4213. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  4214. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  4215. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  4216. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  4217. From ICSInventoryLot a
  4218. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  4219. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  4220. cmd.CommandText = sql;
  4221. result = cmd.ExecuteNonQuery();
  4222. if (result <= 0)
  4223. {
  4224. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  4225. }
  4226. #endregion
  4227. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  4228. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  4229. ,MUSER,MUSERName,GETDATE(),'{3}',''
  4230. from ICSWareHouseLotInfo
  4231. where LotNO='{1}' AND WorkPoint='{3}'";
  4232. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  4233. cmd.CommandText = sql;
  4234. result = cmd.ExecuteNonQuery();
  4235. if (result <= 0)
  4236. {
  4237. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  4238. }
  4239. //插入条码单据表
  4240. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  4241. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  4242. FROM ICSInventoryLot a
  4243. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4244. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4245. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  4246. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  4247. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4248. {
  4249. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  4250. }
  4251. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4252. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4253. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4254. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4255. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  4256. SELECT NEWID(),'{3}','','','{8}' ,a.InvCode ,
  4257. c.WarehouseCode,c.LocationCode,'{9}','{10}','{4}',
  4258. '{11}','0','{5}','{6}','0','',
  4259. '','','',f.F_Account ,f.F_RealName ,
  4260. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  4261. FROM ICSInventoryLot a
  4262. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4263. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4264. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4265. ";
  4266. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode,Memo);
  4267. cmd.CommandText = sql;
  4268. result = cmd.ExecuteNonQuery();
  4269. if (result <= 0)
  4270. {
  4271. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  4272. }
  4273. ///添加日志
  4274. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4275. BEGIN
  4276. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4277. RETURN
  4278. END
  4279. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4280. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4281. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4282. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4283. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4284. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  4285. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  4286. '','0','{5}','32','0','',
  4287. '','','',f.F_Account ,f.F_RealName ,
  4288. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  4289. FROM ICSInventoryLot a
  4290. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4291. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4292. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4293. ";
  4294. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, MergeID);
  4295. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4296. {
  4297. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4298. }
  4299. if (PrintEnable.Equals("True"))
  4300. {
  4301. 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
  4302. from ICSWareHouseLotInfolog A
  4303. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  4304. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  4305. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  4306. where a.BusinessCode ='105'
  4307. and A.lotno like'{0}%' and a.workpoint='{1}'
  4308. ";
  4309. sql = string.Format(sql, LotNo, WorkPoint);
  4310. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  4311. lstDt = dtLotno;
  4312. }
  4313. }
  4314. else
  4315. {
  4316. ///添加日志
  4317. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4318. BEGIN
  4319. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4320. RETURN
  4321. END
  4322. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{7}' AND LocationCode='{8}' AND WorkPoint='{1}' AND LotNo = '{0}')
  4323. BEGIN
  4324. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  4325. RETURN
  4326. END
  4327. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4328. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4329. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4330. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4331. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4332. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  4333. c.WarehouseCode,c.LocationCode,'{7}','{8}',{4},
  4334. '{10}','0','{5}','{6}','0','',
  4335. '','','',f.F_Account ,f.F_RealName ,
  4336. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4337. FROM ICSInventoryLot a
  4338. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4339. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4340. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4341. ";
  4342. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID,Memo);
  4343. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4344. {
  4345. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4346. }
  4347. ///更新库存
  4348. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4349. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  4350. BEGIN
  4351. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4352. RETURN
  4353. END";
  4354. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  4355. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4356. {
  4357. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4358. }
  4359. }
  4360. }
  4361. catch (Exception)
  4362. {
  4363. log.Error(sql);
  4364. throw;
  4365. }
  4366. return lstDt;
  4367. }
  4368. /// <summary>
  4369. /// 修改库存
  4370. /// </summary>
  4371. /// <param name="Identification"></param>
  4372. /// <param name="TransCode"></param>
  4373. /// <param name="TransSequence"></param>
  4374. /// <param name="LotNo"></param>
  4375. /// <param name="Quantity"></param>
  4376. /// <param name="User"></param>
  4377. /// <param name="WorkPoint"></param>
  4378. /// <param name="TransType"></param>
  4379. /// <param name="cmd"></param>
  4380. public static void WareHouseLotInfoUpdate(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  4381. string WorkPoint, string TransType,string CheckKind, SqlCommand cmd, Dictionary<string, string> language)
  4382. {
  4383. try
  4384. {
  4385. ///添加日志
  4386. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4387. BEGIN
  4388. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4389. RETURN
  4390. END
  4391. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4392. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4393. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4394. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4395. MTIME,WorkPoint,EATTRIBUTE1)
  4396. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  4397. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  4398. '{8}','0','{6}','{7}','0','',
  4399. '','','',f.F_Account ,f.F_RealName ,
  4400. SYSDATETIME() ,a.WorkPoint ,''
  4401. FROM ICSWareHouseLotInfo a
  4402. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4403. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4404. ";
  4405. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckBefore.GetDescription<DBValue>(), CheckKind);
  4406. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4407. {
  4408. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4409. }
  4410. ///更新库存
  4411. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity='{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'";
  4412. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4413. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4414. {
  4415. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4416. }
  4417. ///添加日志
  4418. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4419. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4420. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4421. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4422. MTIME,WorkPoint,EATTRIBUTE1)
  4423. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  4424. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  4425. '{8}','0','{6}','{7}','0','',
  4426. '','','',f.F_Account ,f.F_RealName ,
  4427. SYSDATETIME() ,a.WorkPoint ,''
  4428. FROM ICSWareHouseLotInfo a
  4429. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4430. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4431. ";
  4432. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckAfter.GetDescription<DBValue>(), CheckKind);
  4433. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4434. {
  4435. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4436. }
  4437. }
  4438. catch (Exception)
  4439. {
  4440. throw;
  4441. }
  4442. }
  4443. /// <summary>
  4444. /// 调拨
  4445. /// </summary>
  4446. /// <param name="LocationCode"></param>
  4447. /// <param name="LotNo"></param>
  4448. /// <param name="Quantity"></param>
  4449. /// <param name="User"></param>
  4450. /// <param name="WorkPoint"></param>
  4451. /// <param name="TransType"></param>
  4452. /// <param name="BusinessCode"></param>
  4453. /// <param name="cmd"></param>
  4454. public static DataTable WareHouseLotInfoTransfer(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  4455. string LotNo, string Quantity, string User, string WorkPoint,string InWorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID)
  4456. {
  4457. decimal LotQTYYY = 0;
  4458. decimal LotQTY = 0;
  4459. String LotEnable = "";
  4460. String PrintEnable = "";
  4461. String chekEnable = "";
  4462. String DisPrintEnable = "";
  4463. string lotstr = "";
  4464. int result = 0;
  4465. DataTable dtLotno = new DataTable();
  4466. DataTable lstDt = new DataTable();
  4467. List<string> NewBarCodeList = new List<string>();
  4468. string Colspan = "";
  4469. string ProjectCode = "";
  4470. string BatchCode = "";
  4471. string Version = "";
  4472. string Brand = "";
  4473. string cFree1 = "";
  4474. string cFree2 = "";
  4475. string cFree3 = "";
  4476. string cFree4 = "";
  4477. string cFree5 = "";
  4478. string cFree6 = "";
  4479. string cFree7 = "";
  4480. string cFree8 = "";
  4481. string cFree9 = "";
  4482. string cFree10 = "";
  4483. string IDD = "";
  4484. try
  4485. {
  4486. //派纳不查站点
  4487. if (DBHelper.IsPNU9())
  4488. {
  4489. 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
  4490. from Sys_SRM_Items a
  4491. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  4492. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  4493. BEGIN
  4494. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  4495. RETURN
  4496. END
  4497. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  4498. from Sys_SRM_Items a
  4499. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  4500. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  4501. ";
  4502. cheksql = string.Format(cheksql, BusinessCode);
  4503. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  4504. if (chekdt.Rows.Count == 0)
  4505. {
  4506. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  4507. }
  4508. else
  4509. {
  4510. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  4511. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  4512. }
  4513. //检验是否分批
  4514. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  4515. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode --AND a.WorkPoint=b.WorkPoint
  4516. where a.LotNo='{0}'
  4517. ";
  4518. sql = string.Format(sql, LotNo, WorkPoint);
  4519. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  4520. if (dt.Rows.Count == 0)
  4521. {
  4522. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  4523. }
  4524. else
  4525. {
  4526. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  4527. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  4528. }
  4529. sql = @"select Quantity from ICSWareHouseLotInfo
  4530. where LotNO='{0}' ";
  4531. sql = string.Format(sql, LotNo, WorkPoint);
  4532. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  4533. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  4534. LotQTY = Convert.ToDecimal(Quantity);
  4535. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)//增加数量判断
  4536. {
  4537. ///更新库存
  4538. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' , WorkPoint='{3}' WHERE LotNo='{0}'
  4539. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<0)
  4540. BEGIN
  4541. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4542. RETURN
  4543. END";
  4544. sql = string.Format(sql, LotNo, WorkPoint, Quantity,InWorkPoint);
  4545. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4546. {
  4547. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4548. }
  4549. ///分批前添加日志
  4550. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4551. BEGIN
  4552. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4553. RETURN
  4554. END
  4555. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4556. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4557. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4558. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4559. MTIME,WorkPoint,EATTRIBUTE1)
  4560. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  4561. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  4562. '','0','{4}','31','0','',
  4563. '','','',f.F_Account ,f.F_RealName ,
  4564. SYSDATETIME() ,'{1}' ,''
  4565. FROM ICSInventoryLot a
  4566. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo --AND a.WorkPoint=b.WorkPoint
  4567. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  4568. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4569. WHERE a.LotNo='{0}'
  4570. ";
  4571. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  4572. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4573. {
  4574. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4575. }
  4576. #region 获取分批后的条码(lotstr)
  4577. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}'
  4578. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  4579. sql = string.Format(sql, LotNo, WorkPoint);
  4580. dt = DBHelper.SQlReturnData(sql, cmd);
  4581. if (dt.Rows.Count == 0)
  4582. {
  4583. lotstr = LotNo + "-" + 1;
  4584. }
  4585. else
  4586. {
  4587. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  4588. }
  4589. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  4590. #endregion
  4591. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  4592. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  4593. Quantity,Amount,ExtensionID,Type,PrintTimes,
  4594. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  4595. WorkPoint,EATTRIBUTE1)
  4596. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  4597. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  4598. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  4599. '{3}' ,'{1}'
  4600. From ICSInventoryLot a
  4601. where a.LotNo='{1}' ";
  4602. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  4603. cmd.CommandText = sql;
  4604. result = cmd.ExecuteNonQuery();
  4605. if (result <= 0)
  4606. {
  4607. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  4608. }
  4609. #endregion
  4610. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  4611. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  4612. ,MUSER,MUSERName,GETDATE(),'{3}',''
  4613. from ICSWareHouseLotInfo
  4614. where LotNO='{1}' ";
  4615. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  4616. cmd.CommandText = sql;
  4617. result = cmd.ExecuteNonQuery();
  4618. if (result <= 0)
  4619. {
  4620. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  4621. }
  4622. //插入条码单据表
  4623. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  4624. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  4625. FROM ICSInventoryLot a
  4626. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo --AND a.WorkPoint=b.WorkPoint
  4627. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4628. WHERE a.LotNo='{0}' ";
  4629. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  4630. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4631. {
  4632. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  4633. }
  4634. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4635. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4636. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4637. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4638. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  4639. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  4640. c.WarehouseCode,c.LocationCode,'{11}','{12}','{6}',
  4641. '','0','{7}','{8}','0','',
  4642. '','','',f.F_Account ,f.F_RealName ,
  4643. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4644. FROM ICSInventoryLot a
  4645. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  4646. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4647. WHERE a.LotNo='{0}'
  4648. ";
  4649. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
  4650. cmd.CommandText = sql;
  4651. result = cmd.ExecuteNonQuery();
  4652. if (result <= 0)
  4653. {
  4654. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  4655. }
  4656. ///添加日志
  4657. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4658. BEGIN
  4659. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4660. RETURN
  4661. END
  4662. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4663. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4664. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4665. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4666. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4667. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  4668. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  4669. '','0','{7}','32','0','',
  4670. '','','',f.F_Account ,f.F_RealName ,
  4671. SYSDATETIME() ,'{1}' ,'','{9}'
  4672. FROM ICSInventoryLot a
  4673. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  4674. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4675. WHERE a.LotNo='{0}'
  4676. ";
  4677. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  4678. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4679. {
  4680. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4681. }
  4682. if (PrintEnable.Equals("True"))
  4683. {
  4684. string PrintData = DBHelper.ReadFileStream();
  4685. //sql = @""+PrintData+"";
  4686. 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
  4687. from ICSWareHouseLotInfolog A
  4688. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  4689. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  4690. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  4691. where A.lotno like '%{0}%' and a.Identification='{3}' and a.BusinessCode='{2}'";
  4692. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  4693. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  4694. lstDt = dtLotno;
  4695. }
  4696. }
  4697. else
  4698. {
  4699. if (DBHelper.IsPNU9() && TransType == "14")
  4700. {
  4701. ///添加日志
  4702. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' )
  4703. BEGIN
  4704. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4705. RETURN
  4706. END
  4707. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND LotNo = '{0}')
  4708. BEGIN
  4709. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  4710. RETURN
  4711. END
  4712. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4713. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4714. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4715. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4716. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4717. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  4718. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  4719. '','0','{7}','{8}','0','',
  4720. '','','',f.F_Account ,f.F_RealName ,
  4721. SYSDATETIME() ,'{1}' ,'','{11}'
  4722. FROM ICSInventoryLot a
  4723. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  4724. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4725. WHERE a.LotNo='{0}'
  4726. ";
  4727. sql = string.Format(sql, LotNo, InWorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  4728. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4729. {
  4730. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4731. }
  4732. }
  4733. else
  4734. {
  4735. ///添加日志
  4736. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' )
  4737. BEGIN
  4738. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4739. RETURN
  4740. END
  4741. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND LotNo = '{0}')
  4742. BEGIN
  4743. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  4744. RETURN
  4745. END
  4746. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4747. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4748. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4749. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4750. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4751. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  4752. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  4753. '','0','{7}','{8}','0','',
  4754. '','','',f.F_Account ,f.F_RealName ,
  4755. SYSDATETIME() ,'{1}' ,'','{11}'
  4756. FROM ICSInventoryLot a
  4757. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  4758. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4759. WHERE a.LotNo='{0}'
  4760. ";
  4761. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  4762. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4763. {
  4764. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4765. }
  4766. }
  4767. if (DBHelper.IsPNU9() && TransType == "14")
  4768. {
  4769. ///更新库存
  4770. //sql = @"UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  4771. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  4772. // BEGIN
  4773. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4774. // RETURN
  4775. // END";
  4776. string upsql = @"select b.ProjectCode,b.BatchCode,b.Version,b.Brand,b.cFree1,b.cFree2,b.cFree3,
  4777. b.cFree4,b.cFree5,b.cFree6,b.cFree7,b.cFree8,b.cFree9,b.cFree10 from ICSInventoryLot a
  4778. INNER JOIN ICSExtension B on B.ID=A.ExtensionID
  4779. where a.lotno='{0}' and a.WorkPoint='{1}'";
  4780. upsql = string.Format(upsql, LotNo, WorkPoint);
  4781. DataTable Sumdtt = DBHelper.SQlReturnData(upsql, cmd);
  4782. ProjectCode = Sumdtt.Rows[0]["ProjectCode"].ToString();
  4783. BatchCode = Sumdtt.Rows[0]["BatchCode"].ToString();
  4784. Version = Sumdtt.Rows[0]["Version"].ToString();
  4785. Brand = Sumdtt.Rows[0]["Brand"].ToString();
  4786. cFree1 = Sumdtt.Rows[0]["cFree1"].ToString();
  4787. cFree2 = Sumdtt.Rows[0]["cFree2"].ToString();
  4788. cFree3 = Sumdtt.Rows[0]["cFree3"].ToString();
  4789. cFree4 = Sumdtt.Rows[0]["cFree4"].ToString();
  4790. cFree5 = Sumdtt.Rows[0]["cFree5"].ToString();
  4791. cFree6 = Sumdtt.Rows[0]["cFree6"].ToString();
  4792. cFree7 = Sumdtt.Rows[0]["cFree7"].ToString();
  4793. cFree8 = Sumdtt.Rows[0]["cFree8"].ToString();
  4794. cFree9 = Sumdtt.Rows[0]["cFree9"].ToString();
  4795. cFree10 = Sumdtt.Rows[0]["cFree10"].ToString();
  4796. //检验自由项
  4797. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  4798. + "~" + Brand + "~" + cFree1
  4799. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  4800. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  4801. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  4802. string exsql = @"select ID,Colspan from ICSExtension a
  4803. where Colspan='{0}' and WorkPoint='{1}'";
  4804. exsql = string.Format(exsql, Colspan, InWorkPoint);
  4805. DataTable dttt = DBHelper.SQlReturnData(exsql, cmd);
  4806. if (dttt.Rows.Count == 0)
  4807. {
  4808. IDD = Guid.NewGuid().ToString();
  4809. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  4810. 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}'";
  4811. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, InWorkPoint, IDD);
  4812. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4813. {
  4814. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  4815. }
  4816. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  4817. uppsql = string.Format(uppsql, IDD, LotNo);
  4818. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  4819. {
  4820. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  4821. }
  4822. }
  4823. else
  4824. {
  4825. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  4826. uppsql = string.Format(uppsql, dttt.Rows[0]["ID"].ToString(), LotNo);
  4827. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  4828. {
  4829. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  4830. }
  4831. }
  4832. sql = @"IF EXISTS(SELECT id FROM ICSTransferApplication a WHERE a.TransferNO='{5}' AND isnull(EATTRIBUTE29,'')<>isnull(EATTRIBUTE30,''))
  4833. BEGIN
  4834. UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  4835. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  4836. UPDATE ICSInventoryLotDetail SET WorkPoint='{4}' WHERE LotNo='{0}'
  4837. END
  4838. ELSE
  4839. BEGIN
  4840. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  4841. UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{4}' WHERE LotNo='{0}'
  4842. END
  4843. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  4844. BEGIN
  4845. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4846. RETURN
  4847. END";
  4848. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, InWorkPoint,TransCode);
  4849. }
  4850. else if (DBHelper.IsPNU9() && TransType == "6")
  4851. {
  4852. ///更新库存
  4853. //sql = @"UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  4854. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  4855. // BEGIN
  4856. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4857. // RETURN
  4858. // END";
  4859. string upsql = @"select b.ProjectCode,b.BatchCode,b.Version,b.Brand,b.cFree1,b.cFree2,b.cFree3,
  4860. b.cFree4,b.cFree5,b.cFree6,b.cFree7,b.cFree8,b.cFree9,b.cFree10 from ICSInventoryLot a
  4861. INNER JOIN ICSExtension B on B.ID=A.ExtensionID
  4862. where a.lotno='{0}' and a.WorkPoint='{1}'";
  4863. upsql = string.Format(upsql, LotNo, WorkPoint);
  4864. DataTable Sumdtt = DBHelper.SQlReturnData(upsql, cmd);
  4865. ProjectCode = Sumdtt.Rows[0]["ProjectCode"].ToString();
  4866. BatchCode = Sumdtt.Rows[0]["BatchCode"].ToString();
  4867. Version = Sumdtt.Rows[0]["Version"].ToString();
  4868. Brand = Sumdtt.Rows[0]["Brand"].ToString();
  4869. cFree1 = Sumdtt.Rows[0]["cFree1"].ToString();
  4870. cFree2 = Sumdtt.Rows[0]["cFree2"].ToString();
  4871. cFree3 = Sumdtt.Rows[0]["cFree3"].ToString();
  4872. cFree4 = Sumdtt.Rows[0]["cFree4"].ToString();
  4873. cFree5 = Sumdtt.Rows[0]["cFree5"].ToString();
  4874. cFree6 = Sumdtt.Rows[0]["cFree6"].ToString();
  4875. cFree7 = Sumdtt.Rows[0]["cFree7"].ToString();
  4876. cFree8 = Sumdtt.Rows[0]["cFree8"].ToString();
  4877. cFree9 = Sumdtt.Rows[0]["cFree9"].ToString();
  4878. cFree10 = Sumdtt.Rows[0]["cFree10"].ToString();
  4879. //检验自由项
  4880. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  4881. + "~" + Brand + "~" + cFree1
  4882. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  4883. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  4884. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  4885. string exsql = @"select ID,Colspan from ICSExtension a
  4886. where Colspan='{0}' and WorkPoint='{1}'";
  4887. exsql = string.Format(exsql, Colspan, WorkPoint);
  4888. DataTable dttt = DBHelper.SQlReturnData(exsql, cmd);
  4889. if (dttt.Rows.Count == 0)
  4890. {
  4891. IDD = Guid.NewGuid().ToString();
  4892. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  4893. 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}'";
  4894. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, WorkPoint, IDD);
  4895. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4896. {
  4897. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  4898. }
  4899. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  4900. uppsql = string.Format(uppsql, IDD, LotNo);
  4901. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  4902. {
  4903. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  4904. }
  4905. }
  4906. else
  4907. {
  4908. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  4909. uppsql = string.Format(uppsql, dttt.Rows[0]["ID"].ToString(), LotNo);
  4910. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  4911. {
  4912. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  4913. }
  4914. }
  4915. sql = @"IF EXISTS(SELECT id FROM ICSTransferApplication a WHERE a.TransferNO='{5}' AND isnull(EATTRIBUTE29,'')<>isnull(EATTRIBUTE30,''))
  4916. BEGIN
  4917. UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  4918. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  4919. END
  4920. ELSE
  4921. BEGIN
  4922. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  4923. UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{4}' WHERE LotNo='{0}'
  4924. END
  4925. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  4926. BEGIN
  4927. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4928. RETURN
  4929. END";
  4930. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, WorkPoint, TransCode);
  4931. }
  4932. else
  4933. {
  4934. ///更新库存
  4935. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{1}' WHERE LotNo='{0}'
  4936. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  4937. BEGIN
  4938. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4939. RETURN
  4940. END";
  4941. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, WorkPoint);
  4942. }
  4943. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4944. {
  4945. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4946. }
  4947. }
  4948. DateTime now = DateTime.Now;
  4949. sql = @"select 1 from ICSContainerLot
  4950. where LotNo='{0}'
  4951. ";
  4952. sql = string.Format(sql, LotNo, WorkPoint);
  4953. log.Debug("查询容器条码关联表是否存在");
  4954. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  4955. if (dttte.Rows.Count > 0)
  4956. {
  4957. ///删除条码关联表数据
  4958. sql = @"DELETE FROM ICSContainerLot
  4959. where LotNo='{0}'
  4960. ";
  4961. sql = string.Format(sql, LotNo, WorkPoint);
  4962. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4963. {
  4964. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  4965. }
  4966. }
  4967. }
  4968. else
  4969. {
  4970. 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
  4971. from Sys_SRM_Items a
  4972. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  4973. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  4974. BEGIN
  4975. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  4976. RETURN
  4977. END
  4978. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  4979. from Sys_SRM_Items a
  4980. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  4981. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  4982. ";
  4983. cheksql = string.Format(cheksql, BusinessCode);
  4984. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  4985. if (chekdt.Rows.Count == 0)
  4986. {
  4987. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  4988. }
  4989. else
  4990. {
  4991. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  4992. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  4993. }
  4994. //检验是否分批
  4995. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  4996. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  4997. where a.LotNo='{0}' and a.WorkPoint='{1}'
  4998. ";
  4999. sql = string.Format(sql, LotNo, WorkPoint);
  5000. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  5001. if (dt.Rows.Count == 0)
  5002. {
  5003. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5004. }
  5005. else
  5006. {
  5007. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  5008. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  5009. }
  5010. sql = @"select Quantity from ICSWareHouseLotInfo
  5011. where LotNO='{0}' AND WorkPoint='{1}'";
  5012. sql = string.Format(sql, LotNo, WorkPoint);
  5013. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  5014. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  5015. LotQTY = Convert.ToDecimal(Quantity);
  5016. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)//增加数量判断
  5017. {
  5018. ///更新库存
  5019. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5020. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<0)
  5021. BEGIN
  5022. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5023. RETURN
  5024. END";
  5025. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5026. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5027. {
  5028. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5029. }
  5030. ///分批前添加日志
  5031. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5032. BEGIN
  5033. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5034. RETURN
  5035. END
  5036. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5037. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5038. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5039. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5040. MTIME,WorkPoint,EATTRIBUTE1)
  5041. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  5042. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  5043. '','0','{4}','31','0','',
  5044. '','','',f.F_Account ,f.F_RealName ,
  5045. SYSDATETIME() ,a.WorkPoint ,''
  5046. FROM ICSInventoryLot a
  5047. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5048. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5049. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5050. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5051. ";
  5052. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  5053. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5054. {
  5055. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5056. }
  5057. #region 获取分批后的条码(lotstr)
  5058. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  5059. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  5060. sql = string.Format(sql, LotNo, WorkPoint);
  5061. dt = DBHelper.SQlReturnData(sql, cmd);
  5062. if (dt.Rows.Count == 0)
  5063. {
  5064. lotstr = LotNo + "-" + 1;
  5065. }
  5066. else
  5067. {
  5068. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  5069. }
  5070. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  5071. #endregion
  5072. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  5073. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  5074. Quantity,Amount,ExtensionID,Type,PrintTimes,
  5075. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  5076. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  5077. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  5078. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  5079. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  5080. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  5081. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  5082. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  5083. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  5084. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  5085. From ICSInventoryLot a
  5086. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  5087. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  5088. cmd.CommandText = sql;
  5089. result = cmd.ExecuteNonQuery();
  5090. if (result <= 0)
  5091. {
  5092. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  5093. }
  5094. #endregion
  5095. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  5096. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  5097. ,MUSER,MUSERName,GETDATE(),'{3}',''
  5098. from ICSWareHouseLotInfo
  5099. where LotNO='{1}' AND WorkPoint='{3}'";
  5100. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  5101. cmd.CommandText = sql;
  5102. result = cmd.ExecuteNonQuery();
  5103. if (result <= 0)
  5104. {
  5105. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  5106. }
  5107. //插入条码单据表
  5108. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  5109. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  5110. FROM ICSInventoryLot a
  5111. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5112. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5113. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5114. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  5115. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5116. {
  5117. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  5118. }
  5119. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5120. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5121. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5122. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5123. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  5124. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  5125. c.WarehouseCode,c.LocationCode,'{11}','{12}','{6}',
  5126. '','0','{7}','{8}','0','',
  5127. '','','',f.F_Account ,f.F_RealName ,
  5128. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5129. FROM ICSInventoryLot a
  5130. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5131. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5132. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5133. ";
  5134. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
  5135. cmd.CommandText = sql;
  5136. result = cmd.ExecuteNonQuery();
  5137. if (result <= 0)
  5138. {
  5139. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  5140. }
  5141. ///添加日志
  5142. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5143. BEGIN
  5144. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5145. RETURN
  5146. END
  5147. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5148. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5149. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5150. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5151. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5152. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5153. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  5154. '','0','{7}','32','0','',
  5155. '','','',f.F_Account ,f.F_RealName ,
  5156. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5157. FROM ICSInventoryLot a
  5158. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5159. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5160. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5161. ";
  5162. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  5163. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5164. {
  5165. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5166. }
  5167. if (PrintEnable.Equals("True"))
  5168. {
  5169. string PrintData = DBHelper.ReadFileStream();
  5170. //sql = @""+PrintData+"";
  5171. 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
  5172. from ICSWareHouseLotInfolog A
  5173. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5174. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5175. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5176. where A.lotno like '%{0}%' and a.Identification='{3}' and a.workpoint='{1}' and a.BusinessCode='{2}'";
  5177. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  5178. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5179. lstDt = dtLotno;
  5180. }
  5181. }
  5182. else
  5183. {
  5184. ///添加日志
  5185. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5186. BEGIN
  5187. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5188. RETURN
  5189. END
  5190. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND WorkPoint='{1}' AND LotNo = '{0}')
  5191. BEGIN
  5192. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  5193. RETURN
  5194. END
  5195. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5196. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5197. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5198. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5199. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5200. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5201. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  5202. '','0','{7}','{8}','0','',
  5203. '','','',f.F_Account ,f.F_RealName ,
  5204. SYSDATETIME() ,a.WorkPoint ,'','{11}'
  5205. FROM ICSInventoryLot a
  5206. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5207. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5208. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5209. ";
  5210. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  5211. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5212. {
  5213. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5214. }
  5215. ///更新库存
  5216. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}',WorkPoint='{1}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5217. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<=0)
  5218. BEGIN
  5219. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5220. RETURN
  5221. END";
  5222. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  5223. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5224. {
  5225. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5226. }
  5227. }
  5228. DateTime now = DateTime.Now;
  5229. sql = @"select 1 from ICSContainerLot
  5230. where LotNo='{0}' and WorkPoint='{1}'
  5231. ";
  5232. sql = string.Format(sql, LotNo, WorkPoint);
  5233. log.Debug("查询容器条码关联表是否存在");
  5234. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  5235. if (dttte.Rows.Count > 0)
  5236. {
  5237. ///删除条码关联表数据
  5238. sql = @"DELETE FROM ICSContainerLot
  5239. where LotNo='{0}' and WorkPoint='{1}'
  5240. ";
  5241. sql = string.Format(sql, LotNo, WorkPoint);
  5242. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5243. {
  5244. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  5245. }
  5246. }
  5247. }
  5248. }
  5249. catch (Exception)
  5250. {
  5251. throw;
  5252. }
  5253. return lstDt;
  5254. }
  5255. /// <summary>
  5256. /// 移库
  5257. /// </summary>
  5258. /// <param name="LocationCode"></param>
  5259. /// <param name="LotNo"></param>
  5260. /// <param name="Quantity"></param>
  5261. /// <param name="User"></param>
  5262. /// <param name="WorkPoint"></param>
  5263. /// <param name="TransType"></param>
  5264. /// <param name="BusinessCode"></param>
  5265. /// <param name="cmd"></param>
  5266. public static void WareHouseLotInfoLibrary(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  5267. string LotNo, string User, string WorkPoint, string TransType, string BusinessCode,String ScanType, SqlCommand cmd, Dictionary<string, string> language)
  5268. {
  5269. try
  5270. {
  5271. string sql = @"SELECT WarehouseCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
  5272. sql = string.Format(sql, LotNo,WorkPoint);
  5273. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  5274. if (dt == null || dt.Rows.Count <= 0)
  5275. {
  5276. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  5277. }
  5278. string whcode = dt.Rows[0]["WarehouseCode"].ToString();
  5279. ///添加日志
  5280. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5281. BEGIN
  5282. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5283. RETURN
  5284. END
  5285. IF('" + whcode + @"' != '{8}')
  5286. BEGIN
  5287. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo394"), "{8}", whcode) + @"', 16, 1);
  5288. RETURN
  5289. END
  5290. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5291. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5292. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5293. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5294. MTIME,WorkPoint,EATTRIBUTE1 )
  5295. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5296. c.WarehouseCode,c.LocationCode,'{8}','{9}',c.Quantity,
  5297. '','0','{6}','{7}','0','',
  5298. '','','',f.F_Account ,f.F_RealName ,
  5299. SYSDATETIME() ,a.WorkPoint ,''
  5300. FROM ICSInventoryLot a
  5301. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5302. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5303. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5304. ";
  5305. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, BusinessCode, WarehouseCode, LocationCode);
  5306. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5307. {
  5308. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5309. }
  5310. ///添加库存
  5311. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity>0)
  5312. BEGIN
  5313. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  5314. RETURN
  5315. END
  5316. IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.WarehouseCode='{2}')
  5317. BEGIN
  5318. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  5319. RETURN
  5320. END
  5321. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5322. ";
  5323. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  5324. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5325. {
  5326. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  5327. }
  5328. DateTime now = DateTime.Now;
  5329. if (ScanType== "LOTNO")
  5330. {
  5331. sql = @"select 1 from ICSContainerLot
  5332. where LotNo='{0}' and WorkPoint='{1}'
  5333. ";
  5334. sql = string.Format(sql, LotNo, WorkPoint);
  5335. log.Debug("查询容器条码关联表是否存在");
  5336. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  5337. if (dttte.Rows.Count > 0)
  5338. {
  5339. ///删除条码关联表数据
  5340. sql = @"DELETE FROM ICSContainerLot
  5341. where LotNo='{0}' and WorkPoint='{1}'
  5342. ";
  5343. sql = string.Format(sql, LotNo, WorkPoint);
  5344. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5345. {
  5346. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  5347. }
  5348. }
  5349. }
  5350. }
  5351. catch (Exception)
  5352. {
  5353. throw;
  5354. }
  5355. }
  5356. /// <summary>
  5357. /// 两步调入
  5358. /// </summary>
  5359. /// <param name="LocationCode"></param>
  5360. /// <param name="LotNo"></param>
  5361. /// <param name="Quantity"></param>
  5362. /// <param name="User"></param>
  5363. /// <param name="WorkPoint"></param>
  5364. /// <param name="TransType"></param>
  5365. /// <param name="BusinessCode"></param>
  5366. /// <param name="cmd"></param>
  5367. public static void WareHouseLotInfoTwoStepTransferDocIn(string Identification, string TransCode, string TransSequence, string WarehouseCode,
  5368. string LocationCode, string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  5369. {
  5370. try
  5371. {
  5372. ///添加日志
  5373. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5374. BEGIN
  5375. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5376. RETURN
  5377. END
  5378. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5379. ToWarehouseCode,ToLocationCode,Quantity,
  5380. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5381. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5382. MTIME,WorkPoint,EATTRIBUTE1)
  5383. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5384. '{9}','{10}','{6}',
  5385. '','0','{7}','{8}','0','',
  5386. '','','',f.F_Account ,f.F_RealName ,
  5387. SYSDATETIME() ,a.WorkPoint ,''
  5388. FROM ICSInventoryLot a
  5389. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5390. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5391. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5392. ";
  5393. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode);
  5394. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5395. {
  5396. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5397. }
  5398. ///添加库存
  5399. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  5400. BEGIN
  5401. RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
  5402. RETURN
  5403. END
  5404. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}',Quantity=Quantity+'{4}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5405. ";
  5406. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, Quantity);
  5407. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5408. {
  5409. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  5410. }
  5411. }
  5412. catch (Exception)
  5413. {
  5414. throw;
  5415. }
  5416. }
  5417. /// <summary>
  5418. /// 锐腾两步调入
  5419. /// </summary>
  5420. /// <param name="LocationCode"></param>
  5421. /// <param name="LotNo"></param>
  5422. /// <param name="Quantity"></param>
  5423. /// <param name="User"></param>
  5424. /// <param name="WorkPoint"></param>
  5425. /// <param name="TransType"></param>
  5426. /// <param name="BusinessCode"></param>
  5427. /// <param name="cmd"></param>
  5428. public static void RTWareHouseLotInfoTwoStepTransferDocIn(string Identification, string TransCode, string TransSequence, string WarehouseCode,
  5429. string LocationCode, string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  5430. {
  5431. try
  5432. {
  5433. ///添加日志
  5434. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5435. BEGIN
  5436. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5437. RETURN
  5438. END
  5439. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5440. ToWarehouseCode,ToLocationCode,Quantity,
  5441. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5442. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5443. MTIME,WorkPoint,EATTRIBUTE1)
  5444. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5445. '{9}','{10}','{6}',
  5446. '','0','{7}','{8}','0','',
  5447. '','','',f.F_Account ,f.F_RealName ,
  5448. SYSDATETIME() ,a.WorkPoint ,''
  5449. FROM ICSInventoryLot a
  5450. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5451. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5452. ";
  5453. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode);
  5454. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5455. {
  5456. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5457. }
  5458. ///添加库存
  5459. sql = @"IF EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  5460. BEGIN
  5461. RAISERROR('!',16,1);
  5462. RETURN
  5463. END
  5464. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  5465. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  5466. FROM ICSInventoryLot a
  5467. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5468. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  5469. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  5470. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  5471. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5472. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5473. ";
  5474. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  5475. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5476. {
  5477. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  5478. }
  5479. }
  5480. catch (Exception)
  5481. {
  5482. throw;
  5483. }
  5484. }
  5485. /// <summary>
  5486. /// 合并日志
  5487. /// </summary>
  5488. /// <param name="Identification"></param>
  5489. /// <param name="LotNo"></param>
  5490. /// <param name="User"></param>
  5491. /// <param name="WorkPoint"></param>
  5492. /// <param name="TransType"></param>
  5493. /// <param name="BusinessCode"></param>
  5494. /// <param name="cmd"></param>
  5495. public static DataTable WareHouseLotInfoLogMerge(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode, string newLotno, SqlCommand cmd, Dictionary<string, string> language)
  5496. {
  5497. String LotEnable = "";
  5498. String PrintEnable = "";
  5499. DataTable dtLotno = new DataTable();
  5500. DataTable lstDt = new DataTable();
  5501. try
  5502. {
  5503. //检验是否分批
  5504. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  5505. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  5506. where a.LotNo='{0}' and a.WorkPoint='{1}'
  5507. ";
  5508. sql = string.Format(sql, LotNo, WorkPoint);
  5509. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  5510. if (dt.Rows.Count == 0)
  5511. {
  5512. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5513. }
  5514. else
  5515. {
  5516. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  5517. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  5518. }
  5519. ///添加日志
  5520. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5521. BEGIN
  5522. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5523. RETURN
  5524. END
  5525. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5526. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5527. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5528. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5529. MTIME,WorkPoint,EATTRIBUTE1)
  5530. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  5531. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  5532. '','0','{4}','{5}','0','',
  5533. '','','',f.F_Account ,f.F_RealName ,
  5534. SYSDATETIME() ,a.WorkPoint ,''
  5535. FROM ICSInventoryLot a
  5536. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5537. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5538. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5539. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5540. ";
  5541. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  5542. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5543. {
  5544. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5545. }
  5546. if (PrintEnable.Equals("True"))
  5547. {
  5548. sql = @"select A.LotNO , B.Quantity AS OLDLotQty, C.Quantity AS LotQty ,b.InvCode,d.INVSTD,d.INVNAME,b.MTIME,A.TransCode
  5549. from ICSWareHouseLotInfolog A
  5550. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5551. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5552. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5553. where a.BusinessCode='34'
  5554. and A.lotno = '{0}' and a.workpoint='{1}'
  5555. ";
  5556. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, newLotno);
  5557. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5558. lstDt = dtLotno;
  5559. }
  5560. }
  5561. catch (Exception)
  5562. {
  5563. throw;
  5564. }
  5565. return lstDt;
  5566. }
  5567. /// <summary>
  5568. /// 拆分、合并日志
  5569. /// </summary>
  5570. /// <param name="Identification"></param>
  5571. /// <param name="LotNo"></param>
  5572. /// <param name="User"></param>
  5573. /// <param name="WorkPoint"></param>
  5574. /// <param name="TransType"></param>
  5575. /// <param name="BusinessCode"></param>
  5576. /// <param name="cmd"></param>
  5577. public static DataTable WareHouseLotInfoLog(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode,string newLotno, SqlCommand cmd, Dictionary<string, string> language)
  5578. {
  5579. String LotEnable = "";
  5580. String PrintEnable = "";
  5581. DataTable dtLotno = new DataTable();
  5582. DataTable lstDt = new DataTable();
  5583. try{
  5584. //检验是否分批
  5585. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  5586. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  5587. where a.LotNo='{0}' and a.WorkPoint='{1}'
  5588. ";
  5589. sql = string.Format(sql, LotNo, WorkPoint);
  5590. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  5591. if (dt.Rows.Count == 0)
  5592. {
  5593. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5594. }
  5595. else
  5596. {
  5597. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  5598. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  5599. }
  5600. ///添加日志
  5601. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5602. BEGIN
  5603. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5604. RETURN
  5605. END
  5606. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5607. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5608. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5609. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5610. MTIME,WorkPoint,EATTRIBUTE1)
  5611. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  5612. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  5613. '','0','{4}','{5}','0','',
  5614. '','','',f.F_Account ,f.F_RealName ,
  5615. SYSDATETIME() ,a.WorkPoint ,''
  5616. FROM ICSInventoryLot a
  5617. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5618. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5619. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5620. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5621. ";
  5622. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  5623. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5624. {
  5625. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5626. }
  5627. //if (PrintEnable.Equals("True"))
  5628. //{
  5629. // 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
  5630. // from ICSWareHouseLotInfolog A
  5631. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5632. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5633. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5634. // left JOIN ICSExtension f on b.ExtensionID=f.id and b.WorkPoint=f.WorkPoint
  5635. // where a.BusinessCode='32'
  5636. // and A.lotno = '{3}' and a.workpoint='{1}'
  5637. // ";
  5638. // sql = string.Format(sql, LotNo, WorkPoint, BusinessCode,newLotno);
  5639. // dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5640. // lstDt = dtLotno;
  5641. //}
  5642. if (PrintEnable.Equals("True") )
  5643. {
  5644. string PrintData = DBHelper.ReadPrintStream();
  5645. sql = @"" + PrintData + "";
  5646. //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
  5647. // from ICSWareHouseLotInfolog A
  5648. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5649. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5650. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5651. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  5652. // ";
  5653. sql = string.Format(sql, newLotno, WorkPoint, BusinessCode, Identification);
  5654. log.Debug("拆分数据源:"+ sql);
  5655. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5656. lstDt = dtLotno;
  5657. }
  5658. }
  5659. catch (Exception)
  5660. {
  5661. throw;
  5662. }
  5663. return lstDt;
  5664. }
  5665. /// <summary>
  5666. /// 合并
  5667. /// </summary>
  5668. /// <param name="Identification"></param>
  5669. /// <param name="LotNo"></param>
  5670. /// <param name="User"></param>
  5671. /// <param name="WorkPoint"></param>
  5672. /// <param name="TransType"></param>
  5673. /// <param name="BusinessCode"></param>
  5674. /// <param name="cmd"></param>
  5675. public static void WareHouseLotInfoMerge(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  5676. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  5677. {
  5678. try
  5679. {
  5680. ///更新目标条码库存
  5681. string sql = @"IF NOT EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  5682. INNER JOIN ICSInventoryLot b ON b.LotNo='{3}' AND a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  5683. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  5684. BEGIN
  5685. RAISERROR('" + language.GetNameByCode("WMSAPIInfo170") + @"',16,1);
  5686. RETURN
  5687. END
  5688. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  5689. BEGIN
  5690. RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
  5691. RETURN
  5692. END
  5693. IF EXISTS(
  5694. SELECT * FROM ICSWareHouseLotInfo a
  5695. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  5696. INNER JOIN ICSInventory d on c.invcode=d.invcode and c.WorkPoint=d.WorkPoint
  5697. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.BatchEnable='1'
  5698. )
  5699. BEGIN
  5700. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  5701. INNER JOIN ICSWareHouseLotInfo b ON b.LotNo='{3}' AND a.WarehouseCode=b.WarehouseCode AND a.WorkPoint=b.WorkPoint
  5702. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  5703. INNER JOIN ICSInventoryLot d on b.LotNo=d.LotNo and b.WorkPoint=d.WorkPoint
  5704. INNER JOIN ICSExtension e on c.ExtensionID=e.ID and c.WorkPoint=e.WorkPoint
  5705. INNER JOIN ICSExtension f on d.ExtensionID=f.id and d.WorkPoint=f.WorkPoint
  5706. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and e.ID=f.ID)
  5707. BEGIN
  5708. RAISERROR('/',16,1);
  5709. RETURN
  5710. END
  5711. END
  5712. IF NOT EXISTS(
  5713. SELECT * FROM ICSWareHouseLotInfo a
  5714. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  5715. INNER JOIN ICSInventory d on c.invcode=d.invcode and c.WorkPoint=d.WorkPoint
  5716. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.BatchEnable='1'
  5717. )
  5718. BEGIN
  5719. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  5720. INNER JOIN ICSWareHouseLotInfo b ON b.LotNo='{3}' AND a.WarehouseCode=b.WarehouseCode AND a.WorkPoint=b.WorkPoint
  5721. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  5722. INNER JOIN ICSInventoryLot d on b.LotNo=d.LotNo and b.WorkPoint=d.WorkPoint
  5723. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  5724. BEGIN
  5725. RAISERROR('/',16,1);
  5726. RETURN
  5727. END
  5728. END
  5729. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5730. UPDATE ICSInventoryLot SET Amount=(ISNULL(Amount,0)+(select Amount from
  5731. ICSInventoryLot where LotNo='{3}' AND WorkPoint='{1}')) WHERE LotNo='{0}' AND WorkPoint='{1}'
  5732. ";
  5733. sql = string.Format(sql, LotNo, WorkPoint, Quantity, CurrentLotNo);
  5734. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5735. {
  5736. throw new Exception(language.GetNameByCode("WMSAPIInfo169"));//"目标条码库存更新失败!");
  5737. }
  5738. ///更新原条码库存
  5739. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5740. UPDATE ICSInventoryLot SET Amount=(ISNULL(Amount,0)-(select Amount from
  5741. ICSInventoryLot where LotNo='{0}' AND WorkPoint='{1}')) WHERE LotNo='{0}' AND WorkPoint='{1}'
  5742. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  5743. BEGIN
  5744. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5745. RETURN
  5746. END";
  5747. sql = string.Format(sql, CurrentLotNo, WorkPoint, Quantity);
  5748. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5749. {
  5750. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5751. }
  5752. ///添加日志
  5753. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5754. BEGIN
  5755. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5756. RETURN
  5757. END
  5758. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5759. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5760. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5761. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5762. MTIME,WorkPoint,EATTRIBUTE1)
  5763. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  5764. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  5765. '','0','{4}','{5}','0','',
  5766. '','','',f.F_Account ,f.F_RealName ,
  5767. SYSDATETIME() ,a.WorkPoint ,''
  5768. FROM ICSInventoryLot a
  5769. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5770. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5771. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5772. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5773. ";
  5774. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  5775. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5776. {
  5777. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5778. }
  5779. }
  5780. catch (Exception)
  5781. {
  5782. throw;
  5783. }
  5784. }
  5785. /// <summary>
  5786. /// 拆分
  5787. /// </summary>
  5788. /// <param name="Identification"></param>
  5789. /// <param name="LotNo"></param>
  5790. /// <param name="User"></param>
  5791. /// <param name="WorkPoint"></param>
  5792. /// <param name="TransType"></param>
  5793. /// <param name="BusinessCode"></param>
  5794. /// <param name="cmd"></param>
  5795. public static void WareHouseLotInfoSplit(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  5796. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  5797. {
  5798. try
  5799. {
  5800. ///更新库存
  5801. string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5802. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  5803. BEGIN
  5804. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5805. RETURN
  5806. END";
  5807. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5808. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5809. {
  5810. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5811. }
  5812. #region 添加库存
  5813. //插入条码表
  5814. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5815. BEGIN
  5816. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5817. RETURN
  5818. END
  5819. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{4}' AND a.WorkPoint='{1}')
  5820. BEGIN
  5821. RAISERROR('" + language.GetNameByCode("WMSAPIInfo172") + @"',16,1);
  5822. RETURN
  5823. END
  5824. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  5825. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  5826. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  5827. 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,
  5828. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  5829. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  5830. FROM ICSInventoryLot a
  5831. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5832. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5833. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo);
  5834. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5835. {
  5836. throw new Exception(language.GetNameByCode("WMSAPIInfo173"));//"条码表写入失败!");
  5837. }
  5838. //插入条码单据表
  5839. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  5840. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  5841. FROM ICSInventoryLot a
  5842. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5843. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5844. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5845. sql = string.Format(sql, LotNo, WorkPoint, User, CurrentLotNo);
  5846. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5847. {
  5848. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  5849. }
  5850. ///添加库存
  5851. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  5852. BEGIN
  5853. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  5854. RETURN
  5855. END
  5856. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1,freeze)
  5857. 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
  5858. FROM ICSInventoryLot a
  5859. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5860. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
  5861. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5862. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5863. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Quantity);
  5864. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5865. {
  5866. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  5867. }
  5868. ///添加日志
  5869. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5870. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5871. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5872. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5873. MTIME,WorkPoint,EATTRIBUTE1)
  5874. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  5875. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  5876. '','0','{4}','{5}','0','',
  5877. '','','',f.F_Account ,f.F_RealName ,
  5878. SYSDATETIME() ,a.WorkPoint ,''
  5879. FROM ICSInventoryLot a
  5880. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5881. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5882. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5883. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5884. ";
  5885. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  5886. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5887. {
  5888. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5889. }
  5890. #endregion
  5891. }
  5892. catch (Exception)
  5893. {
  5894. throw;
  5895. }
  5896. }
  5897. /// <summary>
  5898. /// 拆分(奥美)
  5899. /// </summary>
  5900. /// <param name="Identification"></param>
  5901. /// <param name="LotNo"></param>
  5902. /// <param name="User"></param>
  5903. /// <param name="WorkPoint"></param>
  5904. /// <param name="TransType"></param>
  5905. /// <param name="BusinessCode"></param>
  5906. /// <param name="cmd"></param>
  5907. public static void AMWareHouseLotInfoSplit(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  5908. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  5909. {
  5910. try
  5911. {
  5912. string amount = "";
  5913. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  5914. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5915. //sqql = string.Format(sqql, LotNo, WorkPoint);
  5916. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  5917. //amount = dtaa.Rows[0]["Amount"].ToString();
  5918. string cheksql = @"select d.EATTRIBUTE1 FROM ICSInventoryLot a
  5919. INNER JOIN ICSWareHouseLotInfo b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5920. INNER JOIN ICSInventory d on a.InvCode=d.InvCode and a.WorkPoint=d.WorkPoint
  5921. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.AmountEnable='1'";
  5922. cheksql = string.Format(cheksql, LotNo, WorkPoint);
  5923. DataTable dta = DBHelper.SQlReturnData(cheksql, cmd);
  5924. if (dta.Rows.Count > 0)
  5925. {
  5926. Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  5927. }
  5928. ///更新库存
  5929. string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5930. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  5931. BEGIN
  5932. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5933. RETURN
  5934. END";
  5935. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5936. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5937. {
  5938. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5939. }
  5940. #region 添加库存
  5941. //插入条码表
  5942. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5943. BEGIN
  5944. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5945. RETURN
  5946. END
  5947. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{4}' AND a.WorkPoint='{1}')
  5948. BEGIN
  5949. RAISERROR('" + language.GetNameByCode("WMSAPIInfo172") + @"',16,1);
  5950. RETURN
  5951. END
  5952. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  5953. 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
  5954. FROM ICSInventoryLot a
  5955. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5956. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5957. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo);
  5958. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5959. {
  5960. throw new Exception(language.GetNameByCode("WMSAPIInfo173"));//"条码表写入失败!");
  5961. }
  5962. //插入条码单据表
  5963. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  5964. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  5965. FROM ICSInventoryLot a
  5966. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5967. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5968. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5969. sql = string.Format(sql, LotNo, WorkPoint, User, CurrentLotNo);
  5970. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5971. {
  5972. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  5973. }
  5974. ///添加库存
  5975. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  5976. BEGIN
  5977. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  5978. RETURN
  5979. END
  5980. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  5981. SELECT NEWID(),a.LotNo ,d.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  5982. FROM ICSInventoryLot a
  5983. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5984. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
  5985. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5986. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5987. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Quantity);
  5988. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5989. {
  5990. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  5991. }
  5992. ///添加日志
  5993. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5994. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5995. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5996. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5997. MTIME,WorkPoint,EATTRIBUTE1)
  5998. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  5999. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  6000. '','0','{4}','{5}','0','',
  6001. '','','',f.F_Account ,f.F_RealName ,
  6002. SYSDATETIME() ,a.WorkPoint ,''
  6003. FROM ICSInventoryLot a
  6004. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6005. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6006. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6007. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6008. ";
  6009. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  6010. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6011. {
  6012. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6013. }
  6014. #endregion
  6015. }
  6016. catch (Exception)
  6017. {
  6018. throw;
  6019. }
  6020. }
  6021. /// <summary>
  6022. /// 回写ERP ID
  6023. /// </summary>
  6024. /// <param name="TransType"></param>
  6025. /// <param name="SourceDetailID"></param>
  6026. /// <param name="Identification"></param>
  6027. /// <param name="ID"></param>
  6028. /// <param name="DetailID"></param>
  6029. /// <param name="Code"></param>
  6030. /// <param name="Sequence"></param>
  6031. /// <param name="cmd"></param>
  6032. 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)
  6033. {
  6034. string ERPupdate = string.Empty;
  6035. string NewERPupdate = string.Empty;
  6036. try
  6037. {
  6038. //采购入库
  6039. if (TransType == TransTypeEnum.PurchaseReceiveDoc.GetDescription())
  6040. {
  6041. ERPupdate = @"SELECT a.id
  6042. INTO #NewTempERP
  6043. FROM ICSWareHouseLotInfoLog a
  6044. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6045. INNER JOIN ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6046. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6047. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6048. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6049. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6050. WHERE c.PODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6051. 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, '') +
  6052. 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}'
  6053. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6054. where ID in (select id from #NewTempERP)
  6055. DROP TABLE #NewTempERP";
  6056. }
  6057. //客供料入库
  6058. else if (TransType == TransTypeEnum.PurchaseReceiveDoc.GetDescription())
  6059. {
  6060. ERPupdate = @"SELECT a.id
  6061. INTO #NewTempERP
  6062. FROM ICSWareHouseLotInfoLog a
  6063. INNER JOIN ICSInventoryLotDetailKG b ON a.LotNo=b.LotNo AND b.TransCode=a.TransCode AND b.TransSequence=a.TransSequence AND a.WorkPoint=b.WorkPoint
  6064. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6065. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6066. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6067. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6068. WHERE c.PODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6069. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6070. where ID in (select id from #NewTempERP)
  6071. DROP TABLE #NewTempERP";
  6072. }
  6073. //审核的到货单
  6074. else if (TransType == TransTypeEnum.DeliveryNotice.GetDescription())
  6075. {
  6076. ERPupdate = @"SELECT a.id
  6077. INTO #NewTempERP
  6078. FROM ICSWareHouseLotInfoLog a
  6079. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6080. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6081. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6082. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6083. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6084. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6085. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6086. 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, '') +
  6087. 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}'
  6088. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6089. where ID in (select id from #NewTempERP)
  6090. DROP TABLE #NewTempERP
  6091. ";
  6092. }
  6093. //采购拒收
  6094. else if (TransType == TransTypeEnum.PurchaseRejectDoc.GetDescription())
  6095. {
  6096. ERPupdate = @"SELECT a.id
  6097. INTO #NewTempERP
  6098. FROM ICSWareHouseLotInfoLog a
  6099. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6100. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6101. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6102. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6103. where ID in (select id from #NewTempERP)
  6104. DROP TABLE #NewTempERP
  6105. ";
  6106. }
  6107. //审核的委外到货单
  6108. else if (TransType == TransTypeEnum.ODeliveryNotice.GetDescription())
  6109. {
  6110. ERPupdate = @"SELECT a.id
  6111. INTO #NewTempERP
  6112. FROM ICSWareHouseLotInfoLog a
  6113. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6114. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6115. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6116. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6117. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6118. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6119. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6120. 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, '') +
  6121. 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}'
  6122. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6123. where ID in (select id from #NewTempERP)
  6124. DROP TABLE #NewTempERP
  6125. ";
  6126. }
  6127. //委外拒收
  6128. else if (TransType == TransTypeEnum.OutsourcingRejectDoc.GetDescription())
  6129. {
  6130. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6131. FROM ICSWareHouseLotInfoLog a
  6132. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6133. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6134. ";
  6135. }
  6136. //采购退货
  6137. else if (TransType == TransTypeEnum.PurchaseReceiveDoctNegative.GetDescription())
  6138. {
  6139. ERPupdate = @"SELECT a.id
  6140. INTO #NewTempERP
  6141. FROM ICSWareHouseLotInfoLog a
  6142. INNER JOIN ICSDeliveryNotice c ON a.TransCode=c.DNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6143. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6144. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6145. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6146. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6147. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}' --AND c.DNType='2'
  6148. 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, '') +
  6149. 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}'
  6150. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6151. where ID in (select id from #NewTempERP)
  6152. DROP TABLE #NewTempERP
  6153. ";
  6154. }
  6155. //委外发料
  6156. else if (TransType == TransTypeEnum.OutsourcingIssueDoc.GetDescription())
  6157. {
  6158. ERPupdate = @"SELECT a.id
  6159. INTO #NewTempERP
  6160. FROM ICSWareHouseLotInfoLog a
  6161. INNER JOIN ICSOutsourcingOrder y ON a.TransCode=y.OOCode AND a.WorkPoint=y.WorkPoint
  6162. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  6163. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6164. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6165. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6166. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6167. WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6168. 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, '') +
  6169. 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}'
  6170. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6171. where ID in (select id from #NewTempERP)
  6172. DROP TABLE #NewTempERP
  6173. ";
  6174. }
  6175. //委外退料
  6176. else if (TransType == TransTypeEnum.ICSOutsourcingIssueDoNegative.GetDescription()
  6177. || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeApply.GetDescription()
  6178. || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeIssue.GetDescription())
  6179. {
  6180. ERPupdate = @"--根据退料单退料
  6181. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6182. FROM ICSWareHouseLotInfoLog a
  6183. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6184. INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6185. INNER JOIN ICSOApplyNeg d ON c.OApplyNegCode=d.OApplyNegCode AND c.WorkPoint=d.WorkPoint
  6186. Left JOIN ICSOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE 0 END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
  6187. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6188. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6189. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6190. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6191. WHERE ISNULL(m.ApplyDetailID,ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6192. 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, '') +
  6193. 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}'
  6194. --退-
  6195. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6196. FROM ICSWareHouseLotInfoLog a
  6197. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  6198. INNER JOIN ICSOutsourcingOrder y ON b.TransCode=y.OOCode AND b.WorkPoint=y.WorkPoint
  6199. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint AND b.TransSequence = y.Sequence + '~' + x.Sequence
  6200. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6201. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6202. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6203. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6204. WHERE x.PickID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  6205. 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, '') +
  6206. 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}'
  6207. --退-
  6208. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6209. FROM ICSWareHouseLotInfoLog a
  6210. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  6211. INNER JOIN ICSOApply z ON b.TransCode=z.ApplyCode AND b.TransSequence=z.Sequence AND b.WorkPoint=z.WorkPoint
  6212. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6213. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6214. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6215. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6216. WHERE z.ApplyDetailID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  6217. 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, '') +
  6218. 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}'
  6219. --退-
  6220. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6221. FROM ICSWareHouseLotInfoLog a
  6222. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  6223. INNER JOIN ICSOIssue m ON b.TransCode=m.IssueCode AND b.TransSequence=m.Sequence AND b.WorkPoint=m.WorkPoint
  6224. LEFT JOIN ICSOOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
  6225. LEFT JOIN ICSOutsourcingOrder y ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint
  6226. LEFT JOIN ICSOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
  6227. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6228. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6229. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6230. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6231. WHERE ISNULL(m.ApplyDetailID, m.PickID)='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  6232. 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, '') +
  6233. 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}'
  6234. ";
  6235. }
  6236. //委外入库
  6237. else if (TransType == TransTypeEnum.OutsourcingReceiveDoc.GetDescription())
  6238. {
  6239. ERPupdate = @"SELECT a.id
  6240. INTO #NewTempERP
  6241. FROM ICSWareHouseLotInfoLog a
  6242. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6243. INNER JOIN ICSOutsourcingOrder c ON b.TransCode=c.OOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6244. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6245. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6246. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6247. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6248. WHERE c.OODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6249. --ISNULL(a.ToWarehouseCode, '') +
  6250. 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, '') +
  6251. 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}'
  6252. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6253. where ID in (select id from #NewTempERP)
  6254. DROP TABLE #NewTempERP";
  6255. }
  6256. //委外退货
  6257. else if (TransType == TransTypeEnum.OutsourcingReturnBack.GetDescription())
  6258. {
  6259. ERPupdate = @"SELECT a.id
  6260. INTO #NewTempERP
  6261. FROM ICSWareHouseLotInfoLog a
  6262. INNER JOIN ICSODeliveryNotice c ON a.TransCode=c.ODNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6263. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6264. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6265. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6266. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6267. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'--AND c.ODNType='2'
  6268. 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, '') +
  6269. 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}'
  6270. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6271. where ID in (select id from #NewTempERP)
  6272. DROP TABLE #NewTempERP
  6273. ";
  6274. }
  6275. //生产发料
  6276. else if (TransType == TransTypeEnum.MOIssueDoc.GetDescription())
  6277. {
  6278. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6279. // FROM ICSWareHouseLotInfoLog a
  6280. // INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
  6281. // INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  6282. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6283. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6284. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6285. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6286. // WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6287. // 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, '') +
  6288. // 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}'
  6289. // ";
  6290. ERPupdate = @"SELECT a.id
  6291. INTO #NewTempERP
  6292. FROM ICSWareHouseLotInfoLog a
  6293. INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
  6294. INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  6295. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6296. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6297. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6298. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6299. WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6300. 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, '') +
  6301. 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}'
  6302. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6303. where ID in (select id from #NewTempERP)
  6304. DROP TABLE #NewTempERP";
  6305. }
  6306. //生产退料
  6307. else if (TransType == TransTypeEnum.MOIssueDocNegative.GetDescription()
  6308. || TransType == TransTypeEnum.MOIssueDocNegativeApply.GetDescription()
  6309. || TransType == TransTypeEnum.MOIssueDocNegativeIssue.GetDescription())
  6310. {
  6311. ERPupdate = @"--根据退料单退料
  6312. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6313. FROM ICSWareHouseLotInfoLog a
  6314. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6315. INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6316. INNER JOIN ICSMOApplyNeg d ON c.ApplyNegCode=d.ApplyNegCode AND c.WorkPoint=d.WorkPoint
  6317. left JOIN ICSMOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE '' END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
  6318. WHERE ISNULL(m.ApplyDetailID, ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6319. ";
  6320. }
  6321. //生产入库
  6322. else if (TransType == TransTypeEnum.ManufactureReceiveDoc.GetDescription())
  6323. {
  6324. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6325. // FROM ICSWareHouseLotInfoLog a
  6326. // INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6327. // INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6328. // INNER JOIN ICSExtension docext ON docext.ID=c.ExtensionID AND docext.WorkPoint=c.WorkPoint
  6329. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6330. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6331. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6332. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6333. // WHERE c.MODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6334. // and (ISNULL(a.fromwarehousecode, '')
  6335. // + CASE WHEN ISNULL(docext.ProjectCode,'')!='' Then ISNULL(ext.ProjectCode, '') ELSE '' END
  6336. // + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END
  6337. // + CASE WHEN ISNULL(docext.Version,'')!='' Then ISNULL(ext.Version, '') ELSE '' END
  6338. // + CASE WHEN ISNULL(docext.Brand,'')!='' THEN ISNULL(ext.Brand, '') ELSE '' END
  6339. // + CASE WHEN ISNULL(docext.cFree1,'')!='' THEN ISNULL(ext.cFree1, '') ELSE '' END
  6340. // + CASE WHEN ISNULL(docext.cFree2,'')!='' THEN ISNULL(ext.cFree2, '') ELSE '' END
  6341. // + CASE WHEN ISNULL(docext.cFree3,'')!='' THEN ISNULL(ext.cFree3, '') ELSE '' END
  6342. // + CASE WHEN ISNULL(docext.cFree4,'')!='' THEN ISNULL(ext.cFree4, '') ELSE '' END
  6343. // + CASE WHEN ISNULL(docext.cFree5,'')!='' THEN ISNULL(ext.cFree5, '') ELSE '' END
  6344. // + CASE WHEN ISNULL(docext.cFree6,'')!='' THEN ISNULL(ext.cFree6, '') ELSE '' END
  6345. // + CASE WHEN ISNULL(docext.cFree7,'')!='' THEN ISNULL(ext.cFree7, '') ELSE '' END
  6346. // + CASE WHEN ISNULL(docext.cFree8,'')!='' THEN ISNULL(ext.cFree8, '') ELSE '' END
  6347. // + CASE WHEN ISNULL(docext.cFree9,'')!='' THEN ISNULL(ext.cFree9, '') ELSE '' END
  6348. // + CASE WHEN ISNULL(docext.cFree10,'')!='' THEN ISNULL(ext.cFree10, '') ELSE '' END)='{6}'
  6349. //";
  6350. ERPupdate = @"SELECT a.id
  6351. INTO #NewTempERP
  6352. FROM ICSWareHouseLotInfoLog a
  6353. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6354. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6355. INNER JOIN ICSExtension docext ON docext.ID=c.ExtensionID AND docext.WorkPoint=c.WorkPoint
  6356. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6357. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6358. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6359. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6360. WHERE c.MODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6361. and (ISNULL(a.ToWarehouseCode, '')
  6362. + CASE WHEN ISNULL(docext.ProjectCode,'')!='' Then ISNULL(ext.ProjectCode, '') ELSE '' END
  6363. + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END
  6364. + CASE WHEN ISNULL(docext.Version,'')!='' Then ISNULL(ext.Version, '') ELSE '' END
  6365. + CASE WHEN ISNULL(docext.Brand,'')!='' THEN ISNULL(ext.Brand, '') ELSE '' END
  6366. + CASE WHEN ISNULL(docext.cFree1,'')!='' THEN ISNULL(ext.cFree1, '') ELSE '' END
  6367. + CASE WHEN ISNULL(docext.cFree2,'')!='' THEN ISNULL(ext.cFree2, '') ELSE '' END
  6368. + CASE WHEN ISNULL(docext.cFree3,'')!='' THEN ISNULL(ext.cFree3, '') ELSE '' END
  6369. + CASE WHEN ISNULL(docext.cFree4,'')!='' THEN ISNULL(ext.cFree4, '') ELSE '' END
  6370. + CASE WHEN ISNULL(docext.cFree5,'')!='' THEN ISNULL(ext.cFree5, '') ELSE '' END
  6371. + CASE WHEN ISNULL(docext.cFree6,'')!='' THEN ISNULL(ext.cFree6, '') ELSE '' END
  6372. + CASE WHEN ISNULL(docext.cFree7,'')!='' THEN ISNULL(ext.cFree7, '') ELSE '' END
  6373. + CASE WHEN ISNULL(docext.cFree8,'')!='' THEN ISNULL(ext.cFree8, '') ELSE '' END
  6374. + CASE WHEN ISNULL(docext.cFree9,'')!='' THEN ISNULL(ext.cFree9, '') ELSE '' END
  6375. + CASE WHEN ISNULL(docext.cFree10,'')!='' THEN ISNULL(ext.cFree10, '') ELSE '' END)='{6}'
  6376. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6377. where ID in (select id from #NewTempERP)
  6378. DROP TABLE #NewTempERP
  6379. ";
  6380. }
  6381. //开立的生产入库单
  6382. else if (TransType == TransTypeEnum.ManufactureReceive.GetDescription())
  6383. {
  6384. ERPupdate = @"SELECT a.id
  6385. INTO #NewTempERP
  6386. FROM ICSWareHouseLotInfoLog a
  6387. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6388. INNER JOIN ICSManufactureReceive c ON b.TransCode=c.RCVCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6389. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  6390. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6391. where ID in (select id from #NewTempERP)
  6392. DROP TABLE #NewTempERP
  6393. ";
  6394. }
  6395. //销售出库
  6396. else if (TransType == TransTypeEnum.SalesShipmentDoc.GetDescription())
  6397. {
  6398. ERPupdate = @"SELECT a.id
  6399. INTO #NewTempERP
  6400. FROM ICSWareHouseLotInfoLog a
  6401. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6402. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6403. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6404. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6405. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6406. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  6407. 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, '') +
  6408. 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}'
  6409. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6410. where ID in (select id from #NewTempERP)
  6411. DROP TABLE #NewTempERP
  6412. ";
  6413. }
  6414. //销售退货
  6415. else if (TransType == TransTypeEnum.SalesShipmentDocNegative.GetDescription())
  6416. {
  6417. ERPupdate = @"SELECT a.id
  6418. INTO #NewTempERP
  6419. FROM ICSWareHouseLotInfoLog a
  6420. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6421. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6422. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6423. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6424. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6425. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  6426. 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, '') +
  6427. 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}'
  6428. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6429. where ID in (select id from #NewTempERP)
  6430. DROP TABLE #NewTempERP";
  6431. }
  6432. //返工工单
  6433. else if (TransType == TransTypeEnum.ReWorkReceiveMo.GetDescription())
  6434. {
  6435. ERPupdate = @"SELECT a.id
  6436. INTO #NewTempERP
  6437. FROM ICSWareHouseLotInfoLog a
  6438. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6439. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.WorkPoint=c.WorkPoint
  6440. INNER JOIN ICSMOPick d ON d.MODetailID=c.MODetailID AND d.WorkPoint=c.WorkPoint and b.TransSequence=c.Sequence+'-'+d.Sequence
  6441. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6442. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6443. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6444. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6445. WHERE d.PickID='{3}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6446. 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, '') +
  6447. 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}'
  6448. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6449. where ID in (select id from #NewTempERP)
  6450. DROP TABLE #NewTempERP
  6451. ";
  6452. }
  6453. //一步调拨
  6454. else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
  6455. {
  6456. ERPupdate = @"SELECT a.id
  6457. INTO #NewTempERP
  6458. FROM ICSWareHouseLotInfoLog a
  6459. INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6460. WHERE c.TransferID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  6461. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6462. where ID in (select id from #NewTempERP)
  6463. DROP TABLE #NewTempERP
  6464. ";
  6465. }
  6466. //调拨
  6467. else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
  6468. {
  6469. ERPupdate = @"SELECT a.id
  6470. INTO #NewTempERP
  6471. FROM ICSWareHouseLotInfoLog a
  6472. INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6473. WHERE c.TransferID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  6474. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6475. where ID in (select id from #NewTempERP)
  6476. DROP TABLE #NewTempERP
  6477. ";
  6478. }
  6479. //无源头调拨
  6480. else if (TransType == TransTypeEnum.StepNoTransferDocIn.GetDescription())
  6481. {
  6482. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6483. FROM ICSWareHouseLotInfoLog a
  6484. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6485. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6486. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6487. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6488. WHERE a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode='70'
  6489. 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, '') +
  6490. 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}'
  6491. ";
  6492. }
  6493. //两步调出
  6494. else if (TransType == TransTypeEnum.TwoStepTransferDocOut.GetDescription())
  6495. {
  6496. ERPupdate = @"SELECT a.id
  6497. INTO #NewTempERP
  6498. FROM ICSWareHouseLotInfoLog a
  6499. INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6500. INNER JOIN ICSTransfer d ON c.TransferDetailID=d.TransferDetailID AND c.WorkPoint=d.WorkPoint
  6501. WHERE c.OutID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6502. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6503. where ID in (select id from #NewTempERP)
  6504. DROP TABLE #NewTempERP
  6505. ";
  6506. }
  6507. //两步调入
  6508. else if (TransType == TransTypeEnum.TwoStepTransferDocIn.GetDescription())
  6509. {
  6510. ERPupdate = @"SELECT a.id
  6511. INTO #NewTempERP
  6512. FROM ICSWareHouseLotInfoLog a
  6513. INNER JOIN ICSOtherIn b ON a.TransCode=b.InCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  6514. INNER JOIN ICSTransfer c ON b.TransferDetailID=c.TransferDetailID AND b.WorkPoint=c.WorkPoint
  6515. WHERE b.InID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6516. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6517. where ID in (select id from #NewTempERP)
  6518. DROP TABLE #NewTempERP
  6519. ";
  6520. }
  6521. //销售退货-原条码
  6522. else if (TransType == TransTypeEnum.SalesReturnBack.GetDescription())
  6523. {
  6524. ERPupdate = @"SELECT a.id
  6525. INTO #NewTempERP
  6526. FROM ICSWareHouseLotInfoLog a
  6527. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6528. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6529. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6530. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6531. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6532. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  6533. 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, '') +
  6534. 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}'
  6535. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6536. where ID in (select id from #NewTempERP)
  6537. DROP TABLE #NewTempERP";
  6538. }
  6539. //其他出库
  6540. else if (TransType == TransTypeEnum.OtherOutDoc.GetDescription())
  6541. {
  6542. ERPupdate = @"SELECT a.id
  6543. INTO #NewTempERP
  6544. FROM ICSWareHouseLotInfoLog a
  6545. INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6546. WHERE c.OutID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  6547. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6548. where ID in (select id from #NewTempERP)
  6549. DROP TABLE #NewTempERP
  6550. ";
  6551. }
  6552. //其他入库
  6553. else if (TransType == TransTypeEnum.OtherInDoc.GetDescription())
  6554. {
  6555. ERPupdate = @"SELECT a.id
  6556. INTO #NewTempERP
  6557. FROM ICSWareHouseLotInfoLog a
  6558. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6559. INNER JOIN ICSOtherIn c ON b.TransCode=c.InCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6560. WHERE c.InID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6561. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6562. where ID in (select id from #NewTempERP)
  6563. DROP TABLE #NewTempERP
  6564. ";
  6565. }
  6566. //采购入库-入库单
  6567. else if (TransType == TransTypeEnum.PurchaseReceiveRevDoc.GetDescription())
  6568. {
  6569. ERPupdate = @"SELECT a.id
  6570. INTO #NewTempERP
  6571. FROM ICSWareHouseLotInfoLog a
  6572. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6573. INNER JOIN ICSPurchaseReceive c ON b.TransCode=c.RcvCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6574. WHERE c.RcvID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6575. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6576. where ID in (select id from #NewTempERP)
  6577. DROP TABLE #NewTempERP
  6578. ";
  6579. }
  6580. //委外入库-入库单
  6581. else if (TransType == TransTypeEnum.OutsourcingReceiveRevDoc.GetDescription())
  6582. {
  6583. ERPupdate = @"SELECT a.id
  6584. INTO #NewTempERP
  6585. FROM ICSWareHouseLotInfoLog a
  6586. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6587. INNER JOIN ICSOutsourcingReceive c ON b.TransCode=c.RcvCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6588. WHERE c.RcvID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6589. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6590. where ID in (select id from #NewTempERP)
  6591. DROP TABLE #NewTempERP
  6592. ";
  6593. }
  6594. //拆卸单
  6595. else if (TransType == TransTypeEnum.DisassemblyDoc.GetDescription())
  6596. {
  6597. ERPupdate = @"UPDATE d set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6598. FROM ICSWareHouseLotInfoLog a
  6599. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6600. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6601. INNER JOIN ICSWareHouseLotInfoLog d ON b.TransCode=d.TransCode AND d.TransSequence='1' AND b.WorkPoint=d.WorkPoint
  6602. WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND d.ERPUpload='0' AND a.BusinessCode ='{7}'
  6603. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6604. FROM ICSWareHouseLotInfoLog a
  6605. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6606. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6607. WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.DABDOCType='2' AND a.BusinessCode ='{7}'
  6608. ";
  6609. }
  6610. //领料申请单
  6611. else if (TransType == TransTypeEnum.MOApply.GetDescription())
  6612. {
  6613. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6614. // FROM ICSWareHouseLotInfoLog a
  6615. // INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6616. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6617. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6618. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6619. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6620. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6621. // 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, '') +
  6622. // 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}'
  6623. // ";
  6624. ERPupdate = @"SELECT a.id
  6625. INTO #NewTempERP
  6626. FROM ICSWareHouseLotInfoLog a
  6627. INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6628. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6629. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6630. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6631. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6632. WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6633. 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, '') +
  6634. 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}'
  6635. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6636. where ID in (select id from #NewTempERP)
  6637. DROP TABLE #NewTempERP
  6638. ";
  6639. }
  6640. //补料申请单
  6641. else if (TransType == TransTypeEnum.MOReplenishment.GetDescription())
  6642. {
  6643. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6644. // FROM ICSWareHouseLotInfoLog a
  6645. // INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6646. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6647. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6648. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6649. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6650. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6651. // 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, '') +
  6652. // 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}'
  6653. // ";
  6654. ERPupdate = @"SELECT a.id
  6655. INTO #NewTempERP
  6656. FROM ICSWareHouseLotInfoLog a
  6657. INNER JOIN ICSMOReplenishment c ON a.TransCode=c.ReplenishmentCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6658. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6659. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6660. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6661. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6662. WHERE c.ReplenishmentDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6663. 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, '') +
  6664. 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}'
  6665. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6666. where ID in (select id from #NewTempERP)
  6667. DROP TABLE #NewTempERP
  6668. ";
  6669. }
  6670. //委外领料申请单
  6671. else if (TransType == TransTypeEnum.OOApply.GetDescription())
  6672. {
  6673. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6674. // FROM ICSWareHouseLotInfoLog a
  6675. // INNER JOIN ICSOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6676. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6677. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6678. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6679. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6680. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6681. // 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, '') +
  6682. // 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}'
  6683. // ";
  6684. ERPupdate = @"SELECT a.id
  6685. INTO #NewTempERP
  6686. FROM ICSWareHouseLotInfoLog a
  6687. INNER JOIN ICSOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6688. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6689. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6690. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6691. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6692. WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6693. 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, '') +
  6694. 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}'
  6695. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6696. where ID in (select id from #NewTempERP)
  6697. DROP TABLE #NewTempERP
  6698. ";
  6699. }
  6700. //开立材料出库
  6701. else if (TransType == TransTypeEnum.MOIssue.GetDescription())
  6702. {
  6703. ERPupdate = @"SELECT a.id
  6704. INTO #NewTempERP
  6705. FROM ICSWareHouseLotInfoLog a
  6706. INNER JOIN ICSMOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6707. WHERE c.IssueID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6708. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6709. where ID in (select id from #NewTempERP)
  6710. DROP TABLE #NewTempERP
  6711. ";
  6712. }
  6713. //开立委外材料出库
  6714. else if (TransType == TransTypeEnum.OOIssue.GetDescription())
  6715. {
  6716. ERPupdate = @"SELECT a.id
  6717. INTO #NewTempERP
  6718. FROM ICSWareHouseLotInfoLog a
  6719. INNER JOIN ICSMOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6720. WHERE c.IssueID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6721. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6722. where ID in (select id from #NewTempERP)
  6723. DROP TABLE #NewTempERP
  6724. ";
  6725. }
  6726. //开立红字入库单
  6727. else if (TransType == TransTypeEnum.PurchaseReceive.GetDescription())
  6728. {
  6729. ERPupdate = @"SELECT a.id
  6730. INTO #NewTempERP
  6731. FROM ICSWareHouseLotInfoLog a
  6732. INNER JOIN ICSPurchaseReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6733. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  6734. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6735. where ID in (select id from #NewTempERP)
  6736. DROP TABLE #NewTempERP
  6737. ";
  6738. }
  6739. //开立委外红字入库单
  6740. else if (TransType == TransTypeEnum.OutsourcingReceiveDocNegative.GetDescription())
  6741. {
  6742. ERPupdate = @"SELECT a.id
  6743. INTO #NewTempERP
  6744. FROM ICSWareHouseLotInfoLog a
  6745. INNER JOIN ICSOutsourcingReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6746. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  6747. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6748. where ID in (select id from #NewTempERP)
  6749. DROP TABLE #NewTempERP
  6750. ";
  6751. }
  6752. //借用
  6753. else if (TransType == TransTypeEnum.BrrowDoc.GetDescription())
  6754. {
  6755. ERPupdate = @"SELECT a.id
  6756. INTO #NewTempERP
  6757. FROM ICSWareHouseLotInfoLog a
  6758. INNER JOIN ICSBrrow c ON a.TransCode=c.BrrowCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6759. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6760. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6761. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6762. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6763. WHERE c.BrrowDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6764. 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, '') +
  6765. 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}'
  6766. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6767. where ID in (select id from #NewTempERP)
  6768. DROP TABLE #NewTempERP";
  6769. }
  6770. //归还
  6771. else if (TransType == TransTypeEnum.ReturnDoc.GetDescription())
  6772. {
  6773. ERPupdate = @"SELECT a.id
  6774. INTO #NewTempERP
  6775. FROM ICSWareHouseLotInfoLog a
  6776. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6777. INNER JOIN ICSReturn c ON b.TransCode=c.ReturnCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6778. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6779. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6780. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6781. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6782. WHERE c.ReturnDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6783. 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, '') +
  6784. 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}'
  6785. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6786. where ID in (select id from #NewTempERP)
  6787. DROP TABLE #NewTempERP";
  6788. }
  6789. //销售出库-出库单
  6790. else if (TransType == TransTypeEnum.SalesShipmentOutDoc.GetDescription())
  6791. {
  6792. ERPupdate = @"SELECT a.id
  6793. INTO #NewTempERP
  6794. FROM ICSWareHouseLotInfoLog a
  6795. INNER JOIN ICSSSD c ON a.TransCode=c.SSDCOde AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6796. WHERE c.SSDID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  6797. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6798. where ID in (select id from #NewTempERP)
  6799. DROP TABLE #NewTempERP
  6800. ";
  6801. }
  6802. ERPupdate = string.Format(ERPupdate, SourceDetailID, Identification, ID, DetailID, Code, Sequence, col, BusinessCode);
  6803. if (!DBHelper.ExecuteNonQuery(ERPupdate, cmd))
  6804. {
  6805. throw new Exception(TransType + language.GetNameByCode("WMSAPIInfo175"));//"回写日志失败!");
  6806. }
  6807. }
  6808. catch (Exception ex)
  6809. {
  6810. log.Debug(ex.ToString());
  6811. log.Debug(TransType + Environment.NewLine + ERPupdate);
  6812. }
  6813. }
  6814. /// <summary>
  6815. /// 倒冲时子件已领数量回写
  6816. /// </summary>
  6817. public static void DetailQTYUpdate()
  6818. {
  6819. }
  6820. /// <summary>
  6821. /// 生成条码
  6822. /// </summary>
  6823. /// <param name="LotNo"></param>
  6824. /// <param name="Quantity"></param>
  6825. /// <param name="TransCode"></param>
  6826. /// <param name="TransSequence"></param>
  6827. /// <param name="WorkPoint"></param>
  6828. /// <param name="Identification"></param>
  6829. /// <param name="User"></param>
  6830. /// <param name="InvCode"></param>
  6831. /// <param name="BusinessCode"></param>
  6832. /// <param name="ProjectCode"></param>
  6833. /// <param name="BatchCode"></param>
  6834. /// <param name="Version"></param>
  6835. /// <param name="Brand"></param>
  6836. /// <param name="cFree1"></param>
  6837. /// <param name="cFree2"></param>
  6838. /// <param name="cFree3"></param>
  6839. /// <param name="cFree4"></param>
  6840. /// <param name="cFree5"></param>
  6841. /// <param name="cFree6"></param>
  6842. /// <param name="cFree7"></param>
  6843. /// <param name="cFree8"></param>
  6844. /// <param name="cFree9"></param>
  6845. /// <param name="cFree10"></param>
  6846. /// <param name="cmd"></param>
  6847. /// <param name="language"></param>
  6848. public static void CreateLotNo(string LotNo, string Quantity, string TransCode, string TransSequence, string WorkPoint, string Identification, string User, string InvCode, string BusinessCode,
  6849. 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)
  6850. {
  6851. try
  6852. {
  6853. String EffectiveEnable = "";
  6854. String Colspan = "";
  6855. String IDD = "";
  6856. int EffectiveDays = 0;
  6857. String Time = "";
  6858. int EffectiveDayss = 0;
  6859. DateTime dtt;
  6860. DateTime now = DateTime.Now;
  6861. string sql = string.Empty;
  6862. //string sql = @"select EffectiveEnable,EffectiveDays from ICSInventory a
  6863. // Left Join ICSMO b ON a.InvCode=b.InvCode and a.WorkPoint = b.WorkPoint
  6864. // where b.MoCode='{0}' and b.WorkPoint='{1}'";
  6865. //sql = string.Format(sql, TransCode, WorkPoint);
  6866. //DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  6867. //if (dt.Rows.Count == 0)
  6868. //{
  6869. // throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  6870. //}
  6871. //else
  6872. //{
  6873. // EffectiveEnable = dt.Rows[0]["EffectiveEnable"].ToString();
  6874. //EffectiveDays = Convert.ToInt32(dt.Rows[0]["EffectiveDays"]);
  6875. //}
  6876. //EffectiveDayss = Convert.ToInt32(EffectiveDays);
  6877. //if (!EffectiveEnable.Equals("False"))
  6878. //{
  6879. int year = now.Year;
  6880. int month = now.Month;
  6881. int day = now.Day;
  6882. int n = DateTime.DaysInMonth(year, month);
  6883. int k = day + EffectiveDays;
  6884. if (k > n)
  6885. {
  6886. day = EffectiveDays - (n - day);
  6887. month = month + 1;
  6888. if (month > 12)
  6889. {
  6890. month = 1;
  6891. year = year + 1;
  6892. }
  6893. }
  6894. else
  6895. {
  6896. day = day + EffectiveDays;
  6897. }
  6898. Time = year + "-" + month + "-" + day;
  6899. //}
  6900. //else
  6901. //{
  6902. // Time = "2999-12-31 00:00:00.000";
  6903. //}
  6904. dtt = Convert.ToDateTime(Time);
  6905. //检验自由项
  6906. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  6907. + "~" + Brand + "~" + cFree1
  6908. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  6909. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  6910. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  6911. sql = @"select ID,Colspan from ICSExtension a
  6912. where Colspan='{0}' and WorkPoint='{1}'";
  6913. sql = string.Format(sql, Colspan, WorkPoint);
  6914. DataTable dttt = DBHelper.SQlReturnData(sql, cmd);
  6915. if (dttt.Rows.Count == 0)
  6916. {
  6917. IDD = Guid.NewGuid().ToString();
  6918. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  6919. 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}'";
  6920. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, WorkPoint, IDD);
  6921. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6922. {
  6923. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  6924. }
  6925. }
  6926. else
  6927. {
  6928. IDD = dttt.Rows[0]["ID"].ToString();
  6929. }
  6930. //存入条码表
  6931. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{4}')
  6932. BEGIN
  6933. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6934. RETURN
  6935. END
  6936. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  6937. Quantity,Amount,ExtensionID,Type,PrintTimes,
  6938. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  6939. WorkPoint,EATTRIBUTE1)
  6940. SELECT TOP 1 NEWID(),'{0}','{8}',GETDATE(),'{6}',
  6941. '{1}','0','{7}','16',null,
  6942. null,null,'{2}' ,f.F_RealName ,GETDATE(),
  6943. '{4}' ,''
  6944. FROM Sys_SRM_User f
  6945. where f.F_Account='{2}' and f.F_Location='{4}'
  6946. ";
  6947. sql = string.Format(sql, LotNo, Quantity, User, TransCode, WorkPoint, TransSequence, dtt, IDD,InvCode);
  6948. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6949. {
  6950. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  6951. }
  6952. ///存入条码关联表
  6953. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{3}')
  6954. BEGIN
  6955. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6956. RETURN
  6957. END
  6958. INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,
  6959. WorkPoint,EATTRIBUTE1)
  6960. SELECT '{4}','{0}','{1}',f.F_Account ,f.F_RealName,GETDATE(),
  6961. a.WorkPoint,''
  6962. FROM ICSInventoryLot a
  6963. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6964. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6965. WHERE a.LotNo='{5}' AND a.WorkPoint='{3}'
  6966. ";
  6967. sql = string.Format(sql, TransCode, TransSequence, User, WorkPoint, LotNo, OLDLotNo);
  6968. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6969. {
  6970. throw new Exception(language.GetNameByCode("WMSAPIInfo367"));
  6971. }
  6972. //存入库存表
  6973. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  6974. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'0',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  6975. FROM ICSInventoryLot a
  6976. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6977. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6978. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  6979. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  6980. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6981. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  6982. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  6983. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6984. {
  6985. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  6986. }
  6987. }
  6988. catch (Exception)
  6989. {
  6990. throw;
  6991. }
  6992. }
  6993. /// <summary>
  6994. /// 东辉日志表记录交接人EATTRIBUTE3
  6995. /// </summary>
  6996. /// <param name="TransType"></param>
  6997. /// <param name="BusinessCode"></param>
  6998. /// <param name="Heir"></param>
  6999. /// <param name="cmd"></param>
  7000. public static void WareHouseLotInfoLogUpdateHeir(string Identification, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language,string Heir)
  7001. {
  7002. try
  7003. {
  7004. ///更新日志表
  7005. string sql = @"
  7006. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE3='{2}' WHERE Identification='{0}' and BusinessCode ='{1}'
  7007. ";
  7008. sql = string.Format(sql, Identification, BusinessCode, Heir);
  7009. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7010. {
  7011. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));//"库存表更新失败!");
  7012. }
  7013. }
  7014. catch (Exception)
  7015. {
  7016. throw;
  7017. }
  7018. }
  7019. //public void AutoWarehousingCreate()
  7020. //{
  7021. //}
  7022. }
  7023. }